J'ai des points en WGS84 lat / long et j'aimerais mesurer de "petites" distances (moins de 5 km) entre eux.
Je peux utiliser la formule haversine de http://www.movable-type.co.uk/scripts/latlong.html et cela fonctionne très bien.
J'aimerais utiliser des bibliothèques Python Shapely, pour que je puisse faire plus d'opérations que la distance, et parce qu'à l'échelle avec laquelle je travaille, une terre plate est une assez bonne approximation. Pour projeter de manière fiable les coordonnées géographiques en coordonnées cartésiennes, j'utilise celles de Python proj4
, mais semble générer des erreurs plus importantes que je ne le souhaiterais.
Si j'utilise la zone UTM locale, j'obtiens des différences entre haversine de quelques mètres, ce qui est bien. Mais je ne veux pas avoir à travailler sur la zone UTM (les points pourraient être mondiaux), j'ai donc essayé avec "Mercator sphérique" mais maintenant les différences entre les distances haversine et projetées sont bien supérieures à 100%. Est-ce vraiment bon pour Mercator sphérique? Tout ce que je veux vraiment, c'est une projection cartésienne réalisable pour deux points à moins de 5 km l'un de l'autre n'importe où dans le monde.
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)
À ce stade, la distance haversine entre eux est de 394 m, et en utilisant la zone utm 27, 395 m. Mais si j'utilise une sphère Mercator, la distance cartésienne est de 904 m, ce qui est loin.