Calcular la distancia en metros o kilómetros entre dos puntos es muy sencilla. Aquí expongo una función en SQL Server, que retorna la distancia lineal entre dos localidades, solamente se le envía la latitud y longitud de los dos lugares y el tipo de resultado que deseamos, metros (M) o kilómetros (K).
CREATE FUNCTION dn_fn_CalculaDistancia ( @latitud1 float, @longitud1 float, @latitud2 float, @longitud2 float, @unidad_metrica char(1) ) RETURNS float AS BEGIN --Unidad Metrica: K=kilometros M=metros DECLARE @distancia float --Radio de la tierra según WGS84 DECLARE @radius float SET @radius = 6378.137 DECLARE @deg2radMultiplier float SET @deg2radMultiplier = PI() / 180 SET @latitud1 = @latitud1 * @deg2radMultiplier SET @longitud1 = @longitud1 * @deg2radMultiplier SET @latitud2 = @latitud2 * @deg2radMultiplier SET @longitud2 = @longitud2 * @deg2radMultiplier DECLARE @dlongitud float SET @dlongitud = @longitud2 - @longitud1 SET @distancia = ACOS(SIN(@latitud1) * SIN(@latitud2) + COS(@latitud1) * COS(@latitud2) * COS(@dlongitud)) * @radius IF @unidad_metrica = 'M' SET @distancia = @distancia * 1000 RETURN @distancia END
- Calcular distancia entre coordenadas sql
- Distancia latitud longitud sql
- Calcular distancia entre dos puntos
- Calcular distancia entre dos puntos de ubicación
- Cómo calcular la distancia entre dos coordenadas GPS
- Distancia entre dos puntos geográficos
- Geolocalización en SQL Server
- Distancia entre dos puntos (dados por longitud y latitud)
Muy buenas,
tengo un problema que aunque creo que es simple de resolver no logro dar con ello.
Estoy aplicando la fórmula en línea recta sobre plano (distancia = 100* raiz((lat1-lat2)^2+(lon1-lon2)^2) y para ciertos casos me da una distancia
mayor que la distancia por carretera según google maps, lo cual no tiene ningún sentido. Concretamente expongo un ejemplo:
Distancia entre Zamora y Soria según Google maps: 305 km.
Coordenadas de los dos puntos (las he revisado a propósito):
Latitud de Zamora: 41,50368
Longitud de Zamora: -5,743778
Latitud de Soria:41,7636
Longitud de Soria: -2,464921
Distancia según la fórmula anterior: 328 km
¿Podrían ayudarme?
Ya de paso comento que tambieén lo estoy comparando con la fórmula de Haversine y hay casos en los que también dicha fórmula me sale una distancia
mayor que la distancia por carretera, e incluso casos en los que la distancia de Haversine es menor que la distancia sobre un plano, cuando debido
a la curvatura de la tierra debería de ser mayor.
Muchas gracias de antemano.
Saludos
Hola Rodrigo, acabo de probar las coordenadas y me da una distancia de 274.31 con la formula que he publicado. Muy similar a la de Google Maps en linea recta. Me parece que algo debes de estar haciendo mal que el resultado te está dando distinto.
SELECT dbo.dn_fn_CalculaDistancia(41.50368,-5.743778,41.7636,-2.464921,’M’)
Resultado: 274317.48 metros
SELECT dbo.dn_fn_CalculaDistancia(41.50368,-5.743778,41.7636,-2.464921,’K’)
Resultado: 274.31 kilómetros
Rodrigo,
La formula que tu estas aplicando es sobre dos puntos en un plano cartesiano.
La formula de Roy, es sobre “la tierra” o elipsoide.
Saludos.
Miguel excelente aporte
en que formato te da la respuesta por default, metros, kilometros, millas, radianes??? no esta claro…
El default debe ser Kilómetros, pero el parámetro de unidad métrica es requerido por lo que siempre se debe indicar si se quiere en Kilómetros o Metros
Muchas gracias, me ha sido de bastante ayuda
Que bueno que el articulo te sirvió