Mehr

Krümmungsradius für Kurven in Straßenabschnitten für das gesamte Straßennetz

Krümmungsradius für Kurven in Straßenabschnitten für das gesamte Straßennetz


Ich habe ein Straßennetz-Shapefile für einen US-Bundesstaat und versuche, den Krümmungsradius für Straßensegmente in diesem Shapefile abzuleiten. Diese Aufgabe muss ich mit wenigen Funktionen für Tausende von Straßenabschnitten erledigen können.

Die Straßenabschnitte variieren zwischen 0,2 Meilen und vielleicht 5 Meilen. Jedes Segment hat mehrere Kurven, aber ich interessiere mich nur für Kurven, die klein genug sind, um ein Fahrzeug zu einer vernünftigen Kurve zu zwingen. Dies sollte die Anzahl der interessierenden Kurven pro Segment auf maximal 1 oder 2 reduzieren, wobei viele Segmente solche Kurven überhaupt nicht aufweisen. Ich habe nicht den maximalen Radius der Kurve (die Schwelle) bestimmt, die ich verwenden möchte.

Für Segmente mit nur 1 solcher Kurve möchte ich die Werte dieser Kurven für diese Segmente erhalten, und für diejenigen mit mehr als 1 reicht ein Durchschnitt.


Die Krümmung (κ) einer zweidimensionalen Kurve ist definiert als κ=dϕ/ds, wobei ϕ der Tangentialwinkel und s die Bogenlänge (Quelle). Um Kalkül zu vermeiden, kann diese Ableitung angenähert werden als Gesamtwinkeländerung geteilt durch die Gesamtlänge der Kurve. Der Krümmungsradius (r) ist einfach der Kehrwert der Krümmung: r = 1/κ

Diese Mathematik kann verwendet werden, um den Radius einer Kurve in einer digitalisierten Straßenpolylinie zu berechnen, die mit mehreren Liniensegmenten angenähert wird. Das Verfahren geht ungefähr so:

  • Bestimmen Sie den Anfangs- und Endpunkt der Kurve.
  • Messen Sie die Gesamtwinkeländerung und die Gesamtkurvenlänge von Anfang bis Ende.
  • Rechnen Sie und speichern Sie den Krümmungsradius.

Ich habe einmal ein Skript geschrieben, das die Scheitelpunkte von Polylinien durchläuft und dabei die Richtung der Linie und die Winkeländerung berechnet. Abhängig von der Winkeländerung (dreht er sich nach rechts? links? nicht?) entscheidet er, ob jeder Punkt ein Wendepunkt (bei Richtungsänderungen). Zwischen Anfang und Ende addiert es die Gesamtwinkeländerung und die Gesamtlänge der Liniensegmente und berechnet dann R.

Es gibt einige zusätzliche Filterschritte, um sehr kleine Winkeländerungen und andere Probleme zu ignorieren, die eher auf Digitalisierungsartefakte als auf die tatsächliche Straßenkrümmung zurückzuführen sind. Wenn der Radius innerhalb eines bestimmten Interessenbereichs liegt (für unsere Zwecke haben wir uns nur darum gekümmert R kleiner als 100'), gibt er es in ein neues Shapefile aus. Trotz alledem ist es ziemlich schnell und kann durch Tausende von Straßen fahren. Die Ergebnisse scheinen einigermaßen zuverlässig zu sein, obwohl ich sie keiner umfassenden Fehleranalyse unterzogen habe.