Ich mache eine sehr einfache Berechnung der Länge einer Polylinie mit Shapely:
from shapely.geometry import LineString
...
xy_list = [map(float,e) for e in xy_intm]
line = LineString(xy_list)
s = '%s,%s,%s' % (fr,to,line.length)
Meine Koordinaten sind in WGS84. Ich kann anscheinend keine Informationen über das Längenattribut von Shapely finden. Was ist die Einheit des Längenattributs? Gibt es eine einfache Möglichkeit, in km oder Meter umzurechnen?
Antworten:
Wie Alfaciano formschön sagt, ist der Abstand der euklidische Abstand oder der lineare Abstand zwischen zwei Punkten auf einer Ebene und nicht der Großkreisabstand zwischen zwei Punkten auf einer Kugel.
Für die Großkreisentfernung, müssen Sie Algorithmen als Kosinussatz oder der Haversine Formel verwenden (siehe Warum ist Kosinussatz stärker bevorzugt als Haversine , wenn der Abstand zwischen zwei Breiten-Längen - Punkte Berechnung? ) Oder das Modul verwenden pyproj dass führt geodätische Berechnungen durch.
Sie können das Ergebnis mit dem Longitude Latitude Distance Calculator testen
quelle
geopy
, das eine Großkreisentfernung und eine Vincenty-Entfernungsberechnung implementiert hat.geopy
.Quelle: http://toblerity.org/shapely/manual.html#coordinate-systems
Da es
shapely
in Bezug auf SRS völlig agnostisch ist, ist es ziemlich offensichtlich, dass das Längenattribut in derselben Koordinateneinheit Ihres Linienstreifens ausgedrückt wird, dh in Grad. Eigentlich:Wenn Sie stattdessen die Länge in Metern ausdrücken möchten, müssen Sie Ihre Geometrien mithilfe von pyproj von WGS84 in einen projizierten SRS umwandeln (oder besser eine geodätische Entfernungsberechnung durchführen, siehe Gens Antwort). Im Detail werden seit Version 1.2.18 (
shapely.__version__
)shapely
die Geometrie-Transformationsfunktionen ( http://toblerity.org/shapely/shapely.html#module-shapely.ops ) unterstützt, mit denen wir sie verwenden könnenpyproj
. Hier ist ein kurzes Beispiel:quelle