skip to Main Content

Начало работы с JavaScript API

GeoMixer — Web-GIS платформа, имеющая многочисленные программные и графические интерфейсы для импорта и экспорта данных. В данном документе кратко освещается JavaScript API GeoMixer’а для визуализации геоданных на сторонних сайтах в интернете (в дальнейшем GeoMixer.js).

Основную задачу рассматриваемого API можно сформулировать так: отображать геоданные с сервера GeoMixer на любой карте, сделанной на основе библиотеки Leaflet.js.

Leaflet.js

Leaflet — наиболее популярная open source библиотека для создания интерактивных карт в браузере. Чтобы использовать GeoMixer.js, нужно иметь базовое представление о работе с этой библиотекой.

Создание простейшей карты Leaflet выглядит следующим образом:



//создадим карту и зададим ей позицию
var map = L.map('map').setView([51.505,-0.09],13);
//добавим на карту растровый слой из тайлов
//в данном случае это будет стандартная карта OpenStreetMap
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png',{
    attribution:'© OpenStreetMap contributors'
}).addTo(map);

Пример на отдельной странице.

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

На сайте библиотеки есть несколько примеров работы с библиотекой, подробное API и огромный список плагинов.

GeoMixer.js — общие понятия

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

Ключевым понятием в GeoMixer.js является слой — основная единица хранения данных на сервере GeoMixer. У слоя обязательно есть идентификатор (его можно посмотреть через редактор GeoMixer-а в свойствах слоя) и некоторые дополнительные параметры, такие как название, тип, метаданные и т.п. В GeoMixer-е различаются растровые слои, векторные слои и каталоги растров.

Слои объединяются в “карты”. Карта GeoMixer-а — набор слоёв для одного проекта. Один слой может быть добавлен в несколько карт и иметь в них различные стили.

Загрузка слоя в GeoMixer.js

Загрузка слоя в GeoMixer.js несколько отличается от создания слоя в Leaflet.js. Дело в том, что информация о слое загружается с сервера, что является асинхронной операцией. Поэтому для создания слоёв GeoMixer-а используются фабричные функции вместо классического оператора new.

Вот пример:

L.gmx.loadLayer(
    'H2DUP', '033B16D566194EBE9F3CC247F6DDA4A4'
).then(function(landsatLayer) {
    //Выполнится после загрузки слоя с сервера
    //landsatLayer реализует интерфейс ILayer
    map.addLayer(landsatLayer);
});

Пример на отдельной странице.

Фабричная ф-ция L.gmx.loadLayer() принимает два аргумента:

  • mapID — идентификатор карты
  • layerID — идентификатор слоя на этой карте

Возвращает она Promise — популярный в среде JavaScript способ работать с результатами асинхронных операций. Promise имеет ф-цию then, которая принимает два callback’а: первый будет вызван в случае успешного завершения операции (в нашем случае — загрузки слоя), второй — в случае ошибки.

Результатом работы ф-ции L.gmx.loadLayer() является экземпляр слоя (растровый, векторный или каталог растров). Все слои GeoMixer.js реализуют стандартный интерфейс Leaflet’а ILayer, что позволяет работать с ними как с обычными слоями библиотеки. Например,

map.addLayer(satelliteLayer);
...
map.removeLayer(satelliteLayer);

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

Загрузка карты в GeoMixer.js

Можно загружать не отдельные слои с данными, а всю карту целиком. Для этого можно использовать функцию L.gmx.loadMap():


L.gmx.loadMap('H2DUP').then(function(gmxMap){
    //gmxMap - объект с информацией о слоях на карте Geomixer
    //gmxMap.layers - слои в виде массива
    //gmxMap.layersByID - слои по ID
    //gmxMap.layersByTitle - слои по названию
});

В результате загрузки карты будет сформирован экземпляр класса L.gmx.Map, который позволяет получить слои по их ID (хеш layersByID), по названию (layersByTitle) или в виде массива (layers).

Ссылки

Back To Top