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()
公开。
我通过 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()
公开。