User:EinKonstanzer/overpass
Jump to navigation
Jump to search
Die Beispiele lassen sich alle direkt in den overpass-turbo kopieren und dort direkt ausführen -> [1]
--> Kopieren, Einfügen, Ausführen... -> Läuft!
Einfache Beispiele
Alle Bänke im Kartenausschnitt ausgeben
- Die Abfrage liefert alle Bänke in dem angezeigten Kartenbereich zurück. Dieser wird als bbox (bounding box) bezeichnet.
- In der Abfrage wurde ein Timeout definiert, da eine entsprechende Abfrage nicht lange dauert. Dauert die Abfrage länger wurde ein zu großer Bereich ausgewählt und die Abfrage wird nach dieser Zeit abgebrochen
- Such-Tags: #timeout, #bbox, #out
// timeout wird in Sekunden angegeben - max. Laufdauer der Abfrage, sonst wird diese automatisch abgebrochen
[timeout:20];
// Die bbox wird mit "{{bbox}}" definiert und reprässentiert den Suchbereich. Die runden Klammern gehören dazu.
node[amenity=bench]({{bbox}});
//Die generierten Ergebnisse müssen ausdrücklich ausgegeben werden. Sonst erhält man eine leere Ergebnismenge - also nix.
out meta;
Leerzeichen, Sonderzeichen und Umlaute
- Sobald Bezeichnungen Leerzeichen, Sonderzeichen oder Umlaute enthalten müssen diese in Anführungszeichen geschrieben werden.
- Zulässig sind auch einfach Hochkommas
- Achtung! Da kein Gebiet definiert wurde erfolgt die Abfrage global auf dem Gesamten Datenbestand von OSM!
- Such-Tags: #leer, #space, #umlaute, #sonderzeichen
[timeout:20];
//Eine Abfrage über die gesamten OSM-Daten geht, da es in diesem Fall nur ein Ergebnis gibt...
node[place=city][name="Düsseldorf"];
//Es geht auch mit einfachen Hochkommas
//node[place=city][name='Düsseldorf'];
out meta;
Suchbereich Düsseldorf - besser als bbox...
- Anstatt im aktuell dargestellten Kartenauschschnitt zu suchen, kann der Bereich definiert werden.
- Achtung: Bei der Suche nach Bezeichnungen die es in der OSM-Datenbank(weltweit) mehrfach gibt. Wie damit umgegangen wird siehe weiter unten.
- Hinweis: Das Ergebnis einer Gebietsabfrage ist eine Fläche (area). Flächen stellen eine 4. Objekttyp neben node, way und relation dar.
- Such-Tags: #geocodeArea, #Gebiet, #Bereich, #Suchbereich, #Area
[timeout:25];
//Anführungszeichen sind hier nicht zwingend erforderlich
{{geocodeArea:Düsseldorf}}->.searchArea; //Die gefundene Fläche (area) wird in eine Variable geschrieben
node["amenity"="bench"](area.searchArea); //In der Fläche wird nach nodes gesucht die zum Kriterium passen
out meta;
Abfrage nach Bänken mit Suchkriterien
- Bänke die gewisse Kriterien erfüllen. Die Kriterien werden UND-Verknüpft
- Anstatt nach Schlüssel und Wert kann auch nur nach einem Schlüssel (mit beliebigen Wert) gesucht werden. Die Reihenfolge der Suchkriterien ist beliebig.
- Such-Tags: #and, #und
[timeout:25];
{{geocodeArea:Wersten}}->.searchArea;
//Alle Bänke im Suchbereich... UND mit Lehe UND mit einer Material-Angabe
//Ohne Angabe von einem Wert werden alle Objekte mit dem Schlüssel genommen
node
(area.searchArea)
[amenity=bench]
[backrest=yes]
[material];
//Oder kompakt in einer Zeile...
//node[amenity=bench][backrest=yes][material](area.searchArea);
out meta;
Mehrere Dinge in eine Abfrage packen
- Werden alle Ergebnisse der einzelnen Abfragen benötigt, müssen diese in rude Klammern gepackt werden.
- Der Mechanismus wird als "union", als die Vereinigung der Mengen bezeichnet.
- Und nicht das Semikolon nach der Anweisung vergessen.
- Such-Tags: #union
//Mithilfe der Einklammerung werden die Ergebnisse der Einzelabfragen zusammengefaßt.
[timeout:25];
{{geocodeArea:Wersten}}->.searchArea;
(
node[amenity=bench](area.searchArea);
node[amenity=waste_basket](area.searchArea);
node[amenity=bicycle_parking](area.searchArea);
way[amenity=bicycle_parking](area.searchArea);
);
out meta;
Alle Schulen, alle Objekttypen
- Betroffen können alle 3 Objekttypen sein. Daher müssen alle abgefragt werden.
- Die einzelnen Abfrageergebnisse müssen zusammengefaßt werden.
- Such-Tags: #union
//Zu beachten: In Frage kommen nodes, ways und relations. Es müssen daher alle 3 Typen abgefragt werden.
{{geocodeArea:Düsseldorf}}->.searchArea;
//Wichtig: Über die Klammerung werden die Ergebnisse der einzelnen Abfragen zusammengefaßt. Anderenfalls bleibt nur das Ergebnis der letzten Abfrage übrig!
(
node[amenity=school](area.searchArea);
way[amenity=school](area.searchArea);
rel[amenity=school](area.searchArea);
);
//Jede Anweisung muss mit mit einem ";" abgeschlossen werden.
out geom;
Alle Schulen, alle Objekttypen, aber viel einfacher
- Wie in der Abfrage oben wird nach allen Schulen abgefragt
- Über die "spezial" Objekt "nwr", "nw", "wr" und "nr" können gezielt alle entsprechenden Objekttypen direkt abgefragt werden.
- Such-Tags: #nwr
{{geocodeArea:Düsseldorf}}->.searchArea;
nwr(area.searchArea)[amenity=school]; //NodesWaysRels - alles in einem
//nw(area.searchArea)[amenity=school]; //NodesWays - Knoten und Wege
//wr(area.searchArea)[amenity=school]; //WaysRels - Wege und Relationen
//nr(area.searchArea)[amenity=school]; //NodesRels - Knoten und Relationen
out geom;
Einfach, aber etwas mehr in die Tiefe gehend....
Suche in Mühlhausen - in welchem Mühlhausen denn???
- Es gibt Orte / Gebiets-Bezeichnungen, die sind eindeutig und die gibt es auf der Welt nur einmal
- Die Suche nach "Berlin" liefert im Moment die Deutsche Hauptstadt zurück. Es gibt jedoch auch mehrere Berlins in den USA. Es ist nicht garantiert, dass immer der "wichtigere" Ort gewinnt.
- Und dann gibt es Orte, die es dutzendfach gibt. Da hilft nur genauer Definieren!
- Such-Tags: #geocdeArea
{{geocodeArea:Mühlhausen}}->.searchArea; //In Thüringen
{{geocodeArea:Mühlhausen, Baden-Württemberg}}->.searchArea; //Eine Gemeinde in BW
{{geocodeArea:Mühlhausen, Stuttgart}}->.searchArea; //Stadtteil von Stuttgart
{{geocodeArea:Mühlhausen, Stuttgart, Baden-Württemberg, Deutschland}}->.searchArea; // Würde auch gehen...
node(area.searchArea)[amenity=bench];
//Beispiel mit Berlin
//{{geocodeArea:Berlin}} ->.searchArea;
//{{geocodeArea:Berlin, Vereinigte Staaten von Amerika}} ->.searchArea;
//node(area.searchArea)[amenity=bench];
//PS: Das Berlin, USA ist ein Waldgebiet und hat keine Bänke... Aber es gibt ja mehrere Berlins in den USA...
out meta;
Die Suche nach OSM-Benutzer einschränken
- Wenn man geziehlt nach Objekten suchen will die durch einen OSM-Benutzer bearbeitet wurden (in irgend einer Version vom Objekt)
- Such-Tags: #user, #uid
{{geocodeArea:Düsseldorf}}->.searchArea;
nwr[amenity=bicycle_parking](area.searchArea) (user:EinKonstanzer);
//Anstatt dem Namen würde auch die ID gehen wenn man diese hat... -> EinKonstanzer = 128720
//nwr[amenity=bicycle_parking](area.searchArea) (uid:128720);
out geom;
Mit Variablen arbeiten
- Variablen können beliebige Namen gegeben werden. Wichtig ist der Punkt (.) am Anfang. Ohne diesen geht nichts!
- Ein Zuordnung von Ergebnissen zu einer Variable erfolgt durch "->".
- Wird keine Variable angegeben wird automatisch mit der Variablen "_" (Unterstrich) gearbeitet. Auf diese Variable kann auch jederzeit zugegriffen werden.
- Such-Tags: #Variablen, #Unterstrich, #union
//Die Fläche die der geocodeArea liefert muss nicht zwingend in eine Variable geschrieben werden...
{{geocodeArea:Wersten}};
//Der Unterstrich ist die interne Standardvariable.
node[amenity=bicycle_parking](area._) -> .Alle_nodes;
way[amenity=bicycle_parking](area._) -> .Alle_ways;
rel[amenity=bicycle_parking](area._) -> .Alle_rels;
(
//So werden die blanken Variablen benutzt.
.Alle_nodes;
.Alle_ways;
.Alle_rels;
) -> .Ergebnis;
// Man kann auch genau definieren was ausgegeben werden soll.
.Ergebnis out geom;
Abfrage über mehrere Gebiete
- Die Zusammenfassung funktioniert auch für Gebiete die über den "geocodeArea" ermittelt werden.
- Such-Tags: #union, #geocodeArea
[timeout:20];
(
{{geocodeArea:Wersten}};
//Um böse Überraschungen zu vermeiden sollten Gebiete/Orte genauer eingegrenzt werden
{{geocodeArea:Holthausen, Düsseldorf}};
{{geocodeArea:Himmelgeist}};
{{geocodeArea:Itter, Düsseldorf}};
) -> .Suchbereich;
node(area.Suchbereich)[amenity=bench];
out meta;
Erweiterte Suchkriterien
- Eine Abfrage muss immer einen Key enthalten! Ist der Wert/Tag nicht relevant, kann dieser weggelassen werden.
- Der gleich-Operator (=) ist der Trenner zwischen Key und Tag
- Der gleich-Operator erwartet, das die Suche und das Ergebnis exakt übereinstimmen.
[timeout:25];
{{geocodeArea:Wersten}}->.searchArea;
//Eine Einfach Und-Verknüpfung von Kriterien
//Wird der Tag weggelassen, wird nur geschaut ob das Element einen entsprechen Schlüssel enthält.
node(area.searchArea)[amenity=bench][backrest=yes][material];
out meta;
So ungefähr / enthält folgende Zeichen
- Ab jetzt ist nicht mehr das Gleichzeichen sondern die Tile (~) der richtig Operator.
- Der Suchstring muss irgendwo im Text vorkommen. Egal an welcher Stelle.
- Such-Tags: #Tilde, #ungefähr
{{geocodeArea:Wersten}}->.searchArea;
//Liefert alle Objekt die im Namen "Wersten" enthalten. Wo genau sich das Gesuchte im String befindet ist dabei völlig egal.
nwr(area.searchArea)[name~Wersten];
out geom;
Alles das mit "Düsseldorf" beginnt oder endet
- Wenn das Gesuchte mit bestimmten Zeichen beginnen oder enden soll.
- Alle weiteren Zeichen am Ende oder am Anfang werden ignoriert
- Da es sich bei dem Dächen oder Dollarzeichen um Steuerzeichen handelt muss der Ausdruck in Anführungszeichen gepackt werden
- Such-Tags: #Tilde, #Anfang, #Ende
[timeout:30];
{{geocodeArea:Düsseldorf}}->.DD;
//Alles was mit Düsseldorf Anfängt...: Anführungszeichen + Tilde & Dächen
nwr(area.DD)[name~"^Düsseldorf"];
//Oder alles was mit Düsseldorf Aufhört...: Anführungszeichen + Tilde & Dollar-Zeichen
//nwr(area.DD)[name~"Düsseldorf$"];
out geom;
Beliebige Schlüssel mit einem bestimmten Wert
- Es wird nach belieben Ojekten, mit beliebigen Schlüsseln gesucht, die jedoch einen speziellen Wert haben
- Wie der Tag in den vorhergehenden Beispielen wird jetzt auch der Schlüssel wie ein String behandelt und beginnt mit der Tilde
- Eine beliebige Zeichenfolge wird durch ".*" reprässentiert.
- Für den Schlüssel muss zwingend die Tile als Operator genommen werden. Damit man exakt den Suchbegriff erhält, muss signalisiert wie der Schlüssel anfängt und wie er aufhören muss.
- Such-Tags: #Tilde, #Anfang, #Ende, #Schlüssel
[timeout:20];
{{geocodeArea:Düsseldorf}}->.DD;
// Es werden nun alle Schlüssel aller Objekte in Düsseldorf überprüft. Objekte müssen einen Schlüssel haben dessen Wert exakt "Liebfrauenstraße" ist.
nwr(area.DD)[~".*"~"^Liebfrauenstraße$"];
out geom;
Alles, aber 'nicht' oder 'ungleich'
- Durch das Ausrufezeichen wird der Ausdruck negiert.
- Aus gleich wird ungleich und aus Ja (ist der Schlüssel "water" vorhanden) wird ein Nein
- Such-Tags: #ungleich, #nicht
[timeout:20];
{{geocodeArea:Düsseldorf}}->.DD;
nwr(area.DD)[natural=water][water!=pond]; //water *ungleich* pond
//nwr(area.DD)[natural=water][!water]; // *kein* water - es ist kein entsprechender Schlüssel vorhanden
out geom;
Einfache Oder-Verknüpfung von Suchkriterien
- Die Suchkriterien sind dazu durch das Pipe-Zeichen von einander zu getrennt
- Zu beachten ist, daß als Operator das Tile-Zeichen benutzt werden muß.
- Es muß dabei beachtet werden, daß der Operator mit dem Tildezeichen automatisch nach Teilbezeichnungen sucht und nicht exakt nach der Bezeichnung selbst.
- Such-Tags: #or, #oder, #Tilde
[timeout:20];
{{geocodeArea:Düsseldorf}} -> .DD;
//Es gibt 2 Stadtteil mit der Bezeichnung "bilk" im Namen. Es werden beide ausgegeben!
nwr(area.DD)[admin_level=10][name~"Wersten|bilk|Flehe"];
out geom;
Komplexere Abfragen
Alle Wege/Straßen eines PLZ-Gebiets
...natürlich nur welche die einen Namen haben!
{{geocodeArea:Deutschland}} -> .Deu;
rel(area.Deu)[postal_code=40239];
map_to_area;
nwr(area)[highway][name][highway!=bus_stop][highway!=platform];
( ._; >; );
out meta;
Oder als CSV-Ausgabe...
[out:csv(::id,::otype,::user,::version,::timestamp,"name","highway",::lat,::lon)];
{{geocodeArea:Deutschland}} -> .Deu;
rel(area.Deu)[postal_code=40239];
map_to_area;
nwr(area)[highway][name][highway!=bus_stop][highway!=platform];
out center;
Schnittmenge von 2 Relationen (gemeinsame Wege)
//Es werden die Wege der Relationen ermittelt und in Variablen geschrieben
//Mit "way.Wege1.Wege2" wird die Schnittmenge gebildet.
{{geocodeArea:Düsseldorf}} -> .DD;
rel(area.DD)[name="Radverkehrsnetz NRW, Stadt Düsseldorf"] -> .Rel1;
way(r.Rel1) -> .Wege1;
rel(area.DD)[name="Lokales Radverkehrsnetz Düsseldorf"] -> .Rel2;
way(r.Rel2) -> .Wege2;
way.Wege1.Wege2;
out meta;
>;
out skel;
Eine Teilmenge ermitteln, und dann innerhalb der Teilmenge suchen
Alle Spielplätze welche sich in Parks von Düsseldorf befinden:
//Fragestellung: Alle Spielplätze der Stadt, aber nur die, die in Parks sind
{{geocodeArea:Düsseldorf}}->.searchArea; //Ergibt die Fläche von Düsseldorf
wr[leisure=park](area.searchArea); //Alle Parks (nur als way und rel)
map_to_area; //Zu den ways und rels die Flächen ermitteln
nwr(area._)[leisure=playground]; // Alle Spielplätze innerhalb der Flächen
(._; >; ); //Relationen und Wege und natürlich die untergeordneten Elemente
out meta;
Aktuelle PLZ ermitteln
//Fragestellung: Gib mir die PLZ vom aktuellen Ort.
//Geht nur wenn Postleitzahlen als Relationen erfaßt sind wie in Deutschland
//a) Konkrete node als Eingabe
node(461989176);
//b) Ein Ausschnitt (bbox) -> Es werden dann alle nodes darin ermittelt
//node(51.238,6.781,51.239,6.782);
is_in -> .AlleAreas; //Liefert alle areas (das meiste naütrlich Relationen) innerhalb sich die Eingabe-Menge befindet
rel(pivot.AlleAreas)[boundary=postal_code]; //Flächen sind schön... Alle Basis-Relationen der Flächen. Und natürlich nur die PLZ-Gebiete. Hoffentlich nur eines!
out meta;
>;
out skel;
Wo fehlen noch Mülleimer?
//Fragestellung: Im Umkreis von 10m um eine Bank sollte es auch einen Mülleimer haben. Wo fehlen noch Mülleimer?
//Alle Mülleimer suchen
//Alle Bänke finden die im Umkreis von 10m um einen Mülleimer sind
//Alle Bänke suchen
//Alle Bänke - Bänke mit Mülleimer = Bänke ohne Mülleimer im Kreis von 10m
{{geocodeArea:Wersten}} -> .Wersten;
node(area.Wersten)[amenity=waste_basket];
node(around:10)[amenity=bench] -> .mit_muell;
node(area.Wersten)[amenity=bench] -> .alle;
(.alle; - .mit_muell;);
out;
Alle Stadtteile durch die die Umweltzone geht
{{geocodeArea:Düsseldorf}} -> .DD;
//Fragestellung: Welche Stadtteile werden von der Grenze der Umweltzone durchschnitten?
//PS: Sehr interessantes Ergebnis. Auch Stadtteile von Neuss sind dabei... :-)
rel(area.DD)[name="Umweltzone Düsseldorf"];
>; //Es werden nur Linie und Knoten gebraucht.
is_in; //Alle Flächen ermitteln die durch die Eingabe durchkreuzt werden.
area._[admin_level=10]; //Nur Stadtteil-Flächen
(
rel(pivot._); // Jetzt alle Basis-Relationen der Flächen
>; // Zu den Relationen auch ways und nodes
);
out meta; //Fertig ist die Kiste
OSM-Daten Stand 01.12.2012 - Mit Datums-Funktion
- Das Gebäude - heute, damals und beide gleichzeitg (Stand heute und Stand damals)
- Deklarationen im Kopf kennen keine Trennzeichen und müssen Abschließend mit Semikolon abgeschlossen werden
- Such-Tags: #date, #diff, #timeout, #deklarationen
[timeout:30];
//[timeout:30][date:"2012-12-01T15:00:00Z"]; //Damals
//[timeout:30][diff:"2012-12-01T15:00:00Z","2020-01-01T15:00:00Z"]; //Beide Stände
way(id:183629887);
out meta;
>;
out meta;
Ausgabe Arten und Formate
Für den Überblick: Nur die Tags
- Es handelt sich hier um eine spezielle Ausgabeart indem nur die direkten Tags der Objekte ausgegeben werden.
- Routen oder Grenzen bestehen häufig aus hunderten Teilobjekten die jedoch für eine reine Übersichtsliste nicht relevant sind.
- Such-Tags: #tags, #Ausgabe, #Format
{{geocodeArea:Düsseldorf}}->.searchArea;
//Alle Fahrradrouten mit einer Zuordnung zu Düsseldorf
rel(area.searchArea)[route=bicycle];
//Eine Auflistung der Routenrelationen ohne weitere Infos.
out tags;
Nur die Summe der Objekte
- Das Ergebnis soll nur eine Summe der einzelnen Objekte (nodes, ways, rels und areas) sein, die eine Abfrage geliefert hat.
- Areas sind von Overpass automatisch generierte Objekte, die in OSM eine Fläche darstellen.
- Such-Tags: #zählen, #count, #Anzahl
{{geocodeArea:Düsseldorf}}->.searchArea;
//Alle Objekt mit amenity=school
nwr(area.searchArea)[amenity=school];
//Jetzt aber nur Summe der einzelnen Objekte. Also nodes, ways, rels und areas
out count;
Ausgabe im CSV-Format
- In der Kopfzeile der Abfrage wird das Ausgabeformat über "out:csv(...)" eingestellt. Die Deklaration beginnt mit "[" und endet mit "]";
- Die Ausgabe-Spalten werden durch Komma getrennt. OSM-Basis-Felder (Datenbankstruktur von OSM) beginngen mit 2 Doppelpunkten. Alle weiteren Felder sind die gewünschten Schlüssel der OSM-Objekte zu denen die Tags ausgeben werden sollen.
- Parameter-Blöcke innerhalb der CSV-Deklartation werden Semikolon (;) getrennt. Weitere Parameterblöcke sind optional.
- Zu beachten ist, daß weitere Parameter der Kopfzeile einer Abfrage ohne Trennzeichen angefügt werden. Abschließend ist jedoch ein Semikolon (;) erforderlich.
- Such-Tags: #csv, #out, #Semikolon, #Format, #Excel
//Daten im CSV-Format können leicht in Excel oder Calc bearbeitet werden
[out:csv(::id,::type,::lon,::lat,"name","operator","cuisine", "addr:postcode","addr:city","addr:street","addr:housenumber","contact:phone","contatct:fax","contact:website"," contact:email","opening_hours"; true; ";")]
[timeout:20];
{{geocodeArea:Wersten}} -> .We;
//Gesucht wird nach allen Restaurants im Stadtteil Wersten
nwr(area.We)[amenity=restaurant];
out meta;
Buntes... mit MapCSS
Zwei Relationen mit unterschiedlichen Farben darstellen - (mit MapCSS)
{{geocodeArea:Düsseldorf}} -> .DD;
(
rel(area.DD)[name="Radverkehrsnetz NRW, Stadt Düsseldorf"];
>;
rel(area.DD)[name="Lokales Radverkehrsnetz Düsseldorf"];
>;
);
out meta;
{{style:
relation[name=Lokales Radverkehrsnetz Düsseldorf]
way[highway]
{
fill-color: red;
fill-opacity: 0.3;
color: red;
}
relation[name=Radverkehrsnetz NRW, Stadt Düsseldorf]
way[highway]
{
fill-color: green;
fill-opacity: 0.3;
color: darkgreen;
}
}}
Sonstiges
Alternativer Server
- Soll die Overpass API von einem anderen Server benutzt werden...
- Such-Tags: #server
{{data:overpass, https://overpass.kumi.systems/api/interpreter}}
node[place][name="Düsseldorf"];
out meta;
Beispiele aus dem Alltag
Suche nach Restrictions die von einem Benutzer bearbeitet wurden
{{geocodeArea:Düsseldorf}}->.searchArea;
relation[type=restriction](area.searchArea)(user:EinKonstanzer);
out geom;
Suchen nach bicycle=use_sidepath auf Wegen von Radrouten
{{geocodeArea:Düsseldorf}} -> .DD;
//{{geocodeArea:Nordrhein-Westfalen}} -> .DD;
//{{geocodeArea:Deutschland}} -> .DD;
//Alle Fahrradrouten-Relationen ermitteln
rel(area.DD)[route=bicycle] -> .Rels;
(
//Alle Wegabschnitte der entsprechenden Relation die das Kriterium enthalten.
way(r.Rels) [bicycle=use_sidepath];
//Basiselemente ermitteln (Knoten der Wege)
>;
);
// Zählen und Ausgabe der Objekte geht in einem...
out count;
out meta;
Tags aller Fahrradrouten in Düsseldorf mit "Düsseldorf" im Namen
{{geocodeArea:Düsseldorf}} -> .DD;
//Typisch für Radrouten ist ein "route=bicycle"
rel(area.DD)[route=bicycle][name~"Düsseldorf"];
out tags;
Düsseldorf mit allen Bezirken und Stadtteilen
{{geocodeArea:Düsseldorf}} -> .DD;
(
rel(pivot.DD);
rel(area.DD)[boundary=administrative][admin_level~"6|7|8|9|10"];
);
out geom;
Alle Schulen in Düsseldorf als CSV
[out:csv(::id,::type,::lon,::lat,::user,::timestamp,"name","description","note","operator","isced:level", "addr:postcode","addr:city","addr:street","addr:housenumber","contact:phone","contact:fax","contact:website","contact:email")];
{{geocodeArea:Düsseldorf}} -> .DD;
nwr(area.DD)[amenity=school];
out center;