hallo community,
vorweg - frohe Weihnachten. : D.
mein aktuelles Thema ist es - eine nearby-Suche mit mehreren Tags durchtzuführen. Es geht also um die Suche nach mehreren Standorten in der Nähe nach Koordinaten - wie kann ich mehrere POIs in der Nähe vom aktuellen Standort in OpenStreetMap finden?
anders ausgedrückt - es ist die Frage;: wie setze ich den “Around-Filter” denn in einer Abfrage ein - mit zwei Parametern -
wie die Nearby-Abfrage ausführen mit z.B. zwei Tags - Schulen und Krankenhäuser - (shools & hospitals).
die Frage ist - wie setze ich diesen Arond-Filter denn in einer Abfrage ein - mit zwei Parametern - wie die Nearby-Abfrage ausführen mit z.B. zwei Tags - shools & hospitals. Wir können die Overpass-API verwenden, um nach POIs in der Nähe zu suchen. Wir können Abfragen für die Überführungs-API durchführen und diese als Überlagerungen auf einer OSM-Karte anzeigen: Die Frage ist: Gibt es eine API für OpenStreetMap, mit der ich eine Liste von (mehreren) POIs innerhalb einer bestimmten Entfernung (z. B. 50 Kilometer) von a, also einem Referenzort erhalten kann?: Wir nehmen zum Beispiel Schulen und Krankenhäuser.
** Folgender Fall:** Ich möchte die openstreetmaps-api nach bestimmten Tags (POIs) in der Umgebung einer bestimmten Stadt - einem Referenzort, abfragen - sagen wir München: Ich möchte alle Krankenhäuser und Schulen in der Nähe von München in einem Umkreis von 50 km (um diesen Refernzort) finden. Anm.: es ist hierbei ausgesprochen praktisch, diesen Referenzort human readable zu verwenden - und eben nicht als Geokoordinate auszudrücken - vgl. die Fußnote unten…
Einige Grundlagen: Die Openstreetmaps-API-Dokumentation enthält keine Informationen, die hier hilfreich sein könnten - ein basaler Ansatz, der allerdings so nicht funktioniert.
[out:csv(::id,::type,::lon, ::lat, "name","addr:postcode","addr:city","addr:street","addr:housenumber","contact:website"," contact:email=*")][timeout:600];
area[name="Müncchen"];
nwr(around:10000)["amenity"="hospital"];
nwr(around:10000)["amenity"="school"];
out center;
Anm; die hier enthaltenen Bestandeteile - Klarname des Referenzortes, nwr als Zusammenfassung für node, way und relation - all das ist schon sehr sehr praktisch und auch extrem kurz in der Abfrage formuliert. allerdings läuft es so noch nicht.
…ich muss also (leider) anders ansetzen - obwohl es mit dieser Form schon sehr sehr gut und vor allen Dingen sehr benutzerfreundlich aussieht - Anm.: ich setze bei dieser Aufgabe sehr viel lieber einen realen Städtenamen ein - als Geokoordinaten. Das hilft und kommt einer Anwendung -z.B. in einem Webfrontend schon sehr entgegen.
Für diese Art von Anfrage arbeiten wir im Allgemeinen mit der Overpass-API(https://wiki.openstreetmap.org/wiki/Overpass_API), die ja für solche Abfragen entwickelt wurde. Overpass-Turbo.eu unterstützt einen großartigen und sehr sehr hilfreichen Filter (https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Relative_to_other_elements_.28around.29).
** Beispiel:** - Krankenhäuser in einem Umkreis von 50 km um München - könnte so aussehen:…für unser ** Beispiel nehmen wir München: **
(
node["amenity"="hospital"](around:50000,{{geocodeCoords:München}});
way["amenity"="hospital"](around:50000,{{geocodeCoords:München}});
relation["amenity"="hospital"](around:50000,{{geocodeCoords:München}});
);
out;
>;
out;
aber warum funktioniert das nicht:
[out:csv(::id,::type,::lon, ::lat, "name","addr:postcode","addr:city","addr:street","addr:housenumber","contact:website"," contact:email=*")][timeout:600];
area[name="Münschen"];
nwr(around:10000)["amenity"="hospital"];
nwr(around:10000)["amenity"="school"];
out center;
Mehr zu diesem Ausgangstext: Nun, wie man die Daten abruft: Wie man die Daten aus einer nahe gelegenen Suche abruft - mit zwei Entitäten - Schulen und Krankenhäusern. Um eine Abfrage zu erstellen, müssen wir wissen, welche OpenStreetMap-Tags den Feature-Typen entsprechen, an denen sie tatsächlich interessiert waren. Das OpenStreetMap-Wiki bietet Dokumentation für die am häufigsten verwendeten Tags, z. Annehmlichkeit = Krankenhaus in diesem Beispiel. Und ja: Neben dem Krankenhaus verwenden wir Schulen als zweiten Tag. Wir können die Überführungs-API verwenden, um nach POIs in der Nähe zu suchen. Und ja - raten Sie mal, dass wir Abfragen für die Überführungs-API durchführen und diese als Überlagerungen auf einer OSM-Karte anzeigen müssen.
**Overpass API unterstützt einen ** around filter( https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Relative_to_other_elements_.28around.29 )
The around filter selects all elements within a certain radius around the elements in the input set. If you provide coordinates, then these coordinates are used instead of the input set. The input set can be changed with an adapted prefix notation. As for all filters, the result set is specified by the whole statement, not the individual filter. A radius of 0 can be used for a way intersection test on outer/inner points. Syntax: It consists of an opening parenthesis. Then follows the keyword around. Then follows optionally an input set declaration. Then follows a single floating point number that denotes the radius in meters. The filter either ends with a closing parenthesis or is followed by two comma separated floating point numbers indicating latitude and longitude and then finally a closing parenthesis.
amenity=hospital is used for hospitals :
https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dhospital: amenity=hospital is used for hospitals, i.e. institutions for health care providing treatment by specialised staff and equipment, and typically providing nursing care for longer-term patient stays. In contrast, a medical centre with doctors for outpatient care only should be tagged amenity=clinic, and an individual doctor’s office as amenity=doctors.
die Frage ist: wie setze ich diesen Around-Filter denn in einer Abfrage ein - mit zwei Parametern - wie die Nearby-Abfrage ausführen mit z.B. zwei Tags - shools & hospitals.
Euch noch schöne Weihnachten.
Freue mich auf einen Tipp - wie ich die o.g. Abfrage umsetzen kann?
Viele Grüße tag the world,
Anm.: Es ist zugegebnermaßen durchaus problematisch …
In einer Distanz vom x km um den Mittelpunkt der Area herum oder x km um die Umrisslinie von einer Area herum?
Sprich Beispiel Krankenhäuser in 10km Umkreis von Berlin, Abstand nun vom Mittelpunkt oder von den Stadtgrenze Berlin aus? Macht ja ein gewaltigen Unterschied teilweise aus. vgl. https://forum.openstreetmap.org/viewtopic.php?id=71441
- Dabei st die Frage auch interessant, zu unterscheiden zwischen einer Abfrage mit “real-world-names” vs. lon-lat-Werten: etwa München, Rosenheim etc. Bei dieser Problem-(Frage-)Stellung geht es darum OpenStreetMap-Area-Abfrage mit real-world-names statt mit lon-lat-Werten durchzuführen. hab mir schon mal genauer die man-pages hier angesehen:https://wiki.openstreetmap.org/wiki/Ove … by_Example
was mir hier wichtig ist: ich bevorzuge eine Area-search-Methode, die mit real-world-names arbeitet und nicht mit den lon-lat-Daten der jeweiligen Position: https://forum.openstreetmap.org/viewtopic.php?id=71441
vg