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)
我正在删除该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)