Overpass API: Unterschied zwischen den Versionen

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche
K (Verschiedene)
K
 
(44 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Overpass API - Selektiver Download von Daten aus der Hauptdatenbank von [[OpenStreetMap]].
+
'''Overpass API - Gefilterter Download von [[OpenStreetMap]]-Daten in der nativen Struktur Nodes, Ways, Relations.'''
  
Siehe auch [[HowTo OpenStreetMap]]
+
Overpass Turbo Services (interaktive Webapp):
 +
* '''>> Weltweit: http://overpass-turbo.eu/ <<'''
 +
* Deutschland: http://overpass-api.de/
 +
* Schweiz: http://overpass-turbo.osm.ch/
  
Webseiten:  
+
Overpass QL Query Beispiele:  
* Overpass API (Dokumentation und öff. Server): http://overpass-api.de/ und http://wiki.openstreetmap.org/wiki/Overpass_API
+
* >> '''[[Overpass QL Beispiele]]''' <<
* Overpass Turbo (Webapp/Server): http://overpass-turbo.eu/
+
* Overpass API by Example: https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example
 +
* https://osm-queries.ldodds.com/for-local-mappers/index.html
  
== Beispiele ==
+
Prompt für '''>> ChatGPT & Co. <<''' (Copy & Paste und ersetze "user query"):
 
+
<pre>
=== Verschiedene ===
+
Convert the following natural language query into valid Overpass QL syntax for use on [Overpass Turbo](https://overpass-turbo.eu/):
 
 
;"Rollstuhlparkplätze der Schweiz": siehe [[Nutzen von OpenStreetMap-Daten in GIS]].
 
 
 
;Pizzerias der Schweiz:
 
PostGIS-Terminal (Schweiz):
 
  SELECT ST_AsText(way) geom, name AS label
 
  FROM osm_poia
 
  WHERE tags @> hstore('cuisine', 'pizza')
 
 
 
Overpass Query aller Pizzerias der Schweiz (mit BBox):
 
  <osm-script>
 
    <union>
 
      <query type="node">
 
        <has-kv k="cuisine" v="pizza"/>
 
        <bbox-query e="10.5194091796875" n="47.92738566360356" s="45.45627757127799" w="5.69091796875"/>
 
      </query>
 
      <query type="way">
 
        <has-kv k="cuisine" v="pizza"/>
 
        <bbox-query e="10.5194091796875" n="47.92738566360356" s="45.45627757127799" w="5.69091796875"/>
 
      </query>
 
      <recurse type="way-node"/>
 
    </union>
 
    <print/>
 
  </osm-script>
 
  
Overpass Query aller Pizzerias der Schweiz (mit effektiven Grenzen):
+
**Natural Language Query:**
  <osm-script output="json">
+
<<Insert user query here>>.
    <union>
 
      <!-- define restricted search area switzerland -->
 
      <query type="area">
 
        <has-kv k="boundary" v="administrative"/>
 
        <has-kv k="admin_level" v="2"/> <!-- alternative: admin_level=4 for canton -->
 
        <has-kv k="name:en" v="Switzerland"/>
 
      </query>
 
      <!-- get nodes tagged as Pizzerias -->
 
      <query type="node">
 
        <area-query/> <!-- apply area restriction defined before -->
 
        <has-kv k="cuisine" v="pizza"/>
 
      </query>
 
      <!-- define again restricted search area switzerland -->
 
      <query type="area">
 
        <has-kv k="boundary" v="administrative"/>
 
        <has-kv k="admin_level" v="2"/> <!-- alternative: admin_level=4 for canton -->
 
        <has-kv k="name:en" v="Switzerland"/>
 
      </query>
 
      <!-- get ways/areas tagged as Pizzerias -->
 
      <query type="way">
 
        <area-query/> <!-- apply area restriction -->
 
        <has-kv k="cuisine" v="pizza"/>
 
      </query>
 
      <recurse type="way-node"/>
 
    </union>
 
    <print/>
 
  </osm-script>
 
  
POIs:
+
**Requirements:**
<pre>
+
- The output must adhere to this [EBNF specification](https://gist.githubusercontent.com/sfkeller/43800cd64014d17c55e40fa5e877fd6a/raw/3410bd8817e47c86e5695388a96ba1db5c0630a7/Overpass_QL_EBNF_v0.2_ChatGPT_generated.txt).
  <!--
+
- Use appropriate tags (with key and value) from the [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/DE:How_to_map_a) and from the [JOSM Presets](https://josm.openstreetmap.de/browser/trunk/resources/data/defaultpresets.xml).
  This query looks for nodes, ways and relations
+
- Prefer geocoding with `geocodeArea` over `area["name"=...]`.
  with the given key/value combination.
+
- Prefer `nwr` (nodes, ways, relations).
  Choose your region and hit the Run button above!
+
- Choose JSON output with center coordinates (`out center`).
  -->
 
  {{key=payment:bitcoin}}
 
  {{value=yes}}
 
  <osm-script output="json">
 
    <union>
 
      <query type="node">
 
        <has-kv k="{{key}}" v="{{value}}"/>
 
        <has-kv k="shop" modv="not" regv="."/>
 
        <has-kv k="amenity" modv="not" regv="."/>
 
        <has-kv k="office" modv="not" regv="."/>
 
        <bbox-query {{bbox}}/>
 
      </query>
 
      <query type="way">
 
        <has-kv k="{{key}}" v="{{value}}"/>
 
        <has-kv k="shop" modv="not" regv="."/>
 
        <has-kv k="amenity" modv="not" regv="."/>
 
        <has-kv k="office" modv="not" regv="."/>
 
        <bbox-query {{bbox}}/>
 
      </query>
 
      <query type="relation">
 
        <has-kv k="{{key}}" v="{{value}}"/>
 
        <has-kv k="shop" modv="not" regv="."/>
 
        <has-kv k="amenity" modv="not" regv="."/>
 
        <has-kv k="office" modv="not" regv="."/>
 
        <bbox-query {{bbox}}/>
 
      </query>
 
    </union>
 
    <print mode="body"/>
 
    <recurse type="down"/>
 
    <print mode="skeleton"/>
 
  </osm-script>
 
 
</pre>
 
</pre>
  
=== Beispiel Eisenbahnschienen ===
+
* Beispiele für erfolgreiche "user queries":
 
+
** All restaurants including fast_food in Rapperswil-Jona
Eisenbahnschienen (inkl. Schmalspur) in der Gegend von Rapperswil.
+
** All bars around 3000 meters from the adress "Bahnhof Rapperswil-Jona"
 
+
** All restaurants within 3000 meters of a public stop in of Switzerland
Diskussion:
+
** All restaurants in Kanton Glarus within 200 meters of public transport stops (station, bus_stop, tram_stop, funicular)
* Die BBox-Werte für Osten müssen größer sein als für Westen und genauso die Werte für Norden größer als für Süden. Also: s<n und w<e, sortiert als s,w,n,e (Rapperswil: 47.213,8.704,47.336,8.905).
 
* '<nowiki>{{bbox}}</nowiki>' ist eine Variable im Overpass Turbo (funktioniert im Overpass Service natürlich nicht).
 
* 'recurse' löst Referenzen von Ways zu Nodes auf (warum auch immer 'recurse' (und nicht z.B. dereference) da dies ja nur einstufig ist?)
 
* 'union' fasst Ergebnismengen von Anfragen zusammen - auch wenn's im Falle von recurse nur eine ist (...?) (OR-Verknüpfung)
 
* 'print' gibt die Sache aus (warum auch immer print gewählt wurde, da dies ja nichts mit der Konsole zu tun hat... Warum nicht 'format='?)
 
 
 
XML:
 
  <osm-script timeout="900">
 
    <union>
 
      <query type="way">
 
        <has-kv k="railway" v="rail"/>
 
        <bbox-query <nowiki>{{bbox}}</nowiki>/>
 
      </query>
 
      <recurse type="way-node"/>
 
      <query type="way">
 
        <has-kv k="railway" v="narrow_gauge"/>
 
        <bbox-query <nowiki>{{bbox}}</nowiki>/>
 
      </query>
 
      <recurse type="way-node"/>
 
    </union>
 
    <print/>
 
  </osm-script>
 
 
 
QL:
 
  [timeout:900];
 
  (
 
    way
 
      ["railway"="rail"]
 
      (47.213,8.704,47.336,8.905);
 
    node(w);
 
  );
 
  out;
 
 
 
Kompakte QL:
 
* <nowiki>http://www.overpass-api.de/api/interpreter?data=(way["railway"="rail"](47.213,8.704,47.336,8.905);node(w););out;</nowiki>
 
* http://www.overpass-api.de/api/interpreter?data=(way%5B%22railway%22%3D%22rail%22%5D(47.213%2C8.704%2C47.336%2C8.905)%3Bnode(w)%3B)%3Bout%3B%0A
 
 
 
Alternative: XML mit Regex:
 
 
 
  <osm-script timeout="900">
 
    <union>
 
      <query type="way">
 
        <has-kv k="railway" regv="^(rail|narrow_gauge)$"/>
 
        <bbox-query s="47.213" w="8.704" n="47.336" e="8.905"/>
 
      </query>
 
      <recurse type="way-node"/>
 
    </union>
 
    <print/>
 
  </osm-script>
 
 
 
XML mit Negation und Regex:
 
 
 
  <osm-script timeout="900">
 
    <union>
 
      <query type="way">
 
        <has-kv k="railway" modv="not" regv="rail|narrow_gauge"/>
 
        <bbox-query s="47.213" w="8.704" n="47.336" e="8.905"/>
 
      </query>
 
      <recurse type="way-node"/>
 
    </union>
 
    <print/>
 
  </osm-script>
 
 
 
=== Flaechen ===
 
  
Gegeben Id-Relation, gesucht Fläche:
+
* Beispiele für nicht erfolgreiche "user queries": Mountain passes of Switzerland which are navigable with a lake nearby" - siehe [[Overpass QL Beispiele]].
  
''Step 1'': First, goto www.osm.org and look for the id and/or the exact name the area (= multipolygon).
+
Einstieg in Overpass QL und API:
 +
* >> '''"Offizielles" Handbuch zur Overpass API: https://dev.overpass-api.de/overpass-doc/de/ <<'''
 +
* "Learn Overpass": http://osmlab.github.io/learnoverpass//en/
 +
* Getting Started with Overpass Turbo (2020): https://nixintel.info/osint-tools/getting-started-with-overpass-turbo-part-1/
 +
* Tutorial: https://osm-queries.ldodds.com/tutorial/index.html
 +
* Blog: https://dev.overpass-api.de/blog/
  
''Step 2'': Do this query given a relaton with the given id 2135966. It works also type=node, type=way. Choose your region and hit the Run button above!
+
Overpass QL Language Documentation:  
 
+
* http://wiki.osm.org/wiki/Overpass_API
  http://overpass-turbo.eu/?template=type-id&type=relation&id=2135966&R
+
* https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL
 
+
* https://wiki.openstreetmap.org/wiki/Overpass_API/Language_Guide
<pre>
+
* [[Overpass API EBNF]] (experimental)
  {{type=relation}}
 
  {{id=2135966}}
 
  <osm-script output="json">
 
    <id-query type="{{type}}" ref="{{id}}"/>
 
    <print mode="meta"/><!-- fixed by auto repair -->
 
    <recurse type="down"/>
 
    <print mode="meta"/><!-- fixed by auto repair -->
 
  </osm-script>
 
</pre>
 
  
''Step 3'': Given the GeoJSON output (see output="json"), convert it e.g. with an [[Online Geoconverter]] like OSM2KML.
+
Support:
 +
* Mailing list: http://listes.openstreetmap.fr/wws/info/overpass
 +
* https://help.openstreetmap.org/questions/20479/using-osm-data-with-javascript-via-api-in-my-code-display-data-as-text
  
 +
Siehe auch:
 +
* [[OSM-Technisches]]
 +
* [[HowTo OpenStreetMap]]
 +
* [https://stackoverflow.com/questions/tagged/overpass-api Stackoverflow 'overpass-api']
  
 
[[Kategorie:Howto]]  
 
[[Kategorie:Howto]]  
 
[[Kategorie:OpenStreetMap]]
 
[[Kategorie:OpenStreetMap]]
 +
[[Kategorie:Overpass]]

Aktuelle Version vom 16. September 2024, 09:56 Uhr

Overpass API - Gefilterter Download von OpenStreetMap-Daten in der nativen Struktur Nodes, Ways, Relations.

Overpass Turbo Services (interaktive Webapp):

Overpass QL Query Beispiele:

Prompt für >> ChatGPT & Co. << (Copy & Paste und ersetze "user query"):

Convert the following natural language query into valid Overpass QL syntax for use on [Overpass Turbo](https://overpass-turbo.eu/):

**Natural Language Query:**
<<Insert user query here>>.

**Requirements:**
- The output must adhere to this [EBNF specification](https://gist.githubusercontent.com/sfkeller/43800cd64014d17c55e40fa5e877fd6a/raw/3410bd8817e47c86e5695388a96ba1db5c0630a7/Overpass_QL_EBNF_v0.2_ChatGPT_generated.txt).
- Use appropriate tags (with key and value) from the [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/DE:How_to_map_a) and from the [JOSM Presets](https://josm.openstreetmap.de/browser/trunk/resources/data/defaultpresets.xml).
- Prefer geocoding with `geocodeArea` over `area["name"=...]`.
- Prefer `nwr` (nodes, ways, relations).
- Choose JSON output with center coordinates (`out center`).
  • Beispiele für erfolgreiche "user queries":
    • All restaurants including fast_food in Rapperswil-Jona
    • All bars around 3000 meters from the adress "Bahnhof Rapperswil-Jona"
    • All restaurants within 3000 meters of a public stop in of Switzerland
    • All restaurants in Kanton Glarus within 200 meters of public transport stops (station, bus_stop, tram_stop, funicular)
  • Beispiele für nicht erfolgreiche "user queries": Mountain passes of Switzerland which are navigable with a lake nearby" - siehe Overpass QL Beispiele.

Einstieg in Overpass QL und API:

Overpass QL Language Documentation:

Support:

Siehe auch: