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