일반 사용자용으로 [주변 자전거 코스 검색 + 네비 연동] 기능을 구현하고 있습니다.
제가 생각하는 자전거 코스란, 스트라바 세그먼트 중 "긴 코스" 들을 생각하시면 될 거 같습니다. 개념입니다. 대략 5~15km 정도의 달리기 좋은 길 개념을 생각하시면 될 거 같습니다. 남산, 북악 같은 언덕 코스나 남한강 자전거길 같은 코스도 있고요. 언덕 하나만 올라가는 5km 이내 코스는 그 전후까지 포함해서 5km 정도로 코스를 생각하고 있고요.
그런데 해당 컨텐츠를 넣고 편집하기 위해서는 [컨텐츠 생산자]의 효율성을 생각하지 않을 수가 없더군요 ㅠㅠ
결국 컨텐츠를 만들기 위한 도구를 만들 필요를 느껴 코스 에디터를 만들고 있습니다 ㅠㅠ
이전에 위치 좌표 리스트를 기반으로 코스를 일괄 입력/출력하는 기능까지 구현해 놨는데요.
이걸 웹 인터페이스로 스트라바 코스 탐색기 + 에디터 형태로 구현해보려고 하는데...
쉽지 않네요 ㅠㅠ
이게 만들어져야 코스 데이터를 입력해서 쓸만한 서비스가 될 수 있을 텐데 말입니다.
bicyclemap.co.kr 사이트의 경우 저번 주말에 잠깐 내부 보완 과정을 거쳐서 이번주 수요일 정도에 다시 열어놨습니다.
봇들이 와서 건드리는 통에 문제가 많았는데요. 이번에 봇 차단을 위한 약간의 편법을 해 놔서 이제 좀 쓸만한 상태가 된 듯 합니다.
현재 해당 사이트의 네비게이션 기능은
http://bicyclemap.co.kr/myCycleOSM/navi/
위 링크에서 쓰실 수 있고요.
사용법은 아래와 같습니다.
1. 아래와 같은 초기 화면이 나옵니다
볽은 윤곽선 정도가 현재 검색 가능한 영역의 한계입니다. 아주 정확하지는 않아서 중간중간 빈 곳도 좀 있습니다 ㅠㅠ (북한 같은 곳이요)
2. 초기 페이지에서 [핀 두개를 시작점/목적지로 드래그] 하시면 버튼이 활성화 됩니다.
3. 네비게이션 버튼 두개 중 하나를 누릅니다
- 좌측 버튼 [= Navigate]는 빠르지만 매우 개략적인 경로만을 보여줍니다.
대략 1~5km마다 주요 포인트(갈림길)만 찍어준다고 보시면 됩니다.
보통 1~5초 정도면 검색이 완료 될 것입니다.
- 우측 버튼 [=Navigate in Detail (Takes very long time)]의 경우 실제 주행 경로를 세밀하게 보여줍니다.
기본적으로 위 버튼으로 나타난 경로의 주요 꼭지점을 잇는 실제 길이라고 보시면 됩니다.
해당 버튼은 시간이 매우 오래 걸립니다. 내부 알고리즘의 최적화가 현재 개판이라서요 ㅠㅠ
(파이썬 기반에 루프문 쪽을 좀 대충 짜다보니... 이렇네요.)
대략 10~15초 정도 생각하시면 될거에요.
4. 검색 결과를 감삼합니다.
두 버튼의 결과는 사실 수준 차이가 매우 큽니다 ㅠㅠ
비교하면 아래와 같습니다.
- 빠른 네비 [Navigate] 결과
뭔가 자전거길을 많이 벗어나는 거 같기도 하고 이상하게 보이실 겁니다.
- 세부 네비 [Navigate in Detail] 결과
위 정보가 실제 사용자에게 안내될 길 경로입니다.
대충 보시면 가는 길의 개략적인 경로는 그럭저럭 자전거길을 따라가는 편입니다.
김포 근처에서 살짝 한강을 벗어나는 부분이 있긴 합니다만... 그래도 잘 따라가는 거 같네요.
사실 [Navigate] 버튼의 출력물은 아래 그럼처럼 대축적 상태에서 보여지게 될 정보입니다.
이 상태에서 줌을 확대하면 [Navigate in detail]에 보이는 경로로 살을 붙여서 보여주는 형태로 구현하려고 합니다...만 JavaScript 기반 AJAX 배우는게 지지부진해서 (사실 다른 일도 하는게 있다보니 ㅠㅠ) 구현을 못 하고 있네요. 코스 에디터가 더 중요하기도 하고요.
현재 길찾기 알고리즘은
- 자전거 전용도로를 최우선으로 (1순위)
- 고속도로나 왕복 8차선급 준 고속도로/대로는 회피 (제외)
- 자전거 겸용도로나 왕복 4차선급 도로는 선호(2순위)
- 왕복 2차선급 도로는 보통 선호 (3순위)
- 골목길 등은 비선호 (4순위)
정도로 계산하고 있습니다.
5. 문제가 발생했을 때에는?
검색 했을 때 Page not found가 뜰 경우, 해당 경로 사이의 길을 발견하지 못한 경우입니다.
붉은 구역 안이지만 길이 없는 지역이거나, 사이의 이어진 길을 못 찾았거나, 내부 연산량이 많아서 중간에 포기한 경우라고 보시면 됩니다.
- 버튼을 누르고 바로 에러가 뜬 경우라면?
시작/목적지 근처에 길이 없을 경우가 많습니다.
이 경우 시작/목적지 지점을 조금 더 서로 가까운 위치로 옮기시면 보통 검색이 됩니다.
- 버튼을 누르고 약간의 시간 (3초 혹은 그 이상)이 지나고 에러가 뜬 경우라면?
길 찾다가 포기한 케이스 입니다. 두 점 사이에 길은 있으나, 이어지지 않은 경우에 이런 문제가 생깁니다.
내부 DB의 문제일 수도 있고요. ㅠㅠ
조금 더 쓸만한 컨텐츠가 생기면 다시 홍보(?)하러 글 쓰겠습니다 ㅎㅎ
지원되는 지역이 더 많아지면 확실히 쓸만할 것 같습니다!
대상 지역 넓히는건 사실 어렵지 않습니다. 사실 지금 당장도 넓힐수는 있는데요... 다만, 아무래도 DB 크기가 좀 커지는 경향이 있고, 경로 학습에 들어가는 시간이 좀 길어지는지라... 아직 테스트 과정이라 서울 주변만 하고 있습니다.
추후 최적화가 좀 더 되면 넓힐 생각을 하고 있습니다.
현재 AWS EC2 무료 티어 사용중인데요. DB 때문에 무료 기본에서 디스크 용량 정도만 추가해서 쓰는 상황입니다 ㅠㅠ