Estoy haciendo un cálculo muy simple de la longitud de una polilínea usando bien:
from shapely.geometry import LineString
...
xy_list = [map(float,e) for e in xy_intm]
line = LineString(xy_list)
s = '%s,%s,%s' % (fr,to,line.length)
Mis coordenadas están en WGS84. Parece que no puedo encontrar ninguna información sobre el atributo de longitud de Shapely. ¿Cuál es la unidad del atributo de longitud? ¿Hay una manera fácil de convertir a km o metros?
Respuestas:
Como dice alfaciano en forma, la distancia es la distancia euclidiana o la distancia lineal entre dos puntos en un plano y no la distancia del gran círculo entre dos puntos en una esfera.
Para la distancia del gran círculo, debe usar algoritmos como la ley de los cosenos o la fórmula de Haversine (vea ¿Por qué la ley de los cosenos es más preferible que la haversine al calcular la distancia entre dos puntos de latitud y longitud? ) O use el módulo pyproj que realiza cálculos geodésicos.
Puede probar el resultado en la Calculadora de distancia de latitud y longitud
fuente
geopy
que ha implementado un cálculo de distancia de gran círculo y distancia de Vincenty.geopy
.Fuente: http://toblerity.org/shapely/manual.html#coordinate-systems
Siendo
shapely
completamente agnóstico en referencia a SRS, es bastante obvio que el atributo de longitud se expresa en la misma unidad de coordenadas de su cadena lineal, es decir, grados. De hecho:En cambio, si desea expresar la longitud en metros, debe transformar sus geometrías de WGS84 a un SRS proyectado utilizando pyproj (o, mejor, ejecutar el cálculo de distancia geodésica, consulte la respuesta de Gene). En detalle, desde la versión 1.2.18 (
shapely.__version__
),shapely
admite las funciones de transformación de geometría ( http://toblerity.org/shapely/shapely.html#module-shapely.ops ) con las que podemos usarlo junto conpyproj
. Aquí hay un ejemplo rápido:fuente