在Python中使用Rasterio遮罩的重叠错误

时间:2019-04-19 13:40:16

标签: python mask shapefile rasterio fiona

我有一个卫星图像栅格文件和一个Shapefile,该文件由几个离散的多边形组成。我想从栅格文件中为每个这些多边形分别提取(或遮罩)Numpy图像阵列。

当前,我使用Fiona导入Shapefile并创建多边形列表。一次使用 all 面罩屏蔽栅格文件没有问题。但是,当我尝试使用列表中的单个多边形时,出现错误:“ ValueError:输入形状不与栅格重叠。”尽管先前获得了成功的结果,而且两个文件都使用相同的CRS。

import rasterio
import shapefile
import fiona
import numpy as np

with fiona.open("test.shp", "r") as shapefile:

    features = [feature["geometry"] for feature in shapefile]

features = [x for x in features if x is not None]

这有效:

with rasterio.open('sat_img_B01.jp2') as src:

    out_image, out_transform = rasterio.mask.mask(src, features,
                                                        crop=True)

这不起作用(WindowError:窗口不相交,并且 ValueError:输入形状不与栅格重叠):

index = 0

with rasterio.open('sat_img_B01.jp2') as src:

    out_image, out_transform = rasterio.mask.mask(src, [features[index]], crop=True)

我想我缺少基本的东西!是否有一种优雅的方法可以从光栅图像中提取“特征”列表中的每个多边形作为单独的图像文件/ numpy数组?

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须确保shapefile和栅格图像具有相同的crs: 尝试打印它们。