2014-07-26 2 views
1

학생으로서 저는 그래프와 알고리즘에 대해 많은 것을 배웠습니다. 거리를 기반으로 최소 경로를 계산하는 알고리즘을 사용할 수 있다는 것을 알고 있습니다. 또한 제한과 같은 가중치가있는 그래프를 사용할 수 있습니다.지도 - 가장 안전한 경로

현실 세계에서 거리, 교통 정보, 비용을 기반으로 한 최상의 경로를 보여주는 Google지도를 누구나 알고 있습니다. 비용 및 트래픽과 같은 요소가 그래프의 가중치가 아닐까요?

글쎄, 가장 안전한 경로를 계산하기 위해 경로 당 등록 된 사고 횟수를 사용하는 서비스/앱을 만들고 싶습니다. 현실에서는 이것이 제한/무게라고 생각하지만 문제는 다음과 같습니다.지도에이 제한을 추가 할 수있는 API/서비스는 무엇입니까? 나는 Google Maps API를 검색했지만 사용자가 제한 (거리/교통/여행 비용)에 따라 검색 경로를 허용하기 때문에 안전 요소를 소개 할 수 없다고 생각합니다.

당신이 솔루션을 안다면 나에게 말해줘.

+0

다소 관련이 있습니다 (1 분 전에 hackernews에서 보았습니다) : http://streetscore.media.mit.edu/about.html - 그들은 알고리즘을 사용하여 _perceived safety_를 계산했습니다. 스트리트 뷰 이미지를 기반으로 한 거리. 실제 범죄율이나 사고에 관한 것이 아닙니다. 필요한 모든 것이 그래프의 또 다른 가중치라면 시도해 볼 수 있습니다. 데이터 세트를 다운로드 할 수 있습니다. – Kapep

+0

놀라워 보이고 어렵습니다! 제 경우에는 사고 건수에 대한 정보를 가지고 있습니다. 지도에 이들을 통합하는 방법을 모르겠습니다. – cpfp

+0

*지도에이 제한을 추가 할 수있는 API/서비스는 무엇입니까? ** ** 왜 그런 리소스가 있다고 가정합니까? ** –

답변

1

OpenStreetMap 데이터를 사용하는 GraphHopper로 쉽게 수행 할 수 있습니다. 저장소를 다운로드하십시오 - video intro을 참조하십시오. 그런 다음 가중치를 맞춤식으로 변경하십시오. here을 읽으면 비트 사용자 정의 Java 코드가 필요합니다. (참고 : 저는 저자입니다)

3

Google지도 검색에 임의의 가중치를 추가 할 수있는 API는 없습니다. 지도를 다운로드 할 수없는 것 같습니다.

OpenStreetMaps와 같은 서비스에서지도 데이터를로드하고 자신의 그래프를 만들 수 있습니다. 그런 다음 교통 안전 데이터를 기반으로 한 새로운 가중치를 그래프에 추가하고 안전한 경로를 계산하기 위해 원하는 검색 알고리즘을 실행하십시오.

경로를 표시하는 svg overlay on the map을 그려서 결과를 다시 Google지도에 다시 통합 할 수 있습니다.

+0

Humm 분명해 보인다. 그러나 가능한가? (Google지도 데이터를 그래프로 변환 + 그래프에 가중치를 추가하고 그 알고리즘을 적용)? – cpfp

+1

@CarlosPiedade 필자는 다른 맵 서비스와 혼합했을지도 모른다. 나는 gmaps에 커스텀 라우트를 표시하는 프로젝트를 보았지만, 그래프를위한 데이터는 다른 서비스에서 나왔을 수도있다. Google에서 거리 데이터를 제공하지 않는 것으로 보입니다. 대신 www.openstreetmap.org를 시도해 볼 수 있으며 데이터를 다운로드 할 수 있습니다. – Kapep

+0

사실, 나는 5m 전에 그것을 보았다. 맵의 일부를 다운로드했으며 형식 파일은 .osm입니다. 그것을 그래프로 변환 할 수 있습니까? 방법? – cpfp

2

Google지도를 생각하는 대신 OpenStreetMap에서 열린 데이터를 사용하십시오. 기존 라우터를 통해 라우팅 애플리케이션을 구축하고 원하는대로 각 방향으로 계량하는 것이 좋습니다. OSRM (https://github.com/Project-OSRM/osrm-backend/wiki)은 프로파일을 사용하여 라우팅 그래프를 작성하며, 다른 인스턴스는 사용자 정의 프로파일을 작성하거나 라우팅 그래프에서 다른 정보를 병합 처리합니다. 예를 들어,이 샘플 코드는 그래프 구축 중에 PostGIS 데이터베이스에 쿼리합니다 (https://github.com/Project-OSRM/osrm-backend/blob/992458ae4ba1ea2bcf6234bee090297baef33600/profiles/examples/postgis.lua)