OSM在Python中获取从路径A到B的持续时间和方向

时间:2018-01-18 11:55:55

标签: openstreetmap geopy overpass-api

我是使用Google地图和搜索算法的新手。目前,我正在使用geopy包来与Nominatim

保持距离
from geopy.geocoders import Nominatim
from geopy.distance import vincenty

nom = Nominatim()
chicago = nom.geocode("chicago")
dallas = nom.geocode("dallas")
chicago_gps = (chicago.latitude, chicago.longitude)
dallas_gps = (dallas.latitude, dallas.longitude)
distance = vincenty(chicago_gps, dallas_gps).km
print('Distance in kms: {}'.format(distance))
print(chicago.raw)

输出

Distance in kms: 1294.7623005649557
{'lat': '41.8755546', 'osm_id': '122604', 'boundingbox': ['41.643919', '42.0230219', '-87.940101', '-87.5239841'], 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright', 'lon': '-87.6244212', 'place_id': '178038280', 'class': 'place', 'icon': 'https://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.png', 'osm_type': 'relation', 'importance': 0.29566190262222, 'display_name': 'Chicago, Cook County, Illinois, United States of America', 'type': 'city'}

所以对于每个地方我都可以计算距离。现在问题很少

  1. 这是航空公司的距离吗? OSM也提供像谷歌一样的旅程持续时间吗?
  2. 如果我想去芝加哥"我怎样才能获得指示?达拉斯"达拉斯"喜欢谷歌?除了使用API​​ MapQuest等,我们是否可以直接从OSM获取路由?
  3. 我们如何在模型中实现流量层?我需要一些很好的资源,如果有任何python实现,那就太棒了。

1 个答案:

答案 0 :(得分:2)

  

这是航空公司的距离吗?

是的,请参阅geopy documentation on distance calculation。 geopy目前还不支持实际路由。

  

OSM还提供像谷歌一样的旅程持续时间吗?

是的,如果你使用真正的路由器。看看OSM-based online routers。其中一些,如GraphHopper和OSRM,提供逐向指令。

  

如果我想去芝加哥"我怎样才能获得指示?达拉斯"达拉斯"喜欢谷歌?我们是否可以直接从OSM获取路由,而不是使用API​​ MapQuest等?

请参阅我之前的回答。使用众多在线路由器之一的API。或者运行您自己的路由实例。其中许多路由器都是开源的,可以在本地安装。

  

我们如何在模型中实施流量层?我需要一些好的资源,如果有任何python实现,那就太棒了。

无法帮助您。我首先来看看http://opentraffic.io/https://github.com/graphhopper/open-traffic-collection