进口货包:
from rasterio.mask import mask
import geopandas as gpd打开一个shapefile:
gdf = gpd.read_file(shpfilepath+clipshape)打开一个栅格文件:
img = rasterio.open(f'{rstfilepath}raw_immutable/SuperView/{SV_filename}{ext}')然后执行行动:
for poly_gon in gdf.geometry:
out_image, out_transform = mask(img, poly_gon, crop=True)但这失败了:
TypeError: 'Polygon' object is not iterable我无法找到如何处理shapefile中的每个多边形(在我的例子中为5),使其成为裁剪光栅图像的多边形。
发布于 2022-04-19 12:59:23
更新
不如去嵌套你的结果吧。首先创建一个空对象,就像一个空数据集,然后像这样填充它:
empt_dict1=dict()
for i in range(len(gdf.geometry)):
empt_dict1[i] = dict()
empt_dict1[i][0], empt_dict1[i][1] = mask(img, gdf.geometry[i], crop=True)您期望的剪辑在empt_dict列表的每个子对象中。
我现在没有一个有用的gdf,所以如果您可以这样对它进行索引,或者您应该使用类似于.loc的东西,我就不放心了。
旧答案
如果我理解正确的话,你会同时使用所有多边形的整个区域。不如使用一个临时层将它们合并到一个单一的层中,如下面所示。PS:我试着用你们的名字,因为你们没有提供任何数据。
gdf["dummy"]=[0 for i in range(5)]
gdf_tempo = gdf.dissolve(by=dummy)
out_image, out_transform = mask(img, gdf_tempo , crop=True)https://stackoverflow.com/questions/71924119
复制相似问题