微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OSMnx-为什么“步行”网络大于“全部”网络?

如何解决OSMnx-为什么“步行”网络大于“全部”网络?

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

尝试一下此代码,如果您有任何解释,请告诉我。

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,network_type='walk',clean_periphery=False) 


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

解决方法

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

all网络类型不是完全双向的,因为它不假设可能流过谁或什么。因此,它的所有边缘在出现时都遵循单向方向性约束,这意味着它的某些节点只能由单个单向边缘链接。

这就是为什么在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,network_type='walk',clean_periphery=False)
assert len(G_a) >= len(G_w)

您还可以使用network_type设置查看并设置将哪些bidirectional_network_types自变量视为双向参数:

print(ox.settings.bidirectional_network_types)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。