Растровая арифметика в QGIS с помощью RasterCalc
по адресу http://gis-lab.info/qa/rastercalc.html
Растровая арифметика в QGIS.
RasterCalc — легкий в использовании и функциональный калькулятор растров реализованный как расширение для свободной ГИС с открытым кодом — QGIS.
Замечания по установке
Расширение доступно из официального репозитория.
RasterCalc разработан для QGIS версии 1.0.0 и старше. Для своей работы требует наличия следующих Python-модулей:
- pyparsing — библиотека синтаксического анализа
- osgeo.gdal — Python интерфейс к библиотеке GDAL
Если эти модули отсутсвуют, при попыке запуска расширения появится сообщение об ошибке.
Проще всего тем, кто пользуется инсталлятором OSGeo4W — в нем есть все необходимое. Нужные пакеты называются pyparsing и gdal-python. Если используется официальный установщик «все-в-одном» (не OSGeo4W): потребуется скачать и установить pyparsing, все остальные модули уже включены в инсталлятор.
Исходный код модуля можно получить через репозиторий на GitHub или выполнив команду:
git clone git@github.com:nextgis/RasterCalc.git
Работа с расширением
После подключения и запуска расширения с помощью кнопки
появится окно, похожее на калькулятор:
В окне расположены следующие элементы:
- список растров, загруженных в проект. Растры сгруппированы по размерам
- список каналов растра, заполняется автоматически при выборе растра
- кнопки для быстрой вставки функций. Тут же находится выпадающий список шаблонов выражений
- область ввода, в которой по мере набора отображается выражение. Поддерживается копирование и вставка текста
- строка сообщений, в которой отображаются ошибки, предупреждения и информационные сообщения
- кнопка очистки области ввода
- выпадающий список для управления форматом пикселей итогового растра
- поле для ввода имени итогового файла
- флажок, позволяющий загрузить результат вычислений на карту
- кнопки запуска вычислений и закрытия окна
Формат выражений — традиционный, как в математике; есть поддержка скобок, в том числе вложенных. Имена растров должны заключаться в квадратные скобки («[]»), после имени растра через «собаку» («@») обязательно указывается номер канала. Вставка имени растра выполняется по двойному клику на соответствующем элементе списка растров, при этом автоматически будет использован (и добавлен к имени) 1й канал. Вставка выбранного растра вместе с нужным номером канала возможна по двойному клику на нужный номер канала в списке каналов.
Некоторые распространенные операции доступны в виде «шаблонов». После выбора такого «шаблона» из выпадающего списка, в область ввода вставляется заготовка, в которой условные растры нужно заменить своими.
В процессе набора выражения осуществляется его проверка. При наличии ошибок в строку сообщений выводится соответствующий текст, а кнопка «Рассчитать» блокируется.
При помощи кнопок быстрого ввода доступны:
- арифметические действия (+, -, *, /)
- тригонометрические функции (sin, cos, tan, asin, acos, atan)
- натуральный логарифм (log), экспонента (exp) и возведение в степень (^)
- вставка скобок, знак взятия канала
Реализованы, но не имеют кнопок быстрой вставки (т.е. вводить необходимо вручную):
- операторы сравнения (<, >, =, !=, <=, >=)
- условные операторы (lt — меньше, gt — больше, eq — равно, ne — не равно, le — меньше или равно, ge — больше или равно)
Операторы сравнения позволяют попиксельно сравнить канал растра с некоторой величиной или другим каналом этого же или любого другого растра. Результатом сравнения будет растр, в котором все пиксели, удовлетворяющие условию получат значение 1, а все остальные, соответственно, 0.
Условные операторы являются дальнейшим развитием операторов сравнения. Оператор принимает три аргумента:
- растр, который сравнивается
- величина, с которой сравниваем
- величина, используемая для замены значений
Второй и третий аргументы могут быть числом, произвольным каналом растра (в этом случае выполняется попиксельное сравнение и/или замена), выражением.
Рассмотрим использование условных операторов на примерах. Конструкцию
le( [relief]@1, 50, 200 )
следует читать так: всем пикселям 1го канала растра relief, значение которых меньше или равно 50, присвоить значение 200. Еще два примера
eq( [relief]@1, [mask]@4, 150 )
пиксели растра relief, значение которых равно соответствующим пикселям растра mask станут равны 150.
gt( [relief]@1, [mask]@4, [base]@2 )
пиксели растра relief, значение которых больше или равно соответствующим пикселям растра mask будут заменены соответствующими пикселями растра base.
Контакты
Если вы нашли ошибку или у вас есть предложения по улучшению расширения — воспользуйтесь багтрекером.