Настройка сторонних приложений

Возможности платформы геообработки могут расширяться за счет использования дополнительных приложений. В настоящее время поддерживаются SAGA, GRASS, OTB (Orfeo Toolbox) и R, а также некоторые другие приложения, предоставляющие функции анализа пространственных данных. Алгоритмы, зависящие от внешних приложений, управляются своими провайдерами.

Этот раздел рассказывает о настройке платформы геообработки для работы с этими дополнительными приложениями, а также описывает некоторые особенности алгоритмов. После корректной настройки системы вы сможете запускать внешние алгоритмы из любого компонента платформы, например из панели инструментов или редактора моделей, как и любой другой алгоритм.

По умолчанию, все алгоритмы, зависящие от внешних приложений, которые не поставляются с QGIS, деактивированы. Вы можете активировать их в диалоге настройки платформы геообработки. Убедитесь, что соответствующее приложение уже установлено в системе. Активация провайдера алгоритмов без установки приложения, которое ему требуется, приведет к появлению алгоритмов в панели инструментов, но при попытке запуска алгоритма вы получите ошибку.

Дело в том, что описания алгоритмов (необходимые для создания диалога параметров и получения информации об алгоритме) поставляются не с приложениями, а входят в состав QGIS. Т.е. они являются частью QGIS и доступны даже если сторонние приложение не установлены. Однако для запуска алгоритма необходимо наличие исполняемых файлов приложения в системе.

Примечание для пользователей Windows

Если вы не являетесь опытным пользователем и используете QGIS в среде Windows, читать эту главу необязательно. Просто убедитесь, что QGIS в вашей системе установлена при помощи автономного установщика или установщика OSGeo4W. В этом случае SAGA, GRASS и OTB автоматически устанавливаются и настраиваются, а значит вы сможете запускать их из QGIS. Все алгоритмы, доступные через упрощённый интерфейс платформы геообработки будут настроены и готовы к использованию.

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

О форматах файлов

При использовании сторонних приложений возможность открытия файла в QGIS ещё не значит, что этот файл может быть открыт и обработан каким-то другим программным обеспечением. В большинстве случаев сторонние приложения могут читать данные, загруженные в QGIS, но в других случаях это невозможно. При использовании баз данных или малораспространенных форматов, не зависимо от того растровые это данные или векторные, возможно появление проблем. Если при обработке таких данных возникли трудности, попробуйте использовать более распространенные форматы, которые точно поддерживаются обеими программами, а также проверьте консольный вывод (в окне Журнал), чтобы узнать что именно пошло не так.

Использование растровых данных GRASS является одним из случаев, когда у вас могут возникнуть проблемы, мешающие завершить анализ, если внешний алгоритм использует такой слой в качестве исходного. Поэтому такие слои не отображаются в качестве доступных для алгоритмов.

С векторными слоями любых типов таких проблем возникать не должно, так как QGIS автоматически конвертирует их из исходного формата в формат, понимаемый внешним приложением, перед тем как выполнить алгоритм. Это увеличивает время обработки, и может потребовать длительное время в случае больших слоёв. Так что не удивляйтесь, если обработка данных их базы данных будет длиться дольше, чем обработка аналогичных данных в формате shape-файлов.

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

Что касается выходных форматов, то в качестве выходных могут использоваться все (как растровые, так и векторные) форматы, поддерживаемые QGIS. Некоторые провайдеры могут не поддерживать определённые форматы, но все они могут выполнять экспорт растровых данных в общепринятые форматы, которые затем можно трансформировать в самой QGIS. Как и в случае в исходными данными, при необходимости преобразования форматов соответственно увеличивается время обработки.

Если расширение (суффикс) выходного файла не соответствует ни одному из поддерживаемых QGIS форматов, будет добавлен суффикс по умолчанию и использован формат по умолчанию. В случае растров это .tif, а для векторных данных — .shp.

О выделении в векторных слоях

Внешние приложения также обрабатывают выделение в исходном слое, если оно существует. Однако, для этого необходим экспорт всех исходных векторных слоёв, как будто все они находятся в формате, неизвестном внешнему приложению. Слой может быть передан во внешнее приложение напрямую только если в нём нет выбранных объектов или настройка Use only selected features отключена.

Во всех остальных случаях необходим экспорт выбранных объектов, что увеличивает время обработки.

SAGA

Алгоритмы SAGA могут использоваться из QGIS, если SAGA установлена в системе, а платформа геообработки правильно настроена и может найти исполнимые файлы SAGA. Для запуска алгоритмов SAGA необходимы консольные приложения SAGA.

В случае использования Windows и автономного установщика либо установщика OSGeo4W, SAGA будет установлена одновременно с QGIS и настроена автоматически, дополнительная настройка путей не требуется.

Если вы установили SAGA самостоятельно (помните, необходимо использовать версию 2.1), следует настроить пути к исполнимым файлам. Для этого откройте диалог настройки. В разделе SAGA найдите параметр SAGA folder. Введите путь к каталогу установки SAGA. Закройте диалог настройки, теперь вы можете запускать алгоритмы SAGA из QGIS.

Если вы используете Linux, необходимо помнить, что исполнимые файлы SAGA не поставляются с QGIS, поэтому необходимо загрузить и установить программу самостоятельно. Подробную информацию об установке можно найти на сайте SAGA. Необходимо использовать SAGA версии 2.1.

В этом случае потребности в дополнительной настройке нет, как нет и соответствующих элементов в диалоге настройки. Вместо этого необходимо убедиться, что SAGA установлена корректно и доступна в PATH. Просто откройте эмулятор терминала и введите saga_cmd чтобы поверить, что система может найти файлы SAGA.

Ограничения системы покрытий SAGA

Большинство алгоритмов SAGA, оперирующих несколькими растрами, требуют, чтобы эти растры имели одну систему покрытия. Т.е. имели одинаковый географический охват и одинаковый размер ячейки. При вызове алгоритмов SAGA из QGIS можно использовать любые слои, не зависимо от размера их ячеек и охвата. В случаях, когда несколько растров используется в качестве исходных данных алгоритма SAGA, QGIS автоматически пересчитывает их в единую систему и затем передаёт SAGA (кроме случаев, когда соответствующий алгоритм SAGA может использовать слои с разными системами).

Описание этой общей системы покрытия контролируется пользователем, соответствующие настройки можно найти в разделе SAGA диалога параметров. Существует два способа задать целевую систему покрытия:

  • Задать параметры охвата, установив следующие параметры:

    • Resampling min X
    • Resampling max X
    • Resampling min Y
    • Resampling max Y
    • Resampling cellsize

    Имейте ввиду, что QGIS выполнит пересчет исходных слоёв к этому охвату даже если они не пересекают его.

  • Установить автоматически из исходных слоёв. Для активации этого режима включите флажок ’Use min covering grid system for resampling. Все остальные параметры в этом случае будут проигнорированы и будет использован минимальный охват, захватывающий все исходные слои. Размер ячейки целевых слоёв будет равен максимальному размеру ячейки исходных растров.

При вызове алгоритмов, которые не используют несколько исходных слоёв или не требуют единой системы покрытия, пересчет перед запуском SAGA не выполняется и все эти настройки ингорируются.

Ограничения многоканальных слоёв

В отличие от QGIS, SAGA не поддерживает многоканальные растры. Если требуется использовать многоканальное изображение (такое как RGB-растр или мультиспектральное изображение), вначале необходимо разделить его на одноканальные растры. Для этого можно использовать алгоритм «SAGA/Grid - Tools/Split RGB image» (создаёт 3 растра из RGB-композита) или «SAGA/Grid - Tools/Extract band» (извлекает один канал).

Ограничения на размер ячейки

SAGA полагает, что растровые слои имеют одинаковый размер ячеек по осям X и Y. Если вы работаете со слоями, имеющими разные размеры ячеек по горизонтали и вертикали, можно получить неожиданные результаты. В таких случаях в отладочных сообщениях SEXTANTE появится соответствующее предупреждение, информирующее о том, что исходный слой не подходит к использованию в SAGA.

Логгирование

Когда QGIS вызывает SAGA, она делает это с использованием интерфейса командной строки, т.е. передаёт набор команд, выполняющих необходимую операцию. SAGA отображает информацию о процессе, выводя на консоль сообщения, которые содержат данные о прогрессе выполнения, а также дополнительные сведения. Эта информация фильтруется и используется для обновления индикатора прогресса в процессе работы алгоритма.

Команды, посылаемые QGIS, а также информация, возвращаямая SAGA, могут записываться наряду с остальными сообщениями платформы. Эти сведения могут “быть полезны для изучения того, как QGIS взаимодействует с SAGA. За активацию журналирования отвечают два параметра — Log console output и Log execution commands.

Большинство провайдеров, использующих сторонние приложения и взаимодействующие с ними через командную строку, имеют схожие параметры, так что вы можете встретить их и в других местах диалога настройки.

R. Creating R scripts

Интеграция R в QGIS отличается от SAGA и большинства остальных провайдеров, так как не существует предустановленного набора алгоритмов, которые можно запускать (кроме нескольких примеров). Вместо этого вы должны писать свои скрипты и вызывать команды R, почти так же как и при использовании«чистого» R и почти так же, как мы вызывали скрипты геообработки в соответствующем разделе. Этот параграф покажет как вызывать команды R из QGIS и как использовать в них объекты QGIS (слои, таблицы).

Прежде всего, как мы уже видели на примере SAGA, необходимо указать QGIS где находятся исполнимые файлы R. Для этого предназначено поле R folder в диалоге настройки платформы геообработки. После настройки этого параметра можно начинать создавать свои собственные скрипты R, а затем выполнять их.

И снова, в Linux всё значительно проще: достаточно убедиться, что R доступен в PATH. Если ыв можете запустить R просто введя в консоли R, значит всё в порядке.

Чтобы добавить новый алгоритм, вызывающий функицю R (или более сложный скрипт R, который вы написали и хотите сделать доступным из QGIS), необходимо создать файл скрипта, объясняющий платформе геообработки как выполнить операцию и содержащий соответствующие команды R.

Файлы скриптов должны иметь расширение .rsx, а создавать их при наличии базовых знаний R и синтаксиса R очень просто. Скрипты сохраняются в каталог R-скриптов, путь к этому каталогу можно задать в группе R (в диалоге настройки платформы), точно так же как это делалось в случае каталога для обычных скриптов геообработки.

Рассмотрим очень простой скрипт, который вызывает метод R spsample для создания случайной сетки внутри границ полигонов заданного полигонального слоя. Этот метод находится в пакете maptools. Так как большинство алгоритмов, которые вы скорее всего захотите реализовать в QGIS, будет использовать или создавать пространственные даные, знание таких пакетов как maptools и особенно sp является обязательным.

##polyg=vector
##numpoints=number 10
##output=output vector
##sp=group
pts=spsample(polyg,numpoints,type="random")
output=SpatialPointsDataFrame(pts, as.data.frame(pts))

Первые строки, начинающиеся с двойного символа комментария Python (##), дают QGIS информацию об исходных данных алгоритма и создаваемых им результатах. Они имеют такой же синтаксис, как и в обычных скриптах геообработки, которые мы рассматривали выше, поэтому повторять описание не будем. Обратитесь к разделу processing_scripts за более подробной информацией.

Когда вы описываете исходный параметр, QGIS использует эту информацию для двух вещей: создания пользовательского интерфейса и для создания соответствующей переменной R, которая позже может использоваться в командах R.

В примере выше мы задали исходный аргумент типа vector с именем polyg. При выполнении алгоритма QGIS откроет в R слой, выбранный пользователем и запишет его в переменную с именем polyg. Т.е. имя параметра также вляется именем переменной, которую можно использовать в R для доступа к значению этого параметра (поэтому следует избегать использования зарезервированных слов R в качестве названий параметров).

Пространственные элементы, такие как векторные и растровые слои, открываются при помощи команд readOGR() и brick() (вам не нужно беспокоиться о добавлении этих команд в файл описания, QGIS сделает это автоматически), а и сохраняются как объекты Spatial*DataFrame. Поля таблиц сохраняются как строки, содержащие имя выбранного поля.

Таблицы открываются при помощи команды read.csv(). Если таблица создаётся пользователем и имеет формат, отличный от CSV, она будет соответствующим образом преобразована перед испортированием в R.

Также растровые файлы можно открывать при помощи команды readGDAL(), а не brick(). Для этого используется директива ##usereadgdal.

Если вы опытный пользователь и не хотите чтобы QGIS создавала объект, представляющий слой, используйте директиву ##passfilename. Эта директива указывает, что необходимо вернуть строку с именем файла. В этом случае, перед выполнением любых операций с файлом, вам необходимо позаботиться о его открытии.

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

pts=spsample(polyg,numpoints,type="random")

Переменная polygon уже содержит объект SpatialPolygonsDataFrame и может использоваться для вызова метода spsample, как и переменная numpoints, которая содержит число точек для создания сетки.

Так как мы описали результат типа vector с именем out, необходимо создать переменную out и записать в неё объект Spatial*DataFrame (в нашем случае SpatialPointsDataFrame). Для промежуточных переменных можно использовать любые имена. Но необходимо убедиться, что переменные, содержащие конечный результат, имеют те же имена, что использовались при их описании, а также содержат значения правильного типа.

В нашем случае результат полученный от метода spsample необходимо явно преобразовать в объект SpatialPointsDataFrame, так как изначально это экземпляр класса ppp, который не подходит для возвращения в QGIS.

Если алгоритм создаёт растровые слои, способ их сохранения будет зависеть от того была ли указана директива #dontuserasterpackage. Если директива указана, слои сохраняются при помощи метода writeGDAL(). В противном случае будет использоваться метод writeRaster() из пакета raster.

Если указана директива #passfilename, выходные растры будут созданы при помощи пакета raster (методом writeRaster()), даже если он не использовался для загрузки исходных данных.

Если алгоритм не создаёт слоёв, а выдаёт результаты на консоль, необходимо указать, что консольный вывод должен быть показан по окончанию работы алгоритма. Для этого перед командой, печатающей результат, необходимо поставить знак «больше» (>). Консольный вывод всех остальных команд отображаться не будет. Например, вот скрипт, выполняющий тест нормальности заданного поля (столбца) таблицы атрибутов векторного слоя:

##layer=vector
##field=field layer
##nortest=group
library(nortest)
>lillie.test(layer[[field]])

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

Если алгоритм создаёт какие-либо графические объекты (используя метод plot()), добавьте следующую строку:

##showplots

Это заставит QGIS сохранить все графические объекы во временный файл, который позже, после окончания обработки, будет открыт.

И консольные и графические результаты будут доступны в окне Просмотр результатов.

Больше информации можно получить, ознакомившись со скриптами, входящими в состав SEXTANTE. Большинство их них достаточно простые и будут полезны для понимания того, как создавать свои собственные.

Примечание

Библиотеки rgdal и maptools загружаются по умолчанию, поэтому добавлять соответствующие команды library() нет необходимости (однако следует убедиться, что эти два пакета установлены в вашем дистрибутиве R). Тем не менее, все остальные дополнительные библиотеки, которые будут использоваться, должны быть загружены явным образом. Просто добавьте необходимые команды в начало вашего скрипта. Также необходимо убедиться, что соответствующие пакеты установлены в дистрибутиве R, используемом QGIS. Платформа геообработки не занимается установкой пакетов R. Если вы запустите скрипт, требующий, отсутствующий в вашей установке, пакет, выполнение завершится с ошибкой и QGIS попытается сформировать список требуемых пакетов. Перед повторным запуском алгоритма необходимо установить эти пакеты вручную.

GRASS

Настройка GRASS мало чем отличается от настройки SAGA. Прежде всего необходимо указать путь к каталогу установки GRASS, но только в том случае, если вы использует Windows. Дополнительно требуется указать используемый интерпретатор командной строки (обычно это msys.exe, который имеется в большинстве дистрибутивов GRASS для Windows) и его расположение.

По умолчанию, платформа геообработки пытается настроить свой провайдер GRASS на использование версии GRASS, распространяемой вместе с QGIS. В большинстве случаев это должно работать без дополнительных действий со стороны пользователя, но если у вас возникают проблемы — попробуйте настроить провайдер вручную. Также, если вы хотите использовать другую версию GRASS, следует ихменить эти настройки, указав путь к каталогу с другой версией. Для работы алгоритмов требуется GRASS 6.4.

Если вы используете Linux, просто убедитесь, что GRASS корректно установлена и запускается из командной строки без ошибок.

Алгоритмы GRASS выполняют операции над районом. Район может быть задан вручную, используя значения, схожие с параметрами настройки SAGA, или автоматически, по минимальному охвату, покрывающему все исходные слои. Если вы предпочитаете такой подход — активируйте параметр Use min covering region в настройках провайдера GRASS.

Последний параметр, нуждающийся в настройке, связан с набором данных GRASS. Набор данных необходим для запуска GRASS, и платформа геообработки автоматически создаёт временный набор при каждом запуске. Необходимо указать какие координаты используются исходными данными — географические (широта/долгота) или спроецированные.

GDAL

Для запуска алгоритмов GDAL дополнительная настройка не требуется, так как эта библиотека распространяется вместе с QGIS и алгоритмы могут получить всю необходимую для работы информацию самостоятельно.

Orfeo ToolBox

Алгоритмы OrfeoToolBox (OTB) можно вызывать из QGIS, если OTB установлен, а QGIS правильно настроена и может найти все необходимые файлы (инструменты командной строки и библиотеки).

Как и в случае SAGA, исполнимые файлы и библиотеки OTB включены в состав автономного установщика для Windows, но не входят в состав пакето для Linux. Поэтому вам необходимо загрузить и установить недостающие программы самостоятельно. Подробные инструкции можно найти на сайте OTB.

После установки OTB запустите QGIS, откройте диалог настройки и сконфигурируйте провайдер OTB. Настройки находятся в группе Orfeo Toolbox (image analysis). Прежде всего убедитесь, что провайдер активирован.

Затем укажите путь к каталогам инструментов командной строки OTB и библиотекам:

  • nix обычно OTB applications folder указывает на /usr/lib/otb/applications, а OTB command line tools folder это /usr/bin

  • win если вы используете установщик OSGeo4W, установите пакет otb-bin и укажите C:\\OSGeo4W\\apps\\orfeotoolbox\\applications в качестве OTB applications folder, а C:\\OSGeo4W\\bin в качестве OTB command line tools folder. Эти значения используются по умолчанию, так что если OTB установлен в другое место, замените их на свои пути.

TauDEM

Для использования этого провайдера необходимо установить инструменты командной строкиTauDEM.

Windows

Инструкция по установке, а также скомпилированные инструменты для 32-х и 64-х разрядных платформ находятся на домашней странице TauDEM. ВАЖНО: необходимо загружать TauDEM версии 5.0.6, версия 5.2 в настоящее время не поддерживается.

Linux

Пакеты для большинства дистрибутивов Linux отсутствуют, поэтому вам, скорее всего, потребуется скомпилировать TauDEM самостоятельно. Так как TauDEM использует MPICH2, сначала установите его, используя пакетный менеджер своего дистрибутива. Также TauDEM может работать с OpenMPI, так что можно установить его вместо MPICH2.

Загрузите исходный код TauDEM и распакуйте архив в какой-то каталог.

Откройте файл linearpart.h и после строки

#include "mpi.h"

добавьте новую строку

#include <stdint.h>

Т.е. у вас будет

#include "mpi.h"
#include <stdlib.h>

Сохраните изменения и закройте файл. Теперь откройте файл file:tiffIO.h, найдите строку #include "stdint.h" и замените кавычки ("") на <>, т.е. у вас должно получиться

#include <stdint.h>

Сохраните изменения и закройте файл. Создайте каталог сборки и перейдите в него.

mkdir build
cd build

Настройте параметры сборки при помощи команды

CXX=mpicxx cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..

и запустите компиляцию

make

Наконец, для установки TauDEM в /usr/local/bin`, выполните

sudo make install