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

遍历多边形要素掩膜栅格时遇IndexingError错误求解决

问题解决:遍历多边形掩膜栅格并获取统计值

错误原因分析

  • 循环内几何要素获取方式错误:row.loc[index, 'geometry'] 属于冗余且错误的写法,row 本身就是当前行的单条记录,直接通过 row['geometry'] 即可获取单个多边形几何。
  • rio.clip() 参数格式错误:该方法要求传入GeoJSON格式的几何列表,单个几何无需调用 apply(mapping)(apply 是GeoDataFrame级别的方法),直接用 mapping() 转换后放入列表即可。

修正后的代码

import geopandas as gpd
import rioxarray as rxr
from shapely.geometry import mapping

# 读取数据
shpfile = gpd.read_file('shapefile.shp')
raster = rxr.open_rasterio('raster.tif')

# 统一坐标系(若栅格与矢量坐标系不一致时启用)
# shpfile = shpfile.to_crs(raster.rio.crs)

# 存储统计结果的列表
stats_results = []

for index, row in shpfile.iterrows():
    # 将单个多边形转为GeoJSON格式并放入列表
    single_geom = [mapping(row['geometry'])]
    # 执行栅格掩膜
    raster_clipped = raster.rio.clip(single_geom, drop=False)
    # 计算目标统计值(可按需调整统计项)
    stats = {
        '要素索引': index,
        '均值': raster_clipped.mean().values.item(),
        '总和': raster_clipped.sum().values.item(),
        '最大值': raster_clipped.max().values.item(),
        '最小值': raster_clipped.min().values.item()
    }
    stats_results.append(stats)

# 将统计结果转为DataFrame并保存
stats_df = gpd.GeoDataFrame(stats_results)
stats_df.to_csv('掩膜统计结果.csv', encoding='utf-8-sig')

额外优化建议

  • 若要素数量过千且追求效率,可尝试将矢量按批次拆分后批量掩膜,或结合 dask 实现并行处理。
  • 掩膜前务必确认栅格与矢量坐标系一致,否则会出现无有效掩膜区域的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:20:11