You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OSMNX graph_from_polygon处理多面GeoDataFrame报错求解决方案

解决方案:处理GeoDataFrame中全部多边形的路网获取

方法1:合并所有多边形为单个MultiPolygon(推荐)

把GeoDataFrame里的所有几何对象合并成一个MultiPolygon,直接传给graph_from_polygon,一次性获取所有区域的路网,避免多次请求OSM数据。

代码示例:

import geopandas as gpd
import osmnx as ox

# 读取并转换坐标系
gif_umkreis = gpd.read_file('Gifhorn_umkreis_3857.shp')
gif_umkreis = gif_umkreis.to_crs(4326)

# 合并所有几何为单个MultiPolygon
merged_polygon = gif_umkreis.unary_union

# 获取路网
transport_mode = "drive"
G = ox.graph_from_polygon(merged_polygon, network_type=transport_mode, simplify=True)

# 可选:绘制路网
ox.plot_graph(G)

方法2:遍历每个多边形获取路网后合并

如果需要保留单个多边形的路网数据,或者合并操作有异常,可以遍历GeoSeries里的每个Polygon,分别获取路网,再用ox.utils_graph.combine_graphs合并所有图对象。

代码示例:

import geopandas as gpd
import osmnx as ox
from osmnx.utils_graph import combine_graphs

gif_umkreis = gpd.read_file('Gifhorn_umkreis_3857.shp')
gif_umkreis = gif_umkreis.to_crs(4326)
transport_mode = "drive"

# 初始化空列表存储每个多边形的路网图
graphs = []
for polygon in gif_umkreis['geometry']:
    # 跳过空几何或无效几何
    if polygon.is_valid and not polygon.is_empty:
        g = ox.graph_from_polygon(polygon, network_type=transport_mode, simplify=True)
        graphs.append(g)

# 合并所有路网图
G = combine_graphs(graphs)

# 可选:绘制合并后的路网
ox.plot_graph(G)

注意事项

  • 合并多边形前,可提前过滤无效几何:gif_umkreis = gif_umkreis[gif_umkreis.is_valid]
  • 若多边形存在重叠,合并后的路网不会重复计算,OSMnx会自动处理
  • 遍历方法会发起多次OSM请求,速度慢于合并方法,适合多边形数量较少的场景

内容的提问来源于stack exchange,提问作者Zei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:10:39