차근차근/SQL

[mysql] 위도, 경도 활용한 좌표간의 거리 구하는법, lng, lat 가지고 좌표 근방 위치 구하기.

예쁜꽃이피었으면 2016. 10. 17. 13:53



[mysql] 위도, 경도 활용한 좌표간의 거리 구하는법, lng, lat 가지고 좌표 근방 위치 구하기.


http://www.php5.me/blog/mysql-%EC%9C%84%EB%8F%84-%EA%B2%BD%EB%8F%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%A2%8C%ED%91%9C%EA%B0%84%EC%9D%98-%EA%B1%B0%EB%A6%AC-%EA%B5%AC%ED%95%98%EB%8A%94%EB%B2%95-lng-lat-%EA%B0%80%EC%A7%80%EA%B3%A0/



지구 반지름 6371


코사인 라디안스 에이코사인 사인 등 활용해서 값 계산. ㅇㅇ


설명에 적어놓은데로 빨간색 위치만 바꾸면 된다.


SELECT 가져올컬럼,


(6371*acos(cos(radians(lat좌표값))*cos(radians(slLat))*cos(radians(slLng)


-radians(lng좌표값))+sin(radians(lat좌표값))*sin(radians(slLat))))


AS distance


FROM 대상테이블


HAVING distance <= 거리


ORDER BY distance 


LIMIT 0,1000


관대한 쿼리…


안의 값만 바꾸면 됨.


가져올 컬럼은 뒤에 , 를 붙일것;


id, column, test, 등 뒤에 가져오는게 계산식으로 해서 AS distance 로 되어있으니까..ㅇㅇ


거리 작성시 1 = 1km 다. 1500m 는 어떻게 쓰냐? 1.5 쓰면 됨. ㅇㅇ



그럼


저 뽑아진 결과값에 distance 값이 나오는데


저게 바로 해당 좌표와 대상 필드의 거리임. ㅇㅇ


놀랍지않은가


난 php 에 mysql (heroku cleanDB 활용) 해서 작업했고


속도는 별반 느리지않다.


다음엔 nosql 인 mongodb 활용해서 좌표 index 가지고 해봐야지


ㅇㅇ





SELECT *,


(6371*acos(cos(radians(37.5766831))*cos(radians(LATITUDE))*cos(radians(LONGITUDE)


-radians(126.8978620))+sin(radians(37.5766831))*sin(radians(LATITUDE))))


AS distance


FROM SHOP


HAVING distance <= 2


ORDER BY distance


LIMIT 0,100


난 이렇게 사용





검색어 : 위경도 좌표 , mysql 


http://구글 위경도 좌표 테이블에서 거리를 계산하는 MySql쿼리=> MSSql 변환 문의


[Java] 경위도 좌표 거리계산 (두 지점간의 거리)

http://fruitdev.tistory.com/189



반응형