개발/MySQL

[MySQL] 좌표 사이 거리 구하기 (+ 반경 내 좌표 조회)

품파파품파 2021. 1. 9. 18:28

MySQL DB에 저장되어있는 위도(latitude), 경도(longitude) 데이터를 사용해 지도 상의 두 좌표 간 거리를 구하고자 한다면 st_distance_sphere 함수를 사용하자!

 

st_distance_sphere (좌표1, 좌표2) -> 두 좌표간 거리(단위: m)

 

각 좌표는 POINT값이어야 하며 POINT 값 설정 시 경도, 위도 순으로 입력해야함

-> POINT(longtidue, latitude)

 

 

주어진 테이블
Subway

station longitude latitude 
영등포역 126.9052383 37.5157702
신도림역 126.8890174 37.5088141
대림역 126.8927728 37.4925085
신촌역 126.9347011 37.5551399
여의도역 126.9221228 37.5215737

 

나의 현재 위치

영등포 타임스퀘어
위도(latitude):  37.5170112
경도(longitude): 126.9019532

 

Ex1. 현재 위치에서 신촌역 사이의 거리 구하기

SQL 쿼리문
SET @location = POINT(126.9019532, 37.5170112);

SELECT station,
ST_Distance_Sphere(@location, POINT(longitude, latitude) AS distance
FROM Subway
WHERE station = "신촌역";

 

결과
station distance
신촌역 5129.6070~

영등포 타임스퀘어에서 신촌역 사이의 거리는 5129m, 즉 5.12km이다.

 

 

Ex2. 현재 위치에서 반경 2Km 안의 지하철 역 가까운 순서대로 찾기

 

SQL 쿼리문
SET @location = POINT(126.9019532, 37.5170112);

SELECT station,
ST_Distance_Sphere(@location, POINT(longitude, latitude) AS distance
FROM Subway
WHERE ST_Distance_Sphere(@location, POINT(longitude, latitude) <= 2000
ORDER BY distance;

 

결과
station distance
영등포역 320.9197~
신도림역 1460.3304~
여의도역 1849.7659~