我试图通过osrm项目获得两个地理位置之间的距离。
通过python。
import requests
source_coordinates = '18.21231,42.50830;'
dest_coordinates = '18.20971,42.50075'
url = 'http://router.project-osrm.org/route/v1/driving/'+source_coordinates+dest_coordinates
payload = {"steps":"true","geometries":"geojson"}
response = requests.get(url,params=payload)
data = response.json()
print(data)
`
{
"routes": [
{
"geometry": "oksbGmvonB??",
"legs": [
{
"summary": "",
"weight": 0,
"duration": 0,
"steps": [],
"distance": 0
}
],
"weight_name": "routability",
"weight": 0,
"duration": 0,
"distance": 0
"code": "Ok"
}
`
你可以看到我得到的距离是0作为回应。
但当我在现场输入相同的坐标时。
http://map.project-osrm.org/输入相同的坐标,我得到2.5公里和6分钟。
以下是快照:
我能知道为什么会发生这样的事情吗?还有没有其他方法(开源)来获得两地之间的距离和时间。
提前谢谢
最佳答案
把我们讨论中出现的所有不同部分都联系起来。
一。最主要的问题是给出0的旅行距离。
API的当前文档可以找到here(for>V4.x)注意在“请求”下,坐标按lon,lat
顺序提供:
格式字符串
{经度},{纬度};{经度},{纬度}[;{经度},{纬度}
…]或多段线({polyline})或多段线6({polyline6})
你给出的当前坐标把这两个位置放在海里,假设它们在lon,lat
对中因此,您很可能是以更自然的lat,lon
顺序提供坐标。web界面期望lat,lon
所以会产生您期望的输出。我真的不知道为什么api坚持lon,lat
。
2.其他路由服务
基于OSM数据构建的当前路由软件列表可以在Wikihere中找到其中,我广泛使用了Graphhopper和OSRM,但没有其他的关于我用过的那些,我可以说几句:
对于大型查询,osrm明显快于graphhoper
因为它支持矩阵调用,而graphhopper不支持
开源格式)在两个位置之间每秒少于300个查询
对,没有区别。
Graphhopper内置了一个前端OSRM front-end是
需要javascript集成的独立实体。
如果你不想的话,Graphhopper提供一个便宜的API service
自我招待。
三。自我托管。
您当前用于OSRM的API受合理使用策略的约束它不适合任何重要的工作,只是不常打电话。你还担心它更新不够频繁。这两个问题都可以通过自托管您自己版本的软件来解决(windows对osrm的支持已被放弃,但您可以在虚拟机上构建,然后桥接端口5000,以便您可以从windows调用api,这就是我所做的)。
可以找到构建OSRM指令here。
提取地图文件的说明可以找到here
GeoFabrik每天更新地图文件。您可以随时从here以.osm.pbf
格式下载新的地图文件。
OSRM矩阵调用的旁注。关于matrix api返回距离和时间,有一个争论here我并不完全理解。如果您需要该功能,您应该通过niemeier-PSI here加载分叉项目的table-distances
分支我从来没有加载过全球地图文件,只是每个国家的基础上,所以任何关于这个方法的记忆问题对我来说都是没有意义的。
关于python - OSRM对2点之间的距离给出错误的响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48221046/