我试图通过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分钟。
以下是快照:
python - OSRM对2点之间的距离给出错误的响应-LMLPHP
我能知道为什么会发生这样的事情吗?还有没有其他方法(开源)来获得两地之间的距离和时间。
提前谢谢

最佳答案

把我们讨论中出现的所有不同部分都联系起来。
一。最主要的问题是给出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/

10-09 06:56