7.3. Занятие: Анализ рельефа местности

Отдельные виды растров позволяют вам лучше изучить ландшафт, который они представляют. Цифровые Модели Рельефа (ЦМР)/ DEM особенно полезны в этом отношении. В этом уроке вы будете использовать инструменты анализа местности, чтобы узнать больше об изучаемой местности для предлагаемой жилой застройки, о которой говорилось ранее.

Цель этого урока: Использовать инструменты анализа местности для того, чтобы получить дополнительные сведения о местности.

7.3.1. basic Идем дальше: Вычисляем отмывки

Мы будем использовать все тот же слой ЦМР, который был использован в предыдущем уроке. Если вы начинаете этот раздел с нуля, вам надо использовать панель Browser и загрузить raster/SRTM/srtm_41_19.tif.

Слой ЦМР показывает вам высоту местности, но иногда это может показаться немного абстрактным. Он содержит всю необходимую вам трехмерную информацию о местности, но она не выглядит похожей на трехмерный объект. Для того, чтобы получить лучшее представление о местности, можно вычислить отмывку / Hillshade, которая представляет собой растр, отображающий местность с использованием света и тени для создания трехмерного изображения.

Нам надо использовать алгоритмы в меню Raster ► Raster terrain analysis.

  1. Надо кликнуть на меню Hillshade.

  2. Алгоритм позволит вам указать положение источника света: Azimuth имеет значения от 0 (север) до 90 (восток), 180 (юг) и 270 (запад), а Vertical angle настраивает высоту источника света (от 0 до 90 градусов).

  3. Нам надо использовать следующие значения:

    • Z factor на 1.0

    • Azimuth (horizontal angle) на 300.0°

    • Vertical angle на 40.0°

    ../../../_images/hillshade_explanation.png
  4. Сохраните файл в новой папке exercise_data/raster_analysis/ с названием hillshade.

  5. И кликните на кнопку Run

У вас будет новый слой под названием hillshade, который выглядит так:

../../../_images/hillshade_raster.png

Красиво выглядит и трехмерно, но можем ли мы улучшить картинку? Сама по себе отмывка выглядит как гипсовая повязка. Разве мы не можем как-то использовать его вместе с другими, более красочными растрами? Конечно, можем, используя отмывку в качестве наложения.

7.3.2. basic Идем дальше: Используем отмывки в качестве наложения (оверлей)

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

  1. Надо изменить символы исходного слоя srtm_41_19, чтобы использовать схему Pseudocolor как в предыдущем упражнении.

  2. Надо скрыть все слои, за исключением слоев srtm_41_19 и слоев hillshade.

  3. Кликните на srtm_41_19 и перетащите его и поместите под слой hillshade в панели Layers.

  4. Настроите слой hillshade на прозрачность, кликнув по вкладке Transparency в свойствах слоя.

  5. Настройте Global opacity на 50%.

    Вы получите такой результат:

    ../../../_images/hillshade_pseudocolor.png
  6. Отключите слой hillshade и включите снова в панели Layers, чтобы увидеть разницу.

Используя отмывку таким образом, вы сможете улучшить топографию ландшафта. Если эффект кажется вам недостаточно сильным, вы можете изменить прозрачность слоя hillshade; но, конечно, чем ярче становится отмывка, тем тусклее будут цвета за ней. Вам надо найти баланс, который вас устроит.

Не забудьте сохранить проект, когда закончите.

7.3.3. Идем дальше: Поиск наилучших мест

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

  • смотрит на север,

  • с уклоном менее 5 градусов,

  • но если уклон меньше 2 градусов, то аспект не имеет значения.

Давайте найдем лучшее место для них.

7.3.4. moderate Идем дальше: Вычисляем уклон

Уклон показывает, уровень отвесности рельефа. Если, например, вы хотите построить на этой земле дома, то вам нужна относительно ровная земля.

Чтобы вычислить уклон, вам надо использовать алгоритм Slope в Processing ► Raster terrain analysis.

  1. Вам надо открыть алгоритм.

  2. Выберите srtm_41_19 в качестве Elevation layer.

  3. Установите Z factor на 1.0.

  4. Сохраните выход как файл с названием slope в той же папке, что и hillshade.

  5. Кликните на кнопку Run.

Теперь вы увидите уклон рельефа. Каждый пиксель показывает соответствующее значение уклона. Черные пиксели показывают ровный рельеф, а белые – крутой рельеф:

../../../_images/slope_raster.png

7.3.5. moderate Попробуйте сами вычислить аспект

Аспект - направление по компасу, к которому обращен уклон местности. Значение аспекта 0 означает, что уклон обращен на север, 90 на восток, 180 на юг и 270 на запад.

Поскольку это исследование проводится в Южном полушарии, дома должны быть построены на северном уклоне, чтобы они могли оставаться под лучами солнца.

Вам надо использовать алгоритм Aspect в Processing ► Raster terrain analysis для того, чтобы сохранить слой aspect вместе с slope.

Проверьте свои результаты

7.3.6. moderate Идем дальше: Находим северную сторону

У вас теперь есть растры, которые показывают уклон, а также аспект, но вы пока не знаете, каковы идеальные условия. Как можно было бы провести этот анализ?

Ответ сидит внутри Raster calculator.

У QGIS есть различные калькуляторы растра:

  • Raster ► Raster Calculator

  • В процессе:

    • Raster Analysis ► Raster calculator

    • GDAL ► Raster miscellaneous ► Raster calculator

    • SAGA ► Raster calculus ► Raster calculator

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

Нам надо использовать Raster Analysis ► Raster calculator в панели инструментов обработки.

  1. Надо открыть инструмент, дважды кликнув по нему:

    • В верхней левой части диалогового окна перечислены все загруженные растровые слои как name@N, где name это название слоя и N это группа.

    • В правой верхней части вы увидите много разных операторов. На мгновение подумайте и представьте, что растр - это изображение. Вы должны представить его как 2D-матрицу, заполненную числами.

  2. Север находится под углом 0 (ноль) градусов, поэтому, чтобы местность смотрела на север, его аспект должен быть больше 270 градусов или меньше 90 градусов. Поэтому, формула такова:

    aspect@1 <= 90 OR aspect@1 >= 270
    
  3. Теперь вам нужно настроить детали растра, например, размер ячейки, масштаб и ССК. Можно вручную или автоматически, выбрав Reference layer. Выберите эту последнюю опцию, нажав на кнопку рядом с параметром Reference layer(s).

  4. В диалоговом окне надо выбрать слой aspect так как мы хотим получить слой с таким же разрешением.

  5. Сохраните слой как aspect_north.

    Диалоговой окно должно выглядеть так:

    ../../../_images/raster_calculator.png
  6. И наконец надо кликнуть на кнопку Run.

Вы получите такой результат:

../../../_images/aspect_result.png

Выходные значения 0 или же 1. Что это означает? Для каждого пикселя в растре написанная нами формула, показывает, соответствует ли она условиям или нет. Поэтому окончательный результат будет Неверно (0) и Верно (1).

7.3.7. moderate Попробуйте сами: Больше критериев

Теперь после того как вы закончили аспект, создайте два новых слоя из ЦМР.

  • Первый слой должен определять участки, где уклон меньше или равен 2 градусам.

  • Второй аналогичен, но уклон должен быть меньше или равен 5 градусам.

  • Сохраните их внутри exercise_data/raster_analysis как slope_lte2.tif и slope_lte5.tif.

Проверьте свои результаты

7.3.8. moderate Идем дальше: Объединяем результаты анализа растра

Вы теперь получили три растровых слоя из ЦМР:

  • aspect_north: местность, обращенная на север

  • slope_lte2: уклон, равный 2 градусу или ниже

  • slope_lte5: уклон не более 5 градусов

Если условие выполняется, значение пикселя равно 1. В остальных случаях он равен 0. Поэтому, если вы умножите эти растры, пиксели со значением 1 для всех они получат значение 1 (остальные получат 0).

Условия, которые должны быть выполнены:

  • при уклоне 5 градусов или ниже местность должна быть обращена на север,

  • при уклоне 2 градуса или ниже направление местности не имеет значения.

Поэтому, вам нужно найти местность, где уклон не превышает пяти градусов AND местность смотрит на севр, OR уклон не более 2 градусов. Такая местность подойдет для постройки.

Чтобы вычислить ту местность, которая соответствует этим критериям, необходимо сделать следующее:

  1. Надо открыть снова Raster calculator.

  2. Используйте это выражение в Expression:

    ( aspect_north@1 = 1 AND slope_lte5@1 = 1 ) OR slope_lte2@1 = 1
    
  3. Надо настроить параметр Reference layer(s) на aspect_north (неважно, выберете ли вы другой – они все были вычислены из srtm_41_19).

  4. Сохраните выход/результат внутри exercise_data/raster_analysis/ как all_conditions.tif.

  5. Кликните на кнопку Run

Результат:

../../../_images/development_analysis_results.png

Подсказка

Предыдущие шаги можно было упростить с помощью следующей команды:

((aspect@1 <= 90 OR  aspect@1 >= 270) AND slope@1 <= 5) OR slope@1 <= 2

7.3.9. moderate Идем дальше: Упрощаем растр

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

  1. Надо открыть инструмент Sieve (GDAL ► Raster Analysis внутри Processing Toolbox).

  2. Настройте Input file на all_conditions, а Sieved на all_conditions_sieve.tif (внутри exercise_data/raster_analysis/).

  3. Установите Threshold до 8 (минимум восемь смежных пикселей) и отметьте Use 8-connectedness.

    ../../../_images/raster_sieve_dialog.png

    После завершения обработки будет загружен новый слой.

    ../../../_images/sieve_result_incorrect.png

    Что происходит? Ответ кроется в метаданных нового растрового файла.

  4. Просмотрите метаданные внутри вкладки Information диалогового окна Layer Properties. Посмотрите на значение STATISTICS_MINIMUM:

    ../../../_images/sieve_metadata.png

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

  5. Надо открыть Raster Calculator и построить это выражение:

    (all_conditions_sieve@1 <= 0) = 0
    

    Это сохранит все положительные значения и переведет отрицательные числа на ноль, оставив все участки со значением 1 нетронутыми.

  6. Сохраните выход/результат внутри exercise_data/raster_analysis/ как all_conditions_simple.tif.

Ваш выход/результат выглядит так:

../../../_images/raster_sieve_correct.png

Что и следовало ожидать: упрощенная версия предыдущих результатов. Помните, что если результаты, которые вы получаете, не соответствует вашим ожиданиям, надо посмотреть на метаданные (и атрибуты вектора, если есть), которые помочь решить эти проблемы.

7.3.10. moderate Идем дальше: Пере-классификация растра

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

Вернемся к слою aspect. Нам известно, что он имеет числовые значения в диапазоне от 0 до 360. Нам надо пере-классифицировать этот слой на другие дискретные значения (от 1 до 4) в зависимости от аспекта:

  • 1 = север (от 0 до 45 и от 315 до 360);

  • 2 = Восток (от 45 до 135);

  • 3 = Юг (от 135 до 225);

  • 4 = Запад (от 225 до 315).

Эту операцию можно выполнить с помощью калькулятора растра, но формула станет очень длинной.

Альтернативный инструмент это инструмент Reclassify by table в Raster analysis внутри Processing Toolbox.

  1. Надо открыть этот инструмент.

  2. Выберите aspect как Input raster layer.

  3. Кликните на кнопку из Reclassification table. Появится диалоговое окно в виде таблицы, в котором вы можете выбрать минимальные, максимальные и новые значения для каждого класса.

  4. Кликните на кнопку Add row и добавьте 5 строк. Заполните каждую строку, как показано на следующем рисунке, и кликните на кнопку OK:

    ../../../_images/reclassify_table.png

    Метод, используемый алгоритмом для обработки пороговых значений каждого класса, определяется Range boundaries.

  5. Сохраните слой как reclassified.tif внутри папки exercise_data/raster_analysis/.

    ../../../_images/reclassify_setup.png
  6. Кликните на кнопку Run.

Если вы сравните исходный слой aspect со слоем reclassified, вы не увидите больших различий. Но посмотрев на символы, вы увидите, что значения начинаются от 1 до 4.

Давайте улучшим стиль этого слоя.

  1. Надо открыть панель Layer Styling.

  2. Выберите Paletted/Unique values, вместо Singleband gray.

  3. Кликните на кнопку Classify для того, чтобы автоматически получить значения и присвоить им случайные цветов:

    ../../../_images/unique_style.png

Выход/результат должен выглядеть следующим образом (цвета у вас могут быть разными, если они были сгенерированы случайным образом):

../../../_images/reclassify_result.png

Применив к слою данную пере-классификацию и стиль палитры, вы можете сразу различать области аспекта.

7.3.11. basic Идем дальше: Запрос к растру

В отличие от векторных слоев, растровые слои не имеют таблицу атрибутов. Каждый пиксель содержит одно или несколько числовых значений (однополосные или многополосные растры).

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

Как мы можем запросить растровый слой, чтобы получить значение пикселя? Мы можем использовать кнопку identify Identify Features!

  1. Надо выбрать инструмент в панели инструментов «Атрибуты».

  2. Кликните на случайное место в слое srtm_41_19. Появится Identify Results со значением полосы в месте, которое вы выбрали:

    ../../../_images/identify_raster.png
  3. Вы сможете изменить выход панели Identify Results из текущего режима tree на режим table, выбрав Table в меню View внизу панели:

    ../../../_images/identify_raster_table.png

Через некоторое время вам может надоесть нажимать на каждый пиксель для получения значения растра. Мы можем использовать плагин Value Tool для решения этой проблемы.

  1. Надо перейти на Plugins ► Manage/Install Plugins…

  2. Во вкладе All наберите value t в поле поиска.

  3. Выберите плагин Value Tool, кликните на Install Plugin , а потом Close диалоговое окно.

    ../../../_images/value_tool.png

    Появится новая панель Value Tool.

    Совет

    Если вы закроете панель, вы сможете снова открыть ее, активировав ее в View ► Panels ► Value Tool или кликнув на значок на панели инструментов.

  4. Чтобы использовать плагин, просто кликните на флажок Enable и убедитесь, что слой srtm_41_19 является активным (отмечен) в панели Layers.

  5. Наведите курсор на карту, чтобы увидеть значение пикселей.

    ../../../_images/value_tool_query.png
  6. Но есть еще кое-что. Плагин Value Tool позволяет запрашивать все активные растровые слои в панели Layers. Сделайте слои aspect и slope снова активными и наведите указатель мыши на карту:

    ../../../_images/value_tool_query_multi.png

7.3.12. В заключении

Вы посмотрели, как можно получить все виды аналитических продуктов из ЦМР. К ним относятся вычисление отмывки, уклона и аспекта. Вы также узнали, как использовать калькулятор растра для дальнейшего анализа и объединения этих результатов. И наконец, вы узнали, как пере-классифицировать слой и как запрашивать результаты.

7.3.13. Что дальше?

Теперь у вас есть два анализа: векторный анализ, показывающий вам потенциально подходящие участки, и растровый анализ, который показывает потенциально подходящую местность. Как их можно объединить, чтобы получить окончательный результат для решения этой проблемы? Это будет темой следующего урока, который начинается со следующего модуля.