개발/Mysql
[Mysql] mysql 위도 경도 반경 구하기
wwwnghks
2019. 4. 8. 17:01
Mysql 위도 경도 값 받아서 반경 몇 키로 이내에 데이터가 있는지에 대한 쿼리입니다.
예를들어서 값으로 위도(Latitude) 와 경도(Longitude) 의 값을 받아서 반경 몇키로이내에 나의 DB의 지도데이터를 조회할 수 있는 쿼리입니다.
값으로 받아오는 값을 lat,lon 으로 두겠습니다.
그리고 DB안에 있는 값은 예를 들어
NAME | LATITUDE | LONGTITUDE |
삼성역 | 37.5088652 | 127.060955 |
으로 가정한다.
그리고 값으로 받아오는 값 lat=37.5611326, lon=127.033311으로 가정하겠습니다.(이값은 왕십리역입니다)
select ID,CAST_TIME,(6371*acos(cos(radians(lat))*cos(radians(LATITUDE))*cos(radians(LONGTITUDE)-radians(lon))
+sin(radians(lat))*sin(radians(LATITUDE)))) AS distance
from TEST
having distance < 300
order by distance DESC;
으로 데이터를 검색하면
distance가 해당 이미지 결과로 나온다. 단위는 km이다.
having distance < 300
order by distance DESC
는 생략해도 상관없다.
다만, 예를들어 ~~km이내의 지역을 검색하고 싶을 경우 사용하면 된다.
실제로 왕십리역과 삼성역간의 직선거리는 아래의 이미지와 같다.
얼추 비슷하게 6.31km가 나오는데 이거는 제가 지도에서 너무 대충 찍어서 거리를 재봤기때문에 오차가 약간 있습니다.