¡Hola, chicos!
En esta publicación, te demostraré cómo calcular la distancia entre dos ubicaciones usando latitud y longitud (sin API). En marzo de 2017, demostré cómo hacer esto usando la API de Google Maps, en la publicación SQL Server – Cómo calcular la distancia entre dos puntos usando la API de Google (CEP, dirección o latitud y longitud), pero en la publicación de hoy, la distancia se calculará solo usando matemáticas y geometría.
Este cálculo, en lugar de utilizar una API, puede resultar especialmente útil para calcular la distancia entre un gran volumen de puntos geográficos (la API de Google tiene limitaciones en el número de consultas por día, en el plan gratuito).
Es importante señalar que el cálculo sin API considera una línea recta entre los 2 puntos, mientras que la API de Google tiene en cuenta rutas y recorridos, según el medio de transporte elegido, los cuales pueden presentar valores más cercanos a los reales, según la necesidad, y muy diferentes al cálculo geométrico.
Introducción
Como sabes, las medidas que utilizamos actualmente para identificar la ubicación geográfica de un punto del globo son la latitud y la longitud, las cuales se pueden expresar de dos formas:
- Latitud: -20.3222, Longitud: -40.3381
- 20° 19′ 20″ Sur, 40° 20′ 17″ Oeste
Nuestra posición en la Tierra está referenciada en relación con el ecuador y el meridiano de Greenwich y se expresa en dos valores: latitud y longitud. Entonces, para saber nuestra posición en la Tierra, sólo necesitamos saber la latitud y la longitud.
La latitud es la distancia al ecuador medida a lo largo del meridiano de Greenwich. Esta distancia se mide en grados y puede variar entre 0º y 90º para el Norte (N) o el Sur (S). La longitud es la distancia al meridiano de Greenwich medida a lo largo del ecuador. Esta distancia se mide en grados y puede variar entre 0º y 180º para Este(E) u Oeste(O).
Para identificar la latitud y longitud de una ubicación, puede utilizar varias formas. Uno de ellos utiliza Google Maps, como se muestra a continuación:
Calcular la distancia entre dos latitudes y longitudes.
Para realizar este cálculo, usaré el fórmula de Haversina, importante ecuación utilizada en navegación, que proporciona distancias entre dos puntos de una esfera en función de sus latitudes y longitudes, teniendo como base matemática la Ley de los Cosenos, considerando en el modelo la curvatura de la Tierra, es decir, su radio, el cual tiene un valor aproximado de 6,371 km o 3,959 millas.
Para demostrar este cálculo, usaré la latitud y longitud que envié en el ejemplo anterior (Shopping Vitória / -20.3135958, -40.2893737) y las compararé con las coordenadas de Shopping Vila Velha (-20.3480338, -40.2975204) usando la función propuesta en este artículo, que devolverá la distancia entre los dos puntos en KM.
SELECT dbo.fncCalcula_Distancia_Coordenada(-20.3135958, -40.2893737, -20.3480338, -40.2975204)
Comparando con Google Maps, podemos ver que la distancia calculada es muy cercana:
El código para esta función está disponible aquí:
CREATE FUNCTION dbo.fncCalcula_Distancia_Coordenada (
@Latitude1 FLOAT,
@Longitude1 FLOAT,
@Latitude2 FLOAT,
@Longitude2 FLOAT
)
RETURNS FLOAT
AS
BEGIN
DECLARE @PI FLOAT = PI()
DECLARE @lat1Radianos FLOAT = @Latitude1 * @PI / 180
DECLARE @lng1Radianos FLOAT = @Longitude1 * @PI / 180
DECLARE @lat2Radianos FLOAT = @Latitude2 * @PI / 180
DECLARE @lng2Radianos FLOAT = @Longitude2 * @PI / 180
RETURN (ACOS(COS(@lat1Radianos) * COS(@lng1Radianos) * COS(@lat2Radianos) * COS(@lng2Radianos) + COS(@lat1Radianos) * SIN(@lng1Radianos) * COS(@lat2Radianos) * SIN(@lng2Radianos) + SIN(@lat1Radianos) * SIN(@lat2Radianos)) * 6371) * 1.15
END
Cabe mencionar que al valor le agregué un porcentaje de ajuste del 15% para acercar la distancia a la real.
¡Eso es todo, amigos!
Espero que te haya gustado esta publicación.
Un abrazo y hasta la próxima.




Comentários (0)
Carregando comentários…