我试图通过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分钟。
我能否知道为什么会发生这种情况,还有其他任何方式(开源)来获取两个地方之间的距离和时间。
提前致谢
答案 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,但没有使用其他的。我可以说一些我用过的东西:
第3。自托管即可。
您用于OSRM的当前API受公平使用政策的约束。它并不意味着任何重要的工作,只是不经常的电话。您还担心它不经常更新。这两个问题都可以通过自托管您自己的软件版本来解决(Windows支持已被删除,但您可以在虚拟机上构建,然后桥接端口5000,以便您可以从Windows调用API,这就是我所做的)
Geofabrik每日更新地图文件。您可以随时以.osm.pbf
格式here下载新的地图文件。
OSRM矩阵调用的附注。关于矩阵API返回两者的距离和时间,我不太了解here。如果您需要该功能,则应按niemeier-PSI here加载分叉项目的table-distances
分支。我从来没有加载过全球地图文件,只是按国家/地区,所以任何关于这种方法的内存问题对我来说都没有用。