使用 OSMnx 的 OpenStreetMaps 的公交线路/路线

问题描述 投票:0回答:1

我正在尝试使用 OSMnx 从 OpenStreetMap 获取公交线路/路线。例如荷兰诺特多普的 184 路公交车:https://www.openstreetmap.org/relation/2024408#map=15/52.0463/4.3967&layers=T

如何获取 OSM 中显示的确切路线(即节点列表)?

我尝试使用

osmnx.features.features_from_place

import osmnx as ox

gdf_busline = ox.features.features_from_place("Nootdorp, Netherlands", tags={'type': 'route', 'route': 'bus'})

print(gdf_busline)

但它返回一个空数据框。 (我也尝试了其他一些标签组合,但没有成功)

python networkx openstreetmap osmnx
1个回答
0
投票

来自 OSMnx 入门指南:

使用 OSMnx 的功能模块,您可以从 OpenStreetMap Overpass API 作为 GeoPandas GeoDataFrame 搜索并下载地理空间功能(例如建筑足迹、杂货店、学校、公园、公交站等)。这使用 OpenStreetMap 标签来搜索匹配元素。

因此,请记住您正在使用标签搜索匹配的元素。也就是说,如果您寻找路线的节点,那么您正在搜索的元素是节点,而不是关系,并且您通过它们的标签来寻找它们。

也来自功能模块文档:

您可以使用此模块通过传递所需 OSM 标签的字典来查询节点、路径和关系(后者仅限“多边形”或“边界”类型)。

因此,如果您确实想要一个关系本身,它必须是多重多边形或边界类型。

例如,如果您想要所有公交车站(即公交车线路的节点):

import osmnx as ox
place = "Nootdorp, Netherlands"
tags = {"highway": "bus_stop"}
gdf = ox.features.features_from_place(place, tags)
gdf.shape  # (27, 12)

此外,如果您知道要检索的关系的 OSM ID,则可以使用

geocoder
模块直接检索它。请参阅文档。这在底层使用了 Nominatim API。但是,请注意 Nominatim 并不支持所有关系。例如,通过 ID 在 Nominatim 中搜索 Nootdorp 可以,但通过 ID 搜索 Bus 284 则不行,因为在 Nominatim 中找不到它:

gdf1 = ox.geocode_to_gdf("R162256", by_osmid=True)  # succeeds
gdf2 = ox.geocode_to_gdf("R2024408", by_osmid=True) # fails

另请参阅Nominatim 上的问题

© www.soinside.com 2019 - 2024. All rights reserved.