X-Art

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

Карта Русской равнины:

Это безумие заняло у меня шесть ночей в нарядах. Во время процесса мне активно позировала карта расположения военно-стратегических объектов северо-атлантического альянса и чуть позже — карта растительности из монографии Берга «География СССР», хранившаяся в библиотеке нетронутой с девяносто четвертого года. Карта исполнена карандашом и шариковой ручкой. К великому сожалению, ввиду служебных пертурбаций завершить ее так и не удалось — подписи остались только в виде набросков.

А вот карта мира. Эта вещь уже посильней чем «Фауст» Гете:

Карта грубовата, более того непосвященный человек всячески ее раскритикует. Что с Кольским полуостровом? Почему вместо Камчатки сосулька? Что с южным полушарием происходит? Южное полушарие — это конечно сплошной косяк, не отрицаю. Но интересно в этой карте не содержание, а способ получения.  Равновеликая азимутальная проекция Ламберта в которой была исполнена исходная карта после несложных геометрических манипуляций была преобразована в проекцию Меркатора. Да, руками. Формулы Бурса-Вольфа? Передискретизация? Полиномиальные преобразования? Все это для слабаков. Вот как выглядит настоящее перепроецирование на лету! Помимо авторучки, при изготовлении был задействован огрызок синего карандаша.

Ну и наконец, высшая стадия картографической парэстезии. Содомия цветов. Визуализация данных OpenStreetMap на территорию Ростовской области. Визуализировал, визуализировал, да так и не вывизуализировал. И не с помощью какого-нибудь mapnik-a, QGis-а или на худой конец фотошопа. Акварельные краски на меду (срок годности истек тринадцать лет назад), блокнот и Cranberries в наушниках — вот инструменты этого безумия!

Если обычная работа с картой вас больше не возбуждает — попробуйте сменить диванный маппинг на девиантный. Ведь, даже по словам Долорес О’Риордан: «Фани хоу тинг джаст тастед беттер! Вен ви вер юнг!»

Опен стайл пиздинг

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

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

Код писался под Mapnik. Есть еще вариант этого кода написанный на CartoCSS, но он несколько устарел, а потому я его тут не выкладываю. Для отрисовки тайлов в этом стиле рендер должен подсасывать данные OSM в формате шейп-файлов, которые доступны на сайте ГИС-ЛАБа

Конечно-же, результат далек от идеала, однако, как говорил один знакомый прокурор: «похоже до степени смешения». Это еще раз подтверждает, что закрытые проекты сосут перед опенсорсом. Ибо сделать из OpenStreetMap Яндекс-карты — что в носу поковырять, а вот обратно хуй там. Еще есть огромное количество моментов, которые следует исправить, а то и вовсе полностью переделать. Но нет предела совершенству, в отличии от жизни человеческой.

Ну а теперь самое интересное: картинки. Давайте погуляем по зумам. В Яндекс-картах их шестнадцать, со второго по восемнадцатый. Вот второй зум:
2

 

Здесь и далее слева карта Яндекса, справа мое скромное творение.

На низких зумах при стилизации данных OSM возникает проблема приоритета названий: запросто может быть, что надпись «Тринидад и Тобаго» выводиться, а, например, «Япония» нет. Что поделать, такое оно случайное отображение данных. Пришлось ранжировать страны по численности населения и в зависимости от этого ранжировать отображение надписей. Но и тут не все хорошо, а именно есть две проблемы. Во-первых, страны не представляют собой единые полигоны, в результате чего, подписывается не только основная площадь страны, но и какой-нибудь нахуй никому не нужный остров, юридически принадлежащий, скажем Франции. Можно было, конечно исправить это дело путем учета площади, но поверьте, гораздо проще и спокойнее было сделать это ручками, отредактировав непосредственно сами данные.

Третий зум:

3

 

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

4

 

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

На пятом зуме пришлось изрядно возиться с водоемами. Будете смеяться, но в OSM нет единых водотоков, одни кусочно-разрывные графики функций, снабженные разными тегами. Например, вы не можете легко отобразить на карте такую реку, как, Енисей, поскольку часть реки riverbank, часть water, а часть вообще непонятно как тегирована. Дай думаю, посмотрю, а как реки в стандартном стиле отображаются? А вот хрен там, они в стандартном стиле на этих зумах никак не отображаются. Ну что тут поделать? Я налил себе стакан и вывел интересующие меня реки просто по их имени, благо крупных рек выводить много и не требовалось.

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

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

 

Шестой зум заставил изрядно повозиться с названиями рек, которые никак не хотели гармонично сочетаться ни с названиями городов, ни между собой. Проблема та-же: кусочность осмовских данных. По хорошему, перед тем, как писать картостиль не лишним будет убедиться в том, что сами геоданные у вас представлены должным образом, иначе прорва времени будет уходить на латание Тришкина кафтана: в одном месте исправил, в другом все поехало. Я уравновесил эти безумные колебания насколько смог:
6

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

Седьмой зум (да я уже приехал из тайги, поплнил запасы пива и зарядил батарею ноутбука):

7

 

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

Восьмой зум:
8

 

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

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

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

 

Еще одна трудность, которая начинается на девятом зуме это железные дороги. Данные OpenStreetMap настолько разнятся в этой части от данных Яндекс карт, что для достижения похожести стилей приходиться применять совсем другое обозначение для железных дорог. В OSM  в отличии от Яндекс-карт отрисована каждая ветка захолустного пути, поэтому применение оригинального стиля ведет к тому, что железные дороги начинают выглядеть как толстые черные полосы. А стоит немного отойти от оригинала и сразу все нормально. Десятый зум:
10

 

Одиннадцатый зум, на котором я потерял названия районов и несколько дней не мог их найти, но в итоге нашел:
11

 

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

 

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

 

Четырнадцатый зум:
14

 

Пятнадцатый зум:
15

 

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

 

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

 

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

 

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

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

Индекс не подскажете?

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

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

А уж почтовый индекс это что-то из времен почтовых голубей. Я отправляю письмо конкретному человеку. Зачем, скажите мне, я должен знать какое почтовое отделение его обслуживает? Это все-равно, как если-бы покупая билет на самолет я обязан был указать название компании, производящей поставку снегоуборочной техники для аэропорта.

Сейчас почтовый конверт выглядит так:

Почтовый_конверт_с_Зыриным (1)

А должен выглядеть так:

Почтовый_конверт_с_Зыриным

 

Знаете почему Почта России настолько несовременна? Они так долго заклеивали старые конверты, что до сих пор считают главным умение работать языком.

Как я свою газету нашел

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

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

После «Газеты Дона» я обычно спрашивал «КВУ-шку», которую, время от времени, покупаю и сейчас. Если ее не было, то брал убогие «Шахтинские Известия», а если не было и их, то газету «Тумба». Если не было ничего, то я брал «Комсомолку», «АиФ» или на худой конец кроссворды «Крот» и «Три семерки» (или три пятерки?) с анекдотами. Кроссворды были всегда. Больше я никогда ничего не покупал.

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

Мои покупательские предпочтения не менялись годами. Но в один из дней на новом хбковском рынке случилась неведомая вспышка озарения и в ларек напротив мясного павильона завезли газету со странным названием «Рыбак Рыбака».

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

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

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

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

С тех пор, если меня называют идиотом, я этого не отрицаю.

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

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

В качестве послесловия: почему-то на сайте газеты карта местоположения редакции выглядит как говно:
Screenshot - 14.04.2016 - 18:35:53

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