스마트웹앱콘텐츠전문가/데이터베이스

MySQL에서 두 지점 간 거리 계산하는 방법: ST_DISTANCE_SPHERE 완전 정복

9D4U 2025. 4. 9. 11:00
728x90
반응형

MySQL에서 두 지점 간의 거리 계산이 필요할 때 가장 간단하고 빠르게 사용할 수 있는 함수가 ST_DISTANCE_SPHERE입니다. 이 함수는 위도(latitude)와 경도(longitude) 좌표를 기반으로 지구를 구형(Sphere)으로 가정하고 두 지점 사이의 직선 거리(구면 거리)를 미터(meter) 단위로 계산해 줍니다.

 

이 포스트에서는 ST_DISTANCE_SPHERE 함수의 사용법, 예제, 주의사항 등을 상세히 설명하며, 위치 기반 서비스를 개발할 때 어떻게 활용할 수 있는지 소개하겠습니다.

 

 

 

img

 


ST_DISTANCE_SPHERE 함수란?

 

ST_DISTANCE_SPHERE는 MySQL에서 두 지리 좌표 간의 구면 거리를 계산하는 내장 함수입니다. 좌표 간의 거리를 빠르게 계산할 수 있어, 위치 기반 검색 기능(예: 반경 내 매장 찾기, 사용자 주변 음식점 추천 등)에 매우 유용합니다.

 

 

✅ 기본 문법

ST_DISTANCE_SPHERE(point1, point2)
  • point1, point2: 각각 POINT(longitude, latitude) 형식의 좌표.
  • 반환 값: 두 지점 간의 거리 (단위: 미터)

 


예제: 서울과 부산 간의 거리 계산

 

SELECT ST_DISTANCE_SPHERE(
  POINT(126.9780, 37.5665), -- 서울 (경도, 위도)
  POINT(129.0756, 35.1796)  -- 부산 (경도, 위도)
) AS distance_in_meters;

 

💡 결과

대략적으로 325000 미터, 즉 약 325km가 반환됩니다. 이처럼 ST_DISTANCE_SPHERE는 대도시 간 거리나 위치 기반 추천 시스템에서 빠르게 활용될 수 있습니다.

 

 

 


사용 시 주의할 점

 

 

⚠️ 좌표 순서

MySQL의 POINT 함수는 POINT(경도, 위도) 순서로 입력해야 합니다. 흔히 사용하는 (위도, 경도) 형식과 반대이므로 실수하기 쉽습니다.

 

잘못된 예:

POINT(37.5665, 126.9780) -- ❌ 위도 먼저: 잘못된 순서

올바른 예:

POINT(126.9780, 37.5665) -- ✅ 경도 먼저

 

 

⚠️ 정확도 제한

  • ST_DISTANCE_SPHERE는 지구를 완전한 구(Sphere)로 간주합니다.
  • 실제 지구는 타원형이기 때문에 극지방이나 아주 긴 거리 계산에서는 오차가 발생할 수 있습니다.
  • 높은 정확도가 필요한 경우에는 SRID 4326 기반의 ST_Distance 함수를 사용하는 것이 더 적합합니다.

 

 

 

 

 

반응형

위치 기반 서비스에서의 활용 예

 

 

1. 반경 내 매장 검색

SELECT *
FROM stores
WHERE ST_DISTANCE_SPHERE(
  POINT(stores.longitude, stores.latitude),
  POINT(126.9780, 37.5665) -- 현재 사용자 위치
) <= 1000;

→ 위 쿼리는 서울 중심으로부터 반경 1km 이내에 있는 매장을 검색합니다.

 

2. 사용자 간 거리 측정

사용자 간 거리를 빠르게 계산하여, 예를 들어 배달 기사와 고객 간 거리를 실시간으로 파악하거나, 택시 호출 거리 계산에 활용할 수 있습니다.

 

 

 

 

 


ST_DISTANCE_SPHERE vs ST_Distance 차이점

 

항목 ST_DISTANCE_SPHERE ST_Distance

지구 모델 구형 (Sphere) 타원체 (Ellipsoid, 정확도 높음)
단위 미터(m) SRID에 따라 다름
SRID 필요 여부 ❌ 필요 없음 ✅ 필요함
속도 빠름 상대적으로 느림
정확도 보통 (짧은 거리엔 충분히 정확) 높음

 

 

 

 

 


 

 

 

MySQL의 ST_DISTANCE_SPHERE 함수는 위도와 경도를 기반으로 한 거리 계산이 필요한 모든 상황에서 빠르고 간편하게 사용할 수 있는 강력한 도구입니다. 특히 정확도보다 속도가 중요한 위치 기반 서비스에 매우 적합합니다.

하지만 극단적으로 높은 정확도가 필요한 경우에는 ST_Distance + SRID 설정을 활용하는 것이 더 나을 수 있습니다.

728x90