使用 OSMNX 打开街道地图:如何检索汉诺威地铁网络?

Wou*_*ter 4 openstreetmap osmnx

import osmnx as ox
ox.__version__ # '0.13.0'
Run Code Online (Sandbox Code Playgroud)

我想使用伟大的 OSMNX 模块在地图上显示德国地铁 OSM 数据中已知的汉诺威地铁。但与纽约示例不同的是,不会返回任何结果:

G = ox.graph_from_place('Hannover, Germany',
                        retain_all=False, truncate_by_edge=True, simplify=True,
                        network_type='none', custom_filter='["railway"~"subway"]')

# EmptyOverpassResponse: There are no data elements in the response JSON
Run Code Online (Sandbox Code Playgroud)

我确实得到了使用“德国汉诺威”作为区域的其他类似查询的结果。我也没有得到巴黎或伦敦的地铁结果。我没有得到类似查询的结果,例如 custom_filter='["railway"~"tram"]' 或 '["railway"~"s-bahn"]' 或 '["network"~"metro"]'。

另外,如果我使用基础设施关键字参数来选择“railway”,则会返回广泛的 gdf:

G = ox.graph_from_place('Hannover, Germany', retain_all=False, truncate_by_edge=True, simplify=True,
                        network_type='none', infrastructure='way["railway"]')
gdfox = ox.graph_to_gdfs(G, nodes=False, edges=True, node_geometry=True, fill_edge_geometry=True)
gdfox.shape # (4422, 14)
Run Code Online (Sandbox Code Playgroud)

但我无法使用返回的列识别地铁?:

['u', 'v', 'key', 'osmid', 'service', 'oneway', 'length',
   'geometry', 'name', 'maxspeed', 'ref', 'bridge', 'tunnel',
   'access']
Run Code Online (Sandbox Code Playgroud)

我还觉得奇怪的是,如果我(尝试)使用 custom_filter 检索所有铁路,则只返回 2 个 LINESTRINGS:

G = ox.graph_from_place('Hannover, Germany', retain_all=False, truncate_by_edge=True,
                        simplify=True, network_type=None, custom_filter='["railway"~""]')
gdfox = ox.graph_to_gdfs(G, nodes=False, edges=True, node_geometry=True, fill_edge_geometry=True)
gdfox.shape # (2, 10) # returns only 2 LINESTRINGS: Altenbekener Damm
Run Code Online (Sandbox Code Playgroud)

gbo*_*ing 5

我正在删除该infrastructure参数,以采用更一致的custom_filter参数。将在几天内完成:https://github.com/gboeing/osmnx/pull/477(编辑:在 v0.14.0 中完成并发布;下面的代码片段进行了相应的编辑。)

与此同时,我对汉诺威并不熟悉,但它的客运铁路系统似乎被标记为“有轨电车”和“铁路”,而不是“地铁”。像这样的东西似乎捕捉到了它:

import osmnx as ox
ox.config(use_cache=False,
          log_console=True,
          useful_tags_way=ox.settings.useful_tags_way + ['railway'])

G = ox.graph_from_place('Hannover, Germany',
                        retain_all=False, truncate_by_edge=True, simplify=True,
                        custom_filter='["railway"~"tram|rail"]')
len(G) #1776
Run Code Online (Sandbox Code Playgroud)