Estoy tratando de averiguar lo que me da la distancia más precisa entre las posiciones:
- Medición directa de la distancia (mediante
Geod.inv
)? - ¿Medir la distancia en 2D (después de transformar a un sistema de referencia de coordenadas proyectado conocido)?
Estoy tratando de proyectar las posiciones de latitud/longitud a 2D porque es más fácil trabajar con ellas de esa manera, estoy tratando de trabajar con precisión centimétrica.
Como comprobación de cordura hice algunas pruebas para comprobar si se conservaba la distancia entre posiciones.
He aquí un dato interesante (nota: en realidad estoy utilizando la biblioteca DotSpatial pero he rehecho este ejemplo en pyproj porque es una herramienta más conocida):
Medir la distancia "directamente" (utilizando geod.inv
):
>>> from pyproj import Geod
>>> wgs84_geod = Geod(ellps='WGS84')
>>> lat1, lon1 = (27.23150120120691, -91.522575364888709) # somewhere in the gulf of mexico
>>> lat2, lon2 = (27.239416154284083, -91.520817319790083) # near lat1, lon1
>>> az12,az21,dist = wgs84_geod.inv(lon1,lat1,lon2,lat2)
>>> dist
894.1531771043997
Medición de la distancia en 2D (después de la proyección):
>>> from pyproj import Proj
>>> wgs84 = Proj('+proj=longlat +datum=WGS84 +no_defs') # http://epsg.io/4326
>>> nad27Blm15n = Proj('+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +no_defs') # http://epsg.io/32065 but in meters
>>> from pyproj import transform
>>> p1_projected = transform(wgs84, nad27Blm15n, lon1, lat1)
>>> p2_projected = transform(wgs84, nad27Blm15n, lon2, lat2)
>>> p1_projected
(646301.4612381, 3012741.116573205)
>>> p2_projected
(646465.2249033558, 3013620.015186602)
>>> import math
>>> math.sqrt((p1_projected[0] - p2_projected[0])**2 + (p1_projected[1] - p2_projected[1])**2)
894.0253411891856
Así que, estoy recibiendo 894.1531771043997
y 894.0253411891856
respectivamente que tienen alrededor de 0.128
metros de diferencia.
¿Cuál es la distancia más correcta? ¿Por qué?
(nota: también tengo ejemplos en los que las diferencias son > 1m, pero sólo cuando las distancias son > 2km).