OpenStreetMap(이후 OSM)을 활용해 배차 스케쥴에 필요한 자동차 이동거리 측정에 활용하고 있다. 구글맵이나, 카카오맵이나 T맵등을 활용하기 위해 여러 비교를 해보았지만 장거리 운행을 하는 차량들에는 그 정확도가 크게 영향을 미치지 않아 OSM 만으로도 충분한 효과를 볼 수 있다.
배차를 위해서는 차량들의 배송지 방문 스케쥴을 만들어 내야하는데 어떤 순서로 방문할 지 어떻게 배분할 지를 결정하는 가장 중요한 정보는 Disance Matrix라고 할 수 있다. 이 Disance Matrix를 빠르게 계산해주는 Openrouteservcie라는 서비스가 있어 소개한다.
우선, https://openrouteservice.org/ 를 방문하여 사용해볼 수 있다. 간단한 테스트는 이 서비스를 통해 할 수 있지만 사용하다보면 무료 보전으로 조회할 수 있는 양이 한정되어 있다는 것을 알 수 있다. (https://openrouteservice.org/plans/). 하지만 자세히 들여다 보면 On-Premise 설치 가능한 버전이 있어서 원하는 대로 마음껏 활용할 수 있는 방법이 있다.
심지어 해당 서비스에 접근하기 용이하도록 SDK도 준비가 되어 있다. 다음의 링크를 따라 설치 안내에 따라 설치해보면 금방 내가 사용하는 장비에서 잘 동작하는 서비스를 확인할 수 있다. 안내가 약간 부족하긴 해서 보완하자면 먼저 github repository를 클론한 뒤 안내를 따라해야한다. https://github.com/GIScience/openrouteservice
서비스가 잘 뜨는 것이 확인이 되면 아마 한국의 지리 정보가 없어서 한국내 정보 조회가 안된다는 것을 눈치챌 수 있다. 한국 지리 정보는 https://tiles.osm.kr/download/을 방문하여
south-korea-latest-non-military.osm.pbf 를 다운받아 원하는 위치에 두고 docker/docker-compose.yml 을 다음과 같이 수정해준다.
왼쪽이 다운 받은 직후의 yml 파일, 오른쪽이 내가 수정한 내용이다. 총 수정한 부분이 세 곳인데 이 중 마지막 부분은 처음 한국 지도로 서버상에 graph를 빌드하도록 하는 옵션이므로 서버를 재 시작할 때는 False로 바꾸는 것이 서버 시작에 도움이 되므로 이 값은 반복되는 server survival에는 신경써줄 필요가 있다.
서버 survival 관리는 다음과 같이 간단하게 할 수 있다.
지금까지 써 본 바로는 매우 만족스럽다. 이 서비스가 아니라면 일일이 osmnx나 networkx로 매트릭스를 계산해 내야하지만 이 서버가 제공하는 api만으로 쉽고 빠르게 계산이 완료된다. 국내 정확한 정보를 제공할 것 같은 서비스를 이용하지 않고 약간은 불안한 오픈소스(?)를 사용하는 이유는 다음과 같다고 할 수 있다.
가성비에 있어서는 가장 우위에 있다고 볼 수 있다!
주소지를 DB에 입력해서 출발지, 목적지 지도를 그리고, 다시 그데이타를 불러와서 지도를 그리는데 주소지의 위도와 경도를 찾을수 없다는 에러가 납니다. 지도를 그리기 전에 주소지를 검증하는 부분을 추가하려는데 아시나요? 아직 테스트단계라 수원역, 사당역, 이런 데이타들이 많습니다. 조언 부탁드립니다.