Ошибка наложения с использованием маски Растерио в Python - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть растровый файл спутникового изображения и шейп-файл, состоящий из нескольких дискретных полигонов. Я хотел бы по отдельности извлечь (или замаскировать) массив растровых изображений для каждого из этих полигонов из растрового файла.

В настоящее время я импортирую шейп-файл с помощью 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)

Полагаю, мне не хватает чего-то фундаментального! Существует ли элегантный способ извлечения каждого многоугольника из списка «объектов» в виде отдельного файла изображения / массива с растровым изображением?

Спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...