Статьи
ГИС Туториалы

Контуры Танаки в QGIS

Пролог (если интересует только урок, как делать контуры Танаки, то смело можете пролистать)

Контуры Танаки - метод представления рельефа, разработанный профессором Танака Китиро в 1950 году, который по скромности изначально назвал его методом рельефного контура (Relief Contour Method).
Метод контуров Танаки представляет собой своего рода комбинацию двух стилей представления рельефа: теневой рельеф и старые добрые горизонтали, они же изолинии, они же контуры.
К горизонталям добавляется затенение и осветления симулируя влияние на них света и тени. Также как и с теневым рельефом, источник света чаще всего располагают в северо-западном направлении (315 градусов). В результате получается объемный эффект, а контуры становятся более похожи на террасы.
Работа Кирито Танака, рельеф в районе вулкана Киришима (Источник - https://www.researchgate.net/figure/A-portion-of-Tanakas-illuminated-contour-map-of-the-Kirishima-volcanic-group-near_fig2_240764793)
Первые карты в этом стиле были сделаны в черно-белом цвете из-за сложности, как в подготовке самих карт, так и их печати. Первым, кто попробовал добавить цвет в методе контуров Танаки, считается картограф Патрик Кеннели, а сделал он это впервые аж в 2001 году.

Учимся строить контуры Танаки в QGIS

Шаг 1. Скачиваем нужную нам цифровую модель рельефа.
Я использую старый добрый SRTM 1 Arc-Second Global, который можно скачать с сайта геологической службы США. Для примера, выбираю территорию Камчатки в районе вулкана Ключевская сопка, у него получаются интересные контуры.
Шаг 2. Обрезаем снимок. (не обязательно)
Этот шаг не обязательный, но его использование может сэкономить вам много времени на всех расчетных операциях. Для этого используем функцию “Обрезать растр по охвату” (Clip Raster). Найти функцию можно, как в инструментах анализа, так и во вкладке “Растр” в меню “Извлечение”.
Настройки можно использовать по умолчанию, ничего не меняя.
Этот шаг - отличная возможность пересохранить растр в наиболее подходящую для нас систему координат. Я использую, в таких случаях, зону поперечной проекции Меркатора, для Ключевской сопки это WGS 84 / UTM zone 57N (код проекции EPSG:32657).
Шаг 3. Создаем контуры.
Следующим этапом создаем наши контуры - самый важный элемент будущей карты. Используем функцию “Создать изолинии” (Contours). Чем мельче ваш масштаб, тем больше устанавливаем расстояние между изолиниями, чтобы все не смешалось в кашу. В этом случае я использую 100 м.
Остальные настройки оставим по умолчанию
Контуры с цифровой моделью рельефа сами по себе создают небольшой трехмерный эффект
Шаг 4. Разбиваем контуры на сегменты.
Теперь разбиваем наши контуры на сегменты. Для них мы будем в будущем определять, будут ли он в тени или на свету, добиваясь главной изюминки метода Танаки. Для создания сегментов используем функцию v.split.
Может быть так, что вы не обнаружите в QGIS эту функцию. Чтобы она у вас появилась, необходимо установить модуль “GRASS GIS provider” и убедиться, что он включен.
Не трогаем никакие настройки, кроме максимального количества вершин (vertices) в сегмент. Нам нужны отрезки из двух точек, поэтому выставляем значение поле “Maximum number of vertices in segment” 2.
Эта операция займет какое-то время, так что придется немного подождать.
Шаг 5. Рассчитываем азимут.
Теперь рассчитаем азимут, с помощью которого мы поймем ориентацию каждого сегмента по сторонам света. Для это используем самый настоящий код на языке python.
p1 = 
$geom.asPolyline()[0]
        p2 = 
        $geom.asPolyline()[-1]
        a = p1.azimuth(p2)
        if a < 0:
        a += 360
        value = a
Чтобы использовать этот код ничего дополнительно скачивать не нужно, просто используем инструмент “Расширенный калькулятор Python” (“Advanced python field calculator”).
Просто копируем настройки со скрина и идем дальше к успеху!
Простая формула быстро посчитала нам то, что нужно. Если вы вдохновлены возможностью использования python, и хотите добиться большего, чем просто копирование готовых кодов, то можете записаться на наш курс по введению в этот чудесный язык программирования и сможете сами писать свой код.
Шаг 6. Создаем стиль.
Наплодили кучу вспомогательных слоев контуров, теперь начнем делать долгожданные контуры Танаки. Тут нам потребуется использовать еще одно небольшое выражение.
В стиле слоя выбираем нашу линию и нажимаем на стрелочку вниз справа от выбора цвета нашей линии, после чего вставляем выражение на скрине (можете скопировать его ниже). Нажимаем Ок и получаем наши контуры Танаки!
color_hsl(
0,0,
	scale_linear(
			abs(
				(if( "azimuth" < 45, "azimuth" +315,
	"azimuth" -45))
			-180)
		,0,180,0,100)
	)

Вот наши контуры Танаки, теперь нужно их немного приукрасить
Сначала добавим цвета, выбираем наш рельеф в растре, выбираем стиль “Одноканальное псевдоцветное” и любой понравившийся градиент. Получилось веселее, но еще немного топорно
Чтобы цветовой переход и игра цвета и тени была более плавной выбираем наш слой контуров и устанавливаем режим смешивания “совмещение”

Заключение

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

P.S.: Почему Ключевская сопка?

Ключевская сопка для данного урока выбрана потому что её контуры рельефа напоминают сердечко💜
Материал подготовил Александр Зуев