Calcular la distancia entre dos puntos por latitud y longitud con una función en SQL Server

8
10107
SQL Server

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)

8 COMMENTS

  1. 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here