Leaflet-GeoMixer – плагин для интеграции данных с серверов GeoMixer в любую карту, созданную с использованием библиотеки Leaflet.
Плагин добавляет несколько новых классов для работы с данными и функции для создания экземпляра этих классов.

Исходные тексты плагина и багтрекер доступны в репозитории Github.

Документация по старой версии GeoMixer API.

Простой пример

<div id="map"></div>
<script src="http://cdn.leafletjs.com/leaflet-0.6.4/leaflet-src.js"></script>
<script src="leaflet-geomixer.js?key=U92596WMIH"></script>
<script>
    var map = L.map('map').setView([60, 50], 3);
    
    L.gmx.loadLayer('7VKHM', '295894E2A2F742109AB112DBFEAEFF09').then(function(satelliteLayer) {
        satelliteLayer.addTo(map);
    });
    
    L.gmx.loadMap('AZR6A', {leafletMap: map});
</script>
<div id="map"></div>
<script src="http://cdn.leafletjs.com/leaflet-0.6.4/leaflet-src.js"></script>
<script src="leaflet-geomixer.js?key=U92596WMIH"></script>
<script>
    var map = L.map('map').setView([60, 50], 3);
    
    L.gmx.loadLayer('7VKHM', '295894E2A2F742109AB112DBFEAEFF09').then(function(satelliteLayer) {
        satelliteLayer.addTo(map);
    });
    
    L.gmx.loadMap('AZR6A', {leafletMap: map});
</script>

Добавление плагина

Чтобы добавить плагин, просто загрузите JS файл на вашей странице:

<script src="leaflet-geomixer.js?key=GeoMixerAPIKey"></script>
<script src="leaflet-geomixer.js?key=GeoMixerAPIKey"></script>

GeoMixerAPIKey – это специальный ключ, который должен быть получен для каждого домена, на котором загружаются данные из GeoMixer'а.
Этот ключ может быть указан как параметр к подключаемому скрипту или передан как параметр при загрузке слоёв.

Структуры данных в GeoMixer

Основной сущностью в GeoMixer является слой. Каждый слой имеет ряд свойств, включающих в себя ID, type иtitle.
ID слоя уникально в пределах одного сервера. Основными типами слоёв являются векторные и растровые.

Каждый векторный слой состоит из геометрических объектов. Объекты имеют следующие атрибуты: type, geometry и properties.

Слои в GeoMixer-е объединяются в карты.

Загрузка слоёв

Слои загружаются при помощи фабричных методов в асинхронном режиме. Для удобной работы с асинхронными операциями в плагине активно используются промисы (Promises).

Есть несколько способов загрузить слой.

L.gmx.loadLayer

L.gmx.loadLayer(mapID, layerID, options): Promise
L.gmx.loadLayer(mapID, layerID, options): Promise

mapID – ID карты GeoMixer-а, а layerID – ID слоя в этой карте.

options – хеш дополнительных параметров со следующими возможными ключами.

Параметр Описание Тип Значение по умолчанию
hostName Хост сервера GeoMixer (без http:// и / в конце) String maps.kosmosnimki.ru
apiKey Ключ для загрузки данных. Также может быть задан один раз при подключении скрипта плагина (см. выше). Для работы с localhost ключ не требуется. String
beginDate Начальная дата временного интервала (только для мультивременных слоёв) Date
endDate Конечная дата временного интервала (только для мультивременных слоёв) Date

Функция возвращает Promise, который будет выполнен с экземпляром слоя (L.gmx.VectorLayer или L.gmx.RasterLayer) в качестве первого параметра. Этот экземпляр может быть использован для добавления слоя на карту, настройки отображения и т.п.

Пример

L.gmx.loadLayer('7VKHM', '295894E2A2F742109AB112DBFEAEFF09').then(function(satelliteLayer) {
    //...
});
L.gmx.loadLayer('7VKHM', '295894E2A2F742109AB112DBFEAEFF09').then(function(satelliteLayer) {
    //...
});

L.gmx.loadLayers

L.gmx.loadLayers(layers, commonOptions): Promise
L.gmx.loadLayers(layers, commonOptions): Promise

Вспомогательная функция для загрузки сразу нескольких слоёв. layers – массив объектов со следующими свойствами:

  • mapID – ID карты
  • layerID – ID слоя
  • options – дополнительные опции слоя

Каждый элемент массива соответвтует отдельному вызову L.gmx.loadLayer. commonOptions применяются ко всем слоям.
Возвращает Promise, который будет выполнен (fulfill) после загрузки всех слоёв. Слои передаются как отдельные параметры.

L.gmx.loadMap

 L.gmx.loadMap(mapID, options): Promise
 L.gmx.loadMap(mapID, options): Promise

Загружает все слои из определённой карты GeoMixer-а.

options – набор дополнительных параметров

Параметр Описание Тип
leafletMap Карта Leaflet для добавления к ней всех слоёв, включённых в исходной карте GeoMixer-а L.Map

Функция возвращает Promise, который выполняется (fulfilled) при загрузке всех слоёв. При этом в ф-ции выполнения передаётся объект типа L.gmx.Map.

Класс L.gmx.VectorLayer

Класс gmxVectorLayer предоставляет интерфейс для рендеринга векторных слоёв GeoMixer-а на карте Leaflet.
Слои могут быть добавлены к карте стандартным способом при помощи ф-ций L.Map.addLayer() или L.gmx.VectorLayer.addTo().

Методы

Метод Синтаксис Возвращаемое значение Описание
setFilter setFilter(function(item): Boolean) this Установить ф-цию для фильтрации объектов перед рендерингом. Единственный аргумент – ф-ция, которая получает объект из слоя и возвращает булево значение (false – отфильтровать)
removeFilter removeFilter() Удалить ф-цию фильтрации объектов перед рендерингом.
setDateInterval setDateInterval(beginDate, endDate) this Задаёт временной интервал для мультиврменных слоёв. Только объекты из этого интервала будут загружены и показаны на карте. beginDate и endDate имеют тип Date.
addTo addTo(map) this Добавить слой на карту. Аргумент map имеет тип L.Map.
bindPopup bindPopup(html <String>|el <HTMLElement>|popup <Popup>, options <Popup options>? ) this Показывает баллун по клику на объекте слоя.
repaint repaint() Перерисовать слой. В отличае от L.TileLayer.redraw(), не пересоздаёт тайлы слоя, а лишь перерисовывает их. Работает быстрее и без моргания слоя на экране.
setImageProcessingHook setImageProcessingHook( function(image, options): Canvas|Deferred) Установка функции предобработки растров объектов слоя. Единственный аргумент – ф-ция, которая принимает растр объекта (image) и описание этого растра (). Возвращает: Canvas – объект замещающий исходный растр, null – не показывать растр. Может возвращать Deferred при асинхронном режиме.
removeImageProcessingHook removeImageProcessingHook() Удалить функцию предобработки растров объектов слоя.
addObserver addObserver(Observer options) <observer> Добавление функции отбора объектов слоя по заданным условиям.

Observer options

Параметр Тип Значение по умолчанию Описание
type <String> update Тип обсервера. Возможные значения (update – передача изменений, resend – передача всех объектов)
bbox <Bounds> Весь мир Прямоугольник отслеживания объектов
dateInterval <Date[]> null Временной интервал. (Для не мультивременных слоев null).
filters <String[]> [] Массив идентификаторов фильтров применяемых в обсервере (на данный момент только userFilter предварительно воспользовавшись методом слоя setFilter).
callback Func(Observer data) Производится отбор объектов по заданным условиям: bbox, dateInterval и filters.

Observer data

Параметр Тип Значение по умолчанию Описание
count <UInt> 0 Количество объектов отобранных по условиям отбора объектов указанным в обсервере.
added <Objects[]> [] Массив объектов (при type="update" только объекты ранее не удовлетворявшие условиям отбора).
removed <String[]> null Массив идентификаторов удаляемых объектов т.е. переставших удовлетворять условиям отбора(при type="resend" атрибут отсутствует).

Класс L.gmx.RasterLayer

Класс L.gmx.RasterLayer рисует на карте растровые слои из GeoMixer-а.

Method Syntax Return type Description
addTo addTo(map) this Добавить слой на карту. Аргумент map имеет тип L.Map.

Класс L.gmx.Map

Класс L.gmx.Map используется для работы с картой (как с набором слоёв). Он включает ряд свойств для итерирования и поиска слоёв из карты.

Свойства

Свойство Тип Описание
layers L.gmx.VectorLayer[] или L.gmx.RasterLayer[] Массив всех слоёв из карты GeoMixer-а
layersByID Object Хеш слоёв с ID слоя в качестве ключа хеша
layersByTitle Object Хеш слоёв с заголовком (title) слоя в качестве ключа хеша