GraphHopper是一款开放源代码的导航引擎,基于Java编写,并使用OpenStreetMap (OSM) 数据。它在移动设备、Web服务器和桌面环境中提供特定的路径和地图匹配。GraphHopper可以创建适用于汽车、自行车、步行等多种出行方式的最优路线。以下是如何在本地运行GraphHopper和请求路由示例的简要说明,运行GraphHopper并请求路由示例


下载GraphHopper。转到GraphHopper的GitHub发布界面(https://github.com/graphhopper/graphhopper/releases ),从中选择最新版本ZIP文件并下载。


下载OpenStreetMap (OSM) 数据。从Geofabrik(http://download.geofabrik.de/ )或其他可下载OSM数据的

渠道下载你感兴趣地区的地图数据(.osm.pbf格式)。


解压GraphHopper下载的ZIP文件。在解压后的文件夹中,打开命令行窗口或终端窗口,通过以下命令运行

GraphHopper。请根据实际情况替换<file.osm.pbf>为您下载的地图数据文件名:


java -jar -Ddw.graphhopper.datareader.file=<file.osm.pbf> -Ddw.graphhopper.graph.location=./graph-cache web/target/graphhopper-web-*.jar server config.yml

确保GraphHopper服务成功启动,会显示类似以下内容的信息:


Started server on http://localhost:8989

打开浏览器,输入http://localhost:8989。这将打开GraphHopper的浏览器应用程序,您可以通过拖

动绿色和红色的标记并选择出行方式来请求路线。


编写代码使用GraphHopper API


要使用GraphHopper API,您需要在服务启动并运行后,使用HTTP请求访问它。例如,通过Python请求

一个路线规划,你需要首先安装requests库:


pip install requests

然后可以编写以下代码示例:


import requests

 

base_url = "http://localhost:8989"

route_request = {

    "vehicle": "car",       # 出行方式,例如:“car”,“bike”或“foot”

    "elevation": "false",   # 是否需要高程数据

    "point": [              # 起点和终点

        "52.517037,13.38886",  # 起点经度/纬度,以逗号分隔

        "52.529407,13.42836"   # 终点经度/纬度,以逗号分隔

    ]

}

 

response = requests.get(base_url + "/route", params=route_request)

route_data = response.json()

 

print(route_data)


API返回的数据格式为JSON,其中包含有关路径、距离、预计行驶时间和指示信息。Python示例代码中的

route_data变量包含了API响应的解析JSON数据。


更多有关GraphHopper API的文档和功能,您可以访问:https://github.com/graphhopper/graphhopper/blob/master/docs/web/api-doc.md


编写代码使用GraphHopper API


要使用GraphHopper API,您需要在服务启动并运行后,使用HTTP请求访问它。例如,通过Python请求一

个路线规划,你需要首先安装requests库:


pip install requests

然后可以编写以下代码示例:


import requests

 

base_url = "http://localhost:8989"

route_request = {

    "vehicle": "car",       # 出行方式,例如:“car”,“bike”或“foot”

    "elevation": "false",   # 是否需要高程数据

    "point": [              # 起点和终点

        "52.517037,13.38886",  # 起点经度/纬度,以逗号分隔

        "52.529407,13.42836"   # 终点经度/纬度,以逗号分隔

    ]

}

 

response = requests.get(base_url + "/route", params=route_request)

route_data = response.json()

 

print(route_data)


API返回的数据格式为JSON,其中包含有关路径、距离、预计行驶时间和指示信息。Python示例代码中的route_data变量包含了API响应的解析JSON数据。


更多有关GraphHopper API的文档和功能,您可以访问:https://github.com/graphhopper/graphhopper/blob/master/docs/web/api-doc.md


GraphHopper 路由引擎主要使用OpenStreetMap (OSM) 数据进行路径计算。下面描述了GraphHopper对数

据格式的要求:


OpenStreetMap (OSM) 数据:GraphHopper 优先使用扩展名为.osm、.osm.xml、.osm.gz 或 .osm.pbf 的文件。OSM 数据包含了道路、建筑、地形等地理信息,通过地图编辑器(例如:iD 或 JOSM)进行创建和编辑。您可以在以下网站下载 OSM 数据文件:


请注意,全球 .osm.pbf 文件较大,您可能更愿意下载特定地区的数据。如果您对特定位置或范围内的数据感兴趣

,可以考虑使用以下工具:


BBBike's Extract Service: https://extract.bbbike.org/


HOT Export Tool: https://export.hotosm.org/


Geofabrik: http://download.geofabrik.de/


Planet OSM: https://planet.openstreetmap.org/


GraphHopper 存储格式:GraphHopper 将 OSM 数据转换为特定的存储格式,以便进行快速路径计算。转换后的数据将保存在一个名为 "graph-cache" 的目录中(可在配置时修改)。这些文件包括:


这些文件不需要手动处理,GraphHopper 会在导入 OSM 数据时自动创建。将 OSM 数据导入到GraphHopper 的 "graph-cache" 目录时,必须遵循正确的格式要求。


nodes:节点数据文件


edges:边缘数据文件


geometry:几何数据文件


locationIndex:地理位置索引文件


names:名称数据文件


API 请求和响应:GraphHopper API 要求使用特定的经纬度格式。请求时,需要将坐标以字符串形式表示为

“纬度,经度”,如“52.517037,13.38886”。API 响应也将以类似格式返回坐标。更多信息可以

参考 GraphHopper API 文档:https://github.com/graphhopper/graphhopper/blob/master/docs/web/api-doc.md


GraphHopper 主要依赖于OSM 数据。使用 GraphHopper 时需关心 OSM 数据格式,而其自身的存储格

式将在数据导入过程中自动处理。通过 API 与 GraphHopper 交互时,确保使用正确的经纬度格式。

GraphHopper 使用 OpenStreetMap (OSM) 数据来生成导航和路径规划。为了获得准确、可靠的路由信息,OSM 数据应尽可能完整和准确。以下是 GraphHopper 对 OSM 数据的一些基本要求:


道路网络:OSM 数据应包括完整的道路网络,这意味着包括道路的节点(交叉口)和道路线段的信息。

道路网络必须具有连通性,使得 GraphHopper 能够识别有效路径。


道路属性:为了获得更精确的路由,需要在 OSM 数据中包含道路属性。例如,道路类型(如高速公路、

主干道、次要道路等)、单行道限制、车道数、最大速度限制等信息。针对不同的出行方式(如步行、自行车或汽车),某些路段可能存在访问限制。确保将这些数据包含在 OSM 数据中,以便 GraphHopper 可以为特定出行方式生成正确的路由。


公交线路:虽然 GraphHopper 的主要关注点是个人出行方式,但某些场景可能需要考虑公共交通数据。

公共交通数据需要包括公交线路、站点和时刻表等。GraphHopper 可以针对这些数据生成一些简单的公共交通路由,但对于更复杂的公共交通路径规划,您可能需要考虑其他更专门针对公共交通的工具。


地点和兴趣点:虽然地点和兴趣点(POI)对路由生成没有直接影响,但它们对于提供更丰富、更有用的

地图细节非常重要。这些数据包括餐馆、酒店、公园、历史遗迹等。GraphHopper 不直接使用这些数据,但在应用地图匹配时,这些信息可能会有助于提高用户体验。


请注意,OSM 数据是由全球的志愿者不断维护和更新的。在某些地区,可能会遇到不完整或不准确的数据。

对于这些情况,您可以使用 OSM 编辑器(如 iD 或 JOSM)对数据进行修改和完善。确保您使用的是最新的

 OSM 数据,因为地图信息会随着道路和基础设施的变化而发生变化。为了获得最佳的 GraphHopper 路由结果,

请定期更新并修正 OSM 数据。

转自:https://blog.csdn.net/qq_35582643/article/details/140141779