CoptersFreeMap

Карта зон с запретом на полеты коптеров

Собственно не только их, но и любых воздушных средств, но речь пойдет именно про коптеры (или дроны — до сих пор не знаю в чем разница). В своих радиоэфирах я уже несколько раз говорил про то, что большинство отечественных законов последних лет я на хую вертел. Особенно, если от них за километр веет параноидальным припадком, каковым, например, является ФЗ от 3 июля 2016 года № 291 «О внесении изменений в Воздушный кодекс Российской Федерации». Теперь коптеры приравнены к полноценным летательным аппаратам, а значит их использование полностью регламентируется приказом минтранса от 9 марта 2016 г. N 48 «Об установлении запретных зон«.

Бесспорно, коптеров стало много и регулировать их нужно, но только самый злоебучий пидарас мог сделать это так топорно. Особенно, если учесть, что упомянутый приказ минтранса описывает запрещенные для полета зоны таким образом (реальная цитата): «431843с 0395835в, далее по дуге по часовой стрелке радиусом 10 км с центром 432400с 0395700в до геоточки с координатами 432738с 0400229в, далее по государственной границе до геоточки с координатами 432300с 0400042в, 431843с 0395835в».

В результате никто из коптероводов реально не понимает где можно запускать свои аппараты, а где нельзя. Я решил исправить это недоразумение и перевел все данные приказа во вменяемый вид, что позволило нанести их на карту. С инженерной точки зрения работа не представляет особой сложности и я даже не понимаю, отчего никто раньше такого не делал. Нужно лишь отформатировать таблицу в приказе, провести несколько геопроцессинговых операций и подключить все к лефлету. Теперь перед запуском коптера достаточно лишь взглянуть на карту. Подойдет к вам мент, скажет тут, мол летать запрещено». А вы ему, дескать, пошел нахуй, у меня все запретные зоны на карте есть. И спокойно летаете дальше, поскольку пиздить вас будут уже вне правового поля.

Как и во всякой работе, есть ряд нюансов, которые следует помнить. Во-первых, на карте нанесены исключительно данные приказа минтранса № 48. Но, кроме него, наверняка найдется еще куча разных запретов. Если я правильно помню, действует запрет погранслужбы ФСБ на полеты в пятидесятикилометровой зоне от государственной границы. В приказе нет координат некоторых взлетно-посадочных полос, над которыми использовать коптер совсем не комильфо. Наверняка есть еще какие-то ограничения. Кроме того, только ублюдочные пидарасы могут летать над местами гнездования птиц.

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

Третий момент заключается в том, что координаты в приказе получены на основе ПЗ-90.02. Я хотел было использовать для преобразования алгоритм Бурса-Вольфа (7-ми параметрическое преобразование), но посмотрел ГОСТ Р 51794-2008 и понял, что это нахрен не нужно. Разница между ПЗ-90.02 и WGS-84 всего несколько десятков сантиметров, что значительно превосходит точность навигации стандартных GPS-модулей коптеров. В итоге данные положены на карту в виде ПЗ-90.02.

В полноэкранном виде карту можно посмотреть здесь.


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

Трехмерная модель метрополитена в Петербурге

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

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

В четырнадцатом году делал что-то похожее:

Только у меня все гораздо проще устроено. С Википедии взята таблица с глубиной заложения станций, которая спустя рефакторинг загружена в QGis, и интерполирована в демку. Итоговый проект собран в three.js с помощью qgis2tree.js.

В целом ничего особенного, но попутно я спарсил все вики-ссылки.

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



Открыть карту в полном размере

Контурная карта растительности

Создание крупномасштабной контурной карты растительности

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

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

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

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

Рассмотрим процесс создания генерализованной контурной карты растительности 13-14 зумов (1:25 000 — 1:50 000) долин рек Сарм-Сабун (иногда встречается написание Сармсабун) и Глубокий Сабун Ханты-Мансийского автономного округа. Сливаясь эти реки образуют правый приток Ваха — реку Сабун:
Слияние Сарм-Сабуна и Глубокого Сабуна

Логично начать картографическую работу с инвентаризации доступных данных. Для каждого региона этот список может быть разный, но стандартно в него входят Ландсаты разных поколений с их производными. Часто к ним примыкают цифровые модели местности, но в моем случае использовать их почти лишено смыла: SRTM до этих широт не доходит, ASTER Alos представлен только фрагментарно, а классический астер напичкан артефактами. Кроме того, DTM-фильтр при создании карт растительности таежных равнин работает плохо. Всевозможные модисы и сентинели меня не устраивали по разным причинам (качество, покрытие, получение, алгоритмы обработки и сравнения и др.). Об использовании карт OSM и генштаба не может быть и речи. У первых в этом месте вакуум, а вторые мало того, что устарели, так еще и неизвестно откуда взяты. Украденные карты государственной топографии хороши для навигации на месте (особенно это касается карт ГГЦ), но использование таких материалов в своих проектах — абсолютный признак профнепригодности. Лучше всего это иллюстрирует конференция «Опыт использования карт Генерального Штаба», проводимая обществом безруких картографов Саудовской Аравии. Данные тематического картографирования, равно как и данные AVHRR в список исходных материалов так же не попали, по причине того, что их использование более оправдано для анализа растительности и финального уточнению карты, чем для первоначального выделения границ растительности.

В итоге для создания первичного контура выбраны сцены Landsat-8 за 15 июля и 12 мая 2018 года и растр сомкнутости древостоя («Treecover») проекта Global Forest Change. Кроме того, растр водной поверхности GFC использован для быстрого создания слоя водоемов. Дополнительные ландсаты (Landsat-ETM за 30 июля 2000 года, Landsat-MSS за 30 июня 1983 года и Landsat-MSS за 04 мая 1983 года) в создании контурной карты не использованы, но по ним производится расчет зональной статистики для последующего дешифрирования и уточнения границ растительных сообществ.

Уже из списка источников видно, что для создания контурной карты я применяю фенологический подход, который заключается в том, что вы создаете контуры не на основе одного растра, а на основе композита, образованного слиянием зимних и летних снимков. «Зимний» снимок сделан 12 мая, но учитывая позднюю снежную зиму этого года и климат региона — это нормально.

В начале из каналов летнего и зимнего снимков создадим растры вегетационного индекса. Вегетационный индекс — NDVI (Normalized Difference Vegetation Index) показывает количество фотосинтетически активной биомассы. Обычно его не рекомендуют применять для снимков зимнего периода, но для нашей задачи требуется именно это. Расчет ведется с помощью растрового калькулятора QGis по формуле:

NDVI = (NIR-RED)/(NIR+RED),

где NIR и RED — инфракрасный и красный каналы каждого снимка соответственно.

Значения каждого индекса увеличиваются по формуле 100*(значение NDVI + 1). Прибавление единицы избавляет от отрицательных значений. Умножать в сто раз необязательно, это сделано исключительно ради субъективного удобства. Такое изменение индекса не влияет на конечный результат.

Рассчитав вегетационные индексы, логично использовать ту же формулу для оценки фенологических изменений. Поскольку общепринятого наименования у данной величины нет, назовем ее нормализированным фенологическим индексом — NDFI. Соответственно, расчет NDFI производится по формуле:

NDFI = (NDVIлето-NDVIзима)/(NDVIлето+NDVIзима):

Растр NDFI (минимальные фенологические изменения - красным)

Растр NDFI (минимальные фенологические изменения — красным)

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

Может показаться ошибочным использование GFC совместно с ландсатами текущего года, поскольку слой «treecover» GFC актуален на 2000 год. На самом деле такое совмещение дает дополнительные возможности, поскольку при совмещении растров проявятся контуры горельников и ветровалов 2000-2018 годов.

После описанных процедур мы обладаем тремя растрами, которые будем использовать для создания композита: летние значения NDVI (количество зеленой биомассы в июле 2018 года), NDFI (величина фенологических изменений с мая по июль 2018 года) и treecover (сомкнутость леса на момент 2000 года). Сведем все это в единый RGB-композит, установив красный канал для NDFI, зеленый канал для NDVI, синий канал для treecover. Во всех каналах улучшим контраст растяжением от минимального до максимального значения. В QGis это можно сделать автоматически, поэтому нет нужды нормализовать растры к диапазону 0-255:
RGB-композит

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

Создадим линейный слой реки. Лучше всего сделать это в JOSMe по слою Bing-а, после чего экспортировать данные в QGis. К сожалению, это возможно лишь при постоянном наличии хорошего интернет-соединения. Если с таковым проблемы, то можно использовать панхроматический канал Landsat с разрешением 15 метров на пиксель (у Landsat-8 это восьмой канал). На основе осевой линии реки строим буфер, в пределах которого планируется создание контурной карты (два километра в обе стороны от оси реки):
Осевая линия реки и буфер-граница карты

Далее обрезаете композит по контуру буфера:
RGB-композит обрезанный по контуру буфера

Это прообраз нашей будущей контурной карты. Мы не можем работать с тремя слоями RGB-композита одновременно, поэтому переводим все в восьмибитное изображение 256 цветов. Количество цветов можно сократить если вы уверены, что это не отобразиться на качестве результата. Это существенно ускорит работу, но в моем случае приходится идти по самому долгому пути:
PCT-композит

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

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

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

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

Для каждого полигона рассчитывается центроид:
Центроиды полигонов векторизированного растра

После чего слой центроидов интерполируется обратно в растр:
Интерполяция центроидов векторизированного растра

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

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

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

Такой анализ требует в несколько раз больше изолиний, чем вы планируете получить типов контуров на карте. После того, как наиболее достоверные линии найдены, сохраняете их в отдельный слой и приступаете к созданию полигонов. К великому неудовольствию это тоже не сводится к элементарному действию, поскольку процедура в SAGA «Polygon-line intersect» выдает совершенно негодный результат. Приходиться преобразовывать изолинии в полигоны, после чего чередованием GDAL-овских алгоритмов разности и объединения сводить все в единый слой.

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

В конечном итоге, экспортируем все в TileMill или MapBox Studio (смотря на стоимость вашего интернета), настраиваем стиль и нарезаем карту на тайлы:
Карта в TileMill

Все. Теперь можно подключить mb-тайлы к лефлету или tms-серверу, расставить предварительные точки описаний, кешировать все в навигатор и выезжать в поле.

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