반응형

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