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

Python Osmnx中多边形的节点长度不一致,python,networkx,osmnx,Python,Networkx,Osmnx,我的问题很简单:我有一个由两个多边形组成的网络,另一个仅包含前一个网络中两个多边形中的一个。如果我检查有两个多边形的网络中一个多边形中有多少个节点,则得到9735个节点。但是,如果我检查有多少节点位于同一个多边形中,但在只有一个多边形的网络中,我得到9719。我不明白为什么不同,它们应该是一样的 代码如下: cities = ox.geocode_to_gdf(['Município de Lisboa', 'Município da Amadora']) whole_polygon = cit

我的问题很简单:我有一个由两个多边形组成的网络,另一个仅包含前一个网络中两个多边形中的一个。如果我检查有两个多边形的网络中一个多边形中有多少个节点,则得到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
造成这种不一致的原因是,如果我将单个多边形中的节点相加,得到的节点比整个多边形中的节点要少:

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而不是12812

我不明白哪里出了错,或者有没有错

我不明白哪里出了错,或者有没有错

没有错。这是描述真实世界空间图形的人工范围的标准“边界”问题。查看\u lx中的
节点与
G\u lx
中的节点之间的差异。注意到他们都在哪里了吗?就在你两个学习区域的边界上

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


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

您是否使用
simplify=False
获得相同的效果?是的,它仍然会给我提供不同的节点数。在这种情况下,您是否可以尝试使用
retain\u all=True
?交叉引用