Overpass API: Unterschied zwischen den Versionen
Aus Geoinformation HSR
Stefan (Diskussion | Beiträge) K (→Verschiedene) |
Stefan (Diskussion | Beiträge) K (→Verschiedene) |
||
Zeile 19: | Zeile 19: | ||
WHERE tags @> hstore('cuisine', 'pizza') | WHERE tags @> hstore('cuisine', 'pizza') | ||
− | Overpass | + | Overpass Query aller Pizzerias Schweiz (mit BBox): |
<osm-script> | <osm-script> | ||
<union> | <union> | ||
Zeile 29: | Zeile 29: | ||
<has-kv k="cuisine" v="pizza"/> | <has-kv k="cuisine" v="pizza"/> | ||
<bbox-query e="10.5194091796875" n="47.92738566360356" s="45.45627757127799" w="5.69091796875"/> | <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 Schweiz (mit effektiven Grenzen): | ||
+ | <osm-script output="json"> | ||
+ | <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> | </query> | ||
<recurse type="way-node"/> | <recurse type="way-node"/> |
Version vom 28. April 2013, 20:09 Uhr
Overpass API - Selektiver Download von Daten aus der Hauptdatenbank von OpenStreetMap.
Siehe auch HowTo OpenStreetMap
Webseiten:
- Overpass API (Dokumentation und öff. Server): http://overpass-api.de/ und http://wiki.openstreetmap.org/wiki/Overpass_API
- Overpass Turbo (Webapp/Server): http://overpass-turbo.eu/
Beispiele
Verschiedene
- "Rollstuhlparkplätze der Schweiz"
- siehe Nutzen von OpenStreetMap-Daten in GIS.
- Pizzerias (BBox)
PostGIS-Terminal (Schweiz):
SELECT ST_AsText(way) geom, name AS label FROM osm_poia WHERE tags @> hstore('cuisine', 'pizza')
Overpass Query aller Pizzerias 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 Schweiz (mit effektiven Grenzen):
<osm-script output="json"> <union> <query type="area"> <has-kv k="boundary" v="administrative"/> <has-kv k="admin_level" v="2"/> <has-kv k="name:en" v="Switzerland"/> </query> <query type="node"> <area-query/> <has-kv k="cuisine" v="pizza"/> </query> <query type="area"> <has-kv k="boundary" v="administrative"/> <has-kv k="admin_level" v="2"/> <has-kv k="name:en" v="Switzerland"/> </query> <query type="way"> <area-query/> <has-kv k="cuisine" v="pizza"/> </query> <recurse type="way-node"/> </union> <print/> </osm-script>
Beispiel Eisenbahnschienen
Eisenbahnschienen (inkl. Schmalspur) in der Gegend von Rapperswil.
Diskussion:
- 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).
- '{{bbox}}' 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 {{bbox}}/> </query> <recurse type="way-node"/> <query type="way"> <has-kv k="railway" v="narrow_gauge"/> <bbox-query {{bbox}}/> </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:
- http://www.overpass-api.de/api/interpreter?data=(way["railway"="rail"](47.213,8.704,47.336,8.905);node(w););out;
- 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>