GraphHopper는 Apache License 2.0에 따라 출시된 빠르고 메모리 효율적인 라우팅 엔진입니다. 두 개 이상의 지점 사이의 경로에 대한 거리, 시간, 턴 바이 턴 지침 및 다양한 도로 속성을 계산하기 위해 Java 라이브러리 또는 독립형 웹 서버로 사용할 수 있습니다. 이 "A-to-B" 라우팅 외에도 "도로에 스냅", 등시성 계산, 모바일 내비게이션 등을 지원합니다. GraphHopper는 기본적으로 OpenStreetMap 및 GTFS 데이터를 사용하며 다른 데이터 소스도 가져올 수 있습니다.
우리는 열린 커뮤니티를 갖고 있으며 모든 사람을 환영합니다. 귀하의 문제나 사용 사례를 알려주시거나 간단히 인사해 주세요. 커뮤니티 가이드라인을 참조하세요.
모든 질문은 개발자, 모바일 사용 및 지도 일치 구성 요소를 위한 하위 섹션이 있는 포럼으로 이동합니다. Stackoverflow를 검색하여 답변을 찾을 수도 있습니다.
버그 찾기 및 수정, 문서 또는 번역 개선과 같은 주제에 대한 정보는 기여 가이드를 읽어보세요! 우리는 기여를 시작하기 위한 좋은 첫 번째 이슈도 가지고 있습니다.
시작하려면 GraphHopper Maps를 사용해 보고, 설명서를 읽어보고, Maps UI가 포함된 GraphHopper를 로컬에 설치하세요.
Java API 변경 사항은 변경 로그 파일을 참조하세요.
GraphHopper Maps UI와 웹 서비스를 로컬로 설치하려면 JVM(>= Java 17)이 필요하며 다음을 수행합니다.
wget https://repo1.maven.org/maven2/com/graphhopper/graphhopper-web/10.0/graphhopper-web-10.0.jar
https://raw.githubusercontent.com/graphhopper/graphhopper/10.x/config-example.yml
http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
java -D " dw.graphhopper.datareader.file=berlin-latest.osm.pbf " -jar graphhopper * .jar server config-example.yml
잠시 후 'Server - Started'라는 로그 메시지가 표시되고 http://localhost:8989/로 이동하면 베를린 지도가 표시됩니다. 지도를 마우스 오른쪽 버튼으로 클릭하여 경로를 만들 수 있어야 합니다.
고도 가이드 및 배포 가이드 등이 포함된 설명서를 참조하세요.
master
브랜치에서 커뮤니티가 생성한 Docker 이미지는 여기(현재 매일)에서 찾을 수 있습니다. 자세한 내용은 Dockerfile을 참조하세요.
GraphHopper의 도로 경로 기능이 실제로 작동하는 모습을 보려면 GraphHopper 지도로 이동하세요.
GraphHopper Maps는 오픈 소스 사용자 인터페이스이며 여기에서 찾을 수 있습니다. 이 오픈 소스 라우팅 엔진 또는 라우팅 API, 경로 최적화 API(jsprit 기반), 빠른 Matrix API 및 주소 검색(Photon 기반)을 제공하는 GraphHopper Directions API를 사용할 수 있습니다. Photon 프로젝트는 GraphHopper GmbH에서도 지원됩니다. GraphHopper Directions API 외에도 다양한 공급자의 지도 타일이 사용되며 기본값은 Omniscale입니다.
이 모든 것은 암호화된 연결과 독일 서버를 통해 무료로 제공됩니다. 멋지고 개인적인 경로 계획 경험을 위해!
시작하기
내비게이션 Android 클라이언트에서 사용할 수 있는 웹 서비스가 있습니다.
오프라인 라우팅은 더 이상 공식적으로 지원되지 않지만 Android는 대부분의 Java를 지원하므로 계속 작동합니다. Android 데모 버전 1.0을 확인하고 iOS용 데모가 포함된 iOS 포크 풀 요청도 참조하세요.
등시선을 사용하여 특정 이동 모드에서 도달 가능한 영역을 계산하고 시각화합니다.
http://localhost:8989/maps/isochrone에서 디버그 사용자 인터페이스를 사용하여 /isochrone
및 /spt
엔드포인트가 작동하는지 확인할 수 있습니다.
GPX 추적을 도로에 스냅하는 지도 일치 하위 프로젝트가 있습니다.
GraphHopper는 Dijkstra, A *
및 양방향 변형과 같은 여러 라우팅 알고리즘을 지원합니다. 또한 CH(Contraction Hierarchies)를 매우 쉽게 사용할 수 있습니다. 우리는 이것을 속도 모드 라고 부릅니다. 이 CH 준비가 없으면 이를 유연한 모드 라고 부릅니다.
속도 모드는 매우 빠르고 가벼운(적은 RAM) 응답을 제공하며 휴리스틱을 사용하지 않습니다. 그러나 사전 정의된 차량 프로필만 가능하며 이러한 추가 CH 준비에는 시간과 리소스가 많이 소요됩니다.
그런 다음 준비를 위해 더 많은 시간과 메모리가 필요한 하이브리드 모드가 있지만 요청당 속성 변경이나 트래픽 데이터 통합과 관련하여 훨씬 더 유연합니다. 또한 이 하이브리드 모드는 속도 모드보다 느리지만 유연 모드보다 훨씬 빠르고 한 요청에 더 적은 RAM을 사용합니다.
준비가 되어 있으면 요청 시 모든 모드 간에 전환할 수 있습니다.
여기에서 기술적인 세부 사항에 대해 자세히 알아보세요.
우리는 비공개 소스라도 귀하의 제품에 GraphHopper를 쉽게 포함할 수 있도록 Apache 라이센스를 선택했습니다. GraphHopper가 빠르게 발전함에 따라 변경 사항을 다시 기여하는 것이 좋습니다.
OpenStreetMap은 GraphHopper에서 직접 지원됩니다. OpenStreetMap의 놀라운 데이터가 없었다면 GraphHopper는 전혀 불가능했을 것입니다. 다른 지도 데이터에는 사용자 지정 가져오기 절차가 필요합니다(예: Ordnance Survey, ESRI 또는 Navteq와 같은 Shapefile 참조).
GraphHopper는 Java로 작성되었으며 공식적으로 Linux, Mac OS X 및 Windows에서 실행됩니다.
다음 코드 조각을 통해 OpenStreetMap 지원이 포함된 GraphHopper를 Java 애플리케이션에 포함하세요.
< dependency >
< groupId >com.graphhopper</ groupId >
< artifactId >graphhopper-core</ artifactId >
< version >[LATEST-VERSION]</ version >
</ dependency >
빠르게 시작하려면 예제 애플리케이션을 참조하세요.
Java 지식(고수준 및 저수준 API 포함)으로 GraphHopper를 사용자 정의할 수 있으며 사용자 정의 모델을 사용하면 Java 지식 없이도 GraphHopper를 사용자 정의할 수 있습니다.
웹 모듈을 통해 우리는 HTTP를 통해 GraphHopper를 쿼리하고 대역폭 사용량을 최대한 줄이는 코드를 제공합니다. 이를 위해 효율적인 폴리라인 인코딩, Ramer–Douglas–Peucker 알고리즘 및 간단한 GZIP 서블릿 필터를 사용합니다.
클라이언트 측에서는 Java 및 JavaScript 클라이언트를 제공합니다.
GraphHopper는 인터넷 접속 없이 Java 애플리케이션의 데스크탑에서도 실행됩니다. 디버깅 목적으로 GraphHopper는 벡터 타일, 즉 브라우저에서 도로 네트워크의 시각화를 생성할 수 있습니다(#1572 참조). 또한 도구 모듈의 MiniGraphUI를 통해 보다 낮은 수준의 Swing 기반 UI가 제공됩니다. 여기에서 이에 대한 일부 시각화를 확인하세요. Mapsforge 또는 Mapsforge vtm을 통해 빠르고 생산 준비가 완료된 데스크톱용 지도 시각화를 구현할 수 있습니다.