Картографирование деревьев в городе

Картографирование деревьев в городе

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

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

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

Полевые материалы каждый готовит под себя. Многие ботаники используют карту и бланк, но я убежден в недальновидности такого подхода. Если вам не требуется вносить много данных о каждом дереве — лучше сразу писать на карте. Это уменьшает количество работы, и снижает вероятность ошибки, поскольку пропадает потребность в проставлении номеров на карте и в бланке. Если данных много (как при обследовании объекта, который охраняет КГИОП), то на карте стоит лишь указывать местоположение дерева, его номер и контур кроны, а всю остальную информацию записывать на диктофон. Я указывал только местоположение, породу, высоту, диаметр, количество стволов и санитарное состояние по четырехбалльной шкале: такое количество данных можно вносить без всякого диктофона.

Полевые карты изготовил в QGIS, загрузив данные через QuickOSM — это такой модуль overpass для QGIS. Главное требование к полевым материалам — карты должны быть бледными и содержать только нужную информацию, в моем случае, это дома с номерами, дороги с подписями улиц и заборы.

Карта до выхода в поле

Кроме этого я отметил на карте границы зеленых насаждений общего пользования из питерского RGIS-a. Последнее я не рекомендую повторять, поскольку процедура сомнительна в плане лицензионной чистоты и помогает лишь ориентироваться (и то не всегда). Я спокойно признаюсь в этом по двум причинам: во-первых, никакие данные из посторонних источников в OSM не внесены, границы RGIS только помогают ориентироваться в больших дворах (вот аналогия: можно ли вносить название улицы на которой ты стоишь если ты пришел к ней используя условные карты от Google). Во-вторых, согласно OSM-Wiki эти данные доступны как общественное достояние (public domain). В любом случае, не так страшно использовать чужие данные, как умалчивать об этом.

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

Планшетка для спортивного ориентирования

Планшетка для спортивного ориентирования

Размер планшетки определяет формат карт, в моем случае A5. По многолетнему опыту могу сказать, что это наиболее удобный формат для полевых работ. Главное, не забыть про обзорную карту:

Обзорная карта

Обзорная карта

Полевая работа не представляет большой сложности если не брать в расчет физиологические неудобства. Желательно отмечать деревья так, что-бы карта была ориентирована на север. Это не принципиально, но облегчает обработку. Важно меньше размышлять и больше делать. Для размышлений есть подготовительный этап, в поле это приводит к потерянному времени и ошибочному результату. Выбираете первое дерево, определяете направление движения и отмечаете на карте точки — местоположения ближайших 5-10 деревьев. Далее идете от дерева к дереву и для каждой точки записываете что-то типа «2л22+28у24», где 2 — количество стволов, л — липа, 22+28 — диаметры стволов на высоте груди в см, у — удовлетворительное состояние, 24 — высота в метрах.

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

Информация на карте

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

Карта после заполнения

Карта после заполнения

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

Карта с границами, зданиями и номерами

Теоретически, данные уже можно вносить в OpenStreetMap, но к сожалению OSM, который зародился как проект полевого картографирования, последний десяток лет развивается в направлении диванного маппинга. Вносить полевые данные с помощью JOSM или ID — это неоправданная трата сил и времени, поэтому прибегнем к дополнительным инструментам.

Первым делом вносим данные о деревьях в любой редактор, текстовый или табличный. Я использую WPS — это аналог Excel для линукса. Путем нехитрых манипуляций разбиваем формулу вида «2л22+28у24» на пять столбцов (количество, порода, диаметр, санитарное состояние и высота). В шестом стобце указываем номер дерева (по зеленой линии). Вносить лучше всего по порядку идя по зеленой линии от точки к точке. Когда все готово — переводим все в csv-формат (кому лень переводить — может подгрузить в QGIS модуль для импорта данных из табличных редакторов). На этом этапе создаем дополнительные столбцы: natural (все строки заполнены текстом «tree»), genus (род на латыни), genus:ru (род на русском), health (санитарное состояние), height (высота), kind:ru (порода).

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

Привязанная в QGIS полевая карта

Привязанная в QGIS полевая карта

После привязки создаем точечный слой и обклацываем все точки вдоль зеленой линии одну за другой, ничего не пропуская и не ставя лишнего. Это крайне важно, поскольку определяет как будут сцеплены атрибутивные данные с геометрией. Для контроля полезно включить отображение количества объектов в слое. Когда все готово, остается только создать в таблице столбец с целочисленными значениями и заполнить его формулой $id+1 — в результате каждой точке будет присвоен номер, под которым он упомянут в таблице с данными. Остается лишь связать геометрию с внешней таблицей и скопировать данные из привязанной таблицы в атрибуты слоя.

Внесение геометрии в QGIS

Внесение геометрии в QGIS

Сохраняем файл в формате geojson в WGS84 (EPSG:4326). Теперь через оверпас проверяем наличие деревьев в базе OSM на территорию обследованных районов. В моем случае таковых было всего пять. Сверяем их со своими данными и если все совпадает (при обследовании вы их нашли), а теги на деревьях не содержат важной информации — смело удаляем их через JOSM. Если не нашли, но вы в качестве своей работы уверены — тоже удаляйте.

Осталось только загрузить в JOSM ваш район работ, открыть файл geojson, копировать из него данные в слой openstreetmap и убедиться, что все на своих местах. У меня иногда вставленный слой по неизвестной причине съезжает, но это ошибка систематическая и исправляется элементарным перемещением.

JOSM с данными о деревьях

JOSM с данными о деревьях

Казалось бы, загружай в базу и радуйся. Но есть пару щепетильных моментов, на которые опытный осмер уже наверняка обратил внимание. Начнем с базового: а что именно мы вносим? Понятно, что деревья, но вот мы полторы тысячи деревьев осмотрели и ощупали. Самое время спросить: «Что такое дерево?». Сирень — дерево или нет? А липа? А дюжина лип, которые растут как кустарник? В OSM внесено не тринадцать миллионов деревьев, а тринадцать миллионов natural=tree, среди которых и трава, и кустарники, и деревья и все, что угодно.

Теперь наименование. Если следовать описанию тега natural=tree, мы должны указать вид (species), в крайнем случае род (genus). Подход логичный, но так делать нельзя. Могу ли я указать вид липы? Допустим, с очень большой погрешностью могу, благо их всего два в городе: платифиллос и кордата. А как быть с ясенями, у которых диагностический признак — почки, расположены на высоте трех человеческих ростов? А как быть с лиственницами, виды которых во всем Питере может нормально различить только один человек?

Для таких ситуаций есть род (genus). Но вот передо мной вишня. Если я внесу genus для вишни по всем правилам, то выйдет, что у меня никакая не вишня, а слива. Потому как вишня — это сливовый подрод (Prunus subgenus Cerasus). И черемуха, кстати тоже. А как быть с трактовкой разных таксонов? Никогда вы эту проблему не решите, если не признаете, что вносить вид в OSM столь же глупо, как и указывать для каждого дерева нуклеотидную цепь. Вид и род — это очень, очень, очень тяжело и сложно. То что определяем мы, называется «порода» — группа растений, выделенная на основе практической целесообразности. Это может быть и вид (конский каштан обыкновенный) и род (вяз) и подрод и все, что угодно. Хороший пример с тополями, которые разделяют на две породы: осину, которая populus tremula и тополь, который объединяет все остальные тополя.

А как обстоит дело с морфометрией? Есть circumference=* — окружность ствола в метрах. Но как быть, если стволов несколько? Как обозначить, что дерево является угрозой? Как тегировать кронированный обрубок тополя? Как тегировать особые случаи произрастания, например, когда береза вьется лианой по сосне? Или черемуха, ветви которой в четверть метра толщиной вросли в землю? Как обозначать скворечники и кормушки? А если в них живут белки? Хотя стоп, сейчас меня в нечеткое тегирование унесет, а я все это не для того рассказываю. Рассказываю я это для того, что неожиданно хороший повод для встречи образовался — поработать над схемой тегирования деревьев. Ну и еще немного для того, что-бы похвастаться. Что я, зря полторы недели корячился?

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

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

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

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

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

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

Рассмотрим процесс создания генерализованной контурной карты растительности 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-серверу, расставить предварительные точки описаний, кешировать все в навигатор и выезжать в поле.

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




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

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

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

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

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

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

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

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

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

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

Мультифрактальный анализ данных OpenStreetMap в QGis

Бенуа Мандельброт в своей «Геометрии» утверждает, что понятие «фрактал» применимо исключительно к множествам, которые проявляют свойства самоподобия не менее чем на протяжении трех порядков единиц измерения. Манфред Шредер в не менее известной монографии описывает принцип расчета корреляционной размерности, приводя ее к общему виду. Там же он наглядно показывает, как неэвклидовы размерности отражают строение систем в стадии детерминированного хаоса. Аналогичным, но в более популярной форме занимается Хакен, а Федер постулирует чрезвычайно занятную мысль о взаимосвязи самоподобия с теорией перколяции. Однако, несмотря на все это, фракталом называют любой каскад дихотомических ветвлений, а под фрактальным анализом — банальное определение размерности покрытия, забывая даже то, что в оригинальном мануале она идет под названием размерности Хаусдорфа-Безиковича. Еще в одной статье на эту тему нет смысла, но процедура оценки сложности геоданных в QGis настолько проста, что заслуживает краткого упоминания даже среди всеобщей скуки.

Начнем с того, что выберем интересующую область (в моем случае это Москва, район трех вокзалов), которую обводим полигоном. Любой тулзой скачаем OSM данные на этот регион — я использовал плагин OSMDownload, но можно и просто выкачать все через overpass. После того, как данные получены, я рекомендую перевести все в спроецированную систему координат, например в EPSG:2705. Это облегчит дальнейшую работу и позволит вам избежать необходимости перевода градусов в метры для объяснения полученного результата. Я для упрощения работы использовал только точечные данные, но нет препятствий к применению этого метода для линий или даже полигонов.

После этого стандартными средствами (Вектор-выборка-регулярная сетка) строим сетки из квадратов с разной длиной стороны. Чем больше сеток и сильнее разброс площадей у их ячеек тем интереснее результат, но на практике обычно получается не более 20, а если удваивать сторону квадрата для каждой новой сетки, то и того меньше. Можно объединить все сетки в один шейп, это ускорит работу по подсчету заполненных ячеек, но замедлит расчет размерности, так что особого смысла нет. Сам подсчет ведется путем пространственной выборки полигонов сетки по принципу пересечения с точкой OSM:

Я использовал 22 сетки со сторонами квадратов 5, 10, 13, 20, 21, 34, 40, 55, 80, 89, 100, 144, 160, 200, 233, 300, 320, 377, 400, 500, 610 и 640 метров. Не стоит удивляться размерам — эту работу я проводил в рамках изучения встречаемости последовательности Фиббоначчи в геоданных и связи этой последовательности с размерностью покрытия данных. В результате были получены следующие данные:

Сторона
квадрата, м
Полное количество квадратовКоличество заполненых
квадратов
Достоверность аппроксимации
(R2)
Размерность
Хаусдорфа-Безиковича
524100143221,000,00
106050139631,000,13
133557437550,990,14
201525131150,890,22
211372830410,910,25
34525121510,860,35
40387618300,870,41
55203512900,870,50
809887600,860,62
897826500,880,69
1006515350,890,74
1442942800,890,83
1602472370,900,89
2001761480,900,96
2331171150,911,02
30077690,911,08
32070680,921,12
37748470,921,16
40048400,931,19
50035240,931,24
61020200,931,27
64020190,941,29


График функции количества заполненных клеток от масштаба клетки как и ожидалось, имеет степенной вид (R2функции аппроксимации = 0,94). Расчеты выполнены в экселе с использованием формул для расчета достоверности авппроксимации:

=ИНДЕКС(ЛИНЕЙН(LN($D$2:$D23);LN($B$2:$B23);;1);3;1)

Для расчета размерности Хаусдорфа-Безиковича:

=-1*ИНДЕКС(ЛИНЕЙН(LN($D$2:$D23);LN($B$2:$B23));1)

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

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

Собственно, это и есть все интересное. Тем более, что этот пост я написал только для того, что-бы формулы расчета размерности всегда под рукой были, а то неудобно постоянно десятки графиков создавать.

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

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

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

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

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

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

Что было дальше, вы и сами знаете. Потому, что если вы не полный мудак, у вас возникнет только один вопрос: «АSTER или SRTM?». Отвечаю — ASTER:

Я подготовил растр экспозиций через дефолтный функционал QGIS:

кроме того, сделал растр пересеченности рельефа, каждый пиксел которого представляет собой сумму изменений высот в пределах окна 3х3 пикселя (подробнее смотри в статье Riley S.J., DeGloria S.D., Elliot R. A terrain ruggedness index that quantifies topographic heterogeneities // J. Sci. 1999. V. 5. № 1–4. P. 23–27.). Это не входило в изначальное предположение, но преступлением было бы не проверить возможность взаимосвязи частоты обнажений с индексом пересеченности.

Вокруг каждого описания был построен буфер, радиусом в пол-секунды WGS-84 (приблизительно 30х13 метров), не столько, что-бы облегчить вычисление зональной статистики, сколько нивелировать распиздяйство геологов, которые вначале пишут координаты в пикетажку, а после перебивают их в базу. Кроме того, многие обнажения значительны по простиранию и получение точечной статистики для них явно лишено смысла.

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

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

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

Но меня не наебешь. Если ледник действительно оказал такое влияние (если он вообще был — все вопросы к В.Г. Чувардинскому), то это должно проявляться не только в частоте выходов коренников на разных склонах, но и в их форме. Разделить выборку геологических описаний на подмножества разной формы практически невозможно, поскольку записи в пикетажках не стандартизированы и зачастую там попадается бессмысленная хуета. Скрепя сердце я принял волевое решение и подсчитал долю описаний в которых фигурирует слово «уступ» и долю описаний с текстовым фрагментом «заглаж». Согласен, критерий так-себе, но при столь сильной неоднородности частоты встречаемости обнажений на склонах с разной экспозицией, он должен был проявиться. Что-же мы видим на левом верхнем и левом нижнем графиках? Правильно — ничего. На южных склонах заглаженных обнажений меньше, но статистически это недостоверно. Величина отношения уступов к заглаженным обнажениям горных пород, рассчитанная по формуле

(кол-во уступов + 1)/(кол-во заглаженных обнажений + 1)

никак не связана с экспозицией склонов:

Более того, распределение точек наблюдения, в которых не обнаружены выходы коренных пород совершенно аналогично предыдущему:

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

На всякий случай проверим это на растре SRTM:

Как я однажды сказал: «Зрение может обмануть, гистограмма — никогда»:

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

А вот так:

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

Ну а что-же с индексом пересеченности? — спросите вы. Да та-же хуйня. Вот график зависимости количества описанных обнажений от величины индекса пересеченности.

А вот гистограмма этого индекса по всему растру:

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

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

Визуализация рельефа по данным SRTM и ASTER GDEM в QGis+SAGA

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

В качестве показательной территории взяты Соликамский и Красновишерский районы Пермского края. В качестве подложки карта OpenStreetMap Mapnik Standart:
Соликамск и Красновишерск

Инструментом для работы послужит QGis 2.18.4 с подключенными алгоритмами SAGA. Все операции, связанные с фильтрацией и созданием изолиний можно выполнять как внутри QGis, так и запуская гис SAGA в качестве автономного приложения.

Рельеф на средне- и крупномасштабных картах в настоящее время в большинстве случаев отображается с помощью данных SRTM или ASTER GDEM, что связано с их глобальным охватом, открытостью и простотой получения. Разрешение этих данных (SRTM 90 м/пикс, ASTER GDEM 30 м/пикс) позволяет, при должной обработке, показывать особенности рельефа примерно до 15 зума. Несмотря на то, что данные ASTER точнее, их использование затруднено необходимостью дополнительной фильтрации для отсеивания значений, не отражающих реальный рельеф (например, высоты леса и жилой застройки). Оптимальных алгоритмов для такой процедуры, которые дают стабильный результат для значительной территории, не разработано, в результате чего, образец визуализации менее точных данных SRTM оказывается обычно более качественным как с геодезической, так и с художественной точек зрения. Однако, севернее 60° с.ш. и южнее 54° ю.ш. данные SRTM отсутствуют, что вынуждает в конечном итоге использовать оба набора данных при визуализации рельефа на территориях, выходящих за границы покрытия SRTM.

Наш случай именно такой (снизу данные SRTM, сверху ASTER GDEM):
ASTER и SRTM

Данные SRTM доступны из различных источников, из которых наиболее удобны сайты cgiar, gis-lab и viewfinderpanoramas. Я предпочитаю использовать последний, поскольку многие сцены там объединены и загружены сразу в geotiff-растры (обычно SRTM представлен в hdt-формате).

ASTER получить немного сложнее: сайты геологической службы США и NASA позволяют скачивать различные данные ДЗЗ, что требует от пользователя определенной подготовки. Кроме того, эти сайты иногда бывают недоступны, либо работают чрезвычайно медленно. В этих случаях можно скачать всю базу через торрент. Дополнительные источники получения данных SRTM и ASTER доступны на странице получения данных.

Помимо растровых данных, для работы нам потребуется шейп-слой с границами районов, который можно скачать с сайта gis-lab или загрузить с помощью overpass.

После того как исходные получены, можно запускать QGis:
ASTER и SRTM в QGis

Для начала объединим сцены ASTER в единый растр с помощью меню «растр-прочее-объединение»:
1объединение растров

В диалоговом окне укажем директорию со сценами и название итогового файла.
2объединение растров

Обратите внимание, что в некоторых версиях GDAL отказывается работать, если пути к файлам содержат кириллические символы. В моем случае все прошло успешно:
3объединение растров

Теперь сохраним полученный файл уменьшив его разрешение до разрешения SRTM. Если этого не сделать, в месте соприкосновения сцен из разных источников мы получим вот такую картину:
рельеф SRTM и ASTER

Выделяем в ТОСе наш ASTER, и через правую кнопку мыши вызываем диалоговое окно сохранения растра:
Сохранение растра в QGIS

Здесь обратите внимание на то, что-бы растр сохранялся как данные. Разрешение уменьшаем в три раза, т.е. вместо 18001 столбца вписываем 6000, а вместо 7201 строк вписываем 2400:
Сохранение растра в QGIS2

После сохранения растра он выглядит загрубленным, но все-равно более информативным, чем SRTM:
Сохранение растра в QGIS3

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

По той-же схеме объединим полученный растр с растром SRTM:
DEM-композит

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

image

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

Откроем панель инструментов в меню «анализ данных» и в списке геоалгоритмов SAGA-Grid-Filter выберем алгоритм «Простой фильтр»:

После нескольких минут обработки, алгоритм выдаст сглаженный растр:
отфильтрованный растр

Его мы и будем использовать для отмывки. С помощью меню «растр-морфометрический анализ-теневой рельеф»:

вызовем диалог создания карты теней:

На этом этапе следует знать одно неявное правило. В том случае, когда вы планируете использовать теневую отмывку в качестве подложки саму по себе, можно использовать значения по умолчанию. В том случае, когда ваша отмывка ложится на некую базовую карту (в нашем случае, такой картой служит OpenStreetMap), следует повернуть источник освещения на сто восемьдесят градусов. Дело в том, что стандартная отмывка представляет собой темный растр, который при наложении не только перестает читаться, но и зашумливает перекрываемые слои. Для того, что-бы это избежать, отмывку следует инвертировать, но в этом случае, горы выглядят как впадины, а каньоны напоминают холмы. Учитывая это, мы заранее изменяем источник освещения, что позволит нам при инвертировании сохранить визуальную форму отмывки. По умолчанию, источник освещения расположен в районе трехсот градусов, чего, конечно-же в природе почти никогда не бывает. Еще Салищев указывал на эту особенность — привычная отмывка рельефа обязана своему появлению лампам, которые обычно устанавливали слева от кульмана. Мы поменяем значение «300» на «120» и через несколько секунд алгоритм выдаст нам вот такой результат:

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

Через меню «растр-извлечение-обрезка»

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

В результате получим вот такую картину:

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

Для того, что-бы не инвертировать растр при каждой новой загрузке, сохраним его как новый слой, но на этот раз в меню сохранения отметим его не как «данные», а как «изображение». На этом создание отмывки закончено. Установим прозрачность отмывки 95% и подложим под нее OpenStreetMap:

Так выглядит чистая карта OSM:

А так выглядит карта OSM с наложенной на нее картой теней в районе соприкосновения данных SRTM и ASTER:

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

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

С практической точки зрения эта проблема решается так. Создадим временный полигональный слой:
Новый временный слой2

Сделаем его редактируемым (иконка желтого карандаш), после чего установим режим добавления нового объекта
Редактирование в QGis

и обведем один из районов:

Сохраним фрагмент растра для этого участка (не фильтрованного растра, а исходного, мы же усложняем себе задачу!), обрежем его по обведенной области и отфильтруем с теми же параметрами, что и при создании отмывки. Затем с помощью геоалгоритма SAGA-Shapes-GRID-Горизонтали по ЦМР создадим изолинии через каждые 50 метров высоты.

Фильтрация не только убирает излишний шум, упрощая и выравнивая изолинии, но и позволяет «сцепить» наши разнородные данные. Вот пример извлечения изолиний из сырого растра:

Отчетливо просматривается линия сочетания данных ASTER и SRTM. При различных способах фильтрации растра ASTER GDEM эту линию можно делать более или менее заметной о чем я упоминал в начале данной статьи.

Изолинии из отфильтрованного растра на этот район выглядят так:

На границе растра изолинии замыкаются и не несут в себе географического смысла. Такие участки в последующем будут удалены. Именно поэтому обрезка dem-растра производилась нами не по границе района а по внешнему слою.

Аналогичные операции повторяем для второго района. Обратите внимание, что полигоны обрезки растра перекрывают друг друга:

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

После того, как изолинии извлечены, остается только обрезать их по контуру границ, сохранив оригинальные значения атрибутов изолиний. Для этого успешно применяется алгоритм «SAGA-Shapes-Lines-Пересечение линий и полигонов»:

Небольшая настройка стиля и изолинии готовы:

Обычная карта OpenStreetMap:

Тот же фрагмент карты, но с наложенной картой теней и горизонталями:

Отдельно необходимо вынести проблему неоднородности данных ASTER GDEM по качеству. Даже на нашем примере видно, насколько сильно артефакты отсутствующей и ошибочной информации сказываются на качестве визуализации рельефа в целом:

Данная проблема не имеет однозначного механистического решения. Наиболее оптимальные способы ее устранения зависят от требований к визуализации, выбранного региона и доступной вычислительной мощности. В качестве одного из способов решения я предлагаю использовать последовательное применение фильтра DTM (предельный уклон местности 10 градусов, радиус поиска 2 пикселя), заполнение пропусков в образованном в результате DTM-фильтрации растра (порог напряжения 10) и последующая фильтрация простым фильтром (круговой режим поиска, гладкий фильтр, радиус 5px). Этот метод не позволяет полностью избавиться от артефактов, но существенно снижает их число и сглаживает, что определенно положительно сказывается на визуализации рельефа:

Карта OpenStreetMap без отмывки и изолиний:

Карта OpenStreetMap с отмывкой и изолиниями:

Пивопровод на ХБК

В поселке ХБК сто четыре жилых дома, которые необходимо подключить к пивопроводу. Само собой, сделать это необходимо с минимальными издержками на прокладку труб и дальнейшее их обслуживание.

Для проектирования пивопроводной сети, откроем в QGis карту OpenStreetMap с помощью плагина QuickMapServices или его старого аналога OpenLayersPlugin:

1

Приблизим интересующий нас район, и создадим полигональный шейп-файл:
2

Обведем контуры поселка:
3
Теперь, требуется загрузить контуры домов, нуждающихся в подключении. В нашем случае самым простым решением будет импорт зданий из базы геоданных OpenStreetMap с помощью сервиса Overpass turbo. Мы для этих целей воспользуемся плагином QuickOSM, загрузив полигональные объекты со значением «building=apartmens». В OSM полигонального типа нет, модуль выполняет эту конвертацию за нас:
4
В результате получим векторные слой, который будем использовать для построения графа.

5

Прежде всего, получим вершины графа, путем извлечения центроидов полигонов:
6
Если бы мы располагали графическими картами в качестве исходного материала, то пришлось бы их отсканировать, затем привязать, затем оцифровать. Это конечно дольше, но мы бы расставили точки более сложным образом. Центроиды полигонов хорошо применять только в случае простых полигонов, на сложных это приводит к погрешности:
8
Впрочем, нас такая точность устраивает, тем более, что от каждого центроида будет идти разводящая сеть. Мы получили вершины графа. Теперь, используя триангуляцию Делоне создадим множество полигонов, каждая вершина которых будет точкой центроида зданий.
7
Преобразуем полигональную триангуляцию в сеть линий. С помощью команды «split» плагина Networks разобьем сеть на отдельные линии. Мы получили граф, достаточный для роутинга. Если нам потребуется кратчайшим образом связать между собой две его вершины, достаточно будет просто использовать модуль RoadGraph:
9
При необходимости, можно добавить каждому ребру графа определенный вес. Полученные полилинии можно экспортировать в виртуальный слой и во внешний шейп.
15

Но у нас немного другая задача — построить сеть с ребрами минимальной длины. Для этого рассчитаем длину каждого ребра, используя встроенный калькулятор QGis:
13
Раскрасим слой ребер по градиенту возрастания длины ребра.
14
Ребер у нас много, поэтому выведем длину каждого из них в качестве подписи:

4

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

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

Добавим домики, отметим точки ветвления сети, изменим для лучшей визуализации проекцию и схема готова.

2

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

Учебные курсы

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

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


«ГИС и работа с геоданными»

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

Стоимость курса 12 000 рублей. Занятия проводятся для групп свыше трех человек.

Программа курса ГИС и работа с геоданными

1. Лицензирование программ и данных

Проприетарные, свободные и открытые лицензии. Лицензии GPL. CC-лицензии. Классификация лицензий. Использование открытых лицензий в России.

2.1. Популярные картографические веб-сервисы

Настройка спутникового изображения для пользователя. Синхронизация орбиты. Трансформация изображения. Уровни масштаба. Проекции. Источники данных и периодичность обновления. «Города призраки». Краудсорсинговые карты. «Проблемные» территории на картах.

2.2. Развитие технологий изготовления карт

Образцы швейцарской картографической школы. Немецкая картография. Топографо-геодезические работы. Советские военно-топографические карты. Секретность и проекция Гинзбурга. Оформление печатных карт. Аэрофотосъемка и стереодешифрирование. NAVSTAR. SA-помеха. Galileo. Лидарная съемка

3.1. Редактирование карт OpenStreetMap в браузере

Редактор ID. Понятие смещения снимка. Редактор Potlatch-2

3.2. Редактирование карт OpenStreetMap в JOSM

Интерфейс JOSM. Репозиторий JOSM. Пресеты. Сервер смещений. Отношения. Понятие «Пирога» OSM. Сервис MapKraft. Простейшие измерения в JOSMе. Загрузка данных на сервер.

4.1. Измерения, анализ и визуализация в геоинформатике. Программы и библиотеки

Понятие измерения и размерности данных. Виды измерений. Топологическая ошибка в измерении. Визуализация данных. Библиотеки Leaflet.js, OpenLayers.js, Three.js, Proj4.js

4.2. Проекции и системы координат. Классификация EPSG

Понятие проекции и системы координат. ССК, ПСК, МСК. Искажения в проекциях. Локсодромия и ортодромия. Определение и выбор проекции. Основные проекции используемые в настоящее время. WGS-84. СК-42. Классификатор EPSG. Системы координат EPSG 4326, 900913, 3857

4.3. Интерфейс QGIS 5. Работа с растровыми данными в QGIS

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

6. Работа с векторными данными в QGIS

Редактирование векторных данных. Проверка топологии. Внесение атрибутивных данных. Импорт, экспорт и редактирование атрибутивных данных. Работа с файлами стиля. Создание псевдо-объемного стиля на карте.

7. Анализ и обработка данных

Обработка и анализ векторных данных. Обработка и анализ растровых данных. Статистика по растру. Принципы ручного и автоматического дешифрирования. Наземная фотограмметрия. Модуль StereoSurveys.

8. Подготовка карты к публикации

Настройка макета и вывод карты на печать. Основы картографического дизайна. Постобработка карты в программах GIMP и Scribus. Технологические особенности интерьерной и широкоформатной печати карт. Публикация карт в интернете. Сервисы геохостинга. Экспорт карты с помощью js-библиотек.

9.1. Создание примитивных 3D геомоделей

Создание цифровых моделей рельефа из различных источников. Принципы и особенности трехмерного моделирования. Работа с библиотекой three.js

9.2. Интерфейс и настройка Blender 10. Создание простых моделей в Blender

Работа с геоданными в Blender. Модуль визуализации Blend4Web

В ходе занятий, мы познакомимся с важными теоретическими понятиями картографии и ГИС, узнаем как устроен проект OpenStreetMap и как можно использовать данные этого проекта. Научимся работе в QGIS: редактированию, анализу и настройке отображения данных. Сможем легко создавать клиентские проекты на базе библиотек leaflet.js и openlayers3.js. Поймем как просто создавать объемные пространственные модели, вроде этой:


«Картирование и анализ растительности»

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

Стоимость курса 6500 рублей. Занятия проводятся для групп от пяти человек

Программа курса

1. Современные методы геоботанической картографии
Понятие растительности как объекта картографирования
Развитие методов картографирования растительности
Понятие данных дистанционного зондирования
Проблемы составления карт растительного покрова
Обзор основных программ, используемых при обработке, анализе и представлении данных
Ввод, хранение и обработка геоботанических описаний

2. Геоинформационные системы
Математическая картография. Введение в ГИС
Создание и редактирование QGis — проекта
Работа с картографическими данными
Использование растровой графики
Работа в программе Quantum GIS

3. Измерение характеристик растительного покрова
Оценка проективного покрытия растений
Измерение абсолютной полноты древостоя
Экологическое шкалирование
Анализ по экологическим шкалам Л.Г. Раменского
Биологический смысл и метод расчета математических показателей фитоценоза
Инструметальная оценка проективного покрытия

4. Картирование и анализ структуры и динамики растительности
Понятие диссипации в растительности.
Понятие фракталов как физических и математических объектов
Состояния детерминированного хаоса в динамике растительного покрова
Фрактальный анализ
R/S — анализ данных
Анализ Бенфорд-последовательностей: определение достоверности набора данных

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

grass

 


«Введение в цифровую картографию»

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

Занятия рассчитаны на hr-работников, специалистов ответственных за пространственное размещение объектов и территориальные решения. Если для вашей работы требуется карта, но вы ничего не знаете о таком понятии как ГИС, то это курс вне всякого сомнения будет полезен для вас.

Продолжительность занятия 6 часов. Стоимость 2 000 рублей. Для групп от пяти человек.

Программа курса

Развитие картографии от карт Дюфура до векторных тайлов;

Виды и форматы данных;

Программы для создания и редактирования карт. Геоинформационные системы;

Роль геоданных в современной картографии;

Проект OpenStreetMap. Редактируем в JOSM, Potlatch-2, ID;

Проекции и системы координат;

Экспорт данных OpenStreetMap в QGIS;

Редактирование и настройка отображения данных в QGIS;

Создание печатной карты. GIMP+Scribus+QGIS;

Экспорт данных в простые веб-гис проекты на основе библиотек Leaflet.js, OpenLayers3.js, Three.js;

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

Введение в цифровую картографию

 


«Фрактальный анализ данных»

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

Продолжительность занятия 6 часов. Стоимость 3 000 рублей. Для групп от трех человек.

Программа курса

Процесс измерения и физический смысл фракталов

Современная трактовка понятий «фрактал» и «фрактальный анализ»

Размерность Хаусдорфа-Безиковича как критерий сложности пространственных структур

Диссипативные структуры, детерминированный хаос и катастрофы. Взаимозамена пространственной и временной оси

Вероятностные и нечеткие фракталы

Алеатика и понятие случайности. Значение роли наблюдателя

Мультифракталы. Интегральная размерность покрытия

Фрактальность времени и неоднозначность геохронологической шкалы

Показатель Херста. R/S — анализ растровых данных

Эмергентный ряд и последовательность количества вариаций

Анализ Бенфорд-последовательностей: определение достоверности набора данных

Топологическая размерность в неэвклидовых геометриях

Популярность термина «фрактал» сыграла с ним злую шутку — многие считаю это чем-то новомодным и незначительным. В ходе общения я покажу всю ошибочность этого мнения. Если прежде вы не сталкивались близко с понятием самоподобности — то будьте готовы к тому, что данный курс принципиально расширит ваше понимание таких привычных (казалось-бы!) вещей как пространство, время, размер, число и форма. Во многом курс построен на моих собственных исследованиях и разработках.

fractal

 


«Открытые геотехнологии»

Ознакомительный курс для тех, кто желает свободно ориентироваться в большом перечне открытых данных, форматов и программных продуктов. В ходе пяти занятий (по три часа каждое) мы изучим значительный набор открытого программного обеспечения, способного не только успешно заменять проприетарные аналоги, но иногда и превосходить их. Узнаем как устроен проект OpenStreetMap и как его можно использовать с выгодой для себя. Изучим множество доступных наборов геоданных, познакомимся со стандартными гис-форматами данных и библиотеками для их визуализации.

Стоимость курса 7 000 рублей. Занятия проводятся для групп свыше пяти человек.

Программа курса

Лицензирование данных и программного обеспечения
Современное понятие открытых данных
Причины открытия данных и технологий
Популярные открытые лицензии
Проприетарные разработки в области открытых технологий и их открытые аналоги
Преимущества и недостатки открытых технологий
Опыт работы с открытыми технологиями в России
Проект OpenStreetMap
2. Открытые форматы геоданных
Понятие спецификации формата
Растровые и векторные данные, информация о привязке, понятия трансформации и передискредитации растра
World-файл у растровых изображений
GeoTIFF и DEM
ESRI Schape
KML, KMZ, OSM — форматы
CSV и geojson — форматы
Тайловый метод хранения растровых данных
WMS, WCS и WFS — протоколы
3. Открытые данные
Карты глобального охвата VMap0 и VMap1
Модели рельефа SRTM, ASTER GDEM, ETOPO2, IBCAO
Данные дистанционного зондирования Landsat, ASTER, OrbView-3, Corona, MODIS Blue Marble Next Generation
Данные о растительности и животном мире AVHRR, GBIF
Базы наименований GeoNAMES, GNS, VMap0
Наборы геологических данных EMAG2, EMAG3, WGM2012, GHFD, OneGeology, NOAA, IMLGS
Данные SSCC — энциклопедии стихийных бедствий
4. OS GeoLive и открытый софт
Характеристика и назначение картографической операционной системы GeoLive 9.0
Geomajas, Cartaro, GeoNode, GeoMoose, Mapbender 3, Ushahidi, MapSlicer, TileMill, ZOO-Project, GeoServer, MapServer
QGIS, GRASS, gvSIG, OpenJUMP, SAGA, uDig
JOSM, Merkaartor, GPSDrive, GPSPrune, Marble, OpenCPN, zyGrib, Viking
GeoKettle, Montheverdi2
5. Открытые картографические библиотеки
GDAL
OpenLayers 3.js, Leaflet.js
Qgis2three.js, Cesium.js
D3.js, Raphael.js, Kartograph.js

Курс не предполагает подробного изучения каждого формата, программы или библиотеки (на это потребовались бы годы). Но мы обязательно попрактикуемся в таких ведущих разработках как QGIS, JOSM, GDAL, OpenLayers3.js и Leaflet.js. Операционную систему OSGeoLive 9.0, на базе которой проводится курс можно бесплатно скачать с официального сайта.

 


«Визуализация геоданных»

Курс предназначен для людей без базовых знаний геоинформатики и веб-технологий, которым периодически необходимо показывать информацию на карте. В ходе трех занятий (всего 9 часов) мы познакомимся с мощной геоинформационной программой QGIS, научимся загружать редактировать и настраивать отображение данных. Уделим внимание постобработке изображений, технологическим особенностям интерьерной и широкоформатной печати. Сможем создавать простые интерактивные веб-карты и настраивать их с помощью технологии CSS.

Стоимость курса 3 000 рублей. Занятия проводятся для групп свыше пяти человек.

Программа курса

1. Редактирование и оформление данных
Понятие геоданных и геоинформационных систем
Визуализация в геоинформатике. Программы и библиотеки
Классификация форматов геоданных
Интерфейс QGIS
Настройка свойств растрового изображения
Создание векторных данных и настройка их свойств. Редактирование легенды
Редактирование векторных данных. Внесение атрибутивных данных
Импорт, экспорт и редактирование атрибутивных данных
Визуализация атрибутивных данных в QGIS

2. Постобработка изображений
Настройка макета и вывод карты на печать
Интерфейс программы GIMP
Работа со слоями и редактирование изображений
Интерфейс и настройка Blender
Создание простых геомоделей в Blender
Интерфейс программы Scribus
Технологические особенности интерьерной и широкоформатной печати карт

3. Отображение геоданных в браузере
Основы HTML и CSS
Понятие тайлов. Веб-сервисы для публикации больших растровых данных
Использование библиотек OpenLayers 3 и Leaflet
Визуализация трехмерных данных в QGis
Экспорт данных из Blender
Компоновка и настройка отображения данных

В ходе занятий мы научимся эффективным способам создания печатных карт и визуализации геоданных в браузере

 


«OpenStreetMap для всех»

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

На занятии, я рассказываю о сущности проекта OpenStreetMap, его главных правилах, проблемах и потенциальных возможностях. Мы познакомимся с редакторами JOSM, Merkaartor, ID и Potlatch-2. Попробуем для остроты ощущений низкоуровневый редактор Level0.

Разберемся с форматом «.osm» и узнаем что такое сервер смещений космических снимков. В зависимости от условий: выйдем на полевое картирование или просто в перерывах «диванного маппинга» узнаем про подготовку обходных листов. Изучим полезные картографические веб-сервисы и принципы коллективного картирования территории. Обсудим работу гуманитарной команды, качество рендеров, систему тегирования, а когда обсуждения закончатся продолжим мапить молча до полного изнеможения.

Занятие проводится для групп от трех человек. Стоимость: бесплатно.


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

По всем вопросам обращайтесь на страницу «Контакты и заказы«, либо

по телефону: 8-904-614-68-29,

электропочте: schwejk-rpnt@rambler.ru

Визуализация геоданных

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

Стоимость курса 10 000 рублей. Занятия будем проводить в удобное для вас время и в удобном месте. Если нет возможности встретиться лично, возможно дистанционное общение посредством скайпа.

Звоните по номеру +7-904-614-68-29, либо пишите на электропочту cafco@mail.ru. Можете и в комментарии к этому посту. На этом у меня все, жду вашего отклика.

P.S. Ладно, не кипишуйте. Вот сама программа курса:

Редактирование и оформление данных
Понятие геоданных и геоинформационных систем
Визуализация в геоинформатике. Программы и библиотеки
Классификация форматов геоданных
Интерфейс QGIS
Настройка свойств растрового изображения
Создание векторных данных и настройка их свойств. Редактирование легенды
Редактирование векторных данных. Внесение атрибутивных данных
Импорт, экспорт и редактирование атрибутивных данных
Визуализация атрибутивных данных в QGIS

Постобработка изображений
Настройка макета и вывод карты на печать
Интерфейс программы GIMP
Работа со слоями и редактирование изображений
Интерфейс и настройка Blender
Создание простых моделей в Blender
Интерфейс программы Scribus
Технологические особенности интерьерной и широкоформатной печати карт

Отображение геоданных в браузере
Основы HTML и CSS
Понятие тайлов. Веб-сервисы для публикации больших растровых данных
Использование библиотек OpenLayers 3 и Leaflet
Визуализация трехмерных данных в QGis
Экспорт данных из Blender
Компоновка и настройка отображения данных

Мапим по гуглопанорамам — наземное фотограмметрическое картирование в QGIS с помощью плагина stereoSurveys

Read in English

Замечание 1. В данной статье не расматриваются юридические вопросы законности использования описанного метода при работе с данными компании Гугл. Мое дело метод показать, а с юристами сами разбирайтесь.
Замечание 2. Собственно, ничто не мешает использовать любые другие данные, вплоть до своих фотографий.
Замечание 3. Код описываемого ниже модуля от первой до последней строки написан Enrico Ferreguti. Мое значение в этом проекте чисто терапевтическое.

Пару месяцев назад я опубликовал пост о технологии применении снимков Google StreetView для фотограмметрического картирования территории. Этот незатейливый текст вдохновил Enrico Ferreguti (по его словам) на разработку модуля StereoSurveys для QGIS.

Основное назначение модуля — перенос контуров объектов, попавших в объектив камеры гугломобиля в точечный слой QGis. Наличие объекта с известным пеленгом на двух геопривязанных снимках позволяет однозначно установить его местоположение по свойству суммы углов треугольника. Использовать это свойство на практике возможно было и ранее, однако, только после появления StereoSurveys появилась возможность значительно сократить трудоемкость работ и увеличить точноность нанесения данных.

Для иллюстрации работы модуля, нанесем в точечном слое местоположение фонарных столбов на улице Текстильной (ХБК, город Шахты). Со спутникового снимка их не видно, поэтому единственный способ нанести их не от балды — воспользоваться описываемым методом.

0

Улица Текстильная, вдоль которой необходимо отметить фонарные столбы

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

2. Скачанный архив необходимо распаковать в папку хранения модулей QGIS. Для windows XP это обычно C:\Documents and Settings\[username]\.qgis2\python\plugins для windows 7: C:\Users\[username]\.qgis2\python\plugins, для linux: /home/[username]/qgis2/python/plugins. Если в папке home отсутствует папка qgis2 (или .qgis2), то, возможно, у вас не отображаются скрытые файлы. В debian-подобных системах (debian, ubuntu, mint, OSGeoLive и др.) это исправляется так: правая кнопка мыши — отображать скрытые файлы.

3. Если у вас винда — обратите внимание на название папки [username]. Плагин не переносит кириллицу! Если в названии файла, проекта, плагина или пути к ним встретится русская буква, QGIS выдаст следующую ошибку:

Traceback (most recent call last):   File "", line 1, in   File "C:/PROGRA~1/QGISWI~1/apps/qgis/./python\pyplugin_installer\installer.py", line 274, in upgradeAllUpgradeable     self.installPlugin(key, quiet=True)   File "C:/PROGRA~1/QGISWI~1/apps/qgis/./python\pyplugin_installer\installer.py", line 322, in installPlugin     reloadPlugin(key) # unloadPlugin + loadPlugin + startPlugin   File "C:/PROGRA~1/QGISWI~1/apps/qgis/./python\qgis\utils.py", line 319, in reloadPlugin     loadPlugin(packageName)   File "C:/PROGRA~1/QGISWI~1/apps/qgis/./python\qgis\utils.py", line 200, in loadPlugin     msg = msgTemplate % (packageName, "', '".join(sys.path)) UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 9: ordinal not in range(128)

Для пользователей Windows 7, причина кроется как правило в том, что папка «Users» в этой системе названа как «Пользователи», кроме того, обычно кириллическое написание имеет папка  [username]. Теоретически, исправить эту беду можно создав новую учетную запись с правами администратора. Через нее следует войти завершив текущую сессию, после чего стандартным способом сменить название директорий на латиницу. Насколько это возможно и действенно, я утверждать не берусь — не проверял.

В Линуксе, как правило, папка [username] всегда может быть названа только латиницей. Поэтому, если у вас Линукс — переходите к следующему пункту.

4. Теперь можно запустить QGIS, либо перезапустить его, если он работал до этого.

В верхнем меню выбираем: модули — управление модулями-с ошибками. Ставим галку в чекбоксе stereo surveys и нажимаем установить

Снимок экрана от 2015-06-20 21_37_45

 

После установки появляется текст «Модуль неисправен invalid syntax». Презираем его и закрывая окно установки модулей.

Снимок экрана от 2015-06-20 21_37_59

 

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

Снимок экрана от 2015-06-20 21_40_00

На панорамах Google отображается площадь Прато-делла-Валле — что находится в Падуе, недалеко от Венеции. Это красивейшие места, но в качестве отправной точки для модуля не самые удачные — нам ведь требуется картировать шахтинскую улицу.

Для точечного слоя, создадим шейп-файл с названием test и системой координат EPSG: 3785 (можно и EPSG: 3857 — все работает, другие датумы не пробовал).

Снимок экрана от 2015-06-20 21_42_06

 

Что-бы вернуть его в рамки окна — перетащим таблицу слоев (менеджер слоев, TOC — все его по-разному называют) в нижнюю часть экрана.

Для того, что-бы картирование было более наглядным, подгрузим слой OpenStreetMap — Mapnik, воспользовавшись плагином OpenLayersPlugin.  Это не обязательно, но очень удобно. Приблизим нужный участок.

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

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

Первое сообщение об ошибке:

Снимок экрана от 2015-06-20 21_43_57

 

Второе сообщение об ошибке:

Снимок экрана от 2015-06-20 21_44_00

 

После нескольких неудачных попыток модуль срабатывает как надо и пользователь видит следующее:

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

— Непонятные числа, поля ввода и текст not calibrated слева и справа от окон с панорамами (первые два числа слева и справа — это координаты точки, в которой сделана панорама.

— Числа по центру, под окном со спутниковым снимком, которые обозначают следующее (я могу ошибаться):

H — высота точки, взятой на прицел в обоих панорамных окнах в метрах, относительно земли;

+/- — погрешность местоположения точки, взятой на прицел в обоих окнах, в метрах;

Lon, Lat — долгота и широта;

X,Y — неизвестные прямоугольные координаты;

— Под числами, расположена кнопка с текстом, «Digitize on map», по клику на которой, точка, взятая на прицел в обоих панорамах должна переносится в точечный слой.

— В окне отображения данных QGIS, помимо OSM-карты, пользователь видит три точки: зеленую — точка из которой снята панорама в левом окне StereoSurveys, красную — точка, из которой снята панорама в правом окне и желтую — точка, взятая на прицел в обоих окнах просмотра панорам.

Можно начинать работу. Находим на обоих панорамах одну и ту же точку. Кнопка Digitize on map не срабатывает, поэтому, включаем редактирование слоя и наносим ее вручную (кликаем по желтой точке, предварительно выбрав инструмент «добавить объект»). В проекте, который идет как пример к плагину, кнопка Digitize on map работает, но тоже далеко не всегда. Этот вопрос еще необходимо прояснить.

Находим один и тот же объект на двух снимках (в нашем случае это первый фонарный столб со знаком пешеходного перехода).

Снимок экрана от 2015-06-20 21_44_18

 

Прицеливаемся поточнее и стреляем — ставим точечный объект поверх желтой точки.

Снимок экрана от 2015-06-20 21_45_02

 

Точно так-же поступаем для остальных объектов. Картирование фонарного столба на противоположной стороне улицы.
Снимок экрана от 2015-06-20 21_47_33

 

Навигация осуществляется средствами Google StreetView. «Проезжаем» на несколько метров вперед в обоих окнах просмотра панорам и берем на прицел новый столб.

Снимок экрана от 2015-06-20 21_49_59

 

Иногда, без видимых причин возникает сообщение об ошибке:

Снимок экрана от 2015-06-20 21_51_10

 

Игнорируем его и продолжаем работать дальше.

Снимок экрана от 2015-06-20 21_53_17

 

Ради интереса, попытаемся изменить числа в полях StereoSurveys. Числа ввести можно только корректные. Насколько я понял из общения с Enrico, данные поля позволяют корректировать данные о высоте точки. Первое поле отвечает за высоту камеры над поверхностью земли (2.5 метра), второе за высоту поверхности земли (по умолчанию 0). Эти параметры особенно важны в горной местности с большими перепадами высот и при картировании объектов, находящихся на большом удалении от точек съемки панорам.

Не отвлекаемся и стреляем столбы дальше.

Снимок экрана от 2015-06-20 21_58_20

 

Процесс захватывает.

Снимок экрана от 2015-06-20 22_00_02 Снимок экрана от 2015-06-20 22_04_23 Снимок экрана от 2015-06-20 22_08_46 Снимок экрана от 2015-06-20 22_09_57

 

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

Еще точечку.

Снимок экрана от 2015-06-20 22:13:22 Снимок экрана от 2015-06-20 22:23:21 Снимок экрана от 2015-06-20 22:25:19

 

В результате, мы получаем точечный слой, который планировали. После нанесения всех точек, закрываем модуль и сохраняем полученный слой. Иногда, после закрытия модуля красная и зеленая точки (точки съемки панорам) не исчезают, в этом случае, необходимо отключить модуль через меню-модули-управление модулями-снять галку с чекбокса напротив StereoSurveys и нажать «Закрыть».

Любопытный момент: обычно, снимки привязывают к gps-трекам. Я за всю Одессу говорить не буду, но в OpenStreetMap так и происходит. Думаю в Google тоже. При этом трек рассматривается в качестве центра дороги, что частично верно только для проселочных колейных дорог. Игнорирование понятия полосы дороги, приводит к системной ошибке в координатах до 5 метров (обычно +/- 3 м). Сама по себе, это величина небольшая, часто незначительная на фоне погрешности прибора. Однако, в том случае, если координаты объекта используются для расчетов детерминированных показателей, ошибки могут быть колоссальны. Это категорически запрещает использование популярных веб-проектов для расчета площади секторов, лежащих в створе с известными координатами, анализа видимости объектов, привязки объектов по двум точкам…, боюсь, этот список может оказаться длинным.

Обратите внимание на местоположение фонарного столба на улице Ворошилова.

Карта OpenStreetMap — столб стоит на дороге.

Снимок экрана от 2015-06-20 22:31:49

 

Карта Google. Аналогичное местоположение столба. Так-же, обратите внимание на местоположение дороги, относительно столбов освещения.

Снимок экрана от 2015-06-20 22:31:14

 

Загадка. В какую сторону ехал гугломобиль, если дело происходит в стране с правосторонним движением?

Снимок экрана от 2015-06-20 22:30:49

 

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

Вот карта фонарных столбов, полученная с помощью модуля:

Снимок экрана от 2015-06-20 22:27:30

 

А вот, та же карта, полученная два месяца назад вручную. Ошибки нанесения (дублирование столбов) — налицо.

9

 

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

- Не работает с кириллицей;
- Не хватает угла обзора панорам как в модуле go2streetview;
- Возникает ошибка при попытке переместить точку на карте;
- Не работает кнопка Digitize on map;
- Плагин не реагирует, когда на обоих экранах одинаковый снимок (должно высвечиваться предупреждение);
- Не высвечивается предупреждение, если погрешность больше заданной величины;
- При запуске модуля должны отображаться снимки из текущих координат экстента;
- При наличии таблицы слоев, модуль выходит за размеры экрана;
- Не исчезают точки после закрытия плагина;
- Нет явного объяснения значения чисел и полей ввода в плагине;
- Много времени уходит на масштабирование снимков, не хватает кнопки "сбросить увеличение";
- Не хватает кнопки "назад" для каждого из окон панорам;
- Не хватает кнопки "вперед", перемещающей обе точки;

P.S. Спасибо Enrico Ferreguti за написание такого чудесного плагина. Десять лет назад я говорил, что скоро наступят времена, когда картографы долгими зимними вечерами будут превращать видеозаписи своих летних путешествий в точнейшие карты. Тогда надо мной все смеялись. Теперь, благодаря Enrico, я понимаю, что был прав.