遍历多边形要素掩膜栅格时遇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
相关产品推荐
相关产品推荐

