【发布时间】:2018-06-21 14:35:42
【问题描述】:
我正在尝试通过 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.5 公里和 6 分钟。
我能否知道为什么会发生这种情况,还有其他方法(开源)来获取两个地方之间的距离和时间。
提前致谢
【问题讨论】:
-
如果我没记错的话,我们可以补充一点,osrm 会在他最近的已知地图上投影您的位置。因此,如果您交换经纬度并到达大海,它将投影到最近的地图,并且两个投影点可能非常接近。
-
@roganjosh 是的,这有帮助。!交换了纬度和长期位置! :) 谢谢。但我仍然认为 OSRM 地图数据不像谷歌地图那样经常更新。
-
@user8150031 实际上,我发现这对 OSRM 来说非常令人沮丧。例如,在 graphhopper 中,很容易为糟糕的纬度/经度数据设置一个半径标志,这样它就不会在一定距离后捕捉到沿海道路。当我希望 OSRM 会引发错误时,OSRM 似乎更具容错性(我想在某处设置了一个标志,但我没有成功)。最终它确实放弃了寻找道路,而且这些位置都出海了
-
@SRingne 我不确定你的意思。 Geofabrik 每天都会更新 osm.pbf 文件。如果您是自托管的,则该地图与 OSRM没有任何关系,它仅取决于决定处理新图表的频率。但是,OSM(构建地图)是众包数据,因此它不会像世界上最大的科技公司之一全力以赴那样完整。但是,对于任何合理数量的请求,Google 都不是免费的。这取决于你想要什么,不幸的是你不能拥有一切......
-
嗯,好的,我看到你实际上是在使用他们自己的站点 API 为你做路由。请注意,这项服务是为了合理使用,所以不要用请求敲打它,否则它会阻止你。在您自己的实例之一上自行托管服务非常容易,然后您可以完全控制地图的更新频率,并可以根据需要生成任意数量的请求。
标签: python openstreetmap osrm