У меня есть растровый файл спутникового изображения и шейп-файл, состоящий из нескольких дискретных полигонов. Я хотел бы индивидуально извлечь (или замаскировать) массив изображений Numpy для каждого из этих многоугольников из растрового файла.
В настоящее время я импортирую шейп-файл с помощью Fiona и создаю список полигонов. У меня нет проблем с маскированием растрового файла с использованием всех полигонов сразу. Однако, когда я пытаюсь использовать отдельный многоугольник из списка, я получаю сообщение об ошибке: «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 из растрового изображения?
Спасибо!!