Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用光栅掩码时发生重叠错误_Python_Mask_Shapefile_Rasterio_Fiona - Fatal编程技术网

在Python中使用光栅掩码时发生重叠错误

在Python中使用光栅掩码时发生重叠错误,python,mask,shapefile,rasterio,fiona,Python,Mask,Shapefile,Rasterio,Fiona,我有一个卫星图像光栅文件和一个由几个离散多边形组成的形状文件。我想从光栅文件中分别提取(或屏蔽)每个多边形的Numpy图像阵列 目前,我使用菲奥娜导入SeabFEFLE并创建多边形列表。我一次使用所有多边形屏蔽光栅文件没有问题。但是,当我尝试使用列表中的单个多边形时,我得到一个错误:“ValueError:输入形状不重叠。”。尽管之前获得了成功的结果,但这两个文件使用相同的CRS import rasterio import shapefile import fiona import numpy

我有一个卫星图像光栅文件和一个由几个离散多边形组成的形状文件。我想从光栅文件中分别提取(或屏蔽)每个多边形的Numpy图像阵列

目前,我使用菲奥娜导入SeabFEFLE并创建多边形列表。我一次使用所有多边形屏蔽光栅文件没有问题。但是,当我尝试使用列表中的单个多边形时,我得到一个错误:“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:输入形状不重叠(光栅):

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


谢谢

您必须确保shapefile和光栅图像具有相同的crs:
试着把它们打印出来。

你能详细说明这一点吗?我也有同样的经历problem@Claus我记得我的问题是shapefile和光栅图像没有加载相同的crs(坐标参考系)。我认为您已经加载了它们(使用fiona的shapefile)和(使用resterio的光栅图像)。对于要使用
.crs
属性打印crs的shapefile,以及对于resterio,请尝试使用
src=rasterio.open('image')
加载光栅图像,然后他们打印其crs
src.crs
。如果两个CR不相同,则遮罩将无法工作。解决方案是将其中一个的crs更改为另一个。我知道现在很晚了。
index = 0

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

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