OSMnx- 为什么 'walk' 网络大于 'all' 网络?

OSMnx- why is the 'walk' network larger than 'all' network?

我通过 OSMnx 导出并比较总网络的公里长度,然后比较行人网络。奇怪的是,对于某些城市来说,步行网络比总网络还要大。这怎么解释呢?我检查了 OSMnx 代码的自定义过滤器中的查询,我仍然无法解释它,因为 network='walk' 是一个更严格的定义,因此应该包含在 all network...

试试这段代码,如果您有任何解释,请告诉我。

place = 'Empire state building, New York, NY 10001, USA'

# import graph all
G_a = ox.graph_from_address(place, retain_all=True, network_type='all', simplify=True, clean_periphery=False)

# import graph walk 
G_w = ox.graph_from_address(place, retain_all=True, network_type='walk', simplify=True, clean_periphery=False) 


print('all: ', G_a.size(weight='length'), 'walk: ', G_w.size(weight='length'))

walk网络类型是完全双向的,这意味着每对相邻节点之间至少有两条边(如果节点由多个街道段直接连接,则可能有两条以上,如这是一个 MultiDiGraph),一个从节点 u 指向 v,另一个从节点 v 指向 u。行人可以在任何街道上向任一方向行走,因此步行网络中的所有边都必须是双向的。

all 网络类型不是完全双向的,因为它不假设谁或什么可能流经它。因此,它的所有边在存在时都服从 one-way 方向性约束,这意味着它的某些节点可能仅由单个 one-way 边链接。

这就是为什么您可能会在 walk 网络模型中看到比 all 网络模型中更多的边。但是,您的 all 网络的节点数始终至少与 walk 网络的节点数相同,如您在此处所见:

import osmnx as ox
ox.config(use_cache=True, log_console=True)

place = 'Empire state building, New York, NY 10001, USA'
G_a = ox.graph_from_address(place, retain_all=True, network_type='all', 
                            simplify=True, clean_periphery=False)
G_w = ox.graph_from_address(place, retain_all=True, network_type='walk', 
                            simplify=True, clean_periphery=False)
assert len(G_a) >= len(G_w)

您还可以使用 bidirectional_network_types 设置查看和设置哪些 network_type 参数被视为双向:

print(ox.settings.bidirectional_network_types)

bidirectional_network_types 设置将在下一版本的 OSMnx 中通过 ox.config() 公开。