2014-02-16 3 views
0

Openstreetmap을 사용하여 사용자 지정 라우팅 응용 프로그램을 개발하고 있습니다. 이렇게하려면 오버 패스와 같은 Openstreetmap API를 사용하여 특정 경계 상자의 노드와 가장자리를 읽어야합니다 (적어도). 그 후에 노드와 에지를 처리하고 라우팅 알고리즘을 적용합니다. 내 주요 문제는이 경계 상자의 크기를 결정하는 것입니다.Openstreetmap 라우팅 알고리즘에서 경계 상자 크기 결정

원본 노드와 대상 노드를 포함하는 큰 경계 상자를 읽고 그 안에 모든 노드와 가장자리를 처리하는 것이 한 가지 방법이지만 과도하게 보이며 API에서 긴 로딩 시간이 소요됩니다. 게다가 이것은 우리가 필요한 모든 길을 확보 할 수있는 방법이 아닙니다.

또 다른 방법은 원점 노드 주변의 작은 경계 상자를 읽고 거기에서 라우팅 알고리즘 (Dijkstra라고 함)을 시작하고 필요한 경우지도의 새 부분을 읽고 처리합니다. 이 접근법은 API 서버에 여러 번 호출해야하며 시간이 걸릴 수도 있습니다.

OSM 라우팅 응용 프로그램에서 이러한 두 가지 방법 중 하나가 일반적인지 또는 다른 방법이 더 좋은지 알고 있습니까?

답변

1

당신의 접근 방식은 매우 드문 일이므로 권장하지 않습니다. 일반적으로 OSM 데이터베이스의 로컬 복사본이 있습니다. planet 또는 extract (예 : 국가).

이 데이터를 실시간으로 가져 오는 것은 정말 나쁜 생각이며 많은 문제가 발생할 것입니다. API는 실제로 그런 무거운 쿼리를 지원할 준비가되어 있지 않습니다. 장거리에서는 수백 메가 바이트의 데이터를 처리해야합니다. 또한 경로를 빨리 계산할 수 있기를 원하면 원시 데이터를 사전 처리해야합니다.

로컬 데이터베이스를 설치하려면 switch2osm을 읽는 것이 좋습니다. guide about building a tile server이 있습니다. Mapnik, mod_tile, renderd 등을 설치하지 마십시오.

+1

+1하지만 타일링 서버는 라우팅에 많은 도움이되지 않습니다. https : // wiki .openstreetmap.org/wiki/Routing – Karussell

+0

정확하지만이 가이드는 데이터베이스를 만들고 업데이트하는 데 도움이됩니다. – scai

+0

당신이 원하는 것은 라우팅이 아닌 경우에만 :) – Karussell