首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将shapefile中的每一个(多边形)项作为单个几何处理?

如何将shapefile中的每一个(多边形)项作为单个几何处理?
EN

Stack Overflow用户
提问于 2022-04-19 11:21:24
回答 1查看 173关注 0票数 -1

进口货包:

代码语言:javascript
复制
from rasterio.mask import mask
import geopandas as gpd

打开一个shapefile:

代码语言:javascript
复制
gdf = gpd.read_file(shpfilepath+clipshape)

打开一个栅格文件:

代码语言:javascript
复制
img = rasterio.open(f'{rstfilepath}raw_immutable/SuperView/{SV_filename}{ext}')

然后执行行动:

代码语言:javascript
复制
for poly_gon in gdf.geometry:
    out_image, out_transform = mask(img, poly_gon, crop=True)

但这失败了:

代码语言:javascript
复制
TypeError: 'Polygon' object is not iterable

我无法找到如何处理shapefile中的每个多边形(在我的例子中为5),使其成为裁剪光栅图像的多边形。

EN

回答 1

Stack Overflow用户

发布于 2022-04-19 12:59:23

更新

不如去嵌套你的结果吧。首先创建一个空对象,就像一个空数据集,然后像这样填充它:

代码语言:javascript
复制
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:我试着用你们的名字,因为你们没有提供任何数据。

代码语言:javascript
复制
gdf["dummy"]=[0 for i in range(5)]
gdf_tempo = gdf.dissolve(by=dummy)

out_image, out_transform = mask(img, gdf_tempo , crop=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71924119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档