위도 사이의 거리를 비교하여 시작하십시오. 각 위도는 약 111km (69 마일) 떨어져 있습니다. 범위는 (지구의 약간 타원체 모양으로 인해) 적도에서 110.567km (68.703 마일)에서 극에서 69.407 (111.699km)까지 다양합니다. 두 위치 사이의 거리는 위도 사이의 거리와 같거나 더 큽니다.
경도의 경우에는 해당되지 않습니다. 각 경도의 길이는 위도에 따라 다릅니다. 그러나 데이터가 특정 지역 (예 : 단일 국가)에 한정된 경우 경도에 대한 최소 및 최대 경계도 계산할 수 있습니다.
계속하면 구형 지구를 가정하는 낮은 정확도의 빠른 거리 계산이 수행됩니다.
좌표가 {lat1, lon1} 및 {lat2, lon2} 인 두 점 사이의 대원 거리 d는 다음과 같이 지정됩니다.
d = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
단거리에서 반올림 오차가 덜 발생하는 수학적으로 동등한 공식은 다음과 같습니다.
d = 2*asin(sqrt((sin((lat1-lat2)/2))^2 +
cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))
d는 라디안 단위의 거리입니다.
distance_km ≈ radius_km * distance_radians ≈ 6371 * d
(6371km 는 지구의 평균 반경입니다. )
이 방법 계산 요구 사항은 미미합니다. 그러나 결과는 작은 거리에서 매우 정확합니다.
그런 다음 주어진 거리에 있으면 더 정확한 방법을 사용하십시오.
Vincenty 역 공식 도 사용할 수 있지만 GeographicLib 는 내가 아는 가장 정확한 구현 입니다.
RDBMS를 사용하는 경우 위도를 기본 키로 설정하고 경도를 보조 키로 설정합니다. 위에서 설명한대로 위도 범위 또는 위도 / 경도 범위를 쿼리 한 다음 결과 집합에 대한 정확한 거리를 계산합니다.
모든 주요 RDBMS의 최신 버전은 기본적으로 지리적 데이터 유형 및 쿼리를 지원합니다.