Osmnx中的多边形节点长度不一致

时间:2020-07-22 14:18:57

标签: python networkx osmnx

我的问题非常简单:我有一个由2个多边形组成的网络,而另一个仅包含前一个网络的两个多边形之一。如果检查网络中有2个多边形的一个多边形中有多少个节点,我将获得9735个节点。但是,如果我检查同一个多边形中但是只有一个多边形的网络中有多少个节点,我会得到9719。我不明白为什么会有所不同,它们应该相同。

以下是代码:

cities = ox.geocode_to_gdf(['Município de Lisboa', 'Município da Amadora'])
whole_polygon = cities.unary_union #unary union of both geometries
lisbon_pol = cities['geometry'].iloc[0] #geometry of just lisbon
amadora_pol = cities['geometry'].iloc[1]

G = ox.graph_from_polygon(whole_polygon, network_type='drive', simplify=True)
G_nx = nx.relabel.convert_node_labels_to_integers(G)

nodes_in_lx = nodes[nodes.within(lisbon_pol)] 
print(len(nodes_in_lx)) # This gives 9735 nodes

G_lx = ox.graph_from_polygon(lisbon_pol, network_type='drive', simplify=True)
print(len(G_lx)) # This gives 9719 nodes

导致不一致的原因更多的事实是,如果我对各个多边形中的节点求和,则得到的节点要少于whole_polygon中的节点:

print(len(G)) # gives 12812

G_am = ox.graph_from_polygon(amadora_pol, network_type='drive', simplify=True)
print(len(G_am)) # gives 3071 nodes

因此:3071 + 9719 =12790 and not 12812

我不知道哪里出了错误或有什么错误。

1 个答案:

答案 0 :(得分:1)

我不知道哪里出了错误或有什么错误。

没有错误。这是描绘现实世界空间图的人工范围时的标准“边界”问题。查看nodes_in_lxG_lx之间不同的节点。注意到它们都在哪里吗?就在您两个学习区域之间的边界上。

在构建图形模型时,OSMnx可以做各种事情来减轻人为的外围影响。您可以仔细阅读源代码以获取详细信息。但是,在您的情况下,最重要的可能与确定哪些空间元素在请求的研究区域“内”或“外”有关。例如,如果一条边缘穿过边界,是否应包括在内?如果不包含它,它的事件节点会发生什么?

在查询/构造图形之前将两个多边形合并在一起时,您不必为将它们分隔开的内部边界处理任何此类“外围”问题。但是,当您直接直接下载这两个多边形之一的数据时,您要做必须处理这些问题。因此,由于存在或缺少该内部边界,可能会有细微的差异。