User:M Kucha/VRR-Overpass-Abfragen

From OpenStreetMap Wiki
Jump to navigation Jump to search


Die Overpass API bietet vielfältige Suchmöglichkeiten und soll uns hier vor allem zur Qualitätssicherung dienen.

Alle diese Suchmöglichkeiten können sowohl auf einer Landkarte visualisiert werden als auch die Daten selbst abgefragt und z.B. in einen Editor wie JOSM exportiert werden. Wir konzentrieren uns an dieser Stelle daher nicht nur auf Beispiele die sich zur Visualisierung auf einer Landkarte eignen, sondern auch um Statuslisten im CSV-Format und Arbeitslisten, die zur Weiterverarbeitung in einen Editor der Wahl exportiert werden können. In allen Fällen können die unten angegebenen Abfragen in den Codeeditor von Overpass turbo eingetragen, ausgeführt und auf der Karte dargestellt bzw. exportiert werden.

Einführende Beispiele

Abfrage nach einem seltenen Tag

Nach einem einzelnen Tag z.B. name=Gielgen auf einer Node kann wie folgt gesucht werden:

  node["name"="Gielgen"];
  out skel;

Bitte zum Ausprobieren bei den Radiobuttons to OpenLayers auto-centered overlay auswählen und mit Convert die Abfrage starten. Durch diese Auswahl erhalten wir eine Landkarte, die automatisch um die gefundenen Objekte zentriert.

Die erste Zeile der Antwortseite zeigt den Status: steht dort Searching ..., so hat der Server noch keine Daten zurückgeliefert. Steht dort No results found., so enthält die Abfrage keine Nodes im Ergebnis (und ohne Nodes wird von OpenLayers nicht angezeigt). Steht dort Found ... features, so sind entsprechend viele Nodes und Ways gefunden worden.

Auf einem Way müssen wir, damit OpenLayers diesen anzeigen kann, auch die Nodes mitabfragen und verwenden dafür den Operator ">":

  (way["name"="Gielgenstraße"];>;);
  out skel;

Ebenso auf Relationen:

  (rel["ref"="A 555"];>;);
  out skel;

Man beachte, dass die hohe Zahl der Fundstellen sich nicht auf die Relation bezieht, sondern auf die Anzahl der im Rahmen der Relation gefundenen Ways.

Bundesländer darstellen

Noch mit dem kleinen Bug, dass gronningen noch mit erwischt wird:

[timeout:360];
{{geocodeArea:Deutschland}}->.searchArea;

relation
  [boundary=administrative][admin_level=4]
  (area.searchArea);
out geom;
//>;
//out skel qt;

{{style:

relation[name=Bayern]  { fill-color: blue; }
relation[name=Baden-Württemberg] {fill-color: yellow; }
relation[name=Hessen]  { fill-color: orange; }
relation[name=Saarland] {fill-color: grey; }
relation[name=Rheinland-Pfalz]  { fill-color: pink; }
relation[name=Nordrhein-Westfalen] {fill-color: green; }
relation[name=Niedersachsen]  { fill-color: orange; }
relation[name=Hamburg] {fill-color: blue; }
relation[name=Bremen]  { fill-color: orange; }
relation[name=Schleswig-Holstein] {fill-color: yellow; }
relation[name=Thüringen]  { fill-color: green; }
relation[name=Sachsen] {fill-color: orange; }
relation[name=Sachsen-Anhalt] {fill-color: blue; }
relation[name=Brandenburg] {fill-color: pink; }
relation[name=Berlin]  { fill-color: blue; }
relation[name=Mecklenburg-Vorpommern]  { fill-color: green; }

relation[boundary=administrative][admin_level=4]
 {
   width: 1;
   color: black;
   opacity: 1;
   fill-opacity: 0.6;
   font-size: 16;
   text-color: green;
   text: name:de;
   text-position: center;
 }

relation[boundary=administrative] node { width: 0;   symbol-size: 0;   fill-opacity: 0; } 

}}

Identifizierung von Bushaltestellen, die nicht PublicTransport genügen (altes Schema)

Bushaltestellen, die nicht in Relation enthalten sind

Zeige alle Bushaltestellennodes an, die nicht in einer bestimmten Relation sind. try it yourself in overpass-turbo

// Selektiere das Stadtgebiet als Fläche
{{nominatimArea:Dortmund}}
(._; )->.area;

// Selektiere alle Bushaltestellen in Bonn in die Variable 'alle'
node(area.area)[highway=bus_stop]->.alle;

// Selektiere alle Relationen, die eine dieser Nodes als Member haben,
// dann wieder alle deren Node-Mitglieder
rel(bn.alle);
node(r);

// Bilde aus beiden Mengen die Differenz
( .alle; - ._; );

// Gib das Resultat aus
out meta;

// Variante für Zeile 9 / 10:

// Nur Relationen, die ein bestimmtes Tagging haben
// rel[route=bus](bn.alle);

Stoppositionen im VRR-Gebiet, die mit highway=bus_stop getaggt sind

Zeige alle Stoppositionen im VRR-Gebietan, die mit highway=bus_stop getaggt sind, obwohl dieses Tag aus dem alten Schema zur Rückwätskompabilität nach PTv2 an die Platformen gehört. try it yourself in overpass-turbo

/* Zeige das Gebiet des Verkehrsverbundes und alle Stoppositionen darin, die mit highway=bus_stop getaggt sind*/

(rel[name="Verkehrsverbund Rhein-Ruhr"][boundary=public_transport];)     
;(._;>;);out;
/* diese Zeile dient zur Visualisierung der hoffentlich vorhandenen
   Grenzrelation. */

area[name="Verkehrsverbund Rhein-Ruhr"]->.vrr;
(node(area.vrr)[public_transport=stop_position][highway=bus_stop];)
;out geom;

/* ... oben auf Ausführen klicken (oder Strg-Enter), und ggf. in der
   Karte mit Klick auf das Lupensymbol auf die hoffentlich erscheinenden
   Daten zoomen lassen */

                              
// Style
// VRR-Gebiet in blau;
// Stoppositionen mit Tag in grün;

{{style: /* this is the MapCSS stylesheet */
area
{ color:gray; fill-color:blue; }

node[highway=bus_stop]
{ color:green; fill-color:green; }

}}

Highway=bus_stop without a public_transport=* tag

The first stage of transitioning from highway=bus_stop to Public_Transport is to apply either public_transport=stop_position or public_transport=platform to each highway=bus_stop

Overpass query

    /* diese Zeile dient zur Visualisierung der hoffentlich vorhandenen Grenzrelation. */
    (rel[name="Verkehrsverbund Rhein-Ruhr"][boundary=public_transport];)     
    ;(._;>;);out;

     /* Zeige das Gebiet des Verkehrsverbundes und alle Stoppositionen darin, die mit highway=bus_stop getaggt sind und weder Platform noch Stopposition sind*/
    area[name="Verkehrsverbund Rhein-Ruhr"]->.vrr;
    (node(area.vrr)[highway=bus_stop][public_transport!~'platform|stop_position'];)
    ;out geom;
    /* ... oben auf Ausführen klicken (oder Strg-Enter), und ggf. in der Karte mit Klick auf das Lupensymbol auf die hoffentlich erscheinenden Daten zoomen lassen */

    // Style
    // VRR-Gebiet in blau;
    // Stoppositionen mit Tag in grün; 
    {{style: /* this is the MapCSS stylesheet */
    area
    { color:gray; fill-color:blue; }
    node[highway=bus_stop]
    { color:green; fill-color:green; }
    }}

Overpass turbo

VRR Grenzvisualisierung

Visualisierung der hoffentlich vorhandenen Grenzrelation mit dem Namen "Verkehrsverbund Rhein-Ruhr"

Overpass query

[timeout:360];
  /* diese Zeile dient zur Visualisierung der hoffentlich vorhandenen Grenzrelation. */
    (rel[name="Verkehrsverbund Rhein-Ruhr"][boundary=public_transport];)     
    ;out geom;

{{style:
relation {
   width: 1;
   color: black;
   opacity: 1;
   fill-color: grey;
   fill-opacity: 0.6;
   font-size: 16;
   text-color: black;
   text: name;
   text-position: center;
         }
}}

Overpass turbo

DSW21 Haltestellenvisualisierung

Visualisierung des DSW21-Gebiets mit allen Haltestellen, blaue haben eine IFOPT-Nummer, der Rest nicht.

Overpass query

[timeout:360];
  /* diese Zeile dient zur Visualisierung der hoffentlich vorhandenen Grenzrelation. */
    (rel[name="Dortmunder Stadtwerke"][boundary=public_transport];)     
    ;out geom;

  /* Hier zunächst die Stadt/Region/etc. festlegen */
  {{nominatimArea:Dortmund}}
  (._; )->.area;

/* Alle Haltestellen in dieser Region ermitteln */
  rel(area.area)[public_transport=stop_area];out center;

{{style:

relation[public_transport=stop_area] { fill-color: red; }
relation[ref:IFOPT] { fill-color: blue; }

relation[boundary=public_transport]
  { 
   width: 1;
   color: black;
   opacity: 1;
   fill-color: grey;
   fill-opacity: 0.2;
   font-size: 16;
   text-color: black;
   text: name;
   text-position: center;
         }
}}

Overpass turbo

DSW21 Stop-Position oder Platform ohne Haltestelle

Visualisierung des DSW21-Gebiets mit Stop-Positionen oder Platformen ohne Haltestelle.

Overpass query

[timeout:360];
  /* diese Zeile dient zur Visualisierung der hoffentlich vorhandenen Grenzrelation. */
    (rel[name="Dortmunder Stadtwerke"][boundary=public_transport];)     
    ;out geom meta;

  /* Hier zunächst die Stadt/Region/etc. festlegen */
  {{nominatimArea:Dortmund}}
  (._; )->.area;

  node(area.area)[public_transport~'stop_position|platform ']->.allplatformsanndstoppositions;
  rel(bn.allplatformsanndstoppositions)[type=public_transport];
  node(r)->.allnodes;
  (.allplatformsanndstoppositions; - .allnodes;);
  out meta;
{{style:

node { fill-color: red; }

relation[boundary=public_transport]
  { 
   width: 1;
   color: black;
   opacity: 1;
   fill-color: grey;
   fill-opacity: 0.2;
   font-size: 16;
   text-color: black;
   text: name;
   text-position: center;
         }
}}

Overpass turbo

DSW21 CSV-Liste aller Haltestellen auf Dortmunder Stadtgebiet

CSV-Liste aller Haltestellen auf Dortmunder Stadtgebiet.

Overpass query

[timeout:360]
[out:csv(::id,::type,"public_transport","name","ref:IFOPT","network","operator","bus","tram","train")];
/* Hier zunächst die Stadt/Region/etc. festlegen */
{{nominatimArea:Dortmund}}
(._; )->.area;
/* 1. Ermittle alle Haltestellen in dieser Region, speichere das Ergebnis nach .all */
rel(area.area)[type=public_transport][public_transport=stop_area]->.all;
/* 2. Ermittle alle Stop-Area-Group-Elternrelationen von Haltestellen in .all, speichere das Ergebnis nach .grp*/
rel[type=public_transport][public_transport=stop_area_group](br.all)->.grp;
/* 3. Ermittle aus dieser Liste von Stop-Area-Group-Elternrelationen wieder alle enthaltenen Haltestellen. Dies sind nun alles Haltestellen, die Teil einer Stop-Area-Group sind. */
rel[type=public_transport][public_transport=stop_area](r.grp);
/* 4. Bilde die Differenz aus .all und dem Ergebnis aus 3. (ermittelt also alle Haltestellen, die nicht Teil einer Stop-Area-Group sind.) */
( .all; - ._; );
/* 5. Gib die Haltestellen ohne Stop-Area-Group als CSV-Liste aus.) */
out;
( .grp; );
/* 5. Gib die Stop-Area-Groups als CSV-Liste aus.) */
out;

Overpass turbo