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가 나오는데 이거는 제가 지도에서 너무 대충 찍어서 거리를 재봤기때문에 오차가 약간 있습니다.
'개발 > Mysql' 카테고리의 다른 글
[Mysql] Count(*) 느릴때 검색속도 개선 (0) | 2019.05.17 |
---|---|
[Mysql] truncated incorrect double value 에러 (0) | 2019.04.19 |
[Mysql] Every derived table must have its own alias 에러 (0) | 2019.04.18 |
[Mysql] UNION과 UNION ALL 차이점 (0) | 2019.04.18 |
[Mysql] 다중 테이블 조회 (0) | 2019.04.18 |