-
Notifications
You must be signed in to change notification settings - Fork 13
Architecture RU
Нужна диаграмма показывающая вверху (или внизу) прямоугольник - данные, от него стрелки, одна - через процессинг в мобильное приложение, вторая - через процессинг - в веб. Далее схема мобильного и схема веб. Наверное все отдельные.
- Веб-гис-приложение - фронтенд
- Веб-гис-приложение - бэкенд
- Веб-сайт
- Мобильное приложение
- Данные (описание структуры данных)
Реализован на Wordpress. Имеет своё управление языками независимое от управления языками веб-приложения (используется плагин WPML).
Интерфейс (фронтенд?) веб-гис-приложения встраивается в страницу веб-сайта посредством добавления конструкций вида:
[metro4all_search name="Kazan" city="kzn" language="en" center="55.7898, 49.1295" route_css_class="city-5" from="From" to="To" zoom_to="Zoom to" choose_entr="Choose entrance on the map" choose_exit="Choose exit on the map" limitations="Limitations" profile_man="I am walking" profile_wheelchair="I am on a wheelchair" profile_trolley="I am with a stroller" route="Route"]
В конструкции указывается нужный язык, город, центр карты (ЧТО ЕЩЕ ИЗ ЭТОГО ОБРАБАТЫВАЕТСЯ?). Эта конструкция передается в (КУДА и КАК?) и результат встраивается соответствующую страницу веб-сайта.
Как в передаются параметры url? Это обратывает веб-сайт или бэкенд веб-гис-приложения. Чья ответственность?
Реализовано на JavaScript. Использует вспомогательные библиотеки такие как jQuery и leaflet. В структуре исходного кода размещено по адресу https://github.com/nextgis/metro4all/tree/master/web/static/m4a
Представляет из себя набор модулей:
- m4a.loader - отвечает за инициализацию других модулей и заполнение переменных-ссылок на DOM-элементы для оптимизиции доступа к ним;
- m4a.popup.js - создает попап и связанные с ним события, предназначенный для отображения схем метро;
- m4a.profiles.js - содержит функциональность, необходимую для построения элементами управления, предназначенными для выбора профиля пользователя; также содержит перечень индикаторов, отображаемый для каждого профиля, функции ограничений для каждого показателя в разрезе выбранного профиля, функции валидирования станции по определенным выше ограничениям;
- m4a.routes - предназначен для отрисовки блока вывода результатов построения маршрута; содержит функции, отрисовывающие каждый индикатор с учетом его валидности; также отвечает за отрисовку маршрута на карте.
- m4a.stations - отвечает за выбор станций и выходов на карте, привязывает события кликов к выходам / входам станций.
Контролы:
Реализована на Leaflet.
Функции:
- Показывает подложку OpenStreetMap (Mapnik)
- Показывает линии метро (lines.geojson) - линии раскрашиваются по параметру color, содержащему hex-код цвета.
- Показывает станции метро (центральные точки станций, stations.csv)
- Показывает входы/выходы со станций в двух состояниях (portals.csv): стандартное - иконка входа или выхода, восклицательное - иконка с воскл.знаком, показывается если выбранный профиль конфликтует с одним из параметров из portals.csv (например ширина коляски больше чем min_width).
- Выбор исходной станции - нажатие на станцию выводит диалог выбора является ли эта станция исходной или конечной, после выбора заполняется контрол выбора исходной или конечной станции.
- Выбор конечной станции - аналогично (см. описание контрола)
- Показывает маршрут на карте - после выбора начальной и конечной станции автоматически запускается процедура машрутизации (см. описание контрола).
####Выбор исходной/конечной станции Поисковая строка при вводе части названия фильтруется список станций с подстрокой.
####Выбор профиля
####Маршрут
Серверный компонент реалиован с использованием высокоуровневого языка программирования Python. Также в процессе реализации использовался веб-микрофреймворк bottle. Код компонента расположен в файле https://github.com/nextgis/metro4all/blob/master/web/backend.py
Компонент содержит оконечные точки доступа к сервисам для получения данных. Основной потребитель - фронтенд веб-ГИС-приложения.
При инициализации серверной части путем запуска файла backend.py стартует веб-приложение на 8088 порту по умолчанию. Для корректного отображения шаблонов необходимо заменить строку, содержащую абсолютный путь к ним.
Основные функции:
Используется пакет networkx
(код).
Для инициализации графа используются stations.csv и graph.csv.
Станции откуда и куда используются для построения кратчайшего маршрута:
nx.shortest_path_length(GRAPH[city], station_from, station_to)
Далее к длине кратчайшего маршрута добавляется умозрительная дельта (5) и в этой окрестности строятся все возможные маршруты длиной менее этой суммы:
nx.all_simple_paths(GRAPH[city], station_from, station_to, minlength+delta)
Результат сортируется по длине, отбираются 3 кратчайших маршрута.
Пример запроса: http://metro4all.org/ajax/ru/msk/routes/search?station_from=34&station_to=120
Пример ответа (фрагмент):
{
"result": [
{
"portals": {
"portal_to": null,
"portal_from": null
},
"route": [
{
"station_type": "regular",
"barriers": null,
"station_name": "Маяковская",
"schema": "45.png",
"station_line": {
"color": "#44b85c",
"name": "Замоскворецкая",
"id": 2
},
"coordinates": [
55.7701163251,
37.595785151
],
"id": 34
},
Пересадки извлекаются автоматически из построенного маршрута.
В случае наличия пересадки в секция route ответа добавляется параметр interchange
(полный пример см. выше):
...
{
"station_type": "interchange",
"barriers": {
"lift_minus_step": "0",
"min_step_ramp": 21,
"escalator": 1,
"min_step": 21,
"max_width": 95,
"min_rail_width": null,
"lift": false,
"max_rail_width": null,
"max_angle": null
},
...
Если указаны ID порталов извлекается информация и о параметрах маршрута связанных с портала. В этом случае в ответе вместо:
...
"portals": {
"portal_to": null,
"portal_from": null
},
...
возвращается заполенная информация по барьерам.
Пример запроса: http://metro4all.org/ajax/ru/msk/routes/search?station_from=34&portal_from=17360&station_to=120&portal_to=15190
Пример ответа (фрагмент):
{
"result": [
{
"portals": {
"portal_to": {
"barriers": {
"lift_minus_step": "0",
"min_step_ramp": 0,
"escalator": 1,
"min_step": 0,
"max_width": 73,
"min_rail_width": null,
"lift": false,
"max_rail_width": null,
"max_angle": null
}
},
"portal_from": {
"barriers": {
"lift_minus_step": "0",
"min_step_ramp": 1,
"escalator": 2,
"min_step": 37,
"max_width": 75,
"min_rail_width": 41,
"lift": false,
"max_rail_width": 88,
"max_angle": 20
}
}
},
"route": [
{
...
Основные наборы данных используемые приложением:
- расположение станций (stations)
- расположение выходов (portals-exits)
- параметры доступности по маршрутам (portals-params)
- перечень линий (lines)
- расположение линий (lines-geo)
- схемы