# 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 路径规划引擎

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 的一个实例,提供免费服务,通过加密连接并从德国服务器访问 - 为您提供良好且私密的路线规划体验!
[](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)
[](./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)
[](./docs/web/api-doc.md#isochrone)
### [最短路径树 API](//www.graphhopper.com/blog/2018/07/04/high-precision-reachability/)
[](https://www.graphhopper.com/blog/2018/07/04/high-precision-reachability/)
### [地图匹配](./map-matching)
有地图匹配子项目将 GPX 轨迹固定到道路上。
[](./map-matching)
# 技术概述
GraphHopper 支持多种路径规划算法,如
Dijkstra 和
A`*` 及其双向变体。
此外,它还允许你非常简单地使用
收缩层次 (CH)
模式。 我们称之为 **速度模式**;而没有这种 CH 准备的情况,我们称之为 **灵活模式**。
速度模式提供非常快速且轻量级(占用更少内存)的响应,并且不使用启发式算法。
但是,仅支持预定义的车辆配置文件,并且此额外的 CH 准备过程耗时且消耗资源。
然后是 **混合模式**,它在准备过程中也需要更多的时间和内存,
但在请求时对更改属性或集成交通数据等方面要灵活得多。
此外,这种混合模式比速度模式慢,但比灵活模式快一个数量级,并且在一次请求中占用更少的内存。
如果准备工作完成,你可以在请求时在所有模式之间切换。
有关技术细节的更多信息,请参见[这里](./docs/core/technical.md)。
## 许可证
我们选择 Apache 许可证是为了方便你将 GraphHopper 嵌入到你的产品中,即使是闭源产品。
我们建议你将更改的代码贡献回来,因为 GraphHopper 发展迅速。
## OpenStreetMap 支持
GraphHopper 直接支持 OpenStreetMap。 没有来自 OpenStreetMap 的惊人数据,
GraphHopper 根本不可能实现。
其他地图数据需要自定义导入程序,参见例如 Ordnance Survey,
Shapefile like ESRI 或 Navteq。
## 用 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` 参数。