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~ |