Zum Inhalt springen

Streckennetz erstellen mit OpenStreetMap: Unterschied zwischen den Versionen

Aus awm
Flr (Diskussion | Beiträge)
Die Seite wurde neu angelegt: „<pre> [out:json]; // Wir möchten sämtliche Elemente (z.B. Nodes, Ways oder Relations) innerhalb einer bestimmten „Area“ abrufen. Die Area // kann theoretisch über beliebige Schlüssel referenziert werden – diese Möglichkeit stellt insbesondere während der // Entwicklung oder des Debuggings eine enorme Erleichterung dar. Im Produktivbetrieb empfiehlt es sich jedoch, zuerst // die hinter einer Area stehende Relation anhand ihrer OSM-internen ID…“
 
Flr (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(6 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<pre>
Ein [[Streckennetz]] bildet die geometrische Grundlage für eine kommunale Tourenplanung und stellt eine realtitätsnahe und auf Sammelfahrzeuge ausgelegte Modellierung des tatsächlichen Verkehrsnetzes dar.  
[out:json];
 
In [[awm desktop]] können Streckennetze für die Tourenplanung aus dem Online-Kartendienst [https://openstreetmap.org OpenStreetMap] generiert werden.
// Wir möchten sämtliche Elemente (z.B. Nodes, Ways oder Relations) innerhalb einer bestimmten „Area“ abrufen. Die Area
* Im Reiter "Streckennetze" auf das ➕ Symbol klicken und "Overpass" auswählen
// kann theoretisch über beliebige Schlüssel referenziert werden – diese Möglichkeit stellt insbesondere während der
* Es wird ein Dialog zur Generierung von Streckennetzen mit Overpass und OpenStreetMap angezeigt
// Entwicklung oder des Debuggings eine enorme Erleichterung dar. Im Produktivbetrieb empfiehlt es sich jedoch, zuerst
 
// die hinter einer Area stehende Relation anhand ihrer OSM-internen ID zu ermitteln und diese Relation durch einen
[[Image:awm-desktop-osm-roadnetwork-generator.png]]
// Aufruf von `map_to_area` in eine Area umzuwandeln, womit fehlerhafte Referenzierungen zuverlässig verhindert werden.
 
//
Die geometrische Grundlage für die Generierung eines Streckennetzes bildet eine sog. Relation-ID, dabei handelt es sich um eine in OpenStreetMap eindeutige Nummer, die eine geographische Struktur (z.B. Stadtgebiet, Landkreis, Bezirksgrenze, Bundesland, Land) referenziert. Über die Suchleiste im unteren Bereich können über die namentlichen Bezeichnungen derartige Relation-IDs im OpenStreetMap-Verzeichnis gefunden und in der Mini-Karte angezeigt werden. Es lassen sich durch mehrere Suchanfragen auch mehrere Regionen kombinieren.
// https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#By_element_id
 
//
Da die Abfrage von Streckennetzdaten bei OpenStreetMap aktuell leider nur mit Relation-IDs möglich ist, können Streckennetze zur Zeit nicht mit eigenen in awm erstellten Regionen erzeugt werden.
// Wichtig: Unabhängig davon, ob die Area anhand von Schlüsseln referenziert oder mit `map_to_area` aus einer Relation
 
// erzeugt wird, muss dem (Result-)Set ein Name vergeben werden (hier: `searchArea`), damit im Union-Block die zu
💡 '''Was ist Overpass?'''
// durchsuchende Area nicht verloren geht bzw. überschrieben wird.
 
//
Overpass ist eine Abfrage-Sprache mit der große Datenmengen aus dem OpenStreetMap-Archiv selektiert und in verschiedenen Formaten bereitgestellt werden können. Overpass ist optimiert auf geographische Ergebnisse und bietet zahlreiche Filtermöglichkeiten, die sich explizit mit den Attributen von OpenStreetMap-Daten beziehen. Weitere Informationen findest du unter https://overpass-turbo.eu/
// https://help.openstreetmap.org/questions/48794/overpass-api-union-doesnt-work
 
===Schritt-für-Schritt-Anleitung===
rel(id: 75155, 75177);
 
map_to_area -> .searchArea;
Im oben dargestellten Dialog musst du nun folgende Schritte ausführen:
* Gib einen Namen für das Streckennetz ein (Der Name kann gleich lauten wie der Landkreis, der Bezirk oder die Stadt)
// Für das Erzeugen des Streckennetzes sind nur bestimmte Straßenarten relevant. Manche Klassifizierungen werden aus
* Fahrbahnbreite [m] gibt an, wie weit die Streckenabschnitte um die Achsenmitte auseinander projiziert werden sollen. Der Standardwert von 3m ist gut und sorgt für komfortables Anklicken der einzelnen Straßenelemente
// Gründen der Einfachheit und Entwicklerergonomie über reguläre Ausdrücke selektiert, damit z.B. bei `motorway`
* Min. Abstand von Punkten [m] gibt an, wie dicht zwei Wegpunkte maximal aufeinander liegen dürfen, überflüssige Wegpunkte auf einem Streckenabschnitt werden automatisch entfernt.
// automatisch auch `motorway_link` oder `motorway_junction` berücksichtigt werden.
* Mehrfachverbindungen auftrennen sorgt dafür, dass die in OSM generierten Abschnitte so nachbearbeitet werden, dass zwischen zwei Kreuzungen nicht mehr als 2 Verbindungen existieren (eine Weg von Kreuzung A nach B und einer von B nach A). Diese Einschränkung ist wichtig, damit das Streckennetz in der Optimierung verwendet werden kann.
//
* Streckenabschnitte zusammenfügen sorgt dafür, dass mehrere aufeinanderfolgende Abschnitte die keine Abzweigungen haben zusammengehängt werden, weil eine Unterteilung nicht sinnvoll ist
// https://wiki.openstreetmap.org/wiki/DE:Key:highway
 
Bei den Straßentypen kannst du verschiedene Optionen wählen, um das Streckennetz an die Bedürfnisse deines Anwendungsfalls anzupassen. Die in der Oberfläche angebotenen Typen werden in Overpass auf bestimmte Attribute bezogen und anhand der Straßenkategorie ausgefiltert. Leider sind in OpenStreetMap nicht alle Regionen mit den selben Attributen und in vergleichbarer Qualität eingepflegt worden, daher können wir nicht in jedem Fall eine vollständige Berücksichtigung der ausgewählten Filter garantieren.
// Das Ergebnis der Abfrage unterteilen wir in zwei (Result-)Sets:
 
//
===OSM Regionen===
//  * `right_side_streets` für Straßen, welche nur rechtsseitig gesammelt werden sollen
 
//  * `both_side_streets` für kleinere Neben- und Wohnstraßen, welche beidseitig gesammelt werden können
Zuletzt musst du über den oben bereits beschriebenen Vorgang anhand von Suchbegriffen dein Zielgebiet für die Streckennetzgenerierung festlegen.
//
* Gib beim Suchbegriff den Namen der Stadt, des Landkreises oder des Bezirks ein und klicke auf die Lupe in der Toolbar um die Region in OpenStreetMap zu suchen
// https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Sets
* Wenn du die Relation-ID bereits kennst kannst du sie auch direkt in das Feld OSM-Region-IDs eingeben und mit dem Aktualisieren Button die Karte zur Überprüfung neu zeichnen lassen.
 
(
===Streckennetz erstellen===
  // Autobahnen und Anschlussrampen
 
  way(area.searchArea)["highway" ~ "^motorway"];
Wenn du alle Parameter eingegeben hast drücke auf das PLAY-Symbol und starte den Erstellungsprozess. Je nach Größe der Region kann das wenige Sekunden oder auch einige Minuten dauern.
 
  // Autostraßen und Anschlussrampen
Ist das Streckennetz erstellt, muss dieses validiert werden.  
  way(area.searchArea)["highway" ~ "^trunk"];
Dabei wird geprüft, ob alle Streckenabschnitte korrekt verbunden sind, Einbahnstraßen erkannt und berücksichtigt wurden und ob fehlerhafte oder überflüssige Abschnitte bereinigt werden müssen.  
 
  // Bundes- und Landesstraßen
Das validierte Streckennetz ist nun als Planungsgrundlage für weitere Schritte in der [[Tourenplanung]] bereit.
  way(area.searchArea)["highway" ~ "^primary"];
  way(area.searchArea)["highway" ~ "^secondary"];
  // Sonstige Hauptstraßen
  way(area.searchArea)["highway" ~ "^tertiary"];
)->.right_side_streets;
(
  // Gemeindestraßen, Straßen in Wohngebieten und Zufahrtsstraßen
  way(area.searchArea)["highway" = "unclassified"];
  way(area.searchArea)["highway" = "residential"];
  way(area.searchArea)["highway" = "living_street"];
  way(area.searchArea)["highway" = "service"];
  // Auch Fußgängerzonen, aber Umrisse explizit ausschließen
  way(area.searchArea)["highway" = "pedestrian"]["area" != "yes"];
)->.both_side_streets;
// Nicht alle Ways innerhalb der `searchArea` sind gleichermaßen nützlich und interessant für uns. Die kleinen Straßen
// auf Parkplätzen bei Einkaufszentren oder vor Baumärkten müssen ignoriert werden, da diese unser Streckennetz nur
// unnötig aufblähen und mit einem LKW ohnehin nur schwer befahren werden können.
way(area.searchArea)["amenity" = "parking"];
map_to_area -> .searchAreaParkingLots;
way(area.searchAreaParkingLots)["highway"]->.streets_to_ignore;
(.right_side_streets; - .streets_to_ignore;)->.right_side_streets;
(.both_side_streets; - .streets_to_ignore;)->.both_side_streets;
// Die ermittelten Ways haben wir in zwei (Result-)Sets unterteilt, damit wir diese nun um Metadaten anreichern können.
// Den `convert`-Ausdrück können wir leider nicht verwenden; dieser verändert die Datenstruktur soweit, dass einerseits
// die Node-IDs verloren gehen und die Koordinaten als GeoJSON zurückgeliefert werden.
//
// Aus diesem Grund erzeugen wir stattdessen ein eigenes Element und aggregieren schlicht die IDs, damit diese vom
// Streckennetzgenerator wieder ausgelesen werden können.
make infeo_road_network_meta
  ::id = 0,
  both_side_street_way_ids = both_side_streets.set(id()),
  right_side_street_way_ids = right_side_streets.set(id());
out;
.both_side_streets out geom;
.right_side_streets out geom;
</pre>

Aktuelle Version vom 2. Oktober 2025, 07:18 Uhr

Ein Streckennetz bildet die geometrische Grundlage für eine kommunale Tourenplanung und stellt eine realtitätsnahe und auf Sammelfahrzeuge ausgelegte Modellierung des tatsächlichen Verkehrsnetzes dar.

In awm desktop können Streckennetze für die Tourenplanung aus dem Online-Kartendienst OpenStreetMap generiert werden.

  • Im Reiter "Streckennetze" auf das ➕ Symbol klicken und "Overpass" auswählen
  • Es wird ein Dialog zur Generierung von Streckennetzen mit Overpass und OpenStreetMap angezeigt

Die geometrische Grundlage für die Generierung eines Streckennetzes bildet eine sog. Relation-ID, dabei handelt es sich um eine in OpenStreetMap eindeutige Nummer, die eine geographische Struktur (z.B. Stadtgebiet, Landkreis, Bezirksgrenze, Bundesland, Land) referenziert. Über die Suchleiste im unteren Bereich können über die namentlichen Bezeichnungen derartige Relation-IDs im OpenStreetMap-Verzeichnis gefunden und in der Mini-Karte angezeigt werden. Es lassen sich durch mehrere Suchanfragen auch mehrere Regionen kombinieren.

Da die Abfrage von Streckennetzdaten bei OpenStreetMap aktuell leider nur mit Relation-IDs möglich ist, können Streckennetze zur Zeit nicht mit eigenen in awm erstellten Regionen erzeugt werden.

💡 Was ist Overpass?

Overpass ist eine Abfrage-Sprache mit der große Datenmengen aus dem OpenStreetMap-Archiv selektiert und in verschiedenen Formaten bereitgestellt werden können. Overpass ist optimiert auf geographische Ergebnisse und bietet zahlreiche Filtermöglichkeiten, die sich explizit mit den Attributen von OpenStreetMap-Daten beziehen. Weitere Informationen findest du unter https://overpass-turbo.eu/

Schritt-für-Schritt-Anleitung

Im oben dargestellten Dialog musst du nun folgende Schritte ausführen:

  • Gib einen Namen für das Streckennetz ein (Der Name kann gleich lauten wie der Landkreis, der Bezirk oder die Stadt)
  • Fahrbahnbreite [m] gibt an, wie weit die Streckenabschnitte um die Achsenmitte auseinander projiziert werden sollen. Der Standardwert von 3m ist gut und sorgt für komfortables Anklicken der einzelnen Straßenelemente
  • Min. Abstand von Punkten [m] gibt an, wie dicht zwei Wegpunkte maximal aufeinander liegen dürfen, überflüssige Wegpunkte auf einem Streckenabschnitt werden automatisch entfernt.
  • Mehrfachverbindungen auftrennen sorgt dafür, dass die in OSM generierten Abschnitte so nachbearbeitet werden, dass zwischen zwei Kreuzungen nicht mehr als 2 Verbindungen existieren (eine Weg von Kreuzung A nach B und einer von B nach A). Diese Einschränkung ist wichtig, damit das Streckennetz in der Optimierung verwendet werden kann.
  • Streckenabschnitte zusammenfügen sorgt dafür, dass mehrere aufeinanderfolgende Abschnitte die keine Abzweigungen haben zusammengehängt werden, weil eine Unterteilung nicht sinnvoll ist

Bei den Straßentypen kannst du verschiedene Optionen wählen, um das Streckennetz an die Bedürfnisse deines Anwendungsfalls anzupassen. Die in der Oberfläche angebotenen Typen werden in Overpass auf bestimmte Attribute bezogen und anhand der Straßenkategorie ausgefiltert. Leider sind in OpenStreetMap nicht alle Regionen mit den selben Attributen und in vergleichbarer Qualität eingepflegt worden, daher können wir nicht in jedem Fall eine vollständige Berücksichtigung der ausgewählten Filter garantieren.

OSM Regionen

Zuletzt musst du über den oben bereits beschriebenen Vorgang anhand von Suchbegriffen dein Zielgebiet für die Streckennetzgenerierung festlegen.

  • Gib beim Suchbegriff den Namen der Stadt, des Landkreises oder des Bezirks ein und klicke auf die Lupe in der Toolbar um die Region in OpenStreetMap zu suchen
  • Wenn du die Relation-ID bereits kennst kannst du sie auch direkt in das Feld OSM-Region-IDs eingeben und mit dem Aktualisieren Button die Karte zur Überprüfung neu zeichnen lassen.

Streckennetz erstellen

Wenn du alle Parameter eingegeben hast drücke auf das PLAY-Symbol und starte den Erstellungsprozess. Je nach Größe der Region kann das wenige Sekunden oder auch einige Minuten dauern.

Ist das Streckennetz erstellt, muss dieses validiert werden. Dabei wird geprüft, ob alle Streckenabschnitte korrekt verbunden sind, Einbahnstraßen erkannt und berücksichtigt wurden und ob fehlerhafte oder überflüssige Abschnitte bereinigt werden müssen.

Das validierte Streckennetz ist nun als Planungsgrundlage für weitere Schritte in der Tourenplanung bereit.