Растровая арифметика в QGIS с помощью RasterCalc

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница опубликована в основном списке статей сайта
по адресу 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, все остальные модули уже включены в инсталлятор.

Исходный код модуля можно получить выполнив команду

svn co http://svn.gis-lab.info/rastercalc rastercalc

Работа с расширением

После подключения и запуска расширения с помощью кнопки

Rastercalc-icon.png

появится окно, похожее на калькулятор:

Rastercalc-02.png

В окне расположены следующие элементы:

  1. список растров, загруженных в проект. Растры сгруппированы по размерам
  2. список каналов растра, заполняется автоматически при выборе растра
  3. кнопки для быстрой вставки функций. Тут же находится выпадающий список шаблонов выражений
  4. область ввода, в которой по мере набора отображается выражение. Поддерживается копирование и вставка текста
  5. строка сообщений, в которой отображаются ошибки, предупреждения и информационные сообщения
  6. кнопка очистки области ввода
  7. выпадающий список для управления форматом пикселей итогового растра
  8. поле для ввода имени итогового файла
  9. флажок, позволяющий загружить результат вычислений на карту
  10. кнопки запуска вычислений и закрытия окна

Формат выражений — традиционный, как в математике; есть поддержка скобок, в том числе вложенных. Имена растров должны заключаться в квадратные скобки («[]»), после имени растра через «собаку» («@») обязательно указывается номер канала. Вставка имени растра выполняется по двойному клику на соответствующем элементе списка растров, при этом автоматически будет использован (и добавлен к имени) 1й канал. Вставка выбранного растра вместе с нужным номером канала возможна по двойному клику на нужный номер канала в списке каналов.

Некоторые распространенные операции доступны в виде «шаблонов». После выбора такого «шаблона» из выпадающего списка, в область ввода вставляется заготовка, в которой условные растры нужно заменить своими.

В процессе набора выражения осуществляется его проверка. При наличии ошибок в строку сообщений выводится соответсвующий текст, а кнопка «Рассчитать» блокируется.

При помощи кнопок быстрого ввода доступны:

  • арифметические действия (+, -, *, /)
  • тригонометрические функции (sin, cos, tan, asin, acos, atan)
  • натуральный логарифм (log), экспонента (exp) и возведение в степень (^)
  • вставка скобок, знак взятия канала

Реализованы, но не имеют кнопок быстрой вставки (т.е. вводить необходимо вручную):

  • операторы сравнения (<, >, =, !=, <=, >=)
  • условные операторы (lt — меньше, gt — больше, eq — равно, ne — не равно, le — меньше или равно, ge — больше или равно)

Операторы сравнения позволяют попиксельно сравнить канал растра с некоторой величиной или другим каналом этого же или любого другого растра. Результатом сравнения будет растр, в котором все пиксели, удовлетворяющие условию получат значение 1, а все остальные, соответственно, 0.

Условные операторы являются дальнейшим развитием операторов сравнения. Оператор принимает три аргумента:

  1. растр, который сравнивается
  2. величина, с которой сравниваем
  3. величина, используемая для замены значений

Второй и третий аргументы могут быть числом, произвольным каналом растра (в этом случае выполняется попиксельное сравнение и/или замена), выражением.

Рассмотрим использование условных операторов на примерах. Конструкцию

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.

Контакты

Если вы нашли ошибку или у вас есть предложения по улучшению расширения — воспользуйтесь багтрекером. Кроме того, вопросы по использованию расширения можно задать авторам напрямую (еще контакты).

Ссылки по теме