GraphHopper 是根据 Apache License 2.0 发布的快速且内存高效的路由引擎。它可以用作 Java 库或独立的 Web 服务器来计算两个或多个点之间的路线的距离、时间、路线规划指令和许多道路属性。除了“A-B”路线之外,它还支持“捕捉道路”、等时线计算、移动导航等。 GraphHopper默认使用OpenStreetMap和GTFS数据,它也可以导入其他数据源。
我们有一个开放的社区,欢迎所有人。让我们知道您的问题、用例或只是打个招呼。请参阅我们的社区准则。
所有问题都请访问我们的论坛,其中我们还有专门针对开发人员、移动使用和地图匹配组件的小节。您还可以在 Stackoverflow 中搜索答案。
阅读我们的贡献指南,了解有关查找和修复错误以及改进我们的文档或翻译等主题的信息!我们也有很好的第一期来开始贡献。
首先,您可以尝试 GraphHopper Maps,阅读我们的文档并在本地安装 GraphHopper(包括地图 UI)。
请参阅 Java API 更改的更改日志文件。
要在本地安装 GraphHopper Maps UI 和 Web 服务,您需要 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
一段时间后,您会看到一条带有“服务器 - 已启动”的日志消息,然后访问 http://localhost:8989/,您将看到柏林的地图。您应该能够右键单击地图来创建路线。
请参阅包含海拔指南和部署指南等的文档。
社区从master
分支创建的 Docker 镜像可以在这里找到(目前每天)。有关更多详细信息,请参阅 Dockerfile。
要查看 GraphHopper 的道路路由功能的实际应用,请访问 GraphHopper 地图。
GraphHopper Maps 是一个开源用户界面,您可以在此处找到。它可以使用这个开源路由引擎或GraphHopper Directions API,它提供路由API、路由优化API(基于jsprit)、快速Matrix API和地址搜索(基于photon)。光子项目也得到了 GraphHopper GmbH 的支持。除了 GraphHopper Directions API 之外,还使用来自各个提供商的地图图块,默认为 Omniscale。
所有这些都是通过加密连接和德国服务器免费提供的 - 以获得美好而私人的路线规划体验!
开始使用
我们的导航 Android 客户端可以使用一个 Web 服务。
离线路由不再受到官方支持,但应该仍然可以工作,因为 Android 支持大多数 Java。请参阅版本 1.0 的 Android 演示,还请参阅 iOS 分支的拉取请求,包括 iOS 演示。
使用等时线来计算和可视化特定出行模式的可到达区域。
您可以尝试使用 http://localhost:8989/maps/isochrone 上的调试用户界面来查看/isochrone
和/spt
端点的运行情况。
有一个地图匹配子项目可以将 GPX 轨迹捕捉到道路上。
GraphHopper 支持多种路由算法,例如 Dijkstra 和 A *
及其双向变体。此外,它允许您非常轻松地使用收缩层次结构(CH)。我们称之为速度模式;如果没有这个CH准备,我们称之为灵活模式。
速度模式具有非常快速且轻量级(较少 RAM)的响应,并且不使用启发式方法。然而,只能预定义车辆配置文件,并且这种额外的 CH 准备工作非常耗时和资源消耗。
然后是混合模式,它也需要更多的时间和内存来进行准备,但它在更改每个请求的属性或集成流量数据方面更加灵活。此外,这种混合模式比速度模式慢,但比灵活模式快一个数量级,并且对于一个请求使用更少的 RAM。
如果准备就绪,您可以根据请求在所有模式之间切换。
请在此处阅读有关技术细节的更多信息。
我们选择 Apache 许可证是为了让您可以轻松地将 GraphHopper 嵌入到您的产品中,甚至是闭源产品中。我们建议您贡献自己的更改,因为 GraphHopper 发展很快。
GraphHopper 直接支持 OpenStreetMap。如果没有来自 OpenStreetMap 的惊人数据,GraphHopper 根本不可能实现。其他地图数据将需要自定义导入程序,请参阅 Ordnance Survey、Shapefile(如 ESRI 或 Navteq)。
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 知识的情况下使用自定义模型。
通过 Web 模块,我们提供了通过 HTTP 查询 GraphHopper 的代码,并尽可能减少带宽使用。为此,我们使用高效的折线编码、Ramer–Douglas–Peucker 算法和简单的 GZIP servlet 过滤器。
在客户端,我们提供了Java和JavaScript客户端。
GraphHopper 还可以在桌面上以 Java 应用程序运行,无需访问互联网。出于调试目的,GraphHopper 可以生成矢量图块,即浏览器中道路网络的可视化(参见#1572)。此外,工具模块中还通过 MiniGraphUI 提供了一个更底层的基于 Swing 的 UI,请参阅此处使用它完成的一些可视化。可以通过mapsforge或mapsforge vtm实现快速且可用于生产的桌面地图可视化。