Продолжаем работу над интерактивной картой, созданной в прошлой части. В этот раз займемся косметикой, сфокусируемся на визуальных изменениях с минимумом технических деталей.
Геометрия линий
Проведение прямых отрезков метро от станции к станции не передает истинную геометрию путей. В отдельных случаях линии мало отличается от прямых, но чаще это не так.
Для отрисовки более точных линий используем данные OSM и добавляем промежуточные точки между станциями.
В первой версии карты было 252 точки. В новой версии — почти в 23 раза больше — 5688 точек:
Пересечение станций
Далее обратим внимание, что координаты некоторых станций настолько близки, что накладываются друг на друга на схеме — выглядит это не очень хорошо.
Двигаем точки (в пределах реальных размеров станций метро), чтобы максимально разнести их на схеме:
Также исправляем ситуации, когда станция метро одной ветки накладывается на линию другой ветки:
Пересечение линий
Далее упорядочим отображение линий по глубине, которое проявляется на пересечении линий: более глубокие линии должны быть на заднем плане.
В старой версии порядок отрисовки линий никак не управлялся, поэтому один и тот же участок мог отображаться по разному для разных дат:
Для обозначения относительной глубины залегания вводим новый атрибут — layer — который привязывается к линии (way).
Более глубоким тоннелям соответствует меньшее значение layer. Дорабатываем логику отрисовки линий (ways): начиная с самых нижних уровней поэтапно отрисовываем все линии до самых высоких значений layer.
Теперь все пересечения линий соответствуют реальному расположению путей:
Википедия
У нас интерактивная карта — значит, не лишним будет добавить информацию и детали про станции и линии метро. Но всё уже сделано до нас. Поэтому просто добавляем ссылку на Википедию:
Кнопки навигации
Добавляем кнопки навигации по событиям (events). При нажатии происходит, соответственно, переключение текущей даты на ближайшее предыдущее, либо будущее событие.
Вместе с кнопками добавляем управление с клавиатуры:
влево/вправо — переключение даты на предыдущее / будущее событие;
вверх/вниз — переключение даты на один день вперед / назад.
Будущее метро
В комментариях к предыдущей статье предложили прекрасную идею: добавить на карту планируемые линии и станции.
Общие планы по развитию метро на ближайшие лет 5 известны и доступны.
Конечно же, за такой срок что-то может измениться (и, наверняка, изменится). К тому же, неизвестны, хотя бы, примерные даты открытия новых станций и участков. Но, в целом, в сети достаточно много материалов, чтобы предположить, как будет развиваться метро в ближайшие 5 лет.
Открываем, изучаем, фантазируем:
Где-то к 2028 году будут открыты новые линии Троицкая, Бирюлёвская, Рублево-Архангельская, а также Солнцевская и Калининская линии объединятся в Калининско-Солнцевскую:
Ложка дегтя
Красота требует жертв. Для того, чтобы линии на карте соответствовали реальному расположению путей, общее количество точек многократно увеличено. Также, добавлены новые линии и дополнительные данные.
Это всё увеличивает объем обрабатываемой информации и усложняет рендеринг изображения, что не самым лучшим образом сказывается на производительности.
Стали заметны задержки и рывки при навигации — и это предмет для дальнейшей оптимизации.
Итоги
Помимо перечисленных в статье моментов, добавлен ещё ряд менее заметных улучшений.
На проработку карты, включая статью для Хабра, было затрачено около 55 часов.
Что получилось: https://mm.timelapsemap.com.
Ссылка на эту версию для истории: https://timelapsemap.com/h/256d54.
Комментарии (10)
serafims
18.03.2022 17:14"Не менее замысловатые изгибы Филевской и Солнцевской линий. "
Если проанализировать всю карту, видно, что на станции поезд не должен входить в кривую, участок должен быть прямолинеен. Прошу метрополитенологов пояснить, почему это важно.Pornopatsan
18.03.2022 20:36+3Вообще говоря, это неправда. Небольшая кривизна допускается.
Как например на станциях Кутузовская или Арбатская (голубой ветки)
yoz
18.03.2022 17:15Посмотрите MetroCucumber на ютубе. У него перспективы развития интересно и далеко отрисованы.
PavelKrishtalskiy Автор
19.03.2022 10:24Спасибо за наводку.
При прорисовке будущего я исходил из тех планов развития, которые почти наверняка случатся: часть тоннелей уже проложено, часть прокладывается в данный момент. Про всё есть статьи на Википедии (что, конечно, не гарантия, что именно так всё и будет, но некоторую дополнительную уверенность придает).
Например, объединение Бирюлёвской и Рублёво-Архангельской линий в перспективе есть, но пока не удалось найти ни трассировки путей, ни даже примерных сроков (Википедия подсказывает, что «к проектированию подобного продления планируется приступить после 2025 года»).
Zeleny4
18.03.2022 20:41-1Адов трешак, верно? Примерно как и нынешние табло в московском метро-со шрифтом высотой в сантиметр на огромном пустом табло. Ах, да-еще желательно и бледно-серым цветом шрифта. Кто видит, как каждый день страдают люди, даже со сносным зрением, пытаясь прочесть эти адовы таблички над платформами или на сходе с эскалаторов-тот понимает.. я уже лет 10 наблюдаю эту деградацию схем в вагонах и табло на станциях.
Вот просто смотришь на все это дизайнерское безумие, и понимаешь, что схемы и таблицы советских времен-четкими, контрастными цветами и прямыми линиями, и максимально возможным для размера табло надписи жирным черным шрифтом-это и есть забота о людях. Ну осовремень ты все это, и пусти в производство. А не изгадь в стиле "я ТАК вижу", сляпав "портрет Клетчатого". И это вот всё... нецензура, в общем. Кстати-человек, едущий в вагоне метро - свято верит, что он едет по прямой. И уж самое худшее, что он может желать-это слежить пальцем за извивами и загибами веток, прикидывая нужное кол-во станций до пересадки (тоже в безумном стиле).
fotobred
18.03.2022 21:35+1Если захотите, можно добавить немного фото истории
http://walks.ru/cgi-bin/album/album_pic.pl?mtr0_01.rus=166=0=stdt/moscow=b=album=end
Не так красиво, но с переходами и выходами
Xobotun
19.03.2022 22:07+1Прекрасная карта, спасибо!
Видел муниципальную версию, но с фактическим расположением линий куда интереснее, кмк.
vis_inet
Красивое (с)