DE:Overpass API/Overpass QL

From OpenStreetMap Wiki
Jump to navigation Jump to search
Overpass API logo.svg
edit
Overpass API · Referenz der Sprache · Leitfaden der Sprache · Technical terms · Leitfaden der Sprache · Beispielabfragen · fortgeschrittene Beispiele · Sparse Editing · Permanent ID · FAQ · mehr (Deutsch) · Web site
Servers status · Versions · Development · Technical design · Installation · XAPI compatibility layer · Public transport sketch lines · Anwendungen · Source code and issues
Overpass turbo · Wizard · Overpass turbo shortcuts · MapCSS stylesheets · Export to GeoJSON · mehr (Deutsch) · Development · Source code and issues · Web site

Overpass QL (Abkürzung für "Overpass Query Language") ist die zweite Sprache, die für die Overpass API entwickelt wurde; die zuerst entwickelte Sprache ist Overpass XML.

Overpass QL ist eine prozedurale, imperative Programmiersprache, die in einem C-Syntax-Stil gehalten ist. Diese Wiki-Seite soll eine vollständige Referenz für die Struktur von Overpass QL sein.

Überblick über die Sprache

Anweisung

Overpass QL Quelltext besteht aus Anweisungen. Jede Anweisung wird mit einem Semikolon ; beendet. Anweisungen werden sequentiell in einem Prozess ausgeführt. Jede ausgeführte Anweisung ändert den Laufzeitzustand des Prozesses.

Laufzeitzustand

Der Overpass QL Laufzeitzustand besteht aus:

  • dem Standard-Datensatz _ (ein Unterstrich)
  • anderen benannten Datensätze, wenn der Benutzer welche erzeugt hat
  • einem Stapelspeicher, der während der Ausführung der Overpass QL Blockanweisungen existiert

Datensätze

Overpass QL bearbeitet Datensätze. Eine Anweisung schreibt ihre Ergebnisse in einen Datensatz. Danach wird dieser Datensatz von der folgenden Anweisung als Eingabe verarbeitet. Ein Overpass QL Datensatz kann jede Kombination und Anzahl von OpenStreetMap Nodes, Ways, Relationen und area elements enthalten.

Solange man keinen benannten Datensatz als Eingabe definiert hat, wird als Eingabe der Standarddatensatz _ verwendet. Ebenso werden alle Ergebnisse in den Standardatensatz _ geschrieben. Dabei ersetzen neue Ergebnisse immer die alten Daten, die noch im Standarddatensatz enthalten sind. Diese alten Daten stehen danach nicht mehr zur Verfügung. Overpass QL Datensätze sind immer global sichtbar ([1]).

Beispiele:

  node[name="Foo"];

Diese Anweisung schreibt das Ergebnis der Abfrage nach Nodes mit dem Namen "Foo" implizit in den Standarddatensatz _. Dabei werden alte Daten überschrieben. Um ein Ergebnis in einen benannten Datensatz zu schreiben, verwendet man ->, wobei der Name mit einem . beginnen muss. Obige Anweisung sieht dann so aus:

  node[name="Foo"]->._;

Analog kombiniert dieser Befehl:

 (
  node[name="Foo"];
  node[name="Bar"];
 );

die Ergebnisse zweier Abfragen mit einem union statement, um das vereinigte Ergebnis dann in den Standarddatensatz _ zu schreiben. Das ist äquivalent mit:

 (
  node[name="Foo"];
  node[name="Bar"];
 )->._;

Um eine Ausgebe in einen benannten Datensatz mit Namen a zu schreiben, wird nun wieder die Syntax mit-> verwendet, gefolgt mit dem Namen a des Datensatzes. Die Abfrage:

  (node[name="Foo"];)->.a;

schreibt zum Beispiel alle Knoten mit dem Tag name=Foo in den Datensatz mit dem Namen a. Namen für Datensätze können Buchstaben, Ziffern und den Unterstrich enthalten. Sie dürfen allerdings nicht mit einer Ziffer anfangen. Um Elemente aus einem Datensatz zu lesen, schreibt man . gefolgt von dem Datensatznamen hinter den Befehl:

  node.a[amenity=foo];

Dieser Aufruf liefert alle Knoten im Datensatz a, welche den Schlüssel amenity mit dem Wert foo haben.