<>" /> <>" />
Mehr

Bestimmen des Straßenwinkels durch Analysieren einer Overpass-Turbo-Ausgabe xml


Ich lade derzeit alle Straßenkreuzungen aus einem Begrenzungsrahmen mit der folgenden Abfrage herunter (siehe Überführung).

                   

Die Ausgabe ist ein 92-seitiges Dokument (einschließlich Duplikaten), das Knoten enthält (Knoten-ID, Breite und Länge). Ich extrahiere die Breiten- und Längengrade, um einen Link zu einem Google Street View-Bild zu erstellen, da ich für jeden Punkt das entsprechende Bild herunterladen möchte. Bei der Zusammenstellung des Links möchte ich auch den Kurswinkel der Straße berechnen;

Ich kenne die benötigte mathematische Formel, aber sie erfordert 2 Lat und 2 Long (von 2 Punkten in derselben Straße) und mein Problem ist, dass die Knoten in der Ausgabedatei keine bestimmte Reihenfolge haben. Daher kann ich den Winkel zwischen zwei aufeinanderfolgenden Knoten nicht berechnen.

Ich dachte daran, die Lats oder Longs in aufsteigender / absteigender Reihenfolge zu sortieren, da ich auf diese Weise die Punkte in derselben Straße finden könnte. Ist diese Methode gültig oder kann ich sie einfacher lösen? Gibt es eine effizientere Möglichkeit, alle Straßenkreuzungen zu finden?


Sie brauchen einen Teil der Antwort für Wege. Wege in OSM sind geordnete Listen von Knotenreferenzen.

Der Teil der Antwort, den Sie benötigen, sollte also so aussehen:

          

Wobezieht sich auf Knoten1827734835. Und unten Details für diesen Knoten mit Koordinaten:


Ich habe Ihre Abfrage mit OverpassQL umgeschrieben:

[out:xml][timeout:25]; // Wege filtern Weg[Autobahn][Autobahn!~"Fußweg|Radweg|Pfad|Service|Track"]({{bbox}})->.hw; // foreach way foreach.hw->.eachw( // Wege erhalten, die dieselben Knoten minus aktuellen Weg teilen // in .otherws node(w.eachw)->.ns; way(bn.ns)[highway][ Highway!~"Fußweg|Radweg|Pfad|Service|Track"]->.w2; (way.w2; - way.eachw;)->.otherws; // Gemeinsame Knoten Knoten (w.otherws)->. n2; Knoten(w.eachw)->.n3; (((Knoten.n2; Knoten.n3;) -(Knoten.n2; - Knoten.n3;);) -(Knoten.n3; - Knoten.n2; );)->.shrdnodes; // Wege, die sich in der Kreuzung befinden way(bn.shrdnodes)->.outways; // Wege und Knoten vereinen (way.outways; node.shrdnodes;); out; // dirty hack / /(node(100000); node(w.outways); node(100000);); out; );

An dieser Stelle erhalten Sie gemeinsame Punkte und Wege nach ihnen. Sie können separate Abfragen senden, um die Geometrien von Autobahnen abzurufen, oder eine Zeile danach auskommentieren//schmutziger Hack.

Was diese Hacks tun und warum wir sie brauchen. Ohne sie erhalten Sie:

  • Knotenpunkte
  • Kreuzungswege, aber ohne Knoten

Es gibt keine Option für overpass, um eine Liste der Menge zu erhalten, zu der das Objekt gehört, oder Ihre Ergebnismenge auf andere Weise zu markieren.

Also benutze ichKnoten(100000)(node ​​with id=100000) als Klammer für meine Ausgabe, um Knoten zu gruppieren, die keine gemeinsamen Knoten sind, sondern nur Knoten, um die vollständige Geometrie eines Weges zu erstellen. Wenn es eine Option zum Einschließen von Datensätzen zur Beantwortung als Meta für Objekte gibt, könnte ich einfach alle Knoten mit unterschiedlichen Sätzen hinzufügen.

So sieht die Überführungsantwort aus