【问题标题】:Inconsistent node length from polygons in OsmnxOsmnx中多边形的节点长度不一致
【发布时间】:2020-07-22 14:18:57
【问题描述】:

我的问题非常简单:我有一个由 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

我不明白错误在哪里或是否有任何错误。

【问题讨论】:

  • 你用simplify=False得到同样的效果吗?
  • 是的,它仍然给了我不同数量的节点
  • 这样的话,你可以试试retain_all=True吗?

标签: python networkx osmnx


【解决方案1】:

我不明白错误在哪里或是否有任何错误。

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

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

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

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 2021-12-03
    • 2020-06-24
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2023-01-14
    • 2020-04-04
    • 2019-05-14
    相关资源
    最近更新 更多