Найти в Дзене
DIGGeo

Как рассчитать степень лесистости территории с помощью космоснимков

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

Прежде всего, скачиваем нужный по дате и территориальному охвату космический снимок с сайта геологической службы США, предварительно зарегистрировавшись на нем.

Войдя в аккаунт, в панели слева выбираем интересующий временной период, например, снимки за последние полгода, или с мая по сентябрь 1990 года. В зависимости от периода выбираем соответствующую версию снимков. Нам нужны летние снимки 2020 года.

Выбрав нужный территориальный и временной охват, переходим во вкладку Data Sets
Выбрав нужный территориальный и временной охват, переходим во вкладку Data Sets
Выбор велик, но нам нужны снимки Landsat 8, потому что они подходят по времени
Выбор велик, но нам нужны снимки Landsat 8, потому что они подходят по времени

Для справки – периоды работы спутников Landsat:

Landsat 1: 23.07.1972 – 06.01.1978

Landsat 2: 22.01.1975 – 22.01.1981

Landsat 3: 05.03.1978 – 31.03.1983

Landsat 4: 16.07.1982 – 1993

Landsat 5: 01.03.1984 – 21.12.2012

Landsat 6: на целевую орбиту не выведен

Landsat 7: 15.04.1999 – н.в.

Landsat 8: 11.02.2013 – н.в.

Снимок от 10 июня 2020 года
Снимок от 10 июня 2020 года

Скачанная папка со снимком содержит 12 растровых изображений – это каналы, и два текстовых документа. Для дальнейших действий нужен красный (RED) и инфракрасный (Nir) каналы. Если снимок восьмой версии Landsat, нужны четвертый и пятый каналы, если седьмой – третий и четвертый.

B4 и B5 – красный и инфракрасный – RED и Nir
B4 и B5 – красный и инфракрасный – RED и Nir

Далее вычисляем индекс NDVI (вегетационный индекс, отражающий количество фотосинтетически активной биомассы, проще говоря, зеленой растительности). Во вкладке «Растр» открываем «Калькулятор растров» и высчитываем NDVI по формуле NDVI = (Nir – RED)/(Nir + RED). Смотрим на скрин ниже и обращаем внимание на значения B4 (RED) и B5 (Nir) в имени канала.

Выбираем куда сохранить выходной растр и нажимаем OK
Выбираем куда сохранить выходной растр и нажимаем OK

Результат должен быть таким.

Растры B4 и B5 в этом проекте больше не нужны
Растры B4 и B5 в этом проекте больше не нужны

NDVI варьируется от -1 (отсутствие растительности) до 1 (густая растительность). В нашем случае его диапазон от -0,47 до 0,93.

-7

Схема взята из этой статьи. Статья будет полезна тем, кому нужно более детально разобраться в индексах и их формулах. А мы двигаемся дальше, и для отображения лесной растительности нужно выделить значение от 0,7 до 0,93. Стандартный калькулятор растров в версии 3.10.6 почему-то не желает высчитывать столь дробное значение, поэтому мы обратились к калькулятору модуля Semi-Automatic Classification Plugin (SCP).

Десятичная дробь в калькуляторе растров SCP пишется через точку
Десятичная дробь в калькуляторе растров SCP пишется через точку
Результат: территория, покрытая лесной растительностью
Результат: территория, покрытая лесной растительностью

Значение 0,9995 обычно рассчитывается как 1, машина в этот раз так рассчитала. Все, что имеет значение 0,9995 – это та растительность, которую мы выделили в NDVI-диапазоне 0,7 – 1. Пока оставляем все как есть и переключаемся на рельеф. Скачиваем с геологической службы США нужные SRTM-снимки.

Добавляем снимки в проект и объединяем: «Растр» > «Прочее» > «Результат/Merge». Результат объединения обрезаем (все в той же вкладке «Растр») и, если необходимо, задаем нужную проекцию.

Территорию Крымских гор в различной степени содержат в себе четыре SRTM-снимка
Территорию Крымских гор в различной степени содержат в себе четыре SRTM-снимка
Результат объединения и обрезки
Результат объединения и обрезки

Наш слой cut_merge имеет минимальное значение -5, а максимальное – 1525. Надо отметить, что в самом SRTM есть незначительная погрешность: наивысшая точка горного Крыма – 1545 метров. Вероятно, если бы снимок был более высокого разрешения, этой неточности удалось бы избежать.

Через калькулятор растров вычисляем территорию выше отметки 149 метров
Через калькулятор растров вычисляем территорию выше отметки 149 метров
Результат: территория 149+
Результат: территория 149+

Возвращаемся к лесу. Мы имеем два растровых изображения-результата: первый отражает всю покрытую лесом территорию, второй – всю территорию выше 149 метров. Теперь надо объединить их. Открываем калькулятор растров и задаем следующее выражение.

Для удобства лес выделим зеленым, территорию 149+ – красным
Для удобства лес выделим зеленым, территорию 149+ – красным
В данном случае важно не перепутать оператор AND и оператор OR, нам нужен AND
В данном случае важно не перепутать оператор AND и оператор OR, нам нужен AND

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

Растры совместились
Растры совместились

Работа с растрами закончена. Данный результат стандартными средствами преобразовываем в вектор: «Растр» > «Преобразование» > «Создание полигонов (растр в вектор)».

Результат преобразования
Результат преобразования

В получившемся векторном слое открываем таблицу атрибутов и все, что имеет значение 0, выделяем и удаляем. Сохраняем результат. Оставшиеся полигоны со значением 1 – это собственно векторный слой леса на высоте 149+.

Далее в пределах этого векторного леса мы попросту создаем регулярные точки на определенном небольшом расстоянии. Мы выбрали 30 метров. Точек будет очень много, поэтому точечный shape будет долго создаваться. И создастся он в пределах прямоугольника, охватывающего слой. Поэтому необходимо применить следующий инструмент: «Вектор» > «Выборка» > «Выделение по районам».

Да, это прогружается несметное количество точек
Да, это прогружается несметное количество точек

По завершении алгоритма «Выделение по районам» сохраняем выделение в отдельный слой и добавляем в проект.

Теперь это то, что нужно
Теперь это то, что нужно

Следующий шаг – создание сетки: «Вектор» > «Выборка» > «Create grid (Создание сетки)». Выбираем форму сетки (квадраты, ромбы, шестиугольники), задаем их размер, например, 4000х4000 метров.

-20

Рассчитываем количество точек в каждой ячейке сетки: «Вектор» > «Анализ» > «Подсчитать точки в полигоне». В результате появится еще одна аналогичная сетка, но в ее таблице атрибутов будет новое поле NUMPOINTS с количеством точек в ячейках.

И наконец работа со стилями. В свойствах слоя переходим во вкладку «Стиль» и начинаем творить. Выбираем градуированный знак, поле NUMPOINTS и играемся с градиентами и классификациями.

На вкус и цвет...
На вкус и цвет...
Ячейки с нулевым значением можно вообще отключить
Ячейки с нулевым значением можно вообще отключить

Результат. Один из множества вариантов. После этого дело только за макетом.

Читайте нас в Telegram и ВКонтакте