Экологическое шкалирование

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

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

Мероприятие состоится в здании Workplace academy, что находится по адресу: Санкт-Петербург, ул. Егорова 3, станция метро «Технологический институт»:

Посмотреть более крупную карту

Начало в 18:00, завершаем в 20:00.

Стоимость участия 500 рублей. Оплатить можно наличными в день встречи, либо в любое время на Яндекс-деньги:

Большая просьба, сообщить о своем намерении прибыть, дабы я успел все подготовить в лучшем виде.

Вы даже представить себе не можете, как я вас жду, так что приходите. По всем вопросам можно писать в комментарии, на почту schwejk-rpnt@rambler.ru, телеграмм-канал: https://telegram.me/geokurs или звонить по номеру +7-904-614-68-29.

P.S. Там, кстати, есть симпатичная кофейня в которой обещают скидки. Так что, мы ждем вас все вместе.

Недосягаемый космос

Я настолько стар, что в детстве хотел стать космонавтом. Видимо желание это было так велико, что по инерции меня еще дважды заносило в подмосковный Центр управления полетами, старый советский космический скафандр и тренировочный аквариум Звездного городка. В Звездном городке я на контрольно-пропускном пункте впервые увидел лиственницу и совершенно изумился (ибо в то время я еще не научился как следует охуевать). Хвойное дерево, с мягкими как листья иголками это вам не акация с гледичкой. На тот момент, я уже принял решение, что космос может обойтись без меня, а вот таежные леса нет. Я так и записал в блокноте: «буду лесником», после чего перечитал в поселковой библиотеке все что имело отношение к лесу и лесному хозяйству.

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

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

Хорошо, что зима не длится вечно. Я был самый трезвый из кочегаров и все-равно пил так, что написал монографию, философский трактат, программу на С++ для ввода и анализа геоботанических данных и обошел в Морровинде вокруг Красной горы. Фактически, вся теория живых систем, методы расчета важности информации, понимание красоты как строгой (в математическом смысле) функции системы и диатропический подход к классификации объектов возникли во время безделья между подброской в печь дров и угля.

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

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

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

Что произошло? Два класса, абсолютно разные во всем, содержат в себе один и тот же тип объекта. В нормальной иерархической классификации такое абсолютно невозможно. У нас, вместо иерархии образуется сеть из типов объектов, в которых классы всего-лишь представляют собой группы типов с определенным набором признаков. Иерархия пропадает, возникает диатропизм. В ботанике и зоологии та же хрень описана еще палеоботаником С.В. Мейеном и его учеником Ю.В. Чайковским (смотри лучшее чтиво 1990-го года: «Элементы эволюционной диатропики»).

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

Мы рисуем контур конкретного объекта с редкостоящими дервьями, после чего решаем: отнести его к лесу, скверу или вообще к газону? Мы рисуем линию и решаем: отнести ее к ручью или ограждению (ров вокруг замка это ограждение или водоем?). Мы рисуем точку и думаем, обозначать ли этот канализационный люк как преграда на дороге, если с него раз в два месяца какие-то пидарасы снимают крышку? Возьмите OSM-мовские natural=wood и landuse=forest. Всегда ли легко установить разницу, особенно если речь идет о стране в которой лесное хозяйство официально отменено с 2007 года? А ведь это разные классы, объекты в них должны быть отличимы между собой как тротуар и ручей. Но что делать, если по тротуару уже второй год течет ручей водопроводного порыва, не мешая гулять пешеходам? Что это за объект-то такой?

Кстати, в России landuse=forest и при действующем лесном хозяйстве нельзя было трактовать однозначно. Например северные гористые леса, принадлежащие лесхозу, который ввиду бессмысленности или отсутствия дорог не проводил там хозяйственные мероприятия.

Примитивная классификация данных OpenStreetMap позволяет отображать на карте огромное количество нюансов. Новый объект? — не вопрос, вот новое значение тега. Что-то совсем странное? — не вопрос, вот новый тег. Выбери в свое время Кост многоуровневую классификацию, мы получили бы сейчас головную боль в виде действия закона Ципфа: имели бы пять-шесть верхних классов, включающих 80-90 процентов всех объектов и овердохуя классов, содержащих по одному-два объекта. А в таком виде, классификация OSM сродни низкоуровневому языку или безработному без долгов: постоянно требуется вникать во множество деталей, зато никаких ограничений для творчества.

Лучше нынешней классификации OSM может быть только полный отказ от иерархии. Объединяем существующие теги и их значения в единые свойства и указываем наличие этих свойств у любого объекта. А поскольку свойства выражены в разной степени, добавляем значение истинности. Так для густого леса, вместо natural=wood мы получаем naturalwood=0.9, а для редкостойного, вместо natural=wood мы получаем naturalwood=0.3.

— Эй, бля! С твоей классификацией, мы получим таких монстров, что хер кто их распознает! Вот что это например за хуйня такая:  natural_wood=0.3, natural_scrub=0.2, natural_wetland=0.2, highway_construction=0.5,  highway_path=0.9,  barrier_ditch=1.0, landuse_construction=0.5, landuse_fill=0.7?

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

Я тут не буду намекать о том, что допуск отображения значения тегов через другие теги дает вообще космические возможности. Например, этот же объект можно в упрощенном виде записать как barrier: {natural_wood=0.3, natural_wetland=0.2, barrier_ditch=1.0}. Хотите увековечить на карте топиарное искусство? -говно вопрос: historic_memorial:{natural_scrub=1.0}. Обратите внимание, что в данном случае, natural_scrub относится именно к памятнику, то есть является его неотделимой частью. Если бы мы хотели обозначить могилу в кустах, то поступили бы по другому: historic_memorial=1.0, natural_scrub=0.4.

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

 

Пространные размышления об идентификаторах, времени и базах геоданных с нечеткими тегами

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

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

Прежде всего, совершенно не устраивал формат данных. geojson-формат простой, но хотелось сделать его еще проще. В результате я написал скрипт, позволяющий хранить в вики данные в формате [‘1′,’2′,’3′,’4′,’5′,’…’,], а сам geojson формировать и подгружать в leaflet программно. При таком формате требуется фиксированное положение данных о широте и долготе, например [‘lat’,’long’,’3′,’4′,’5′,’…’,] или [‘id’,’lat’,’long’,’3′,’4′,’5′,’…’,]. Последний вариант с id выглядел более привычным для человека, работающего с данными OSM. Но этот-же вариант заставил крепко задуматься, а нужен ли вообще идентификатор точки?

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

Число объектов в геоцентрической базе геоданных конечно и зависит от выбранной точности измерения координат. Скажем, при измерении координат с точностью до одной стотысячной градуса, заполненная база геоданных будет содержать в себе примерно шесть с половиной квинтиллионов объектов. В объектоцентрической базе такого предела нет — если не внедрять такой типично геоцентрический тип данных как отношение, число объектов может расти бесконечно. Кстати, вот вам и предел развития современной базы OpenStreetMap: 6,48 × 10¹⁸ отношений. Это примерно четверть от количества всех атомов в наблюдаемой Вселенной, так что если вы никогда не редактировали карту OpenStreetMap — советую поспешить, пока еще есть возможность.

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

Ежедневно из базы OSM картографы удаляют огромное количество объектов, нанесенных правильно, но не актуально. Возле моего дома долгое время была автозаправка проставленная на карте. Однажды автозаправки не стало и я удалил с карты точку. Но едва JOSM высветил мне окошко успешности сохранения правок, я понял, что сделал что-то не так. Влечет ли необходимость поддержания базы геоданных в актуальном состоянии автоматическое удаление данных, потерявших актуальность? Конечно же нет. Сейчас точки OpenStreetMap напоминают рыбацкие поплавки: они все на одном уровне, но из глубины к каждому из них тянется леска разной длины. Только в одном случае леска непрерывная (круглосуточные магазины), а в другом штриховая (магазины с ограниченным временем работы).

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

«Режим работы», а вернее «режим существования» не только присущ всем пространственным объектам, но и является такой-же неотъемлемой характеристикой как широта, долгота и высота.

Слабозаросшая обочина дороги
Система «ключ-значение» безусловно создана в лучших традициях Карла Линнея. Но и недостатки ей присущи ровно те-же самые. Таксономия данных OpenStreetMap почти полностью исключает возможность существования объектов переходного типа. Особенно это касается природных объектов, для которых дискретность вообще достаточно условное явление. Например, промежуточный тип покрытия между surface=ground и surface=grass худо-бедно можно указать (поставив оба значения), но вот дальнейшее деление возможно только с помощью добавления новых значений. Это типичная проблема классификаций, основанных на булевой логике: будучи примененной к естественным объектам, такая классификация непременно либо слишком груба, либо излишне подробна.

А не присовокупить ли к паре «ключ+значение» значение истинности, характерное для нечеткой логики? Тогда едва заросшая травой поверхность дороги будет обозначаться «surface=grass=0.1», а заросли травы, под которыми дорога едва проглядывается будут иметь обозначение «surface=grass=0.9». Нотация, конечно может быть и другой, важнее то, что такой подход позволяет нам наносить на карту объекты, относящиеся одновременно к двум и более классам.
Слабозаросшая обочина дороги
Дабы финализировать сей трактат, продемонстрирую вам образец данных в формате feeneek:

['tipe','lat','long','height','time','author','license','link','note','data1',],
['tipe','lat','long','height','time','author','license','link','note','data2',],
['tipe','lat','long','height','time','author','license','link','note','data3',],
['tipe','lat','long','height','time','author','license','link','note','data4',],
...,...

tipe — тип данных;
lat — широта;
long — долгота;
height — высота или уровень (в зависимости от применения);
time — время в формате: 66666620160323220305 (2016 год, февраль, 23-е число, 22:03, 05 секунд);
author — автор;
license — лицензия данных;
link — ссылка на внешний документ;
note — комментарий к точке;
datax — атрибутивная информация.

Правильный ли этот формат? — нет, не правильный. Хорош ли он? — нет, он плох. Но у него есть одно преимущество: для того, что-бы завершить эту статью он вполне годится.