Ich habe Punkte in WGS84 lat / long und möchte "kleine" (weniger als 5 km) Entfernungen zwischen ihnen messen.
Ich kann die Haversine-Formel von http://www.movable-type.co.uk/scripts/latlong.html verwenden und sie funktioniert sehr gut.
Ich möchte jedoch Python Shapely-Bibliotheken verwenden, damit ich mehr Operationen als nur Entfernungen ausführen kann, und weil auf der Skala, mit der ich arbeite, eine flache Erde eine ausreichend gute Annäherung ist. Um die geografischen Koordinaten zuverlässig auf eine kartesische Koordinate zu projizieren, verwende ich Pythons proj4
, aber es scheinen größere Fehler zu auftreten, als ich möchte.
Wenn ich die lokale UTM-Zone verwende, erhalte ich Unterschiede zwischen dem Haversine von einigen Metern, was in Ordnung ist. Aber ich möchte nicht die UTM-Zone berechnen müssen (die Punkte könnten weltweit sein), also habe ich es mit "sphärischem Mercator" versucht, aber jetzt liegen die Unterschiede zwischen Haversine und projizierten Entfernungen weit über 100%. Ist das wirklich richtig für sphärischen Mercator? Alles, was ich wirklich will, ist eine praktikable kartesische Projektion für zwei Punkte innerhalb von 5 km voneinander auf der ganzen Welt.
from shapely.geometry import Point
from pyproj import Proj
proj = Proj(proj='utm',zone=27,ellps='WGS84')
#proj = Proj(init="epsg:3785") # spherical mercator, should work anywhere...
point1_geo = (-21.9309694, 64.1455718)
point2_geo = (-21.9372481, 64.1478206)
point1 = proj(point1_geo[0], point1_geo[1])
point2 = proj(point2_geo[0], point2_geo[1])
point1_cart = Point(point1)
point2_cart = Point(point2)
print "p1-p2 (haversine)", hdistance(point1_geo, point2_geo)
print "p1-p2 (cartesian)", point1_cart.distance(point2_cart)
Zu diesem Zeitpunkt beträgt der Abstand zwischen ihnen 394 m und unter Verwendung der utm-Zone 27 395 m. Aber wenn ich sphärischen Mercator benutze, beträgt die kartesische Entfernung 904 m, was weit entfernt ist.
quelle
Antworten:
Ja, bei einer globalen Mercator-Projektion treten diese Fehler auf: Sie ist am Äquator genau und die Verzerrung nimmt exponentiell mit dem Breitengrad vom Äquator weg zu. Die Abstandsverzerrung beträgt genau 2 (100%) bei 60 Grad Breite. Bei Ihren Testbreiten (64,14 Grad) berechne ich eine Verzerrung von 2,294, was genau mit dem Verhältnis 904/394 = 2,294 übereinstimmt. (Früher habe ich 2.301 berechnet, aber das basierte auf einer Kugel, nicht auf dem WGS84-Ellipsoid. Die Differenz (von 0,3%) gibt uns einen Eindruck von der Genauigkeit, die Sie durch die Verwendung einer ellipsoidbasierten Projektion gegenüber der kugelbasierten Haversine-Formel erzielen können. )
Es gibt keine globale Projektion, die überall hochgenaue Entfernungen liefert. Dies ist einer der Gründe, warum das UTM-Zonensystem verwendet wird!
Eine Lösung besteht darin, für alle Ihre Berechnungen eine sphärische Geometrie zu verwenden, die Sie jedoch abgelehnt haben (was sinnvoll ist, wenn Sie komplexe Operationen ausführen, die Entscheidung jedoch möglicherweise erneut überprüft werden sollte).
Eine andere Lösung besteht darin , die Projektion an die zu vergleichenden Punkte anzupassen . Sie können beispielsweise sicher einen transversalen Mercator (wie im UTM-System) verwenden, dessen Meridian nahe der Mitte des interessierenden Bereichs liegt. Das Verschieben des Meridians ist ganz einfach: Subtrahieren Sie einfach die Länge des Meridians von allen Längen und verwenden Sie eine einzelne TM-Projektion, die auf dem Nullmeridian zentriert ist (mit einem Skalierungsfaktor von 1 anstelle von 0,9996 des UTM-Systems). Für Ihre Arbeit wird dies tendenziell mehr seingenauer als mit UTM selbst. Es liefert korrekte Winkel (TM ist konform) und ist für Punkte, die nur wenige zehn Kilometer voneinander entfernt sind, bemerkenswert genau: Erwarten Sie eine bessere Genauigkeit als sechsstellig. Tatsächlich würde ich eher kleine Unterschiede zwischen diesen angepassten TM-Abständen und den Haversine-Abständen dem Unterschied zwischen dem Ellipsoid (für die TM-Projektion verwendet) und der Kugel (von Haversine verwendet) zuschreiben, als der Verzerrung in der Projektion.
quelle
Ich habe dies nicht versucht, aber aus der Dokumentation geht hervor, dass Sie http://search.cpan.org/~grahamc/Geo-Coordinates-UTM-0.08/UTM.pm#latlon_to_utm verwenden können , um von einem Lat / Lon-Paar zu gelangen (plus Ellipsoid) zur UTM-Zonen- und Koordinatenliste. Dann können Sie Ihre Berechnung wie zuvor fortsetzen.
quelle