팀 프로젝트로 배달음식점을 소개해주는 웹사이트를 만들고 있다. 식당의 정보는 우리의 db에 직접 저장하는 방법을 사용하지않고 1차 프로젝트를 마쳤었다. 2차 프로젝트에서는 직접 db에 저장해보는게 좋겠다는 조언이 있었다. 식당의 정보를 db에 저장하면서 위치도 함께 저장하여 현재 사용자의 위치에서 가장 가까운 식당을 우선해서 보여주는 기능을 만들고자 하였다. 우리가 수집할 수 있는 정보는 사용자와 식당의 위도,경도 이다. 사용자의 위치는 Geolocation API를 이용하여 받아올 수 있고, 식당의 위치는 식당정보에 포함되어있기때문에 거리계산이 가능하다면 구현할 수 있을것 같다.
그래서 알게 된 파이썬 라이브러리가 'harversine'이다.
하버사인 공식은 경도와 위도를 고려하여 구의 두 점 사이의 원거리를 구할 때 사용하는 공식이다. 그러나 찐문과인 나로서는 이해가 되지 않았는데 정말 감사하게도 파이썬에서 제공해주는 haversine 라이브러리는 저런 공식을 몰라도 사용하는데에 지장이 없다.
파이썬 말고 다른 언어로도 구현이 가능하지만 다른 언어들은 파이썬에 비해 훨씬 복잡한 방법으로 계산을 해야했기때문에 파이썬으로 테스트 해보았다.
두 지점의 위도,경도 값만 있으면 쌉가능이다.
먼저 패키지를 설치해주고
$ pip install haversine
라이브러리를 import해준다
from haversine import haversine
다음으로 A,B 라는 임의의 두 지점이 있을때,
A = (latitude_A, longitude_A) #꼭 tuple 형태로 선언해주세요
B = (latitude_B, longitude_B)
멋쟁이 함수를 소환해준다
harversine(A, B)
기본값이 km 이기 때문에 변환은 필요없지만 혹시나 다른 단위로 보고싶다면
harversine(A, B, unit = 'mi')
이렇게 작성해주면 수학공식을 1도 모르는 문과도 거리를 계산해 낼 수 있다.
단위 | 작성법 |
MILES | mi |
KILOMETERS | km |
METERS | m |
FEET | ft |
INCHES | in |
NAUTICAL_MILES | nmi |
unit 뒤에 단위만 붙여주면 간단한 방법으로 다양한 단위를 볼 수 있다는게 큰 장점인것 같다.
하버사인을 이용해 도출된 값을 이용하여 프로젝트에 이용해보는건 추후에 도전해보려한다.
지금의 계획은 DB에 저장되어있는 식당들을 반복문으로 돌려서 현재위치와 비교해서 5km이내의 식당만 저장 후 먼저 띄워주면 어떨까 생각중인데 생각처럼 잘 구현할 수 있을지 모르겠다.
내일의 걱정은 내일 하는 걸로 하고 오늘의 걱정은 여기서 끝!
뭘 알고 뭘 모르는지 항상 체크할 것.