Скрипты для карт лежат в /js/map/
maps.js - Основной скрипт для карт. Отвечает за общую логику и интерфейс для всех типов карт
maps-google.js - Скрипт реализации интерфейса для Google Maps.
maps-google-drawing.js - Библиотека для создания основных обьектов карт:
Маркеры
InfoWindows
Каждый JS - модуль карт реализует:
Переход к точке
Поиск
Создание элементов контрольной панели
Отображение маркера на карте
Отображение балуна (infoWindow) на карте
Переход к точке
Параметры: &COORDX=xx.xxxxx&COORDY=yy.yyyyyy
После создания карты, переход в заданную точку с установкой маркера.
При заданом параметре &TITLE=string маркеру присваивается поле title и infoWindow c контентом, дублирующим title, если не задан &CONTENT=html_string.
При заданом &CONTENT=html_string маркеру присваивается infoWindow с контентом, который передается в параметре.
Поиск
Поиск работает с Google Locations API в случае использования Google Maps.
Поиск ведётся относительно координаты в переменной mapCenterLatLng. Возможные варианты установки переменной:
через переменные $form{COORDX} и $form{COORDY} Для поиска относительно программно заданных координат.
через заданный параметр
%MAPCENTER%
Если ни один из этих параметров не задан, вызывается метод goToRealPosition(), который оправляет запрос получения текущих координат пользователя, при успешном ответе центрирует карту в полученных координатах и устанавливает mapCenterLatLng в этой точке.
Поиск локаций по ключевым словам
Параметры: &search_query='query1;query2' , где query1, query2 ключевые слова для поиска для поиска.
Произойдёт отправка запроса на поиск по query1, потом отправка запроса на поиск по query2
.
Для задания иконки маркера результатов поиска, необходимо передать параметр ICON. ICON может задаваться как:
имя файла в папке /img/google_map/ Указывать без расширения .png
URL адрес картинки
При поиске по ключевым словам в нижней части InfoWindow маркера, указывается адрес. При клике вызывается метод createNavigationRoute(origin, destination) с параметрами mapCenterLatLng и координатами последнего открытого infoWindow соответственно.
Поиск по типам
Параметры: &search_type='atm,bank' , где atm, bank типы объектов.
Типы объектов для поиска можно посмотреть здесь :
Google Developers: Типы, которые можно использовать при поиске и добавлении мест
Визуализация объектов
Точечные объекты - содержат только одну координату. Сюда входят:
Маркеры
infoWindow (информационные панели)
Маркеры
Маркерами отображаются:
Дома
Точки подключения
Сообщения
Колодцы
Маркеры создаются с помощью объекта AMarkerBuilder.
Обведение района
Для обведения района по крайним точкам используется объект ADistrictPolygoner;
Методы:
addBuild(districtId, latLng) | latLng = {lat: Number, lng: Number}. Вызов сбрасывает флаг computed. |
---|---|
compute() | Вычисляет полигоны для добавленных точек. Вызов сбрасывает выполняет hidePolygons() и сбрасывает polygonsArray |
showPolygons() | Показывает рассчитанные полигоны. Если не был вызван compute() , рассчитает полигоны. |
hidePolygons() | Прячет полигоны, не изменяет внутреннюю структуру |
toggle() | Включает, если полигоны спрятаны и наоборот |
При инициализации карты, создаётся глобальный объект aDistrictPolygoner.
Все рассчитанные полигоны сохраняются во внутреннем массиве polygonsArray.
Отображение событий на карте
Модуль Maps при открытой вкладке с картой, расширяет AMessageChecker для приёма сообщений с типом MAP_EVENT.
Формат сообщений:
{ "TYPE": "MAP_EVENT", "OBJECTS": [ { "ID" : $point->{id}, "MARKER": { "ID" : $point->{id}, "COORDX" : $point->{coordy}, "COORDY" : $point->{coordx}, "INFO" : "<strong>$lang{TYPE}</strong>: $point->{type_name} <br> <strong>$lang{NAME}</strong>: $point->{name}", "TYPE" : "nas_green" }, "LAYER_ID" : 6 } ] }
Соответствует формату, которым передаются объекты на карту. Если объект не имеет установленного слоя, нужно указывать 6
(Слой «Объекты»),
События карты
Во время загрузки и настройки карты, вызываются определённые события.
Асинхронная обработка реализуется благодаря PubSub модели объектом Events
.
Последовательность событий во время загрузки карты
onbeforemapcreate | Перед загрузкой скриптов карты |
---|---|
mapsloaded | Происходит после загрузки внешних скриптов карты |
layersready | После формирования слоёв карты |
controlsready | После формирования панели управления (кнопок) |
mapsconfigured | После настройки карты и обработки дополнительных условий |
controlblockshowed | Показана панель управления |
controlblockcached | Ссылки на DOM-элементы кнопок панели управления сохранены в кеш |
new_point_rendered_%LAYER_ID% | Происходит каждый раз при рендеринге точки слоя |
billingdefinedlayersshowed | После обработки ObjectsArray (объекты, переданные в странице) |
layerenabled, %LAYER_ID% | После включения слоя, %LAYER_ID% передаётся аргументом функции-обработчику события |
layerdisabled, %LAYER_ID% |
Дополнительные события, возникающие во время работы
mapsclick, (event) | Возникает каждый раз при клике по карте, координаты можно получить как (event.latLng.lat(), event.latLng.lng()) |
---|---|
savingmapconfig | При закрытии страницы, во время сохранения настроек карты |
clearmapconfig | Перед очисткой сохранённой конфигурации |
realpositionretrieved, position | Получены координаты от браузера клиента |
realpositionfailed | Произошла ошибка получения координат |
События редактирования пользовательских слоев
currentmapobjectfinished | При готовности слоя отправлять объекты (Пользователь подтвердил завершение редактирования) |
---|---|
proceedingaddingpoints | (Пользователь не подтвердил завершение редактирования) |
point_removed_%LAYER_ID% | Отправлен запрос на удаление точки слоя %LAYER_ID% |