Полигоны и лесополосы

Разделение лесов, кустов и полей на старых ландсатах при помощи растра высот

Вот смотрите. Берем седьмой Ландсат за июль 1999 года на территорию Игнатьевского сельского поселения в Адыгее и строим по нему растр вегетационного индекса. Он же — стандартный NDVI, который считается по формуле (nir-red)/(nir+red), где nir — инфракрасный канал, а red — красный. В результате имеем вот такую хренотень:
NDVI-index

А теперь берем снимки Alos, которые улучшенный Астер, который, в свою очередь, отснял эту же территорию несколько месяцев спустя:
Alos

Теперь открываем JOSM и рисуем осевые линии лесополос:
JOSM

Которые затем буферизуем в QGis-e до ширины 100 м (что-бы ухватить разные пикселы Ландсата) и режем на стометровые отрезки поперек. Это в QGis требует особой акробатики, но мы справляемся. Самое главное, что-бы квадраты обязательно выходили за границы лесополосы:
лесополосы

Теперь считаем зональную статистику по двум растрам. С данных Alos снимаем размах, который соответствует разности максимальной и минимальной высоты в каждом полигоне (перепад высот). С растра NDVI снимаем среднее значение индекса в каждом полигоне. Экспортируем все это во внешнюю таблицу и строим примитивный график:
график

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

Остается только повторить процедуру в обратном порядке и получим простейшую карту растительности.

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

Леса юго-запада Ленинградской области на нечеткой карте

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

Я десятый год говорю о ценности нечеткости как технологического решения. И даже добился в этом немалого успеха, например, популярности стикера «нечеткое тегирование» в телеграмм-канале OpenStreetMapRu. Слово «нечеткое» у картографов имеет столь отрицательную коннотацию, что каждый раз мне приходится начинать свое объяснение заново. Может быть более правильным было-бы использовать такой термин как «фаззи-карта» или «континуальный стиль», но я не мастер в словесном жонглировании. Поэтому нечеткую карту обычно представляют себе так:

На мои протесты обычно отзываются предложением, мол если мы не правы, то покажи нам такую карту. И это справедливо. Давайте же раскрасим карту OpenStreetMap в нечеткие цвета. Возьмем сотню точек с присущими им данными о растительности:

Каждая точка находится в лесу и описывает его породный состав таким образом: С(s)Е(e)Б(b)О(o), где С,Е,Б,О — это основные преобладающие породы (сосна, ель, береза, осина), а буквы в скобках — коэффициенты истинности, которые отражают правдивость суждения о том, что лес состоит из данной породы. Например чистый сосновый бор будет выглядеть так: С(1)Е(0)Б(0)О(0). А вот пример обычного березняка с примесью осины и елки: С(0)Е(0,1)Б(0,7)О(0,2). Опытные люди сразу уловят в этой нотации формулу состава древостоя и будут абсолютно правы, поскольку в данном случае я рассматриваю самый простой подход, при котором суммарная истинность константна. Кроме того, каждой точке присвоены данные по запасу. Это не обязательно, но позволит сделать наш пример еще показательнее.

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

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

Нам потребуется пять таких растров. Четыре растра раскрасим по градиенту прозрачности цвета, принятого для обозначения породы на лесотаксационных картах (сосна — оранжевый, ель — фиолетовый, береза — синий, осина — зеленый). Пятый растр будет у нас интерполяцией по запасу. Его мы раскрасим по градиенту от белого с прозрачностью 60% до прозрачного белого. Это позволит нам отличать густые леса от редкостойных, даже если их состав одинаков.

Теперь очередь за данными OpenStreetMap. Просто подложка Mapnik-a, нам не подойдет если мы хотим сохранить на карте дороги, названия, гидрографию и прочие объекты. Поэтому скачиваем через оверпасс исходные данные и настраиваем черновой стиль.
данные OSM

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

А потом еще раз поправить стиль. И вот тут еще. И дороги плохо выглядят. И тут тоже следует исправить. Так, спустя семьдесят шесть вариантов стиля приходим к результату, который можно считать приемлимым (хотя все-равно говно):

Теперь перекинем все в GIMP и довершим оформление, добавив рамку, легенду и прочую необходимую атрибутику. Особенно сложно с легендой. Если бы у нас было две породы, достаточно было бы просто наложить на вертикальный градиент одной породы, горизонтальный градиент другой. С четырьмя породами такой подход не работает. Я потратил на это много времени, но в итоге все-равно получился фейл, который остался на карте только потому что он похож на хипстотный логотип склада контейнеров.

Привет джипег!
легенда

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

В полном размере карту можно посмотреть по этой ссылке.

— Но тут же не видно четких границ? Что толку от такой карты, если я никогда не пойму ельник в этом районе или березняк?
— В том-то и дело, что если по карте вы не можете однозначно назвать породный состав, то у вас это не выйдет и на местности. Что по карте? Какая-то смесь из елки, осины и березы? Ну так и в лесу тоже самое.

Любая карта всегда двойственна в плане передачи информации. С одной стороны она передает читателю точную информацию (например, название населенных пунктов или ширина дороги), с другой стороны, иллюстрирует общую ситуацию на местности (много зеленого — лесной район, много дорог и населенных пунктов — заселенная территория). Каждый из этих информационных каналов требует отдельного подхода. Глупо демонстрировать нечетким образом грузоподъемность мостов, но не меньшая глупость — прорисовывать границы там, где они нахрен не нужны. В этом и заключается основной принцип нечеткой картографии.

Мапник в Икее

Икеевский Мапник

Иду сегодня по Икее, никого не беспокою. Разглядываю утомительные пейзажи благоустроенного быта, снабженные этикетками на невнятном языке. Вот Юпперлиг, Хемнэс. Тут Свартосэн, Линдвед, Мапник, а это Мюкен… Так, стоп! Какой, нахуй, Мапник? Подошел поближе — точно Мапник:

Да не простой, а олдскульный, розлива середины двухтысячных годов. Сейчас про него уже никто не помнит. Я сам не сразу сообразил: открыл дома OpenStreetMap, а картинка совсем иная:
OSM style

Хорошо, что в моих коллекциях есть чемоданчик осмера, в котором я сохранил ссылку на проект OSM Then And Now, созданный для демонстрации изменений в OSM c 2007 года. Сходство с Икеевской картиной Пьёттерид не идентичное, но ощутимое:
сравнение картостилей

Над Пьёттеридом висит более дорогой триптих Бьёрнамо, в котором тоже усматривается сходство с OSM-овским стилем, только уже современным. Особенно это видно, если уменьшить насыщенность OSM Mapnik на 35-40 процентов:
Бьёрнамо против OSM

Если убрать лишние подписи и поиграть с приоритетом дорог, можно добиться сходства до степени смешения картостилей. Это тем более удивительно, что OSM Mapnik — чудовищный картографический стиль, который плох во всем (и должен таковым быть), а икеевские триптихи выглядят вполне миловидно. Не знаю, черпал ли автор вдохновение в OpenStreetMap или пришел к результату случайно, но первое впечатление от этих карт выглядит как «икеевские дизайнеры совсем охуели».

Но людям нравится.