Simplemente multiplique el valor en grados por 111195
- este valor es (Earth mean radius)*PI/180
- que es la 'longitud media de un grado de gran círculo en metros en la superficie de la Tierra'.
El error máximo el uso de este método es ~ 0,1%
EDITAR
bien, mi respuesta anterior sigue en pie la pregunta: "cómo convertir arcos en grados en longitudes en metros", sin embargo, no es la pregunta que hizo (debería haber preguntado).
No he utilizado Spatialite profesionalmente, así que supuse que su consulta de muestra realmente devuelve la 'longitud en grados'. Eso no es cierto.
Desafortunadamente, parece que Spatialite no puede calcular la distancia en 'sentido geográfico'. A pesar de que sus geometrías están definidas con SRID 4326, las trata como si estuvieran en un avión.
Aquí es una prueba sencilla:
select Distance(GeomFromText('POINT(0 0)',4326),GeomFromText('POINT(3 4)',4326));
vuelve 5.0
.
Es una pena ...
permite echar un vistazo a su búsqueda original:
select Distance(
GeomFromText('POINT(8 49)',4326),
GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326)
)
Una consulta equivalente en MS SQL Server:
SELECT (geography::STGeomFromText('POINT(8 49)', 4326)).STDistance(geography::STGeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)', 4326));
se obtiene el resultado correcto inmediatamente: 105006.59673084648
, en metros, y sin ninguna brouhaha adicional.
¿Cuáles son sus opciones con Spatialite?
De hecho, como dijo en los comentarios, una opción es proyectar sus geometrías y calcularlas. Usar SRID 3035 para Europa también tiene sentido (si sus ubicaciones están principalmente en Alemania, consideraría SRID 25832).
select Distance(
Transform(GeomFromText('POINT(8 49)',4326),25832),
Transform(GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326),25832)
)
devuelve 104969.401605453
.
En cuanto a su otra muestra (en los comentarios):
select distance(
Transform(GeomFromText('POINT(8.328957 49.920900)',4326),3035),
Transform(GeomFromText('POINT(8.339665 49.918000)',4326),3035)
)
Hay una manera más sencilla de hacerlo (si tiene dos puntos, no un punto y una serie lineal): crear una serie lineal con sus puntos y GeodesicLength
utilizar la función, así:
select GeodesicLength(GeomFromText('LINESTRING(8.328957 49.920900, 8.339665 49.918000)',4326))
devuelve 833.910006698673
, como se esperaba.
Hmm, esto me pone de posiciones por encima de 1218 metros. Cuando uso Google Earth, esto me lleva a una distancia de 833 metros. Después de probar un rato utilicé esta consulta: seleccionar distancia (transformar (GeomFromText ('POINT (8.328957 49.920900)', 4326), 3035), transformar (GeomFromText ('POINT (8.339665 49.918000)', 4326), 3035)) que me da 834 metros – tmanthey
sí, debería funcionar razonablemente bien (ver mi respuesta editada, también) – Incidently
Muchas gracias. Última pregunta. ¿Tienes una forma elaborada de elegir un SRID? – tmanthey