【问题标题】:Converting GeoDataFrame to NetworkX graph with Momepy returns error使用 Momepy 将 GeoDataFrame 转换为 NetworkX 图会返回错误
【发布时间】:2022-06-19 09:17:47
【问题描述】:

我正在使用 OSMnx 生成一个 GeoDataFrame,它代表一个地方的结构(在我的示例中是柏林)。为此,我从OSMnx 调用函数geometries_from_place 来生成它。然后,我想使用库 momepy,它具有函数 gdf_to_nx,该函数用于将 GeoDataFrame (GeoPandas) 转换为图形 (NetworkX)。

import momepy
import osmnx as ox

location = 'Berlin'
landmarks = ox.geometries.geometries_from_place(location, tags={'tourism':'attraction'}, buffer_dist=1500)

landmarks_graph = momepy.gdf_to_nx(namedAttractionsDf)

不幸的是,我从最后一行代码中返回以下错误: NotImplementedError: Component rings have coordinate sequences, but the polygon does not

我的最终目标是应用OSMnx 函数ego_graph 来生成生成图的每个节点的邻域,但要做到这一点,我必须有一个图。

我知道我可以使用 OSMnx 函数 graph_from_place 来生成图形,但是调用这两个函数(graph_from_place 和 geometries_from_place)太重了,从技术上讲,它们携带相同的信息,但代表不同。因此,同时调用它们将是对同一请求的重复。

我应该如何避免我得到的错误?

【问题讨论】:

    标签: python networkx osmnx


    【解决方案1】:

    我遇到了类似的问题,这是由于我的数据框将几何图形存储为Polygons,而不是LineStrings。我通过提取多边形的边界来解决它,可以如下实现:

    your_gdf.geometry = your_gdf.geometry.boundaries
    

    然后您可能会遇到您的Polygons(在某些情况下可能是MultiPolygons)转换为MultiLineStrings,将整个数据帧转换为LineStrings,将your_gdf.explode() 传递给momepy.gdf_to_nx(),如下所示

    G = momepy.gdf_to_nx(your_gdf.explode())
    

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 2019-03-06
      • 2021-03-31
      • 2017-03-02
      相关资源
      最近更新 更多