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가 나오는데 이거는 제가 지도에서 너무 대충 찍어서 거리를 재봤기때문에 오차가 약간 있습니다.

 

+ Recent posts