DB/SQL
[MYSQL] 위도와 경도로 가장 가까운 최단거리 구하기, 하버사인 공식(Haversine formula)
카제인나트륨.
2024. 10. 18. 21:51
728x90
반응형
하버사인 공식 (Haversine Formula)
하버사인 공식은 두 지점 간의 구면상에서의 거리를 계산하기 위한 수학적 공식입니다. 이는 지구와 같은 구형 표면에서 두 점 사이의 최단 거리를 구할 때 매우 유용합니다. 특히 위도와 경도로 나타낸 GPS 좌표를 기반으로 거리를 계산하는 데 많이 사용됩니다.
본론
하버사인 공식을 SQL로 구현하여 두 지점 사이의 최단거리를 구할 수 있습니다. 이 공식은 지구의 구형 구조를 기반으로 하여 위도와 경도를 사용해 두 위치 간의 거리를 계산합니다. SQL에서 하버사인 공식을 사용하려면 각 지점의 위도와 경도를 라디안으로 변환하고, 삼각함수를 사용하여 거리를 계산합니다.
아래는 두 지점 간의 최단거리를 계산하는 하버사인 공식의 SQL 쿼리 예시입니다. 이 쿼리에서는 latitude와 longitude를 사용하여 두 지점 간의 거리를 킬로미터 단위로 계산합니다.
SELECT
store_id, -- 상점 ID 또는 상점 식별자
(6371 * acos(
cos(radians(:latitude)) * cos(radians(latitude)) *
cos(radians(longitude) - radians(:longitude)) +
sin(radians(:latitude)) * sin(radians(latitude))
)) AS distance
FROM stores
HAVING distance < :max_distance
ORDER BY distance;
설명:
- :latitude와 :longitude는 사용자의 현재 위치의 위도와 경도입니다.
- 6371은 지구의 평균 반지름(킬로미터 단위)입니다.
- acos, cos, sin, radians 등의 삼각 함수는 두 지점 간의 거리를 계산하는 데 사용됩니다.
- stores 테이블은 각 상점의 위도(latitude)와 경도(longitude)를 포함하고 있어야 합니다.
- HAVING distance < :max_distance는 사용자가 원하는 거리 내에 있는 상점만 필터링합니다. (선택 사항)
- ORDER BY distance는 가까운 순서대로 결과를 정렬합니다.
이 쿼리를 사용하면 사용자의 GPS 좌표와 데이터베이스에 저장된 상점의 좌표를 비교하여 가장 가까운 상점을 찾을 수 있습니다.
728x90
반응형