Как сделать карту метрополитена

Создаём интерактивную векторную схему московского метро

Московское метро меняется. Желающий представить себе схему, скажем, 1945 года без проблем соберёт данные из открытых источников; остаётся вопрос с представлением результата, — не на круговой диаграмме же его показывать. В статье я расскажу об основных шагах в создании proof-of-concept сервиса, позволяющего показать схему метро, например, на 1 мая 74 года (слева) или станции с глубиной заложения больше 30 метров (справа).

Как сделать карту метрополитена

Формируем требования

Отображаем схему

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

Станции

Самое главное на схеме, — станции, поэтому начнём с них. Всего 3 типа: конечные, пересадочные и обычные. 2 прямоугольника и круг. Что может быть проще? Кропотливо расставим их на полотне, а некоторые ещё и повернём.

Как сделать карту метрополитена

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

Линии

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

Взгляните на схему и попробуйте ответить, какие 2 сегмента не будут нарисованы?

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

Как сделать карту метрополитена

Переходы

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

Названия станций и подложка

Отобразим названия и выровняем текст с помощью свойства text-anchor. Способа осуществить перенос строки, кроме как созданием дополнительного элемента, к сожалению, нет.

Подложку текста сделаем обычным полупрозрачным прямоугольком. Размеры и координаты текста мы получим с помощью getBBox.

Перекрашиваем

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

Мы имеем произвольный градиент от одного цвета к другому, который для удобства берём в каналах, значение станции (например, глубину заложения 23 метра) и максимальное и минимальное возможые значения (0 для наземных станций и 80 для самой глубокой «Парк Победы»). Посчитаем процентное соотношение значения станции к разности крайних значений и полученное отношение применим к разности значений по кажому каналу. Вот он наш цвет.

Остальные элементы на странице покрасим градиентом, у нас есть координаты и цвета станций — а это всё что нужно.

Фильтруем

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

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

Остаётся настроить понравившийся вам range slider. По определенным причинам я написал свой. Ленивым адекватным людям посоветую, например, этот.

Масштабируем и двигаем

Ответственность за это возьмёт на себя свойство viewBox. Ребята из «Микрософт» написали отличную статью с примерами. Для перехвата скрола я использовал jQuery Mousewheel. Признаться, не самая тривиальная задача, так как при изменении масштаба нужно учитывать сдвиг относительно изначального положения с соответсвующим зуму коэффициентом.

Почти всё

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

Радость длилась, пока я не решил зайти с телефона… На весьма неглупой lumia 1020 сервис грузился дольше, чем пол минуты. Я же абсолютно забыли о цене манипуляций с dom. У нас, на секунду, больше тысячи элементов! Да и манипуляции с viewBox на мобильном устройстве не работали нормально.

Исправляем недочёты

С клиента на сервер

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

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

Начал с поиска библиотек (остановился на hammer.js) и даже ознакомится с документацией, но вспомнил про ТРИЗ. Генрих Альтшуллер определяет идеальный объект, как объект, которого нет, а его функция выполняется.

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

Что принёс перенос в цифрах?

Как сделать карту метрополитена

Как сделать карту метрополитена

Выводы

Проблемы с «Mozilla Firefox»

В процессе работы выяснилось, что «Mozilla Firefox» переоптимизированна. В то время как другие ребята исправно отображают всю графику, «Mozilla» допускает пропуск рендера элементов, если элемент не виден пользователю — закрыт div’ом сверху или просто вне области видимости монитора. Как сознательный гражданин я добавил баг, который до сих пор неподтверждён, так как удовлетворить просьбу предоставить the simplest possible testcase у меня не получается, на малом количестве элементов всё работает нормально, а ссылки на проект, видимо, не достаточно.

Если это читает представитель «Mozilla»: Ребят, работает криво независимо от платформы (windows/mac) и версии (наблюдается и в старых версиях), чесслово.

В качестве заключения

Несмотря на то, что в html5 осталась некоторая сырость, пришло время его использовать. Не нужно нагружать процессоры пользователей, добавляя на каждый второй сайт «модные» эффекты, которые ещё вчера были в рассылке для frontend-разработчиков.

Но пришло время делать удобные транспортные схемы и интерактивные продукты, доступные с любого устройства.

Я не понимаю, почему тот же «Яндекс» не переведёт Я.Метро на новую официальную схему, которая будет работать везде; пользователям мобильных устройств ребята предпочитают показывать ссылки на приложения. Магазины (приложений) полны клиентов для соц.сетей и крупных сайтов и, на мой взгляд, есть в этом что-то неправильное.

Ой, у вас баннер убежал!

Читают сейчас

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

Похожие публикации

Что дизайнеру нужно знать о SVG: за и против

Векторная графика на рассеянных кривых

Средняя зарплата в IT

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Минуточку внимания

Комментарии 35

Как сделать карту метрополитена

Как сделать карту метрополитена

Как сделать карту метрополитена

Как сделать карту метрополитена

Как сделать карту метрополитена

Как сделать карту метрополитена

Как сделать карту метрополитена

Как сделать карту метрополитена

Как сделать карту метрополитена

Как сделать карту метрополитена

Сделать выносные элементы у контролов слайдера — у верхнего «гребешок» вверх, у нижнего — вниз. С одной стороны, это уменьшит точность слайдера — но и так огромные контролы делают точность маленькой. Можно пойти дальше и превратить их из квадратов, где точное значение где-то посередине — в «клюв» (КПДВ), где только кончик указывает на точное значение. Таким образом, они не всегда будут перекрывать друг друга на 100%.
Альтернативно — можно выставлять z-index больший у того контрола, что перемещался последним.

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

Ну и сразу, как улучшить слайдер дальше:
1) Отметить на нем год,
2) Дать возможность уменьшать-увеличивать дату не неточным дрег-н-дропом мыши, а стрелочками «след.дата» — «пред.дата». Как они должны выглядеть, надо, окнечно, подумать,
3) Цветным маркером отметить даты ввода в строй линий этого цвета
4) Похожим маркером отметить дату «соединения» линии для тех случаев, когда она строилась «раздельно»
5) Маркерами меньшего приоритета можно отметить даты ввода в строй и количество станций, при этом делать их светлее (неактивнее), если они выпадают за пределы текущего значения,
6) Не хватает проектных и строящихся линий и станций — в любом случае, при первой загрузке лучше выставить верхнюю дату не 01.01.2016, а текущую.
7) Не учтены переименования станций, что тоже весьма интересная информация, которую хорошо бы как-то визуализировать,
8) Названия веток и их изменения?
9) Возможно, стоит выделять добавленное на последнем перемещении слайдера,
10) Еще, возможно, интереснее, чем вообще убирать линии и станции с экрана, было бы их «засветлять».
11) Можно увеличить количество информации по каждой станции 🙂
12) На слайдере глубины заложения (странно, что искусственные объекты заложены, а грунтовые воды залегают 🙂 тоже не хватает ориентиров — промежуточных рисок, отметок станций, которые могут сформировать мини-карту распределения глубин.
13) Ну и для тех казуалов, кто воспринимает информацию в «футбольных стадионах», можно около слайдера схематично набросать что-то высотой в 80 метров (или, лучше, что умещается в выбранный диапазон — считать в «попугаях» 🙂
14) Для карты залегания дополнительная инфа — наличие рек, как минимум (вроде на лебедевской карте должна быть).

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

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

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

Ого! Масштабный комментарий, спасибо за него 🙂
Думаю, большую часть пунктов я сниму, напомнив что это просто доказательство работоспособности 🙂
Для меня и этот результат оказался непростым — ведь столько ещё можно доделать и поправить, а «заказчика» и дедлайна нет.

Прокомментирую пару пунктов:
2. Проект подразумевает возможность загружать больше выборок. Например, помимо глубины заложения, можно добавить статистику инцидентов, чтобы посмотреть наиболее проблемные станции и участки. То есть над каждым конкретным случаем нужно будет думать о «шаге» для стрелки
3, 4, 5, 8, 9, 10, 13, 14. Всё сводится к дизайну. Я бы, например, был рад реализации в привязке к наземной карте (парки, достопримечательности и т.д.), — но ведь это уже просто огромный объём работ.
6, 7. Дата выставляется из соображений экстремумных значений. Я поленился добавлять дизайн и функционал для строящихся и ремонтируемых станций. Тот же «Технопарк» у меня предварительно открыт 🙂

Источник

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

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

Преимущества торговой сети «Метро» и правила покупок по карте

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

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

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

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

2 способа получить карту МЕТРО физическому лицу

Получить карту данной торговой сети можно двумя способами: посредством подачи электронной заявки и при личном обращении к руководству компании.

Оформление онлайн

Такой способ подачи заявки имеет много преимуществ:

Подать заявку можно на официальном сайте Метро Кэш энд Керри. После заполнения анкеты следует ожидать подтверждения или отклонения заявки. Уведомление придет на указанный пользователем адрес электронной почты.

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

Подача заявки в ТЦ

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

Заполненные бланки следует отнести в ТЦ. Нужно иметь в виду, что приниматься будут только те документы, которые имеют печать компании.

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

Перечень документов для оформления разных видов карт

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

Постоянной

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

Образец формы регистрации клиента метро

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

Вот и все – пройдя такие шаги, физлицо может получить карточку, позволяющую совершать покупки в международной сети ГМ Метро.

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

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

Какие данные вносят в карту клиента? В документ обязательно вписывают:

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

Гостевой Метро кэш энд керри

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

Оформление гостевой карты онлайн

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

Ответы на распространенные вопросы

Если вы впервые сталкиваетесь с необходимостью получения карточки ГМ Метро, то вы должны знать ответы на некоторые вопросы.

Как быстро восстановить утерянный пропуск?

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

Можно ли попасть в Метро без карточки?

До недавнего времени попасть в магазин Метро без карточки клиента было невозможно. Сейчас есть два варианта посещения. Можно прийти в магазин со знакомым, у которого есть карта (согласно правилам, клиент может привести с собой 2 друзей, не имеющих пропуска). Второй способ – отслеживать время, когда компания устраивает «День открытых дверей», и приходить в эти периоды.

Можно ли передавать карту другому лицу?

Нет, карточку нельзя передавать никому – ее может использовать только владелец. Даже если доверенное лицо – родственник с такой же фамилией, он не сможет воспользоваться картой другого человека. Этот же запрет распространяется и на ситуации, когда действует специальная доверенность.

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

Как сделать карту метрополитена

Статья проверена экспертом: Нефедовой Анной.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *