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

Inconsistent node length from polygons in 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

不明白哪里错了,有没有错

I don't understand where is the mistake or if there is any.

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

OSMnx 在构建图形模型时做了很多事情来减轻人工外围效应。您可以仔细阅读源代码以获取详细信息。但在您的案例中,最重要的可能与决定哪些空间元素“在”或“在”所请求的研究区域中有关。例如,如果一条边穿过边界,是否应该包含它?如果不包含,它的事件节点会怎样?

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