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

OSM get duration and directions from route A to B in Python

我不熟悉使用地图和搜索算法。目前我正在使用 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 是否也像 Google 那样提供行程持续时间?
  2. 如果我想像 google 一样从 "Chicago" 到 "Dallas" ,如何获取路线?除了使用 API MapQuest 等之外,我们是否可以直接从 OSM 获取路由?
  3. 我们如何在我们的模型中实现交通层?我需要一些很好的资源,如果有任何 python 实现,那就太好了。

Is it an airline distance?

是的,见geopy documentation on distance calculation。 geopy 目前不支持真实路由。

Also does OSM provide duration of the journey like Google does?

是的,如果您使用真正的路由器,它就可以。看看OSM-based online routers。其中一些(例如 GraphHopper 和 OSRM)提供了逐步说明。

How can I get directions if I want to go from "Chicago" to "Dallas" like google ? Is there way we get the routing directly from OSM apart from using APIs MapQuest etc?

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

How can we implement traffic layers in our model ? I need some good resources in that and if there are any python implementations of that it would be great.

这帮不了你。我会先看看 http://opentraffic.io/ and https://github.com/graphhopper/open-traffic-collection.