Estoy ejecutando un análisis específico donde usamos bien para crear buffers alrededor de puntos (ubicaciones de tiendas) y luego verifico si otros puntos (ubicaciones de usuarios) están presentes dentro de ese valor de buffer. Cuando compruebo la distancia usando bien, resulta ser diferente de la distancia que obtengo de geopy. La fórmula de Haversine está de acuerdo con Geopy y un chequeo en Google Maps usando la función de medida de distancia también da aproximadamente la misma distancia
Aquí hay un ejemplo:
from shapely.geometry import Point, shape
from pyproj import Proj, transform
from geopy.distance import vincenty, great_circle
pt_store=Point(transform(Proj(init='EPSG:4326'),Proj(init='EPSG:3857'),-76.799614, 39.435307))
pt_user=Point(transform(Proj(init='EPSG:4326'),Proj(init='EPSG:3857'),-76.79989,39.43604))
vincenty((39.435307,-76.799614),(39.43604,-76.79989)).meters
great_circle((39.435307,-76.799614),(39.43604,-76.79989)).meters
pt_store.distance(pt_user)
Vincenty: 84.77847691521336
Great_circle: 84.90640111682812
Shapely: 110.02637304449682
Haversine formula ( http://www.movable-type.co.uk/scripts/latlong.html ): 84.88
¿Cuál es la correcta? Bien proporcionado u otros? Además, ¿se espera una diferencia tan grande (~ 22%)? ¿O me estoy perdiendo algo?
EPSG:3857
: Shapely es la elección incorrecta aquí. Web Mercator no es conforme y no debe usarse para calcular distancias.Y aquí hay otro cálculo de distancia de GeographicLib :
Consideraría que este es el correcto, dentro de los 15 nanómetros.
fuente