DE:Overpass API

From OpenStreetMap Wiki
Jump to navigation Jump to search
edit
Overpass API · Referenz der Sprache · Leitfaden der Sprache · Technical terms · Bereiche · Beispielabfragen · 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 Ultra · Examples · Overpass Ultra extensions · MapLibre stylesheets · URL Params · mehr (Deutsch) · Source code and issues · Web site
Overpass API
Autor: drolbr/Overpass-API/graphs/contributors GitHub
Lizenz: GNU AGPL v3 (kostenlos)
Status: Aktiv
Version: 0.7.62.4 (2024-11-21)
Webseite: overpass-api.de
Quellcode: drolbr/Overpass-API GitHub
Programmiersprache: C++

Datenbank-Engine zur selektiven Abfrage von Daten aus der OSM-Hauptdatenbank

Features
Feature Value
Map Display
?
Routing
?
Navigating
?
Tracking
?
Monitoring
?
Editing
?
Rendering
?
Accessibility
?


Einführung

Die Overpass API (formals bekannt als OSM Server Side Scripting, oder OSM3S vor 2011) ist eine read-only API die individuell ausgewählte Bestandteile aus den OSM Karten-Daten wiedergibt. Sie fungiert als eine Datenbank über das Web: Der Anwender sendet eine Abfrage an die API und erhält einen Datensatz, der der Abfrage entspricht, zurück.

Im Gegensatz zur Haupt- (Main-) API (Seite auf Englisch verlinkt, da die Deutsche noch nicht komplett übersetzt ist), welche für das Editieren optimiert ist, ist die Overpass API für Datennutzer optimiert, die ein paar Elemente auf einen Blick, oder bis zu ungefähr 10 Millionen Elemente innerhalb von ein paar Minuten benötigen, welche in beiden Fällen durch Suchkriterien wie z. B. Ort, Objekt-Typ, Eigenschaften, Umgebung, oder eine Kombination dieser ausgewählt werden. Es fungiert als eine Hintergrunddatenbank für verschiedene Dienste (Seite bisher nur auf Englisch).

Für eine detaillierte Einführung kann man sich das komplette Benutzerhandbuch ansehen.

Zusätzlich existiert ein Overpass QL Sprach-Leitfaden. Es ist sehr zu empfehlen, sich mit verschiedenen Funktionen mittels overpass turbo vertraut zu machen, einer interaktiven, webbasierte Oberfläche. Für Altanwendungen existiert auch ein "Compatibility Layer", um einen reibungslosen Übergang von XAPI zu bieten.

Schnell-Start (60 Sekunden): Interaktive Oberfläche

(Wenn Rohdaten von Interesse sind, siehe Schnell-Start (60 Sekunden): für Entwickler/Programmierer weiter unten)

Schnell-Start (60 Sekunden): für Entwickler/Programmierer

Beachte: Diese Methode gibt Rohdaten wieder und auch wenn diese Beispiel Javascript mit einer JSON Ausgabe verwendet, funktioniert die API mit jeglicher Sprache und hat viele verschiedene Ausgabe-Formate.

  • (Den Fehlercode "Error: encoding error: Your input contains only whitespace." brauchst du nicht zu beachten. Er bedeutet nur "es wurde keine Abfrage gestellt")
  • Öffne https://overpass-api.de/api/interpreter in einem neuen Tab/Browserfenster
  • Öffne die Konsole deines Browsers, während du auf der Seite bist
  • Kopiere den Code von unten (und drücke Eingabe)
var query = `
  [bbox:30.618338,-96.323712,30.591028,-96.330826]
  [out:json]
  [timeout:90]
  ;
  way(30.626917110746, -96.348809105664, 30.634468750236, -96.339893442898);
  out geom;
`;
var result = await fetch(
  "https://overpass-api.de/api/interpreter",
  {
    method: "POST",
    body: "data=" + encodeURIComponent(query),
  }
).then((data) => data.json());

console.log(JSON.stringify(result, null, 2));
  • Anschließend sollte etwas wie folgt zu sehen sein:
  {
    version: 0.6,
    generator: "Overpass API 0.7.61.5 4133829e",
    osm3s: {
      timestamp_osm_base: "2023-10-17T15:22:15Z",
      copyright: "The data included in this document is from www.openstreetmap.org. The data "...
    },
    elements: [
      {
        type: "way",
        id: 20714383,
        bounds: {
          minlat: 30.6277358,
          minlon: -96.341929,
          maxlat: 30.628834,
          maxlon: -96.340566
        },
        nodes: [ 222454378, 4204990218, 222454386 ],
        geometry: [
          { lat: 30.6277358, lon: -96.340566 },
          { lat: 30.6278459, lon: -96.3407026 },
          { lat: 30.628834, lon: -96.341929 }
        ],
        tags: {
          highway: "service",
          name: "W-X Street",
          postal_code: "77840",
          "tiger:county": "Brazos, TX"
        }
      },
 
 ...
  • Die Ausgabe wird normalerweise gekürzt angezeigt. Um die komplette Ausgabe zu sehen:
  • Gehe auf den "Network" Reiter.
  • Wähle die letzte Zeile aus.
  • Gehe zum inneren Reiter "Response".

Öffentliche Overpass API Anwendungen

Um kleine und gut skalierbare OSM-Hauptdienste zu unterstützen, wird die Overpass API als Drittanbieterdienst betrieben. Folgende öffentlich zugängliche Anwendungen können genutzt werden:

Name Deckungsgebiet Endpunkt Version Altdaten Hardware Munin Nutzungsbedingungen
Haupt Overpass API Anwendung Global https://overpass-api.de/api/interpreter 0.7.61.5 4133829e Ja 2 Server, mit jeweils 16 Prozessor-Kernen, 128 GB RAM, NVME-SSD 12 Du kannst mit Sicherheit davon ausgehen, dass du niemand anderen beeinträchtigst, wenn du weniger als 10.000 Abfragen pro Tag und weniger als 1 GB Daten pro Tag herunterlädst [1].
VK Maps Overpass API Anwendung (Russland) Global https://maps.mail.ru/osm/tools/overpass/api/interpreter 0.7.57.1 Ja 2 Server mit jeweils 56 Prozessor-Kernen, 384 GB RAM, SSD - Nutze unsere Anwendungen gerne für jedes Projekt. Zurzeit gibt es keine Beschränkungen für Abfragen, und wir werden versuchen, diesen Ansatz auch in Zukunft beizubehalten.
Overpass turbo wird auch bereitgestellt unter https://maps.mail.ru/osm/tools/overpass/
Schweizer Overpass API Anwendung Nur Schweiz https://overpass.osm.ch/api/interpreter 0.7.59.1 2a9d9642 Nein 12 Kerne, 64 GB RAM, Festplatten ? Frag User:Datendelphin
Private.coffee Overpass Anwendung Global https://overpass.private.coffee/api/interpreter 0.7.61.8 b1080abd Ja 4 Server mit jeweils 20 Kernen, 256 GB RAM, SSD - Bisher bekannt als overpass.kumi.systems. Nutze unsere Anwendungen gerne für jedes Projekt. Es gibt keine Beschränkungen. Bitte benachrichtige uns vorab, wenn du vorhast, unsere Anwendung in groß angelegten Projekten zu verwenden. Funktionsprobleme/Fragen/Anmerkungen? Bitte schreibe uns eine E-Mail.
Japan Overpass API Anwendung Global https://overpass.osm.jp/api/interpreter 0.7.62.2 Nein 24 Kerne, 64 GB RAM, Festplatten - Wir führen derzeit einen öffentlichen Test durch. Die Anwendung kann ohne vorherige Ankündigung gewartet oder ausgesetzt werden. Frag User:nyampire

Ein Overpass API Endpunkt ist auch für OpenHistoricalMap (Seite bisher nur auf Englisch) verfügbar. Siehe OpenHistoricalMap/Overpass (Seite bisher nur auf Englisch) für eine Anleitung zum Zugriff auf diesen Endpunkt und Beispiele für OpenHistoricalMap Abfragen.

Abfragen an die Overpass API sind im XML oder Overpass QL Format. Siehe unten für eine Erklärung der Begriffe. Du kannst die Overpass turbo Anwendung benutzen, um für die oben genannten Overpass API Anwendungen Abfragen zu erstellen und anzuzeigen.

Overpass API bietet auch permanente Links (Seite bisher nur auf Englisch).

Community: wo bekomme ich Hilfe?

Als erstes - Beachte, dass Overpass Turbo separat, zu der Overpass API selbst dokumentiert ist. Die Overpass API Dokumentation ist nicht durchsuchbar und wird dir nicht viel helfen, es sei denn, du bist bereits sehr gut mit der Overpass API selbst vertraut. Wenn du zu Overpass über z. B. Taginfo gekommen bist, dann ist es die Overpass Turbo Dokumentation (welche einen Abfrage "Wizard" (Zauberstab) besitzt) die du eigentlich benötigst.

Es gibt einige Community-Webseiten, wo man Hilfe bekommt, wenn man Fragen zur Overpass API oder zu Overpass Turbo hat. Dies ist der empfohlene Kanal für Anfänger- bis zu Expertenfragen. Oder allgemeiner formuliert: wenn die Antwort auf die Frage nützlich für die Allgemeinheit sein könnte.

Bitte beachte, dass alte Fragen und alte Antworten auf diesen Seiten veraltet sein können. Fehlende Funktionen wurden eventuell in der Zwischenzeit implementiert, und Behelfslösungen können ggf. nicht mehr funktionieren. Wenn du eine Frage auf einer "in Echtzeit"-Hilfeseite wie IRC oder Slack stellst, dann erhältst du natürlich eine aktuelle Antwort.

Darüber hinaus werden nur die IRC und OSM Help Links von der OSM Community verwaltet. Die anderen Seiten werden von Drittanbietern kontrolliert.

Typ Seite Sprache Häufig genutzte 'Tags' für Fragen
Forum
OSM Community (Kategorien: General talk, Help & Support) Englisch (Hauptsprache) und andere (auch Deutsch) overpass
Q&A Seiten
GIS StackExchange Englisch overpass-api
Stack Overflow Englisch overpass-api
Chat
OSM US Slack (Kanal #overpass) Englisch
OSM Dev Telegram group Englisch
OSM World Discord (Kanal #developer) Englisch
IRC #osm channel Englisch n/a - Frag einfach deine Frage
Alte Seiten
OSM Help (veraltet, benutze stattdessen OSM Community) Englisch overpass, overpass-turbo

Entwickler / Systemadministratoren

Sie können Ihre eigene Instanz aus dem neuesten stabilen Release (Seite bisher nur auf Englisch) oder aus den Quellen (aktuelle Version) bei Github installieren (Seite bisher nur auf Englisch). Die Overpass API ist unter der Affero GPL v3 lizenziert.

Das Projekt wird von Roland Olbricht (E-Mail: Roland.olbricht@gmx.de) verwaltet. Beiträge, Fehlermeldungen oder Pull-Requests zum Quellcode sind willkommen.

Hier geht es zur Mailingliste für Entwickler.

Einschränkungen

Wie jeder andere Service hat auch die Overpass API Einschränkungen:

Download großer Datenmengen
Da die Größe des Ergebnises einer Overpass-API-Abfrage erst nach Abschluss des Downloads bekannt ist, ist es unmöglich, während des Downloads eine voraussichtliche Dauer anzugeben. Außerdem dauert die dynamische Generierung und das Herunterladen von Dateien aus der Overpass-API in der Regel länger als das Herunterladen vorhandener statischer Auszüge derselben Region. Wenn Sie also Regionen in der Größe eines Landes mit allen (oder fast allen) Daten extrahieren möchten, ist es besser, dafür planet.osm-Mirrors zu verwenden. Die Overpass-API ist am nützlichsten, wenn die benötigte Datenmenge nur eine Auswahl der in der Region verfügbaren Daten ist.
Abfrage einer OSM Daten-Historie
Die Overpass API bietet keine auf Änderungssätzen basierende Such-Kriterien. Es ist möglich dies zu umgehen, indem man Abfragen für Zeitpunkte erstellt, die die Unterschiede der Versionen zeigen, was jedoch umständlich sein kann. Auch kann die Overpass API nicht die komplette "Geschichte" eines Objekts abfragen. Die Overpass API kann lediglich den Zustand eines Objekts zu einem gegebenen Zeitpunkt abfragen. (Dies wird seit der Version 0.7.55 via retro und timeline unterstützt, siehe Sliced Time and Space für mehr Details).
Datenbank verzögerung
Es kann ein paar Minuten dauern bis Änderungen an der Datenbank in den Overpass API Abfrage-Ergebnissen angezeigt werden. Jede Abfrage gibt ein osm_base Zeitstempel aus, welcher dir sagt, wann die Daten das letzte mal aktuallisiert wurden. Für overpass-api.de kann auch die aktuelle und historische Datenbankverzögerung über Munin (lz4 & z) nachvollzogen werden.

Die Karten-Daten-Abfrage

Bevor die Syntax detailliert erklärt wird, wird hier der möglicherweise häufigste Anwendungsfall, die Karten-Daten-Abfrage, gezeigt. Eine Karten-Daten-Abfrage dient dazu, alle Daten (einschließlich der Meta-Daten) innerhalb einer Fläche (Bounding Box) zu erhalten. Die folgenden Beispiele sind auf ein Minimum reduziert. Die Links (die Icons), die diese Beispiele in ausführbarer Form enthalten, verwenden zusätzliche Parameter, u. a. um die Karte zu zentrieren, das Zoom-Level zu setzen und die Abfrage sofort auszuführen.

Overpass QL Overpass XML
try it yourself in overpass-turbo
try it yourself in overpass-turbo
(
   node(51.249,7.148,51.251,7.152);
   <;
);
out meta;
try it yourself in overpass-turbo
try it yourself in overpass-turbo
<union>
  <bbox-query s="51.249" w="7.148" n="51.251" e="7.152"/>
  <recurse type="up"/>
</union>
<print mode="meta"/>

Um die Abfrage auszuführen, kann man sie in dieses Abfragefeld kopieren, oder man kann Overpass Turbo benutzen, um die Ergebnisse auf einer Karte zu sehen.

Die Reihenfolge der Werte in der "bounding box" (51.249,7.148,51.251,7.152) sind kleinste geografische Breite (minimum latitude), kleinste geografische Länge (minimum longitude), größte geografische Breite (maximum latitude), größte geografische Länge (maximum longitude) (oder Süden-Westen-Norden-Osten). Sieh unten für mehr Details zur "bbox".

Einfache Anwendungs-Beispiele

Um mehr über die Overpass API Sprache zu erfahren, siehe Overpass API Sprach-Leitfaden, sowie die Overpass API Sprach-Erläuterung.

Optionen zur Ressourcenverwaltung (osm-script)

Das osm-script wird bei Verwendung der XML syntax automatisch hinzugefügt, sofern man nicht explizit etwas angibt. Ein Grund für eine Spezifizierung wäre die Optimierung der Optionen zur Ressourcenverwaltung, indem man optionale XML Attribute festlegt (entsprechende in Klammern gesetzte Optionen können auch in einer leeren Anweisung am Anfang einer Abfrage angegeben werden, wenn die QL-Syntax verwendet wird).

Overpass XML Overpass QL
try it yourself in overpass-turbo
try it yourself in overpass-turbo
<osm-script timeout="900" element-limit="1073741824">
  <bbox-query s="51.15" w="7.0" n="51.35" e="7.3"/>
  <print/>
</osm-script>
try it yourself in overpass-turbo
try it yourself in overpass-turbo
[timeout:900][maxsize:1073741824];
node(51.15,7.0,51.35,7.3);
out;

Diese Abfrage erweitert den Time-out von 3 Minuten auf 15 Minuten (900 Sekunden). Zusätzlich wird das Limit für den Speicherverbrauch auf 1 GiB (entspricht 1073741824 Byte) gesetzt.

Warnung: Wenn Du dieses Beispiel ausführst, werden mehr als 100 MiB an Daten abgerufen (auch wenn es nicht wie im ersten Beispiel alle Details ausgibt, hier wird nur eine einfache Liste von Knoten mit ihren Tags abgerufen). Overpass warnt Dich, wenn Du die Abfrage direkt im Browser ausführst, um die Daten auf der Karte darzustellen. Es kann sein, dass dabei der Browser abstürzt. Für Abfragen, die solche großen Datenmengen liefern, sollten andere Tools benutzt werden.

Diese Ressourcenbegrenzungen können nicht auf beliebig hohe Werte gesetzt werden: Jede Overpass API Anwendung kann sich weigern, sie über einen bestimmten Schwellenwert hinaus auszudehnen (abhängig von den Serverfunktionen oder der aktuellen Serverlast). Auch kann die Abfrage mit einer Fehlermeldung (und einem Nicht-OK-HTTP-Server-Fehlerstatus) fehlschlagen.

Fortgeschrittene Anwendungs-Beispiele

Die folgenden Beispiele stellen die zusätzlichen Befehle recurse und around vor. Sie sind nur in Kombination mit anderen Befehlen sinnvoll.

Auch hier können alle folgenden Beispiele getestet werden, indem die Snippets in dieses Abfragefeld kopiert werden.

Hinweis: Abfragen können einige Minuten in Anspruch nehmen, bis sie beendet sind. Wenn Timeouts verursacht werden, kann der Timeout-Zeitraum verlängert werden.

Recurse

Mit recurse werden alle Elemente abgefragt, die Mitglieder eines gemeinsamen, übergreifenden Elements sind. Es ist für Wege verfügbar, um alle verbundenen Knoten zu erhalten, für Relationen, um alle Mitgliedsknoten oder Mitgliedswege zu erhalten. Oder umgekehrt, um für einen Knoten, Weg oder eine Relation die Wege oder Relationen zu erhalten, denen das Element angehört. Der Elementtyp wird durch das Attribut type ausgewählt.

Beispiel: Erhalte die Knoten aller Relationen die den Schlüssel ref mit dem Wert E61 haben. Es werden alle Bushaltestellen ausgegeben, die von der Linie E61 bedient werden.

Overpass QL Overpass XML
try it yourself in overpass-turbo
try it yourself in overpass-turbo
rel[ref="E61"];
node(r);

out body;
try it yourself in overpass-turbo
try it yourself in overpass-turbo
<osm-script><query type="relation">
  <has-kv k="ref" v="E61"/>
</query>
<recurse type="relation-node"/>

<print/></osm-script>


Erhalte die Wege aller Relationen die den Schlüssel ref mit dem Wert E61 haben. Es wird die Strecke die von der Linie E61 bedinet wird ausgegeben.

Overpass QL Overpass XML
try it yourself in overpass-turbo
try it yourself in overpass-turbo
rel[ref="E61"];
way(r);

out body;
try it yourself in overpass-turbo
try it yourself in overpass-turbo
<osm-script><query type="relation">
  <has-kv k="ref" v="E61"/>
</query>
<recurse type="relation-way"/>

<print/></osm-script>


Erhalte die Knoten der oben genannten Wege. Die Bushaltestellen werden nicht ausgegeben, aber das ist so gewollt - siehe union Beispiele weiter unten.

Overpass QL Overpass XML
try it yourself in overpass-turbo
try it yourself in overpass-turbo
rel[ref="E61"];
way(r);
node(w);

out body;
try it yourself in overpass-turbo
try it yourself in overpass-turbo
<osm-script><query type="relation">
  <has-kv k="ref" v="E61"/>
</query>
<recurse type="relation-way"/>
<recurse type="way-node"/>

<print/></osm-script>


Erhalte alle Relationen die Knoten mit dem Namen Lichtscheid als Mitglied haben. Das sind die Buslinien die dort halten.

<query type="node">
  <has-kv k="name" v="Lichtscheid"/>
</query>
<recurse type="node-relation"/>

<print/>

Erhalte alle Wege die Knoten als Mitglieder haben innerhalb einer bestimmten bounding box.

<bbox-query s="51.249" n="51.251" w="7.149" e="7.151"/>
<recurse type="node-way"/>

<print/>

Und wir können auch Relations-Mitglieder einer Relation erhalten:

<query type="relation">
  <has-kv k="name" v="VRR Buslinien"/>
</query>
<recurse type="relation-relation"/>

<print/>

Oder das gleiche nur Umgekehrt:

<query type="relation">
  <has-kv k="ref" v="E61"/>
</query>
<recurse type="relation-backwards"/>

<print/>

Around

around ermöglicht es alle Knoten in der Nähe eines oder mehrerer vorgegebenen Knoten zu erhalten.

Beispiel: Erhalte alle Knoten die maximal 10 Meter von anderen Knoten mit dem Namen Bristol entfernt sind:

try it yourself in overpass-turbo
try it yourself in overpass-turbo
<query type="node">
  <has-kv k="name" v="Bristol"/>
</query>
<around radius="10"/>
<print/>

Man kann auch Abfragen verbinden, um nur Knoten zu erhalten, die auch ein zweites Kriterium erfüllen und sich in der Nähe von Knoten befinden, die das erste Kriterium erfüllen. In dem Beispiel suchen wir alle Bushaltestellen in einem Umkreis von 100 Metern um einen Pub namens "Bristol":

try it yourself in overpass-turbo
try it yourself in overpass-turbo
<query type="node">
  <has-kv k="amenity" v="pub"/>
  <has-kv k="name" v="Bristol"/>
</query>
<query type="node">
  <around radius="100"/>
  <has-kv k="highway" v="bus_stop"/>
</query>
<print/>

Bausteine

Es müssen immer noch ein paar helfende Befehle erklärt werden, im speziellen union, item, der Variablen Mechanismus, und foreach.

Auch hier können alle folgenden Beispiele getestet werden, indem die Snippets in dieses Abfragefeld kopiert werden.

Union

Union ermöglicht es die Ergebnisse von mehreren Abfragen zu gruppieren.

Beispiel: Erhalte alle Knoten mit dem Namen Lichtscheid oder Müngstener Straße.

<union>
  <query type="node">
    <has-kv k="name" v="Lichtscheid"/>
  </query>
  <query type="node">
    <has-kv k="name" v="Müngstener Straße"/>
  </query>
</union>
<print/>

Ein anderer Anwendungsfall wäre, wenn man eine Relation mit all ihren Mitgliedern, inklusive der Knoten von Weg-Mitgliedern, erhalten möchte.

<union>
  <query type="relation">
    <has-kv k="ref" v="CE 61"/>
  </query>
  <recurse type="relation-node" into="nodes"/>
  <recurse type="relation-way"/>
  <recurse type="way-node"/>
</union>
<print/>

Dies bedarf noch weiterer Erklärung:

  • query fragt alle Relationen mit dem Schlüssel ref und dem Wert CE 61 ab. Es schreibt das Ergebnis in die Standard-Variable _ und die umschließende union speichert die Daten.
  • recurse relation-node gibt alle Knoten, die Mitglied der oben gespeicherten Relationen sind, wieder. Das Ergebnis wird in die Variable nodes geschrieben (wir benötigen die Variable hier nicht weiter. Wir deklarieren sie nur, um die Relationen in der Standad-Variable zu behalten.) und die umschließende union speichert die Daten.
  • recurse relation-way gibt alle Wege, die Mitglied der oben gespeicherten Relationen sind, wieder (also aus der Standard-Variable _ und nicht aus der Variable nodes, da immer auf die Stadard-Variable zurückgegriffen wird, wenn keine andere angegeben ist). Das Ergebnis wird in die Standard-Variable _ geschrieben und die umschließende union speichert die Daten.
  • recurse way-node gibt endlich die Knoten, die Mitglied der gerade gespeicherten Wege sind, wieder. Das sind die letzten Daten, die in das Ergebnis der union gespeichert werden.

Wenn du denkst, dass das kompliziert ist, hast du recht. Ich bin für Vorschläge offen, wie man die Erklärung verbessern kann, aber ich habe bisher noch nichts Zufriedenstellendes gefunden.

Jetzt sind wir bereit, den Kartenaufruf zusammenzusetzen, indem wir eine bbox-Abfrage mit mehreren recurse Aussagen kombinieren und alles mit einer union umschließen.

Item

Ein Teil der Idee hinter item und Variablen, die du bereits im vorangegangenen Beispiel gesehen hast, ist: Jede Anweisung holt ihre Eingabe aus einer Variable und speichert ihre Ausgabe in einer Variable. Wenn man den Variablennamen weglässt, wird standardmäßig _ verwendet. Dadurch ist es möglich, fast alle expliziten Spezifikationen von Variablen zu entfernen. Die Eingabe wird immer aus der Variablen mit dem Namen des Attributs from abgerufen, die Ausgabe wird immer in die mit into angegebene Variable geschrieben.

<query type="way" into="foo">
  <has-kv k="name" v="Am Hofe"/>
</query>
<print from="foo"/>

Dies hat beispielsweise dieselbe Wirkung wie das folgende Beispiel bei print, verwendet jedoch die explizit angegebene Variable foo.

Um dieses Konzept vollständig vielseitig zu gestalten, kann man mit item eine Gruppe als Eingabe in union und query spezifizieren:

<query type="relation">
  <has-kv k="network" v="VRR"/>
  <has-kv k="ref" v="645"/>
</query>
<recurse type="relation-node" into="stops"/>
<query type="node">
  <around from="stops" radius="100"/>
  <has-kv k="highway" v="bus_stop"/>
</query>
<union>
  <item/>
  <recurse type="node-relation"/>
  <query type="node">
    <around from="stops" radius="100"/>
    <has-kv k="park_ride"/>
  </query>
</union>
<print/>

Hier tut item in der Mitte sicherstellen, dass die zuvor gesammelten Daten für bus_stop in das Ergebnis der union mit einbezogen werden. Das zeigt auch, dass die Variable stops nötig ist, um die Abfrage möglich zu machen.

<bbox-query s="51.15" n="51.35" w="7.0" e="7.3"/>
<recurse type="node-way"/>
<query type="way">
  <item/>
  <has-kv k="highway" v="motorway"/>
</query>
<print/>

item begrenzt in der Abfrage die mögliche Anzahl zu findender Elemente auf diejenigen, die bereits im vorherigen Schritt mit recurse gefunden wurden. Dadurch erhalten wir eine vollständige Abfrage, um Wege mit beliebigen Tags innerhalb einer bbox zu finden.

Foreach

<query type="relation">
  <has-kv k="type" v="multipolygon"/>
  <has-kv k="name"/>
</query>
<foreach into="pivot">
  <union>
    <recurse type="relation-way" from="pivot"/>
    <recurse type="way-node"/>
  </union>
  <make-area pivot="pivot"/>
</foreach>

Das ist der essenzielle Teil der Regel die die Flächen (Seite bisher nur auf Englisch) erstellt. Das make-area wird hier nicht erklärt. Sieh dir für Details hierzu die Flächen (Seite bisher nur auf Englisch) Wiki-Seite an. Der erste Teil mit query sammelt alle Relationen mit bestimmten Eigenschaften. Im zweiten Teil wollen wir etwas mit jedem Element im Ergebnis von query tun. Das tut foreach. Der Inhalt der Schleife wird einmal für jedes Element im Eingabesatz ausgeführt, das genau dieses einzelne Element im Ausgabesatz enthält, hier als pivot bezeichnet.

Metadaten

Neben dem speziellen print Modus gibt es zwei Anweisungen, die für die Abfrage spezifischer Metadaten bestimmt sind, nämlich user und newer.

User

Man kann alle Daten auswählen, die von einem bestimmten Benutzer zuletzt bearbeitet wurden. Wähle den Benutzernamen (z. B. meinen "Roland Olbricht"):

<user name="Roland Olbricht"/>
<print mode="meta"/>

Oder man wählt eine Benutzer-ID aus:

<user uid="65282"/>
<print mode="meta"/>

Diese Anweisung kann auch innerhalb einer Abfrageanweisung verwendet werden. Sie schränkt dann das Ergebnis auf die Daten ein, die von dem angegebenen Benutzer zuletzt bearbeitet wurden:

<query type="node">
  <user name="Roland Olbricht"/>
  <has-kv k="highway" v="bus_stop"/>
  <bbox-query s="51.2" n="51.35" w="7.05" e="7.3"/>
</query>
<print mode="meta"/>

Newer

Newer kann innerhalb einer Abfrageanweisung verwendet werden, aber nicht als eigenständige Anweisung. Newer schränkt die Ausgabe auf Elemente ein, die nach dem angegebenen Datum bearbeitet wurden. Das Datum muss im Format JJJJ-MM-TTTHH:MM:SSZ vorliegen. Sie bezieht sich, wie auch die Ergebnisse, immer auf die Zeitzone UTC.

<query type="node">
  <newer than="2011-08-01T00:00:00Z"/>
  <has-kv k="highway" v="bus_stop"/>
  <bbox-query s="51.2" n="51.35" w="7.05" e="7.3"/>
</query>
<print mode="meta"/>

Wenn man alle Knoten, die neuer als ein bestimmtes Datum sind, aus einer bbox abrufen möchte, kann man query mit einer Item Unteraussage verwenden.

<bbox-query s="51.2" n="51.35" w="7.05" e="7.3"/>
<query type="node">
  <item/>
  <newer than="2011-08-01T00:00:00Z"/>
</query>
<print mode="meta"/>

Siehe Overpass API/Overpass API by Example#Users and old data (Seite auf Englisch) für Beispiele mit modernerer Syntax.

Beispiel: Öffentlicher Verkehr

Beispielvorschau der Linie 6 (APS Mobilità).

Ein interessantes Beispiel, wie die Overpass API in ein Programm integriert werden kann – ein Service, um Diagramme von öffentlichen Verkehrslinien zu erstellen.

Siehe das Beispielvorschau-Bild auf der rechten Seite. Weitere Beispiele gibt es auf dieser Seite (Seite bisher nur auf Englisch).

In diesem Wiki kann man Links zu dem Tool mit der dokumentierten Vorlage {{Sketch Line}} erstellen.

(Sei bitte geduldig – je nach Serverauslastung kann die Bearbeitung jeder Anfrage bis zu 10 Sekunden dauern.)

Hinweis: Ab Overpass API v0.7.52 gibt es einige bekannte Probleme mit der PTv2-Unterstützung, die zu doppelten Haltestellennamen oder einigen Lücken führen können, siehe Github issue #190. Auch bei neueren PTvX-Versionen oder Varianten davon können möglicherweise Darstellungsprobleme auftreten.

XAPI Compatibility Layer

Für Details und Beispiele siehe:

Programme/Skripte rund um Overpass

Python API

  • overpassify — Ein Python-Transpiler, der eine Python-Funktion in eine Overpass-Abfrage umwandelt
  • overpass — Eine einfache, aber flexible und leistungsstarke Python-Schnittstelle, geschrieben von Martijn van Exel
  • overpy — Ein fortgeschrittener Python-Wrapper
  • OSMPythonTools bietet einfachen Zugriff auf OSM-bezogene Dienste, einschließlich Overpass (siehe die Wiki-Seite hierzu)

Node.js API

  • query-overpass ist ein einfacher API-Wrapper und eine CLI für Overpass
  • overpass-ts — Promise-basierter API-Client in Typescript; funktioniert im Browser und Node.js; unterstützt JSON und XML/Text sowie stream response

JavaScript

  • GLAM Counter bietet ein Beispiel dafür, wie man mit einer einfachen POST-Anfrage auf die Overpass-API zugreifen kann

Android

Konverter

Frontends

  • Overpass Turbo – Einfache Benutzeroberfläche mit Assistent (Zauberstab)
  • Overpass Ultra – liefert umfangreiche Ergebnisse über die maplibre-gl Vektorbibliothek
  • OsmAPP – Geb die Suche mit dem Präfix „op:“ ein, zum Beispiel: op:node[„amenity“] – gerendert über maplibre-gl

Befehlszeilenschnittstellen

  • overpass-cli - Befehlszeilentool zum Ausführen von Overpass-Abfragen

Vorträge, Präsentationen, Workshops

Dieser Abschnitt listet vergangene Vorträge, Präsentationen und Workshops zur Overpass API und verwandten Themen auf. Viele der Präsentationen sind selbst für Anfänger ein guter Einstieg, da sie viele Beispiele enthalten.

Datum Event Ort Titel Typ Sprecher Sprache Links
Juni 2023 SOTM FR 2023 Marseille (FR) Overpass Turbo: le couteau suisse des données OSM Präsentation Antoine Riche Französisch Video, Folien
Februar 2020 OSMit 2020 Torino (IT) Overpass Turbo: oltre il wizard Präsentation Andrea Albani Italienisch Folien Beispiele
September 2019 SotMUS 2019 Minneapolis (US) A turbo introduction to Overpass Präsentation Minh Nguyễn Englisch Video, Folien, Folien mit Notizen
August 2019 COSCUP 2019 OpenStreetMap x Wikidata track Taipei (TW) Geographic Data for Beginners - An introduction to Overpass API Turbo (Abgesagt) Präsentation Assanges Mandarin
Herbst 2017 Université Rennes (FR) Introduction aux données OpenStreetMap et à l'API Overpass Turbo Präsentation Boris Mericskay Französisch Folien
August 2017 COSCUP 2017 Open GIS track Taipei (TW) OpenStreetMap and Overpass Turbo Präsentation Thomas Tsai Mandarin Folien, Video
September 2016 SotM 2016 Brussels (BE) Gardening OSM data with Overpass API Präsentation Roland Olbricht Englisch Video
Juli 2016 FOSSGIS 2016 - OSM-Sonntag Salzburg (AT) Overpass-Abfragen jenseits key=value selber schreiben Workshop Nakaner Deutsch Folien
Mai 2016 SOTM FR 2016 Clermont-Ferrand (FR) Démystifier l'API Overpass / Demystify the Overpass API Workshop Antoine Riche Französisch Video
Oktober 2015 FOSS@HFT Stuttgart Stuttgart (DE) Parametrisierter Download aus einer weltweiten Geodatenbank (OpenStreetmap) sowie daran anschliessend mit dem Workshop Algorithmik und Technik, Hypothesenprüfung Präsentation/Workshop Roland Olbricht Deutsch Video
Juli 2015 AGIT 2015 Salzburg (AT) Overpass API: OpenStreetMap-Daten vorgefiltert beziehen Präsentation Roland Olbricht Deutsch ?
Juni 2015 SotM US 2015 NYC (US) Working with OSM diffs / The Overpass API Workshop Roland Olbricht Englisch ?, Zusammenfassung
April 2015 geo-spatial.org Cluj (RO) Overpass API: utilizarea datelor OpenStreetMap pentru a realiza hărți tematice Workshop Alex Morega Rumänisch Workshop Materialien
März 2015 FOSSGIS 2015 Münster (DE) Schatzsuche in OpenStreetMap Präsentation Roland Olbricht Deutsch Zusammenfassung, Video
März 2015 FOSSGIS 2015 Münster (DE) OpenStreetMap-Daten pflegen und finden mit der Overpass API Workshop (bezahlt) Roland Olbricht Deutsch Kein Material verfügbar
Februar 2015 FOSDEM 2015 Bruxelles (BE) Overpass-API - A service to query OpenStreetMap data Präsentation Roland Olbricht Englisch Folien, Video
September 2014 Bonn (DE) Overpass-API Seminar bei ZERA Workshop Roland Olbricht Deutsch Manuskript, Folien
Juni 2014 SotM-EU 2014 Karlsruhe (DE) Overpass API v0.7.50 - The temporal dimension Präsentation Roland Olbricht Englisch Folien/Video
Juni 2014 SotM-EU 2014 Karlsruhe (DE) Sparse Editing - Editing Large-Scale Objects Präsentation Roland Olbricht Englisch Folien/Video
April 2014 Grazer Linuxtage 2014 Graz (AT) OpenStreetMap Daten nutzen Präsentation Martin Raifer Deutsch Folien
März 2014 FOSSGIS 2014 Berlin (DE) Daten aus OpenStreetMap extrahieren, analysieren und filtern mit der Overpass API Workshop (bezahlt) Roland Olbricht Deutsch Kein Material verfügbar
Oktober 2013 Intergeo 2013 Essen (DE) OSM-Daten direkt nutzen mit der Overpass API Präsentation Roland Olbricht Deutsch Folien
Oktober 2013 OSMit 2013 Rovereto (IT) Overpass Turbo Präsentation Martin Raifer Italienisch Folien
März 2013 FOSSGIS 2013 Rapperswil (CH) Daten aus OpenStreetMap extrahieren, analysieren und filtern mit der Overpass API Workshop Roland Olbricht Deutsch Folien
März 2013 FOSSGIS 2013 Rapperswil (CH) overpass turbo - Einfache Analyse von OpenStreetMap Daten Präsentation Martin Raifer Deutsch Folien, Video, Tagungsband FOSSGIS 2013
März 2013 FOSSGIS 2013 Rapperswil (CH) Mobile Karten erstellen mit OSM, OpenLayers und Overpass API Präsentation Roland Olbricht Deutsch Folien, Video
Dezember 2012 OSMDE009 OSM Talk: Die Overpass API Podcast Roland Olbricht, Stephan/RadioOSM Deutsch Audio
März 2012 FOSSGIS 2012 Berlin (DE) Overpass API Präsentation Roland Olbricht Deutsch Folien, Tagungsband FOSSGIS 2012
Juli 2011 SotM-EU 2011 Vienna (AT) Overpass API - an open and slim XAPI alternative Präsentation Roland Olbricht Englisch Folien, Video

Bücher

Olbricht, Roland (2015). “OpenStreetMap in GIScience”. in Jokar Arsanjani, J.; Zipf, A.; Mooney, P. et al.. Springer International Publishing Switzerland. pp. 101-122. ISBN 978-3-319-14280-7. 

Der folgende Text ist eine Übersetzung des Orginals in Englisch, überprüft für rev2922862. Bitte fügen Sie alle neuen oder landesspezifischen Informationen über diesem Text ein.
Bitte vermeiden Sie tiefgreifende Änderungen an dieser Übersetzung, wenn Sie nicht auch die Übersetzungsquelle anpassen und die weiteren Übersetzenden informieren. Orthografische, grammatikalische und stilistische Änderungen sind selbstverständlich möglich.