Child pages
  • Maps Javascript модули
Skip to end of metadata
Go to start of metadata

Скрипты для карт лежат в /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' , где query1query2 ключевые слова для поиска для поиска.

Произойдёт отправка запроса на поиск по 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%
  • No labels