(корреляция) - методическое пособие извлечению данных в QGIS

advertisement
Построение поверхностей и извлечение их них массива значений в
QuantumGIS
1. Подготовка QGIS к работе
Для успешного выполнения нижеописанного алгоритма необходимо иметь QGIS версии
2.4 (или выше) с установленными модулями:


Value tool
Interpolation Plugin
Для установки модулей следует обратиться к пункту «Управление модулями» вкладки
«Модули» главного меню.
В открывшемся окне нужно выбрать слева подменю «Все», и либо найти указанные
модули в списке, либо воспользоваться строкой поиска
После того, как вы нашли нужный модуль, достаточно нажать кнопку «Установить
модуль» в нижнем правом углу окна.
Для того, чтобы убедиться в корректной установке модулей, нужно:
а) Value Tool
Зайти в меню «Вид» - «Панели», и убедиться, что там присутствует пункт Value Tool. При
его активации под деревом слоёв должна появиться соответствующая панель.
б) Raster Interpolation
В меню «Модули» должно появиться подменю «Raster Interpolation».
Кроме модулей вам понадобится также использовать панель инструментов из меню
«Анализ» (Processing - Toolbox).
!ВНИМАНИЕ
Не гарантируется работа используемой далее функциональности QGIS при несоблюдении
следующего условия:


Все пути и имена используемых файлов не должны содержать кириллических
символов и пробелов! Это касается всех исходных файлов, а также тех, которые
будут создаваться во время выполнения работы.
o Плохой пример: «C:\Работы по картографии\Корреляция\Поле
температуры.jpg»
o Хороший пример: «D:\Cartography\Temperature_grid.tif»
Для всех операций и наборов данных используйте СК EPSG:3857 (Pseudo Mercator)
2. Исходные данные
Исходными данными для выполнения работы являются карты, изображающие
потенциально взаимосвязанные явления способом изолиний. В общем случае это
отсканированные страницы атласов или тематические карты. После предварительной
подготовки отсканированных изображений (обрезка, ориентация) они доступны в виде
обыкновенных .jpg файлов. Рассмотрим решение задачи на примере потенциально
взаимосвязанных карт «Скорость звука на глубине 2000 метров» и «Плотность воды на
глубине 2000 метров». Исходные файлы имеют имена Skorost_Zvuka_2000.jpg и
Plotnost_Vodi_2000.jpg соответственно.
Кроме этих изображений ничего больше не требуется.
3. Открытие и привязка изображений
На одном из прошлых занятий вы уже столкнулись с задачей привязки, пространственного
определения растрового изображения. Тогда вы привязывали топографическую карту по
действительному положению местности, на ней отображаемой. Это обеспечило
пространственное подобие местности и изображения, а также возможность совместной
интерпретации вашей топографической карты и геоданных из любых других источников.
Однако иногда возникает потребность привязки изображений не к истинному их
положению, а в некоторое условное пространство, в котором метрика не очень важна. В
данном случае можно воспользоваться таким приёмом, привязав одно изображение к
другому, чтобы их содержание геометрически стало друг другу соответствовать.
Конечно, привязка всех изображений в действительное пространство это более
правильный и универсальный способ (ведь тогда они автоматически начнут
соответствовать и друг другу), но время от времени к вам в руки будут попадать наборы
данных, которые не могут быть просто и адекватно привязаны в абсолютные координаты.
Представьте, к примеру, что на картах выше нет сетки, а географические объекты были
подвержены неизвестному типу искажений. Это не позволит вам корректно привязать их
(Несмотря на кажущуюся нелепость такой гипотезы, подобные данные встречаются
гораздо чаще, чем хотелось бы). Однако в данном случае приоритетной задачей является
сравнение изображенных явлений между собой, безотносительно их географического
положения. Это хороший повод попробовать относительную, а не абсолютную, привязку
изображения.
В первую очередь нужно выбрать изображение-ориентир, к которому будет привязано
второе. Выбор произволен, пусть это будет Skorost_zvuka_2000.jpg.
Добавим его в qgis как источник растровых данных
Если внимательно посмотреть на координаты в области добавленного изображения,
легко заметить, что они не имеют никакого отношения к реальным. Об этом нужно
помнить.
Теперь запускаем модуль привязки растров (Растр – привязка растров)
В открывшемся окне используем кнопку «добавить растр»
И выбираем второе изображение, которое необходимо привязать.
Оно добавится в окно просмотра. Теперь нужно создать набор точек, которые будут
связывать два изображения. Для этого следует воспользоваться функцией «добавить
точку».
Программа переходит в режим ожидания выбора вами точки на привязываемом
изображении. Это должна быть некоторая ключевая точка, которую легко найти и на
изображении ориентире. Так как в данном случае у нас есть сетка, разумно использовать
её. При выборе одного из её узлов появится окно:
Оно предлагает вам либо ввести координаты вручную, либо взять их из основной карты
(для этого следует нажать кнопку «с карты»). При её нажатии в фокусе окажется основное
окно qgis, в котором вы должны указать соответствующую точку на изображенииориентире.
После выбора точки в основном окне, поля с координатами в модуле привязки
заполнятся автоматически. Нужно нажать ОК для утверждения и сохранения точки.
Таким образом следует выбрать как можно больше точек по периметру и внутри
территории интереса.
Если сетки нет (что бывает часто), то можно в качестве ключевых точек использовать, к
примеру, однозначно выделяемые точки на государственных границах, береговых линиях
и т.п.
Теперь нужно настроить параметры привязки в соответствующем пункте меню
Важно задать имя нового (привязанного) изображения, а также тип трансформации. Для
относительной привязки рекомендуется использовать трансформацию Гельмерта.
Теперь можно запускать трансформацию с помощью кнопки «начать привязку».
Теперь в дереве слоёв основного окна QGIS появился привязанный слой
Можно поэксперементировать, включая и отключая верхний слой – вы увидите, что
изображения хорошо соответствуют друг другу. Если это не так, значит, вы ошиблись с
привязкой.
4. Создание полигонального слоя с областью интереса
Теперь нужно ограничить область, в рамках которой будет производиться моделирование
(в общем случае – послойно окрашенная в соответствии с изолиниями территория). Для
этого нужно создать новый shape-файл (Слой – создать слой – создать shape-файл)
Он должен быть полигональным и в оговоренной ранее системе координат.
Дополнительных атрибутов задавать не нужно.
Сохраним слой с именем border. После этого он автоматически добавится в дерево слоёв
Ранее вы уже сталкивались с созданием и редактированием векторных слоёв. Для того,
чтобы добавить объект в векторный слой, войдите в режим редактирования и выберите
инструмент «Добавить объект».
Необходимо создать полигон, по внешнему контуру охватывающий всю территорию
интереса:
Для того, чтобы лучше понимать, что происходит под вашим новым векторным слоем,
можно задать для него прозрачность (свойства слоя – стиль – прозрачность).
Вы могли заметить на исходном изображении острова, которые, конечно, не могут быть
включены в моделируемую поверхность. Для их вырезания следует использовать
инструмент «Добавить кольцо» из панели редактирования.
Обводя с помощью этого инструмента части ранее нарисованного полигона, вы можете
вырезать их.
В результате получаем корректную область:
5. Векторизация изолиний и трансформирование их в точки
Почти любой алгоритм построения поверхностей требует в качестве исходных данных
слой точечных объектов, у каждого из которых в атрибутах хранится значение
моделируемого явления в данной точке.
Для начала необходимо создать векторный слой с изолиниями (которые, по существу,
являются «носителями» исходных количественных данных), содержащимися на исходных
картах.
Нам понадобятся два векторных линейных слоя – для изолиний скорости звука, и для
изолиний плотности воды. Для этого создаем линейные shape-файлы с численным
атрибутом, в котором будут храниться значения изолиний.
Обратите внимание, что тип данных атрибута может быть различным. К примеру,
скорость звука – целое число, а плотность воды – десятичное с пятью цифрами после
запятой. Это просто определить по самой карте.
Теперь нужно создать в каждом слое линейные объекты поверх каждой
присутствующей на карте изолинии, записывая в атрибуты их значения. Нужно стараться
чаще ставить узлы, т.к. именно они станут затем точками, опорными для моделирования.
В результате должны получиться два векторных линейных слоя, содержащих все
изолинии исходных карт. В рассматриваемом примере слой с изолиниями скорости звука
имеет имя zvuk, а с изолиниями плотности воды – plotnost.
Для трансформирования линейных слоёв в точки нужно воспользоваться
инструментом «извлечь узлы» (Вектор – обработка геометрии – извлечь узлы).
В качестве исходного слоя выбираются, поочередно, изолинии с моделируемыми
параметрами (zvuk, plotnost). Для хранения точек удобно использовать имена с
добавленным словом points, т.е. zvuk_points и plotnost_points.
Результирующие слои содержат множество точек, в атрибутах каждой из которых
записано значение соответствующей ей изолинии.
6. Построение поверхностей по точкам
Собственные средства qgis не позволяют строить сложные поверхности (реализованы
только простые TIN и IDW методы интерполяции), однако, начиная с версии 2.0, в
интерфейсе QGIS доступны инструменты открытой научной ГИС SAGA, которыми также
просто пользоваться, как и «родными» функциями. Для вызова достаточно выбрать
нужную функцию в «панели анализа» справа.
Для построения поверхностей по данным изолиний растровых карт наиболее
подходящим алгоритмом представляется Thin Plate Spline (global), доступный в панели
анализа (SAGA — Grid - spline — Thin Plate Spline (global)).
При его выборе открывается окно, в котором необходимо выбрать слой с точечными
объектами (Points), содержащими «измеренные» значения, атрибут этого слоя (Attribute),
в котором значения записаны, охват территории (Output extent), в пределах которого
должна быть проведена интерполяция, а также размер ячейки результирующей
поверхности (Cell size). Поле Grid рекомендуется оставить без изменений («Сохранить во
временный файл»). В качестве output extent следует выбрать слой border, для этого нужно
нажать кнопку справа от поля, и в выпавшем списке выбрать “Use layer/canvas extent”.
В открывшемся окне нужно выбрать слой с границами территории, т.е. слой border
От значения cell size зависит детализация поверхности. Рекомендуется выставить 1-2
метра.
В результате настройки алгоритма для скорости звука могут выглядеть примерно так:
Аналогичным образом, только со слоем plotnost_points и атрибутом plotnost будут
выглядеть настройки для плотности воды.
После выполнения алгоритма в дерево слоёв будет добавлен слой с именем Grid
А в окне просмотра данных появится монохромное изображение поверхности.
На самом деле внешний вид поверхности весьма условен, т.к. она не содержит никаких
данных о цвете. В свойствах слоя можно настроить любое, в том числе цветное,
отображение поверхности. Существенным является тот факт, что в любой точке
пространства, охваченного поверхностью, существует конкретное количественное
выражение смоделированного явления. Если обратиться к модулю value tool, который по
умолчанию находится под деревом слоёв, и активировать кнопку “Enable”, то можно
динамически определять значение поверхности в любой точке, куда подведен курсор
мыши.
Можно провести эксперимент, в дереве слоёв поместив слой с картой над слоем с
поверхностью
И, водя мышкой по карте, наблюдать за изменением значения Grid в окне модуля
Value Tool.
Значение довольно точно соответствует нашим представлениям о том, как
изолинии на карте моделируют поверхность.
В силу специфики взаимодействия QGIS и инструментов SAGA, с получившейся
поверхностью нельзя совершать никаких операций до пересохранения её через qgis. Для
этого выберите слой Grid в дереве слоёв, вызовите правой кнопкой мыши контекстное
меню, и обратитесь к пункту «Сохранить как».
В примере поверхность скорости звука сохраняется с именем zvuk_grid.tif, а
плотности воды plotnost_grid.tif.
Теперь можно удалять слой Grid, добавляя вместо него соответствующий, вновь
сохраненный tif.
7. Обрезание поверхности
Очевидно, что прямоугольная, охватывающая в том числе вовсе неизвестные
территории поверхность это не то, что нам нужно. Поскольку уже есть контур области
интереса (слой border), то достаточно обрезать поверхности по нему. Для этого нужно
воспользоваться инструментом «обрезать растр» (Clipper), доступный в Растр –
извлечение.
В качестве исходного файла выбираются, поочередно, ранее созданные поверхности
(zvuk_grid, plotnost_grid), в качестве режима обрезки: слой маски border. Целевые файлы
удобно назвать также, как и исходные, с добавлением слова _mod (от modified), то есть,
для примера, zvuk_grid_mod и plotnost_grid_mod.
Результирующие поверхности правильно соотносятся с исходными картами.
8. Извлечение значений с поверхности в точки
Поскольку конечной целью является получение массива значений с обеих
поверхностей, необходимо, для начала, создать поле точек (аналог палетки). Для этого
удобно воспользоваться инструментом «Регулярные точки», доступным в Вектор –
Выборка.
В появившемся окне нужно задать исходный слой границ (созданный в самом начале
border), и, главное, указать шаг сетки. Удобно использовать заданное количество точек.
При выборе числа точек стоит учитывать, что они, подобно поверхности, будут созданы на
весь прямоугольник, в который вписан слой border:
То есть в реальную область интереса их попадет несколько меньше. Если вы
планируете производить дальнейшую обработку в электронных таблицах или
статистических пакетах, то число точек можно выбирать большим. Если же вы
собираетесь обсчитывать всё в дальнейшем с помощью калькулятора, то точек лучше
взять поменьше.
Созданный в результате слой (пример выше) нужно дополнительно обрезать, для
этого следует воспользоваться функцией «обрезка» (clip) (Вектор – геообработка).
В качестве исходного векторного слоя следует выбрать только что созданный слой с
точками points, в качестве слоя отсечения – слой border. Результирующий слой удобно
назвать points_obrez.
Теперь нужно записать в атрибуты этого слоя значения с поверхностей.
Для этого нужно:
a) Добавить соответствующие поля в слой.
Выделите слой в дереве слоёв и перейдите в режим редактирования.
Зайдите в свойства слоя и перейдите во вкладку «Поля».
Добавьте два поля вещественного типа данных, с размер 20, точность 10, и
названиями в соответствии с вашими исходными картами (в случае рассматриваемого
примера – zvuk, plotnost).
Теперь, не выходя из режима редактирования, выйдите из свойств слоя и запустите
модуль Raster Interpolation (Модули – Raster Interpolation).
В открывшемся окне нужно выбрать слой с поверхностью, значения с которой требуется
извлечь, точечный слой и его атрибут, в который эти значения будут извлекаться.
На приведенном выше изображении модуль настроен для извлечения значений с
поверхности plotnost_grid_mod в атрибут plotnost слоя points_obrez, что соответствует
нашему запросу. По нажатию кнопки GO атрибуты будут заполнены.
Аналогичную операцию следует произвести ещё раз, только с другой поверхностью и
другим атрибутом (того же слоя):
После произведенных действий можно сохранять редактируемый слой и выходить из
режима редактирования.
Если открыть таблицу атрибутов слоя points_obrez, можно убедиться, что каждой точке
соответствуют два значения.
Эти данные и являются искомыми.
Стоит отметить, что табличные данные хранятся в файле с расширением .dbf (т.е. в
данном случае points2_obrez.dbf), который читается как в Microsoft Excel, так и в
OpenOffice Calc.
Из открытого файла dbf эти данные можно скопировать в новый экземпляр книги Excel
или OpenOffice Calc (чтобы не портить исходный файл), и обрабатывать их сообразно
вашим представлениям.
Скачать