반응형
1. 개요
지도에 관한 로직을 짤때 latitude, longitude 위도 경도 값을 구해서 radius, 위도 경도 값 기준으로 주변 5km, 10km의 위도 경도 리스트 또는 거리를 알고 싶을 때가 있습니다.
이러한 로직을 mysql에서 구현할 수 있을까 해서 찾아봤는데 stack over flow에서 친절하게도 작성된 sql이 있더군요.
https://stackoverflow.com/questions/8850336/radius-of-40-kilometers-using-latitude-and-longitude
2. SQL
SELECT
*,
( 6371 * acos( cos( radians({$lat}) ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians({$lng}) ) + sin( radians({$lat}) ) * sin( radians( `lat` ) ) ) ) AS distance
FROM `positions`
HAVING distance <= {$radius}
ORDER BY distance ASC
정확한 공식에 대한 이해는 부족하지만, 위도와 경도를 기준으로 해당 테이블 안에 위도와 경도 중에서 거리가 {$radius}보다 작은 위도 경도 리스트를 출력하는 쿼리라고 생각합니다.
저는 radius를 2로 주었고, 결과는 위와 같이 나옵니다.
반응형
'Database > RDBMS' 카테고리의 다른 글
Maria DB cent os home 경로에 설치하기 (0) | 2021.08.09 |
---|---|
[MySQL] 파티셔닝 자동화 프로시저 코드 (0) | 2021.04.28 |
[MySQL] 파티셔닝 개념 및 사용법 (2) | 2021.04.28 |
[오류해결] MySQL Read Only Table (0) | 2020.08.06 |
[오류해결] MariaDB errno: 150 "Foreign key constraint is incorrectly formed" (0) | 2020.08.06 |