Calcular la distancia entre dos puntos (Latitud, Longitud)
Estoy intentando calcular la distancia entre dos posiciones en un mapa. He almacenado en mis datos Longitud, Latitud, X POS, Y POS.
He estado utilizando previamente el siguiente fragmento.
DECLARE @orig_lat DECIMAL
DECLARE @orig_lng DECIMAL
SET @orig_lat=53.381538 set @orig_lng=-1.463526
SELECT *,
3956 * 2 * ASIN(
SQRT( POWER(SIN((@orig_lat - abs(dest.Latitude)) * pi()/180 / 2), 2)
+ COS(@orig_lng * pi()/180 ) * COS(abs(dest.Latitude) * pi()/180)
* POWER(SIN((@orig_lng - dest.Longitude) * pi()/180 / 2), 2) ))
AS distance
--INTO #includeDistances
FROM #orig dest
Sin embargo, no me fío de los datos que salen de esto, parece que da resultados ligeramente inexactos.
Algunos datos de muestra en caso de que los necesite
Latitude Longitude Distance
53.429108 -2.500953 85.2981833133896
Podría alguien ayudarme con mi código, no me importa si quieres arreglar lo que ya tengo si tienes una nueva forma de lograr esto sería genial.
Por favor, indique en qué unidad de medida están sus resultados.
82
3
Dado que utiliza SQL Server 2008, dispone del tipo de datos
geography
, que está diseñado exactamente para este tipo de datos:Da
Nos dice que hay unos 538 km desde (cerca de) Londres hasta (cerca de) Edimburgo.
Naturalmente, habrá que aprender primero, pero una vez que lo conozcas es mucho más fácil que implementar tu propio cálculo de Haversine; además, obtienes MUCHAS funcionalidades.
Si quieres mantener tu estructura de datos existente, puedes seguir utilizando
STDistance
, construyendo instancias degeografía
adecuadas utilizando el métodoPoint
:La siguiente función da distancia entre dos geocoordenadas en millas
La siguiente función da distancia entre dos geocoordenadas en kilómetros
La siguiente función da distancia entre dos geocoordenadas en kilómetros utilizando el tipo de datos Geography que se introdujo en sql server 2008
Uso:
Reference: Ref1,Ref2
Si utiliza SQL 2008 o una versión posterior, le recomiendo que compruebe el tipo de datos GEOGRAPHY. SQL ha construido en el apoyo a las consultas geoespaciales.
Por ejemplo, usted tendría una columna en su tabla de tipo GEOGRAPHY que se rellenaría con una representación geoespacial de las coordenadas (consulte la referencia de MSDN enlazada anteriormente para ver ejemplos). Este tipo de datos expone métodos que permiten realizar toda una serie de consultas geoespaciales (por ejemplo, encontrar la distancia entre 2 puntos)