Empiece por comparar la distancia entre latitudes. Cada grado de latitud se encuentra a aproximadamente 111 kilómetros (69 millas) de distancia. El rango varía (debido a la forma ligeramente elipsoide de la Tierra) de 68.703 millas (110.567 km) en el ecuador a 69.407 (111.699 km) en los polos. La distancia entre dos ubicaciones será igual o mayor que la distancia entre sus latitudes.
Tenga en cuenta que esto no es cierto para las longitudes: la longitud de cada grado de longitud depende de la latitud. Sin embargo, si sus datos están limitados a un área (un solo país, por ejemplo), también puede calcular los límites mínimo y máximo para las longitudes.
Continuará con un cálculo de distancia rápido y de baja precisión que asume tierra esférica:
La distancia d del gran círculo entre dos puntos con coordenadas {lat1, lon1} y {lat2, lon2} viene dada por:
d = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
Una fórmula matemáticamente equivalente, que está menos sujeta a errores de redondeo para distancias cortas es:
d = 2*asin(sqrt((sin((lat1-lat2)/2))^2 +
cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))
d es la distancia en radianes
distance_km ≈ radius_km * distance_radians ≈ 6371 * d
(6371 km es el radio promedio de la tierra )
Los requisitos computacionales de este método son mínimos. Sin embargo, el resultado es muy preciso para distancias pequeñas.
Luego, si está a una distancia determinada, más o menos, utilice un método más preciso.
GeographicLib es la implementación más precisa que conozco, aunque también se puede usar la fórmula inversa de Vincenty .
Si está utilizando un RDBMS, configure la latitud como clave principal y la longitud como clave secundaria. Consulte por un rango de latitud, o por un rango de latitud / longitud, como se describe anteriormente, luego calcule las distancias exactas para el conjunto de resultados.
Tenga en cuenta que las versiones modernas de los principales RDBMS admiten consultas y tipos de datos geográficos de forma nativa.