Kommandozeilen- / Batchgesteuerte OSM-Datenabfragen mit opaQuery.pl

Im Rahmen des Projektes “Spielplätze in Münster” ist das Datenabfrage-Utility “opaQuery.pl” entstanden.
Das Utility nutzt für OSM-Datenabfragen das Overpass-API unter Verwendung der Abfragesprache “Overpass-QL”.
Das Utility wird von der Kommandozeile aus benutzt und ist unter Linux, OS X und Windows lauffähig.

Funktionsweise:

Nutzung:
perl opaQuery.pl “Overpass-QL-String”

Beispiel:
perl opaQuery.pl “node [‘name’=‘Gielgen’] (50.7,7.1,50.8,7.2); out meta;”

Weitere Details zum Utility finden sich hier:
http://www.easyclasspage.de/maptools/index.html

Vielleicht ist das Utility ja auch für den Einen oder Anderen von euch hilfreich.

Gruß Klaus

Link zur Beschreibung des Overpass-APIs:
http://wiki.openstreetmap.org/wiki/Overpass_API

Sieht sehr interessant aus !

Jan

Das Utility “opaQuery.pl” ist in der Version 0.2 erschienen.
Funktional hat sich nichts geändert - wesentlich erweitert wurde der Hilfetext.
Enthalten ist jetzt eine Beschreibung der essentiellen QL-Sprachelemente.
Das Tool sollte somit “Out-Of-The-Box” benutzbar sein …

opaQuery.pl - OpenStreetMap - OverPass-Api-Query, Rel. 0.2 - 2012/07/14

Copyright (C) 2012 Klaus Tockloth <freizeitkarte@googlemail.com>
This program comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.

Benutzung
=========
perl opaQuery.pl "Overpass-QL-String"

Beispiel
========
perl opaQuery.pl "node ['name'='Gielgen'] (50.7, 7.1, 50.8, 7.2); out meta;"

Dateien
=======
opaQuery.Request.txt : Logdatei fuer die http-Anfrage
opaQuery.Response.xml : Logdatei fuer die xml-Antwort
opaQuery.cfg : Konfigurationsdatei


Overpass-QL - grundlegende Sprachelemente
-----------------------------------------

Initialisierung
===============
[out:xml]            Ausgabe der Objekte im xml-Format (Default)
[out:json]           Ausgabe der Objekte im json-Format
[timeout]   maximale Verarbeitungsdauer im Server in Sekunden (Default: 180)
[maxsize:byte]       maximaler RAM-Verbrauch im Server in Byte (Default: 512 MB; Max: 1024 MB)

Zu selektierender Objekttyp
===========================
node   Knoten
way    Linie
rel    Relation

Selektion nach Schluesselwerten
===============================
['key' = 'value']     Uebereinstimmung gegeben
['key' != 'value']    Uebereinstimmung nicht gegeben
['key']               Schluessel vorhanden (Wert irrelevant)
['key' ~ 'RegExp']    regulaerer Ausdruck trifft zu
['key' !~ 'RegExp']   regulaerer Ausdruck trifft nicht zu

Logische Verknuepfungen
=======================
['key1' = 'value1'] ... ['keyN' = 'valueN']   logische Und-Verknuepfung
['key' ~ 'value1|value2| ... |valueN']        logische Oder-Verknuepfung

Zu betrachtender Datenbereich
=============================
(sued, west, nord, ost)   rechteckige Box mit Koordinaten 'links unten + rechts oben'
(id)                      nur das Objekt mit angegebener ID
(user:'name')             nur Objekte des Users 'name'

Behandlung der selektierten Objekte
===================================
out limit  Ausgabe von maximal 'limit' Objekten (Default = keine Beschraenkung)
out        Kurzform fuer: Ausgabe aller Objekte im xml-Format

Detaillierung der selektierten Objekte
======================================
ids    nur Objekt-IDs
skel   Objekt-IDs + enthaltene Objekte
body   Objekt-IDs + enthaltene Objekte + Tags (Default)
meta   Objekt-IDs + enthaltene Objekte + Tags + Metadaten

Sortierung der selektierten Objekte
===================================
asc   Sortierung nach IDs (default)
qt    Sortierung nach Quadtiles

Beispiele - einfache Datenabfragen
==================================

"[Initialisierung] ; Objekttyp [Selektion]           (Datenbereich)         ; Behandlung Detaillierung Sortierung ;"
"----------------- ; --------- ------------------    ---------------------- ; ---------- ------------- ---------- ;"
"                    node      ['name'='Gielgen']    (50.7, 7.1, 50.8, 7.2) ; out        meta                     ;"
"[out:json]        ; node      ['name'~'[gG]ielgen'] (50.7, 7.1, 50.8, 7.2) ; out        meta                     ;"
"[timeout:200]     ; node      ['name'~'Gielgen$']   (50.7, 7.1, 50.8, 7.2) ; out 3      body          qt         ;"
"                    way                             (user:'toc-rox')       ; out        meta                     ;"

Beispiele - weitere Datenabfragen
=================================
"[out:json] [timeout:20]; node ['name'='Gielgen'] (50.7, 7.1, 50.8, 7.2); out meta;"
"                         way  (user:'toc-rox')   (50.7, 7.1, 50.8, 7.2); out meta;"

Rekursionsoperatoren bei Knoten und Linien (node, way)
======================================================
<    Ausgabe aller Knoten, Linien und Relationen (nodes, ways, rels) in denen das Objekt vorkommt
>    Ausgabe aller enthaltenen Knoten (nodes)

Rekursionsoperatoren bei Relationen (rel)
=========================================
<<   Ausgabe aller Relationen (rels) in denen die Relation vorkommt
>    Ausgabe aller enthaltenen Knoten und Linien (nodes, ways)
>>   Ausgabe aller enthaltenen Knoten, Linien und Relationen (nodes, ways, rels)

Beispiele - Ausgabe der abhaengigen Objekte
===========================================
"(node (530904873); <;); out;"   Knoten 530904873 und alle Objekte (ways, rels) in denen der Knoten vorkommt
"(way (42674611);   <;); out;"   Linie 42674611 und alle Relationen (rels) in denen die Linie vorkommt
"(rel (157770);    <<;); out;"   Relation 157770 und alle Relationen (rels) in denen die Relation vorkommt

Beispiele - Ausgabe der enthaltenen Objekte
===========================================
"(way (42674611);   >;); out;"   Linie 42674611 und alle Knoten (nodes) die darin enthalten sind
"(rel (62779);      >;); out;"   Relation 62779 und alle Knoten und Linien (nodes, ways) die darin enthalten sind
"(rel (62779);     >>;); out;"   Relation 62779 und alle Objekte (nodes, way, rels) die darin enthalten sind

Beispiel - vollstaendige (Karten-)Daten eines Bereichs abfragen
===============================================================
"(node (50.75, 7.15, 50.8, 7.2); <;); out meta;"

Objekte in der 'Naehe' eines Knoten abfragen
============================================
(around:radius)   Objekte im Radius von n Metern selektieren

Beispiele - Objekte in der 'Naehe' abfragen
===========================================
"node (619332904);  way (around:10000) ['name'~'Rostock']; out meta;"
"node (1794046057); way (around:1000)  ['leisure'='playground']; out meta;"

Beispiele - zusammengesetzte Abfragen
=====================================
"(node ['amenity'='police'] (51, 6, 52, 7); way ['amenity'='police'] (51, 6, 52, 7);); out meta;"
"(way ['admin_level'='7'] ['name'] (50, 6, 52, 8); rel ['admin_level'='7'] ['name'] (50, 6, 52, 8);); out;"

Anmerkungen
===========
- siehe Sprachbeschreibung fuer weitere Features von Overpass-QL
- http://wiki.openstreetmap.org/wiki/Overpass_API/Language_Guide
- die Abfrage der Metadaten ist als ressourcenintensiv anzusehen
- die Aufloesung von Relationen ist als ressourcenintensiv anzusehen
- die Objektsortierung nach 'qt' ist performanter als die nach 'asc'
- die Datenausgabe erfolgt immer in der Reihenfolge nodes, ways, rels
- die Attribute der einleitenden Initialisierung sind kombinierbar

Danke an “Roland Olbricht” und “user_5359” für die Qualitätssicherung.

Gruß Klaus

Das Utility ist in der Version 0.4 verfügbar:

  • Hilfetext überarbeitet / erweitert
  • Präfix für Ergebnisdateien möglich

Gruß Klaus

moin Klaus,

btw - die page mit den weiteren Details zum Utility

http://www.easyclasspage.de/maptools/index.html

ist leider abgeraucht, Schade um die Hilfstexte etc. etx

Danke für den Hinweis … die Webseite wurde allerdings schon im Oktober 2016 vom Netz genommen. opaQuery selbst stammt von Mitte 2012, also aus den Anfangstagen der Overpass-API. Da es generisch ist, läuft das Tool (opaQuery.pl - OpenStreetMap - OverPass-Api-Query, Rel. 0.4 - 2012/10/06) auch heute noch unverändert. Wer also im Batchverfahren Overpass-Daten benötigt …

Die Inhalt der Webseite entspricht, bis auf einen einleitenden Satz, dem Hilfetext, den man erhält, wenn man das Tool ohne Parameter aufruft (perl opaQuery.pl).

PS: Wenn am Tool weiterhin Interesse besteht, könnte ich es (unveränert) nach GitHub/GitLab übertragen.

hallo Klaus

Danke für die Antwort.

ja ich fänd es klasse wenn du das tool auf GitHub überträgst.

Viele Grüße
Martin

Das Tool findet sich jetzt auf GitHub: https://github.com/Klaus-Tockloth/opaquery