OSRM对2点之间的距离给出了错误的响应

时间:2018-01-12 06:54:37

标签: python openstreetmap osrm

我试图通过projects-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.5km和6分钟。

以下是快照:     enter image description here

我能否知道为什么会发生这种情况,还有其他任何方式(开源)来获取两个地方之间的距离和时间。

提前致谢

1 个答案:

答案 0 :(得分:3)

捆绑讨论中出现的所有不同部分。

<强> 1。主要问题 - 给出0行程距离。

可以找到API的当前文档here(对于&gt; V4.x)。请注意“请求”下的坐标是以lon,lat顺序提供的:

  

格式字符串   {经度},{纬度}; {经度},{纬度} [{经度},{}纬度   ...]或折线({折线})或折线6({折线6})

您给出的当前坐标将两个位置放在海中,假设它们在lon,lat配对中。因此,您可能会以更自然的lat,lon顺序提供坐标。 Web界面需要lat,lon,因此会产生您期望的输出。老实说,我不知道为什么API坚持lon,lat

<强> 2。其他路由服务

基于OSM数据构建的当前路由软件列表可在其Wiki here中找到。其中,我广泛使用了Graphhopper和OSRM,但没有使用其他的。我可以说一些我用过的东西:

  • 对于大型查询,OSRM明显快于Graphhoper 因为它支持矩阵调用而Graphhopper不支持矩阵调用(in 开源格式)。位置之间的查询/秒少于300个查询 对,没有区别。
  • Graphhopper内置了一个前端。OSRM front-end是一个 需要JavaScript努力集成的独立实体。
  • 如果您不想,Graphhopper会提供便宜的API service 自托管。

第3。自托管即可。

您用于OSRM的当前API受公平使用政策的约束。它并不意味着任何重要的工作,只是不经常的电话。您还担心它不经常更新。这两个问题都可以通过自托管您自己的软件版本来解决(Windows支持已被删除,但您可以在虚拟机上构建,然后桥接端口5000,以便您可以从Windows调用API,这就是我所做的)

  • 可以找到构建OSRM指令here
  • 可以找到提取地图文件的说明here
  • Geofabrik每日更新地图文件。您可以随时以.osm.pbf格式here下载新的地图文件。

    OSRM矩阵调用的附注。关于矩阵API返回两者的距离和时间,我不太了解here。如果您需要该功能,则应按niemeier-PSI here加载分叉项目的table-distances分支。我从来没有加载过全球地图文件,只是按国家/地区,所以任何关于这种方法的内存问题对我来说都没有用。