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

空间分箱:Thiessen多边形空值与MemoryError问题求助

问题解决方案

问题1:移除空降雨站点后仍存在空Thiessen多边形

  • 验证有效站点数据完整性:执行print(gdf_rainfall.shape)确认dropna(subset=['Rainfall (mm)'])后保留的站点数量符合预期,排查是否因df_stations.merge(df, on="id")的合并逻辑丢失有效站点。
  • 裁剪泰森多边形至研究区:使用geopandas的voronoi_diagram方法,指定clip参数为研究区边界(gdf_sg.geometry.unary_union),避免生成超出研究范围的空多边形。示例代码:
    voronoi = gdf_rainfall.voronoi_diagram(clip=gdf_sg.geometry.unary_union)
    
  • 改用最近邻空间连接:若泰森多边形匹配仍有空值,直接对网格和有效站点做最近邻空间连接,强制为每个网格分配最近站点的降雨数据。示例:
    grid_gdf = gpd.sjoin_nearest(
        grid_gdf, 
        gdf_rainfall[['geometry', 'Rainfall (mm)']], 
        how='left',
        max_distance=10000  # 根据研究区范围调整最大距离阈值
    )
    

问题2:200x200m网格生成时内存溢出

  • 分块生成网格:将研究区域拆分为多个子区域(比如按10km×10km的块),逐个生成子网格并处理,完成后合并结果。示例逻辑:
    bounds = gdf_sg.total_bounds
    # 按10km步长拆分研究区边界
    x_blocks = np.arange(bounds[0], bounds[2], 10000)
    y_blocks = np.arange(bounds[1], bounds[3], 10000)
    
    grid_list = []
    for x_min in x_blocks[:-1]:
        for y_min in y_blocks[:-1]:
            sub_bounds = [x_min, y_min, x_min+10000, y_min+10000]
            # 生成子区域200m网格
            sub_grid = gpd.GeoDataFrame.from_features(
                generate_grid(sub_bounds, step=200),  # 自定义网格生成函数
                crs=gdf_sg.crs
            )
            # 子网格与站点做空间连接
            sub_grid = gpd.sjoin_nearest(sub_grid, gdf_rainfall, how='left')
            grid_list.append(sub_grid)
    
    # 合并所有子网格
    final_grid = pd.concat(grid_list, ignore_index=True)
    
  • 降低数据类型:将网格坐标数据从int64改为float32或int32(若精度允许),减少内存占用。示例:
    geometry=lambda d: gpd.points_from_xy(
        d["location.longitude"], d["location.latitude"], dtype=np.float32
    )
    
  • 用Dask-Geopandas并行处理:利用Dask的分块能力,避免全量数据加载到内存。示例:
    import dask_geopandas as dg
    # 按CPU核心数设置分区数
    dask_grid = dg.from_geopandas(grid_gdf, npartitions=8)
    # 并行执行最近邻连接
    dask_grid = dask_grid.sjoin_nearest(gdf_rainfall, how='left')
    # 计算后导出结果
    final_grid = dask_grid.compute()
    
  • 边生成边保存:处理完每个子网格后直接保存到GeoParquet等文件,不保留在内存中,完成后按需读取合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:01:29