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