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.