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 entwicklet wurde; die zuerst entwicklete 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 Anweisung. Jede Anweisung wird mit einem Strichkomma ; beendet. Anweisungen werden sequentiell in einem Prozess ausgeführt. Jede ausgeführte Anweisung ändert den Laufzeitzustand des Prozess.

Laufzeitzustand

Der Overpass QL Laufzeitzustand besteht aus:

  • dem Standard-Datensatz _ (ein Unterstrich)
  • andere benannte 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 von der folgenden Anweisung dieser Datensatz 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 implizite das Ergebnis der Abfrage nach Nodes mit dem Namen "Foo" in den Standarddatensatz _. Dabei werden alte Daten überschrieben. Um ein Ergebnis in einen benannten Datensatz zu schreiben, verwendet man ->, wobei der Namen mit einem . beginnen muss. Obige Anweisung sieht dann so aus:

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

Similarly, this statement:

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

combines the results of two tag queries with a union statement, then sends that result to the default set _. It is equivalent to:

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

To write elements to a named set, again use the -> syntax, followed by the set name. For example, this query:

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

will write all node elements with the tag name=Foo into the named set a. Set names may consist of letters, digits, and the underscore; however, they must not start with a digit. To read elements from a set, append . and the set name to the command.

  node.a[amenity=foo];

will return all nodes in the named set a that have the key amenity with the value foo.