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