google-maps - 유료 - 스트리트뷰 여자




지도 라우팅, 라 Google지도? (6)

오픈 거리지도 프로젝트 를보고 사용자가 제공하고 라이센스가 부여 된 데이터만을 사용하는 진정한 자유 소프트웨어 프로젝트에서 이런 종류의 일이 어떻게 다루어지고 있는지 알아보고 재미있는 자료가 담긴 위키가 있는지 확인하십시오 .

몇 년 전에는 꽤 쉬운 곳으로 가서 내가 가진 많은 질문에 답했습니다. 그래서 그들은 여전히 ​​좋은 무리가 아닌 이유를 볼 수 없었습니다.

나는 Map Routing에 항상 흥미를 느끼지 만, 좋은 입문 (또는 고급!) 수준의 튜토리얼을 발견하지 못했습니다. 아무도 포인터, 힌트 등을 가지고 있습니까?

업데이트 : 저는 주로지도 시스템이 어떻게 구현되는지 (데이터 구조, 알고리즘 등)에 대한 포인터를 찾고 있습니다.


Gmaps, Ymaps API와 같은 각지도 서비스 제공 업체에 API를 배우는 대신 Mapstraction을 배우는 것이 좋습니다.

"Mapstraction은 다양한 자바 스크립트 매핑 API에 공통 API를 제공하는 라이브러리입니다."

URL로 이동하여 일반 API를 배우는 것이 좋습니다. How-Tos도 적당합니다.


아직 라우팅에 관한 좋은 지침서를 찾지 못했지만 읽을 코드가 많이 있습니다.

Windows (+ mobile) 및 Linux에서 작동하는 Gosmore 와 같이 Openstreetmap 데이터를 사용하는 GPL 라우팅 응용 프로그램이 있습니다. 흥미로운 [응용 프로그램은 동일한 데이터를 사용하지만, gosmore는 웹 사이트 인터페이스와 같은 멋진 사용법을 가지고 있습니다.

라우팅의 가장 큰 문제점은 불량 데이터이며, 충분한 데이터를 얻지 못합니다. 따라서 테스트를 매우 로컬로 유지하면 데이터를보다 잘 제어 할 수 있습니다.


A *는 실제로 생산 매핑 알고리즘에 훨씬 가깝습니다. Dijikstra의 독창적 인 알고리즘과 비교하면 훨씬 적은 탐사가 필요합니다.


이 분야에서 일한 경험으로 A *는 그 일을 아주 잘합니다. Dijkstra의 알고리즘보다 (위에서 언급 한) 더 빠르지 만, 일반적으로 유능한 프로그래머가 구현하고 이해하기에 충분히 간단합니다.

경로 네트워크 구축은 가장 어려운 부분이지만 일련의 간단한 단계로 나눌 수 있습니다. 점들을 순서대로 정렬하십시오; 교차로 (마디)로 다른 도로에 동일한 점의 그룹을 만드십시오; 노드가 연결되는 양방향 (또는 단방향 도로에만 한 방향)에 호를 추가합니다.

A * 알고리즘 자체는 Wikipedia에서 잘 설명되어 있습니다. 최적화 할 핵심 위치는 개방형 목록에서 최상의 우선 순위 큐가 필요한 최상의 노드를 선택하는 것입니다. C ++을 사용한다면 STL priority_queue 어댑터를 사용할 수 있습니다.

호 스피드, 거리 또는 기타 기준에 따라 네트워크의 다른 부분 (예 : 보행자, 자동차, 대중 교통 등)을 대상으로 알고리즘을 사용자 정의하는 것은 매우 쉽습니다. 사용할 수있는 경로 세그먼트를 제어하고 네트워크를 구축 할 때 각 세그먼트에 할당 된 가중치를 제어하는 ​​필터를 작성하면됩니다.


또 다른 생각은 각 탐색의 비용과 관련하여 발생하지만 계산에 필요한 시간과 처리 능력이 증가합니다.

예 : GoogleMaps에 따라 A 지점에서 B 지점으로 이동할 수있는 3 가지 방법 (내가 사는 곳)이 있습니다. Garmin 부대는 Quickest 경로 계산에서이 3 가지 경로 각각을 제공합니다. 이러한 경로를 여러 번 통과 한 후 평균 (분명히 시간, 카페인의 양에 따라 오차가있을 것입니다) 알고리즘은 고도의 정확성을 위해 도로의 굴곡 수를 고려할 수 있다고 생각합니다 예를 들어 1 마일의 직선 도로가 날카로운 굴곡이있는 1 마일 도로보다 빠릅니다 . 실용적인 제안은 아니지만 확실하게 매일 매일의 출퇴근 결과 세트를 향상시키는 데 사용합니다.





gis