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
반응형