Обсудить в форуме Комментариев 17Редактировать в вики
Зачастую для проведения операций растровой алгебры над несколькими растрами одновременно, необходимо, чтобы эти растры имели одинаковые экстент и разрешение. В данной статье описан процесс унификации экстента и разрешения нескольких растров при помощи скрипта, интегрируемого в Processing - модуль геопроцессинга QGIS.
Загрузите архив со скриптом и help-файлом. Распакуйте архив и скопируйте содержимое папки "scripts" в директорию, предназначенную для Python-скриптов модуля Processing в QGIS (например, ~./qgis2/processing/scripts, если вы используете Linux). Если вы не знаете, где находится нужная папка перейдите в Processing -> Options and configuration -> Scripts -> Scripts folder, см. скриншот:
Перезапустите QGIS, если она была запущена. Откройте Processing Toolbox. Во вкладке Scripts вы увидите раздел Raster processing, а в нём - скрипт Unify extent and resolution:
Запустив его вы увидите диалоговое окно:
Обратите внимание, что во вкладке Help находится описание скрипта (на английском языке).
В поле "rasters" выберите 2 или более растра, экстент и разрешение которых надо сделать одинаковыми. Системы координат всех растров должны быть идентичными.
В поле "replace No Data value with" введите значение, которое будет использовано для новых пикселей, добавляемых в растр, а также заменит в результирующих растрах значения No Data обрабатываемых растров. Обратите внимание, что этому значению в результирующих растрах не будет присвоен атрибут No Data - они будут обрабатываться любым ПО, как обычные пиксели.
В поле "output directory" укажите путь к папке в которую должны быть сохранены результаты. Результирующие файлы будут названы следующим образом. Первая часть имени файла будет соответствовать названию исходного файла, к нему будет добавлен постфикс "_unified", например: "raster_1.tif" -> "raster_1_unified.tif".
После окончания основной работы скрипта появится сообщение о том, что растры были унифицированы и пользователю будет предоставлена возможность добавить результаты на карту, если он этого пожелает:
Для запуска скрипта в режиме пакетной обработки кликните по скрипту в Processing Toolbox правой кнопкой мыши и выберите "Execute as batch process":
Появится такое диалоговое окно, где вы сможете настроить все параметры, указанные выше:
Опишем только основные идеи, использованные в алгоритме. Исходный код здесь подробно обсуждаться не будет, так как скрипт содержит свыше десятка функций и несколько классов (для Qt-сообщений). Кроме того, скрипт снабжен достаточным количеством комментариев.
Для обработки растров используется не QGIS API, а GDAL API. Работа алгоритма состоит в следующем:
Xgeo = GT[0] + Xpixel*GT[1] + Yline*GT[2] Ygeo = GT[3] + Xpixel*GT[4] + Yline*GT[5]
В любой момент времени не происходит работы более, чем с двумя растрами (исходный и результирующий), таким образом, количество растров, которые можно подать на обработку за раз практически не ограничено.
Если вы таки захотите покопаться в исходном коде, то начните с функции main():
def main(rasters_list, no_data):
# проверяем корректность указанного пути сохранения результатов
if not checkFolder(output_directory):
return NoPathGiven()
# проверяем, совпадают ли проекции растров
if not checkCRS(rasters_list):
return WrongCRS()
# получаем экстент для результирующих ратров
fin_coordinates = finCoordinates(rasters_list)
# собираем необходимую информацию для обработки
processing_list = processingList(rasters_list, output_directory)
raster_1 = rasters_list[0]
raster_1 = gdal.Open(raster_1)
main_geo_transform = raster_1.GetGeoTransform() # параметры геотрансформации эталонного растра
proj = raster_1.GetProjection()
if not no_data:
no_data = raster_1.GetRasterBand(1).GetNoDataValue()
if not no_data:
no_data = -9999
# обрабатываем растры
for tupl in processing_list:
raster = gdal.Open(tupl[0])
output = ExtendRaster(raster, fin_coordinates, tupl[1], main_geo_transform, proj, no_data)
raster = None
if output != True:
return None
# выводим сообщение об успешном завершении
result = Success()
return result.initUI(processing_list)
Пожелания и предложения по работе скрипта можно оставлять в соответствующей теме форума.
Обсудить в форуме Комментариев 17Редактировать в вики
Последнее обновление: 2014-05-15 00:08
Дата создания: 05.01.2014
Автор(ы): SS_Rebelious
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).