YS's develop story

MySQL ) 위도 경도를 활용하여 거리 계산하는 구문 작성하기 본문

Database/MySQL

MySQL ) 위도 경도를 활용하여 거리 계산하는 구문 작성하기

Yusang 2021. 1. 28. 18:30

MySQL 위도 경도를 활용해서 거리를 계산하는 구문을 작성해 봅시다.

 

위도, 경도를 저장하기 위한 자료형으로 decimal이 적합합니다.

decimal(18,10)에서 18은 전체 자릿수, 10은 소수점 자릿수를 뜻합니다.

즉 소수점 10자리까지 숫자를 표현한다는 이야기입니다.

 

Cafe라는 테이블에

cafeLatitue 칼럼에 목표지점 위도

cafeHardness 칼럼에 목표지점 경도를 저장하고 있습니다.

(아무 생각 없이 경도를 영어사전에 치고 나온 결과를 변수로 지정했는데

Hardness는 딱딱한 정도를 나타내는 뜻인 '경도'의 영단어입니다....

여기서 사용하는 뜻인 경도는 영어로 longitude가 맞습니다... 아무 생각 없이 하다가 이런 부끄러운 실수를 했네요...

)

 

User라는 테이블에는

userLatitue 칼럼에 현재 지점 위도

userHardness 칼럼에 현재 지점 경도를 저장하고 있습니다.

 

위도 경도를 구하는 법은..

구글 지도에 구하고자 하는 위치를 검색하고, 주소를 보면 이런 식으로 위도 경도가 나와있습니다.

첫 번째가 위도, 두 번째가 경도입니다.

 

이제 아래와 같이 쿼리문을 작성하면 됩니다.

userLatitue에는 현재 위도, userHardness에는 현재 경도

cafeLatitue에는 목표 위도, cafeHardness에는 목표 경도

 

HAVING distance 쿼리를 사용하게 되면 특정 값 이하만 출력되게 할 수 있습니다.

HAVING distance <= 5라고 설정을 하면 5킬로 이하 값만 출력되는 것입니다!

SELECT

    (6371*acos(cos(radians(userLatitude))*cos(radians(cafeLatitude))*cos(radians(cafeHardness)

    -radians(userHardness))+sin(radians(userLatitude))*sin(radians(cafeLatitude))))

    AS distance

FROM Cafe,User

-- HAVING distance <= (이 값을 지정하면 특정거리 이하만 출력하게 할 수 있음)

ORDER BY distance;

 

쿼리를 실행하면 아래와 같이 결괏값이 나오게 되고

 

구글 지도에서 실제로 거리를 측정하면 정말 신기하게도 같은 값이 나옵니다.

 

Comments