Я строю сценарий на Python с использованием OGR / GDAL.
У меня есть набор шейп-файлов и набор растровых файлов GeoTiff.
Я хотел бы, чтобы мой скрипт игнорировал шейп-файлы, если они не пересекаются с растровой областью.
Шейп-файл не является прямоугольником, поэтому я не могу просто сравнить значения xmin / xmax, ymin / ymax, возвращаемые layer.GetExtent (). Мне нужен фактический многоугольник, представляющий его общую форму, а затем какой-то способ определить, пересекается ли этот многоугольник с растровым квадратом.
Я думал, что смогу каким-то образом объединить все полигоны в шейп-файле в один объект, а затем прочитать геометрию этого объекта и затем сравнить эту информацию с растровым экстентом. Тем не менее, я не уверен, как именно это выполнить.
- Как извлечь информацию о полигоне границы из шейп-файла?
- Как определить, пересекает ли этот многоугольник данный квадрат?
Ответы:
Следующий скрипт определяет ограничивающую рамку растра и создает на основе ограничивающей рамки геометрию.
Далее определяется геометрия векторного многоугольника. Это отвечает на ваш первый вопрос.
Наконец, геометрия вектора и растра проверяются на пересечение (возврат
True
илиFalse
). Это отвечает на ваш второй вопрос.источник
Я нахожу решение @ustroetz очень полезным, но его нужно исправить в двух местах. Во-первых, pixelHeight = transform [5] уже является отрицательным значением, поэтому уравнение должно быть
Во-вторых, порядок точек в кольце должен быть против часовой стрелки. У меня были проблемы с этим. Правильный порядок:
источник