# GraphHopper **Repository Path**: kosui/graph-hopper ## Basic Information - **Project Name**: GraphHopper - **Description**: GraphHopper - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-08-16 - **Last Updated**: 2025-12-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GraphHopper 路径规划引擎 ![构建状态](https://github.com/graphhopper/graphhopper/actions/workflows/build.yml/badge.svg?branch=master) GraphHopper 是一个快速且高效的路径规划引擎,采用 Apache License 2.0 开源协议。 它既可以作为 Java 库使用,也可以作为独立的 Web 服务器运行,实现两点或多点间的距离、时间、逐步导航指令及多种道路属性的计算。 除了常规的“A 到 B”路径规划,还支持[道路匹配](README.md#Map-Matching)、[等时圈计算](README.md#Analysis)、[移动导航](README.md#mobile-apps)等功能。 GraphHopper 默认使用 OpenStreetMap 和 GTFS 数据,也支持[其他数据源的导入](README.md#OpenStreetMap-Support)。 # 社区 我们拥有开放的社区,欢迎所有人参与。无论是问题、需求还是交流,[欢迎在论坛留言](https://discuss.graphhopper.com/)。 请阅读我们的[社区准则](https://graphhopper.com/agreements/cccoc.html)。 ## 问答 所有问题请前往我们的[论坛](https://discuss.graphhopper.com/),其中包含开发者、移动端及[道路匹配组件](./map-matching)等分区。 你也可以在 [Stackoverflow](http://stackoverflow.com/questions/tagged/graphhopper) 搜索相关答案。 ## 贡献 请阅读我们的[贡献指南](CONTRIBUTING.md),了解如何查找和修复 bug、改进文档或翻译等内容! 我们还提供了[新手任务](https://github.com/graphhopper/graphhopper/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22),欢迎参与贡献。 ## 快速开始 你可以体验 [GraphHopper Maps](README.md#graphhopper-maps),阅读[文档](./docs/index.md),并在本地安装 GraphHopper 及地图 UI。 * 10.x: [文档](https://github.com/graphhopper/graphhopper/blob/10.x/docs/index.md) , [Web 服务 jar 包](https://repo1.maven.org/maven2/com/graphhopper/graphhopper-web/10.0/graphhopper-web-10.0.jar) , [发布公告](https://www.graphhopper.com/blog/2024/11/05/graphhopper-routing-engine-10-0-released/) * 不稳定 master 分支: [文档](https://github.com/graphhopper/graphhopper/blob/master/docs/index.md) Java API 变更请见[更新日志](./CHANGELOG.md)。
点击查看旧版本发布 * 9.x: [文档](https://github.com/graphhopper/graphhopper/blob/9.x/docs/index.md) , [Web 服务 jar 包](https://repo1.maven.org/maven2/com/graphhopper/graphhopper-web/9.1/graphhopper-web-9.1.jar) , [发布公告](https://www.graphhopper.com/blog/2024/04/23/graphhopper-routing-engine-9-0-released) * 8.x: [文档](https://github.com/graphhopper/graphhopper/blob/8.x/docs/index.md) , [Web 服务 jar 包](https://repo1.maven.org/maven2/com/graphhopper/graphhopper-web/8.0/graphhopper-web-8.0.jar) , [发布公告](https://www.graphhopper.com/blog/2023/10/18/graphhopper-routing-engine-8-0-released/) * 7.x: [文档](https://github.com/graphhopper/graphhopper/blob/7.x/docs/index.md) , [Web 服务 jar 包](https://repo1.maven.org/maven2/com/graphhopper/graphhopper-web/7.0/graphhopper-web-7.0.jar) , [发布公告](https://www.graphhopper.com/blog/2023/03/14/graphhopper-routing-engine-7-0-released/) * 6.x: [文档](https://github.com/graphhopper/graphhopper/blob/6.x/docs/index.md) , [Web 服务 jar 包](https://repo1.maven.org/maven2/com/graphhopper/graphhopper-web/6.2/graphhopper-web-6.2.jar) , [发布公告](https://www.graphhopper.com/blog/2022/09/19/graphhopper-routing-engine-6-0-released/) * 5.x: [文档](https://github.com/graphhopper/graphhopper/blob/5.x/docs/index.md) , [Web 服务 jar 包](https://github.com/graphhopper/graphhopper/releases/download/5.3/graphhopper-web-5.3.jar) , [发布公告](https://www.graphhopper.com/blog/2022/03/23/graphhopper-routing-engine-5-0-released/) * 4.x: [文档](https://github.com/graphhopper/graphhopper/blob/4.x/docs/index.md) , [Web 服务 jar 包](https://github.com/graphhopper/graphhopper/releases/download/4.0/graphhopper-web-4.0.jar) , [发布公告](https://www.graphhopper.com/blog/2021/09/29/graphhopper-routing-engine-4-0-released/) * 3.x: [文档](https://github.com/graphhopper/graphhopper/blob/3.x/docs/index.md) , [Web 服务 jar 包](https://github.com/graphhopper/graphhopper/releases/download/3.2/graphhopper-web-3.2.jar) , [发布公告](https://www.graphhopper.com/blog/2021/05/18/graphhopper-routing-engine-3-0-released/) * 2.x: [文档](https://github.com/graphhopper/graphhopper/blob/2.x/docs/index.md) , [Web 服务 jar 包](https://github.com/graphhopper/graphhopper/releases/download/2.4/graphhopper-web-2.4.jar) , [发布公告](https://www.graphhopper.com/blog/2020/09/30/graphhopper-routing-engine-2-0-released/) * 1.0: [文档](https://github.com/graphhopper/graphhopper/blob/1.0/docs/index.md) , [Web 服务 jar 包](https://github.com/graphhopper/graphhopper/releases/download/1.0/graphhopper-web-1.0.jar) , [Android APK](https://github.com/graphhopper/graphhopper/releases/download/1.0/graphhopper-android-1.0.apk) , [发布公告](https://www.graphhopper.com/blog/2020/05/25/graphhopper-routing-engine-1-0-released/) * 0.13.0: [文档](https://github.com/graphhopper/graphhopper/blob/0.13/docs/index.md) , [Web 服务 jar 包](https://github.com/graphhopper/graphhopper/releases/download/0.13.0/graphhopper-web-0.13.0.jar) , [Android APK](https://github.com/graphhopper/graphhopper/releases/download/0.13.0/graphhopper-android-0.13.0.apk) , [发布公告](https://www.graphhopper.com/blog/2019/09/18/graphhopper-routing-engine-0-13-released/) * 0.12.0: [文档](https://github.com/graphhopper/graphhopper/blob/0.12/docs/index.md) , [Web 服务 jar 包](https://github.com/graphhopper/graphhopper/releases/download/0.12.0/graphhopper-web-0.12.0.jar) , [Android APK](https://github.com/graphhopper/graphhopper/releases/download/0.12.0/graphhopper-android-0.12.0.apk) , [发布公告](https://www.graphhopper.com/blog/2019/03/26/graphhopper-routing-engine-0-12-released/) * 0.11.0: [文档](https://github.com/graphhopper/graphhopper/blob/0.11/docs/index.md) , [Web 服务 jar 包](https://github.com/graphhopper/graphhopper/releases/download/0.11.0/graphhopper-web-0.11.0.jar) , [Android APK](https://github.com/graphhopper/graphhopper/releases/download/0.11.0/graphhopper-android-0.11.0.apk) , [发布公告](https://www.graphhopper.com/blog/2018/09/17/graphhopper-routing-engine-0-11-release-open-sourcing-the-isochrone-module/) * 0.10.0: [文档](https://github.com/graphhopper/graphhopper/blob/0.10/docs/index.md) , [Web 服务压缩包](https://github.com/graphhopper/graphhopper/releases/download/0.10.3/graphhopper-web-0.10.3-bin.zip) , [Android APK](https://github.com/graphhopper/graphhopper/releases/download/0.10.3/graphhopper-android-0.10.3.apk) , [发布公告](https://www.graphhopper.com/blog/2018/03/08/graphhopper-routing-engine-0-10-released/) * 0.9.0: [文档](https://github.com/graphhopper/graphhopper/blob/0.9/docs/index.md) , [Web 服务压缩包](https://github.com/graphhopper/graphhopper/releases/download/0.9.0/graphhopper-web-0.9.0-bin.zip) , [Android APK](https://github.com/graphhopper/graphhopper/releases/download/0.9.0/graphhopper-android-0.9.0.apk) , [发布公告](https://www.graphhopper.com/blog/2017/05/31/graphhopper-routing-engine-0-9-released/) * 0.8.2: [文档](https://github.com/graphhopper/graphhopper/blob/0.8/docs/index.md) , [Web 服务压缩包](https://github.com/graphhopper/graphhopper/releases/download/0.8.2/graphhopper-web-0.8.2-bin.zip) , [Android APK](https://github.com/graphhopper/graphhopper/releases/download/0.8.2/graphhopper-android-0.8.2.apk) , [发布公告](https://www.graphhopper.com/blog/2016/10/18/graphhopper-routing-engine-0-8-released/) * 0.7.0: [文档](https://github.com/graphhopper/graphhopper/blob/0.7/docs/index.md) , [Web 服务压缩包](https://github.com/graphhopper/graphhopper/releases/download/0.7.0/graphhopper-web-0.7.0-bin.zip) , [Android APK](https://github.com/graphhopper/graphhopper/releases/download/0.7.0/graphhopper-android-0.7.0.apk) , [发布公告](https://www.graphhopper.com/blog/2016/06/15/graphhopper-routing-engine-0-7-released/)
## 安装 要在本地安装 [GraphHopper Maps](https://graphhopper.com/maps/) UI 和 Web 服务,你需要先安装 [JVM](https://adoptium.net) (>= Java 17),然后执行: ```bash 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/, 你将看到一张柏林的地图。你应该可以右键点击地图来创建路线。 请参阅包含[高程指南](./docs/core/elevation.md)和[部署指南](./docs/core/deploy.md)的[文档](./docs/index.md)。 ### Docker 社区创建的 `master` 分支的 Docker 镜像可以在[这里](https://hub.docker.com/r/israelhikingmap/graphhopper)找到 (目前为每日构建)。有关更多细节,请参见[Dockerfile](https://github.com/IsraelHikingMap/graphhopper-docker-image-push)。 ## GraphHopper Maps GraphHopper 路径规划服务器使用 GraphHopper Maps 作为 Web 界面,GraphHopper Maps 也是[开源的](https://github.com/graphhopper/graphhopper-maps)。 要查看 GraphHopper Maps 的实际效果,请访问 [graphhopper.com/maps/](https://graphhopper.com/maps/), 该网站是 GraphHopper Maps 的一个实例,提供免费服务,通过加密连接并从德国服务器访问 - 为您提供良好且私密的路线规划体验! [![GraphHopper Maps](https://www.graphhopper.com/wp-content/uploads/2025/06/graphhopper-maps-2025.png)](https://graphhopper.com/maps) ## GraphHopper Directions API GraphHopper Directions API 是我们([GraphHopper GmbH](https://www.graphhopper.com/))的商业产品,提供基于此开源路径规划引擎的 [多种 API](https://docs.graphhopper.com):路线规划 API、矩阵 API、等时圈 API 和地图匹配 API。 它还提供基于我们开源的 [jsprit 项目](http://jsprit.github.io/) 的路线优化 API,该 API 在后台使用快速的矩阵 API。 地址搜索基于开源的 [photon 项目](https://github.com/komoot/photon),该项目由 GraphHopper GmbH 维护。 ## 公共交通 [快速开始](./reader-gtfs/README.md#quick-start) [![实时演示](https://www.graphhopper.com/wp-content/uploads/2018/05/Screen-Shot-2018-05-16-at-21.23.25-600x538.png)](./reader-gtfs/README.md#quick-start) ## 移动应用 ### 在线 有一个可以被[我们的导航 Android 客户端](https://github.com/graphhopper/graphhopper-navigation-example)消费的[Web 服务](./navigation)。 [](https://github.com/graphhopper/graphhopper-navigation-example) ### 离线 离线导航[不再官方支持](https://github.com/graphhopper/graphhopper/issues/1940), 但由于 Android 支持大部分 Java,因此仍应可行。请参见[1.0 版本](https://github.com/graphhopper/graphhopper/blob/1.0/docs/android/index.md) 的 Android 演示,以及 iOS 分支的[此拉取请求](http://github.com/graphhopper/graphhopper-ios),其中包括 iOS 的演示。 [](./android/README.md) ## 分析 使用等时圈计算并可视化某种出行方式的可达区域。 你可以尝试在 http://localhost:8989/maps/isochrone/ 上的调试用户界面,查看 `/isochrone` 和 `/spt` 端点的实际效果。 ### [等时圈 Web API](./docs/web/api-doc.md#isochrone) [![等时圈 API 图片](./docs/isochrone/images/isochrone.png)](./docs/web/api-doc.md#isochrone) ### [最短路径树 API](//www.graphhopper.com/blog/2018/07/04/high-precision-reachability/) [![高精度可达性图片](https://www.graphhopper.com/wp-content/uploads/2018/06/berlin-reachability-768x401.png)](https://www.graphhopper.com/blog/2018/07/04/high-precision-reachability/) ### [地图匹配](./map-matching) 有地图匹配子项目将 GPX 轨迹固定到道路上。 [![地图匹配示例](https://raw.githubusercontent.com/graphhopper/directions-api-doc/master/web/img/map-matching-example.gif)](./map-matching) # 技术概述 GraphHopper 支持多种路径规划算法,如 DijkstraA`*` 及其双向变体。 此外,它还允许你非常简单地使用 收缩层次 (CH) 模式。 我们称之为 **速度模式**;而没有这种 CH 准备的情况,我们称之为 **灵活模式**。 速度模式提供非常快速且轻量级(占用更少内存)的响应,并且不使用启发式算法。 但是,仅支持预定义的车辆配置文件,并且此额外的 CH 准备过程耗时且消耗资源。 然后是 **混合模式**,它在准备过程中也需要更多的时间和内存, 但在请求时对更改属性或集成交通数据等方面要灵活得多。 此外,这种混合模式比速度模式慢,但比灵活模式快一个数量级,并且在一次请求中占用更少的内存。 如果准备工作完成,你可以在请求时在所有模式之间切换。 有关技术细节的更多信息,请参见[这里](./docs/core/technical.md)。 ## 许可证 我们选择 Apache 许可证是为了方便你将 GraphHopper 嵌入到你的产品中,即使是闭源产品。 我们建议你将更改的代码贡献回来,因为 GraphHopper 发展迅速。 ## OpenStreetMap 支持 GraphHopper 直接支持 OpenStreetMap。 没有来自 OpenStreetMap 的惊人数据, GraphHopper 根本不可能实现。 其他地图数据需要自定义导入程序,参见例如 Ordnance Survey, Shapefile like ESRINavteq。 ## 用 Java 编写 GraphHopper 用 Java 编写,官方支持在 Linux、Mac OS X 和 Windows 上运行。 ### Maven 通过以下代码片段将 GraphHopper 与 OpenStreetMap 支持嵌入到你的 Java 应用程序中: ```xml com.graphhopper graphhopper-core [LATEST-VERSION] ``` 请参见[我们的示例应用程序](./example/src/main/java/com/graphhopper/example/RoutingExample.java),快速入门。 ## 可定制 你可以通过 Java 知识(使用高低级 API)以及通过使用 [自定义模型](./docs/core/custom-models.md) 在没有 Java 知识的情况下定制 GraphHopper。 ### Web API 通过 Web 模块,我们提供了通过 HTTP 查询 GraphHopper 的代码,并尽可能减少带宽使用。 为此,我们使用了高效的折线编码、Ramer–Douglas–Peucker 算法和简单的 GZIP servlet 过滤器。 在客户端,我们提供了 [Java](./client-hc) 和 [JavaScript](https://github.com/graphhopper/directions-api-js-client) 客户端。 ### 桌面 GraphHopper 也可以在没有互联网访问的 Java 应用程序中运行于桌面。 为了调试目的,GraphHopper 可以生成矢量图块,即在 浏览器中可视化道路网络(参见 #1572)。 还通过工具模块中的 MiniGraphUI 提供了更低级别的基于 Swing 的用户界面,参见通过它完成的一些可视化 [这里](https://graphhopper.com/blog/2016/01/19/alternative-roads-to-rome/). 可以通过 [mapsforge](https://github.com/mapsforge/mapsforge) 或 [mapsforge vtm](https://github.com/mapsforge/vtm) 实现快速且生产就绪的桌面地图可视化。 # 特性 * 开箱即用,支持 OpenStreetMap (osm/xml 和 pbf),并可适应自定义数据 * OpenStreetMap 集成:存储并考虑道路类型、限速、路面情况、障碍物、通行限制、渡轮、条件通行限制等信息 * GraphHopper 速度快。 通过所谓的“收缩层次”可以更快(默认启用)。 * 内存高效的数据结构、算法以及[高低级 API](./docs/core/low-level-api.md) 针对易用性和效率进行了优化 * 预定义的导航配置文件:汽车、骑行、赛车、山地车、步行、徒步旅行、卡车、公交车、摩托车等 * 可以[自定义这些配置文件](./docs/core/profiles.md#custom-profiles)。 示例请参见[这里](https://www.graphhopper.com/blog/2020/05/31/examples-for-customizable-routing/). * 提供强大的[Web API](./docs/web/api-doc.md),暴露 OpenStreetMap 的数据,并允许按请求自定义车辆配置文件。 支持 JavaScript 和 Java 客户端。 * 提供[地图匹配](./map-matching),即“固定到道路”功能。 * 支持基于时间的公共交通路径规划和读取 [GTFS](./reader-gtfs/README.md) 数据。 * 提供超过 45 种语言的转弯指令。 贡献或改进请见[这里](./docs/core/translations.md)。 * 显示并考虑[高程数据](./docs/core/elevation.md)。 * 支持[替代路线](https://discuss.graphhopper.com/t/alternative-routes/424)。 * 支持[转弯费用和限制](./docs/core/turn-restrictions.md)。 * 通过国家规则提供特定国家的路径规划。 * 允许通过自定义区域定制路径规划行为。 * 核心仅使用少量依赖(hppc, jts, janino 和 slf4j)。 * 从小型室内图到全球范围图均可扩展。 * 查找街道上最近的点,例如获取高程或“固定到道路”或用作空间索引(参见 [#1485](https://github.com/graphhopper/graphhopper/pull/1485))。 * 计算等时圈和[最短路径树](https://github.com/graphhopper/graphhopper/pull/1577)。 * 在浏览器中显示整个道路网络以便于调试(“矢量图块支持”),参见 [#1572](https://github.com/graphhopper/graphhopper/pull/1572)。 * 显示沿路线的所谓“路径详情”,如 road_class 或 max_speed,参见 [#1142](https://github.com/graphhopper/graphhopper/pull/1142) 或 Web 文档。 * 用 Java 编写,开发者通过 Maven 简单入门。 * Allows customizing routing behavior using custom areas. * The core uses only a few dependencies (hppc, jts, janino and slf4j). * Scales from small indoor-sized to world-wide-sized graphs. * Finds nearest point on street e.g. to get elevation or 'snap to road' or being used as spatial index (see [#1485](https://github.com/graphhopper/graphhopper/pull/1485)). * Calculates isochrones and [shortest path trees](https://github.com/graphhopper/graphhopper/pull/1577). * Shows the whole road network in the browser for debugging purposes ("vector tile support"), see [#1572](https://github.com/graphhopper/graphhopper/pull/1572). * Shows so called "path details" along a route like road_class or max_speed, see [#1142](https://github.com/graphhopper/graphhopper/pull/1142) or the web documentation. * Written in Java and simple to start for developers via Maven. ## 编译 本项目使用 [Maven](https://maven.apache.org/) 进行构建。请确保已安装 Java 17 及以上版本和 Maven。 在项目根目录下执行: ```bash mvn clean install -DskipTests ``` 如需运行测试,请去掉 `-DskipTests` 参数。