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

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

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

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

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

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

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



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

Feeneek — простая библиотека для гео-вики приложений

Feeneek — простая библиотека для гео-вики приложений

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

Скачать библиотеку Feeneek Butko Sonne (build 22022016)

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

1

Разберем все по порядку.

Номер 12 — привычная и знакомая панель. На странице «info» все так-же текст лицензии, на «wiki» — страница с вики, на «map» — страница с картой.

Номер 13 — на рисунке непонятно, куда он указывает. Если уткнуть курсор в левую часть экрана, появится панель слоев:

2

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

Номер 3. Скачать файл с базой геоданных.

Номер 2. Отправить текущий экстент на печать (или сохранить в pdf)

Номер 6. Добавить новую точку. Можно сделать это и старым способом, отредактировав вики, но меня так просили об интерактивности, что я не мог отказать. Кликаете по карте и вносите данные:

3

Здесь же можно вставить ссылку на фотографию (не нужно мучаться с html-оформлением).  По завершению нажимайте кнопку «сохранить» и ваша точка окажется в общей базе. Теперь ее можно показывать друзьям:

14

Номер 7. Открыть geojson-файл. Выбираете файл и добавляете в текущий проект.

21

Номер 9. Цвет, прозрачность и другие характеристики векторного объекта можно изменить нажав на указанную кнопку:

5

Номер 10. На карте можно нарисовать маркеры и вектора.

Номер 8. А еще на карте можно нарисовать растровую картинку:

4

Номер 11. При рисовании растра зум и перемещение отключены, но работает история просмотра карты.

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

9

Или запустить OSM-редактор level0:

7

Или зависнуть в чатике:

8

Там же можно подгрузить данные проекта GIMS и смотреть за ежедневным движением облаков:

10

Или принять ЛСД и смотреть на облака по-другому:

20

Можно подгрузить на вики-странице картинку:

12

При определенном усердии и благоприятных проекциях можно даже натянуть гандон на глобус:

13

Номер 4. Если нажать на эту кнопку с домиками вы увидите белый экран. Нажмите на нее еще раз (иконка будет другая), а потом еще-раз. Это кнопка перехода в трехмерный режим. С первого раза не срабатывает из-за баги, которую я так и не отловил.

15

Номер 5. В трехмерном режиме тоже можно рисовать:

17

А еще в векторном режиме можно путешествовать по земле:

16

И привязывать изображения так, как это вы никогда не делали (это, кстати, один из первых памятников Церетели):

222

В вики почти ничего не поменялось:

18

Магическая капча на месте:

11

По клику на соответствующей иконке открывается чатик и фрейм с картой:

19

 

Прошлая версия никуда не пропала:
Позапрошлая версия тоже на месте:
В каудфандинг я не верю, но донейт все-же оставлю

История создания прошлой версии:

Дамы и господа! Леди и джентельмены! Мадам и месье! Я чрезвычайно рад сообщить вам, что новая версия библиотеки, еби ее в душу, наконец-таки увидела свет. Встречайте Feeneek build 03022016 McClane Lichtgestalt

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

Геоданные хранятся в формате:

[
широта,долгота,'...','...','...','...','...','...','...','...'
],

Например:

[
40.25743,47.7261,
'Тип носителя',
'Компания',
'Фотография',
'Адрес',
'Описание',
'Стоимость',
'Статус',
'Документы'
],

В geojson они компонуются уже автоматически. Обратите внимание на то, что при переносе строк их необходимо конкатенировать, то бишь вот такой вариант не проканает:

[
40.24343,47.7071,
'Баннер односекционный',
'ООО "КАФКО"',
'<img src="http://cafco.ru/images/stories/adm/201211/p0416.JPG" width="200"/>',
'Трасса М4 "Дон"',
'Односторонний щит 3х6 м.' 
 'При печати рекомендуется использование усиленной баннерной ткани. '
 'При заказе до 01.02.2016 дейстует скидка 10%',
'10 000 рублей в месяц',
'Занят до 31.12.2015 года',
'Разрешение на установку выдал И.О. '
 'Начальника гор.архитектуры И.И. Петров (исх. исх. № 61/21/375 от 04.04.2015)'
],

Каждая строка должна быть заключена в одинарные кавычки, если строк несколько, после кавычек на каждой строке ставят плюс:

[
40.24343,47.7071,
'Баннер односекционный',
'ООО "КАФКО"',
'<img src="http://cafco.ru/images/stories/adm/201211/p0416.JPG" width="200"/>',
'Трасса М4 "Дон"',
'Односторонний щит 3х6 м.' +
 'При печати рекомендуется использование усиленной баннерной ткани. ' +
 'При заказе до 01.02.2016 дейстует скидка 10%',
'10 000 рублей в месяц',
'Занят до 31.12.2015 года',
'Разрешение на установку выдал И.О. ' +
 'Начальника гор.архитектуры И.И. Петров (исх. исх. № 61/21/375 от 04.04.2015)'
],

Правка css из вики в этой версии отключена. Зато до ума доведено вики-изменение стиля отображения точек (страница styleOfPoints). Достаточно просто изменить строку вида:

[4.0, '#1f78b4', '#000000', 0, 1, 1], //комментарий к стилю точек

Здесь по порядку идут значения радиуса, цвета заливки, цвета обводки, толщины обводки, непрозрачности обводки и непрозрачности заливки.

Комментарии по прежнему сишные. Доступна подсветка синтаксиса, например /* {syntax php} */

В вики добавлено окно с картой (иконка слева вверху).

Код гораздо лучше структурирован, даже несмотря на его возросшую сложность. Все библиотеки внутри, внешних зависимостей нет. Leaflet заменен с версии 0.7.3 на версию 0.7.7. LionWiki по прежнему без изменений.

На карту добавлен лефлетовский контрол.

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

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

UPD: Предварительная сборка новой версии (Feeneek pre11022016 Butko Sonne).

Основные изменения:
— На высоких зумах карта переходит в трехмерный (WebGL) режим;
— Появилась возможность отображать векторные данные OSM (через встроенный overpass);
— Добавлен OSM редактор level0;
— Добавлен чатик IRC.

Изменения пока большей частью косметические. Самое главное — исправлены некоторые ошибки прошлого релиза:
butko_sonne
butko_sonne2

butko_sonne3

 

История создания позапрошлой версии:

Feeneek, да подождите вы, сейчас все напишу

UPD. Все, вот теперь пишу. Фабула такова:

Лет семь назад я участвовал в международном проекте по составлению карты циркумбореальной растительности (Circum Boreal Vegetation Map), в части Русской равнины и (совсем немного) Камчатки. За всю Одессу не скажу, но то что доводилось наблюдать мне, было исключительно шняжной праздной тусовкой, не имеющей ни байта полезного результата.

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

От OpenLaers я, впрочем довольно быстро отказался в пользу Leafleta Владимира Агафонкина, о чем я не пожалел. Большое за это спасибо Илье Звереву, активно развивающему мысль, что OL — говно, а Leafleat — круть небесная. В целом, я конечно согласен, только вот не у каждого семейные обстоятельства позволяют двигаться по пути прогресса — приходится пользоваться старыми ламповыми библиотеками.

Но я отвлекся. Для создания проекта, помимо лефлета, я использовал простой файловый вики-движок LionWiki, написанный Адамом Цивнером, на основе еще более простого вики-движка WiKiss.

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

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

Пароль для страниц есть.

Бан для мудаков есть

Запрет на изменеие страниц есть

Капча для страниц есть, причем построена в форме ответов на вопросы. Вопросы и ответы вы можете вписать самостоятельно (/plugin/captcha/). Это самая лучшая капча из всех возможны, потому как я в конец заебался сидеть и отгадывать, что за числа на заборе сфотографированы мудаком с хуевой мыльницей. А здесь вы можете написать любой вопрос, однозначно различающий человека и нечеловека (Например: «Кадры произведений какого жанра вклеивал Тайлер Дёрден в порнографические ленты взамен вырезанных?»).

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

История правок есть. Если есть прошлые версии младше года, то текущие косяки можно откатить.

Комментарии по умолчанию отключены, но это исправляется вствкой в текст страницы текста: {COMMENTS}.

Еще есть подсветка кода, вставка изображений, облако тегов и наверное еще что-то. На карте popup прописан таким образом, что выводятся только два атрибута: «name» и «site», причем последний выводиться в виде текста «go to site»  c гиперссылкой на указанный адрес.

Для установки достаточно просто распаковать архив. Для настройки правьте файлы:

-config.php

-index.php

-wiki.php

-info.php

-var/pages/css.css

-var/pages/team.html

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

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

UPD:
Добавил возможность внесения данных непосредственно с карты

       
var popup = L.popup();
        function onMapClick(e) {
            popup
                .setLatLng(e.latlng)
                .setContent(
"<H3>Текущие координаты: " + e.latlng.toString() +
"</H3><iframe width='550' height='400' src='./wiki.php?page=FeeneekLAYERS&action=edit'></iframe><p>")
                .openOn(map);
        }

English:

About

Feeneek — It is a small and simple library. It is based on the confluence of the wiki-engine LionWiki and library leaflet. With Feeneek you can create files geojson and immediately display it on the map.

Despite its minimalism, Feeneek it may well be used as the theme for the CMS site.

Installation

1. Unpack the library into the selected directory of your site.

2. Type in the search bar of your browser path to the file indeks.php

3. Enjoy!

For the general settings you must make changes to the files:

-config.php

-index.php

-wiki.php

-info.php

-var/pages/css.css

-var/pages/team.html

Аccess control:

For the access control settings you must make changes to the files:

-plugins/wkp_Admin.php

-config.php

PASSWORD: my_admin_password — deleted this password after installing!

http://www.mysite.ru/feeneek/wiki.php?action=admin-blockip — Blocked IPs

http://www.mysite.ru/feeneek/wiki.php?action=admin-blacklist — Blacklist

http://www.mysite.ru/feeneek/wiki.php?action=admin-pages — Read-only pages

http://www.mysite.ru/feeneek/wiki.php?action=admin-plugins — Disabled plugins

License

GPL v2.0

Authors

©Feeneek was created by Sergey Golubev [http://www.городшахты.рф], e-mail: [schwejk-rpnt@rambler.ru]

The Homepage of Feeneek is at http://xn—80afd3balrxz7a.xn—p1ai/feeneek/

©LionWiki was created by Adam Živnéř, adam.zivner@gmail.com, http://adam.zivner.cz .

The Homepage of LionWiki is at http://lionwiki.0o.cz.

LionWiki was created as a fork of WiKiss 0.3 (Changes from WiKiss) which is itself fork of TigerWiki (hence the name) which is a fork of roWiki (See About LionWiki for details).

©Leaflet is a modern open-source JavaScript library for mobile-friendly interactive maps. It is developed by Vladimir Agafonkin (http://agafonkin.com/en/) with a team of dedicated contributors, (License: BSD);

The Homepage of Leaflet is at http://leafletjs.com/

©Map data: OpenStreetMap contributors, (License: CC-BY-SA);

The Homepage of OpenStreetMap is at http://openstreetmap.org/