Можно ли использовать какой-нибудь gdal API для вызова gdal_translate
из кода Python? Я не имею в виду просто выполнить gdal_translate.exe из файловой системы, а скорее как-то вызвать его в коде, чтобы мне не нужно было знать точный каталог, в котором находится исполняемый файл gdal_translate?
40
Ответы:
Начиная с GDAL 2.1 (подробнее здесь ), утилиты GDAL и OGR можно использовать в качестве библиотечных функций. Например:
источник
gdal.Translate()
перечислены здесь: gdal.org/python/osgeo.gdal-module.html#TranslateOptionsСмотрите Учебное пособие по GDAL API .
Если вы хотите больше контроля над выходом, такого как изменение размера, подмножество и т. Д., Используйте VRT в качестве входных данных, это то, как gdal_translate делает это внутренне.
источник
Да, вы можете позвонить в GDAL Utilities из Python. Есть очень незначительные различия в подходе в зависимости от того, является ли утилита exe-программой или же частью кода Python. В любом случае вам нужно использовать модуль подпроцесса :
Вы заметите, что я добавляю экранированные кавычки вокруг моих путей. Это связано с тем, что в Windows у меня были проблемы с путями, особенно с пробелами, или из-за того, что один из символов '\' создает другой случайно экранированный символ. Так что я просто сохраняю правильный путь в aspec как бы.
Если вы используете одну из утилит python, просто сделайте то же самое, за исключением того, что ваш exe в начале командной строки подпроцесса теперь называется "C: \ python32 \ python.exe" (или какой бы версией вы не пользовались), а ваш второй элемент - утилита python, которую вы хотите использовать.
Очевидно, что вы также можете перебирать свою файловую систему, а не использовать жестко запрограммированные константы, но это всего лишь пример.
РЕДАКТИРОВАТЬ - Обобщение для плагинов QGIS
QGIS QGIS создает / изменяет ряд переменных среды при запуске. Таким образом, вы можете создавать обобщенные переменные пути для библиотек / утилит GDAL, используя их (см. Настройки-> Параметры-> Система) вместо жестко заданных путей в примере выше.
источник
Я делаю это с различными командами gdal, используя os.system, которую вы можете использовать для вызова функций так же, как из командной строки:
Это также описано в лекции 7 здесь: http://www.gis.usu.edu/~chrisg/python/2009/
источник
subprocess.call
безопаснееos.system
.gdal.Warp()
в течение нескольких часов, чтобы правильно получитьPG:
источник данных,cutlineDSName
чтобы управлятьcutlineSQL
. (Я знаю, верно? Несколько часов на самом деле что-то решает ? Ужас! </ Kidding>). Со временем все заработало, и кажется, что оно значительно быстрееos.system()
илиsubprocess.call()
. Это делает ~ 2 миллиона порезов, так что я не буду знать, будет ли это на самом деле быстрее, до некоторого времени сегодня вечером ... но это работает совершенно правильно.Вот краткий код для тех, кто хочет сохранить полосы из составного многоканального TIF-файла в отдельные файлы с помощью GDAL Translate в Python.
Это может быть полезно для дальнейшей обработки (например, с использованием Растерио, как здесь ).
источник