Включение слоя и получение объектов по клику
Подготовка
- Прежде всего необходимо подключить jquery-библиотеки и API геопортала.
- Добавьте на html страницу div c выбранным по вашему желанию id. Это контейнер для карты. Например создадим div c id="map".
- Добавьте стиль для контейнера карты. Обязательно необходимо прописать ширину и высоту.
<script src="/public/javascripts/libs/jquery/jquery-1.12.4.min.js" type="text/javascript"></script>
<script src="/public/javascripts/libs/jquery/jquery-ui-1.9.2.custom_6016bgfx.min.jstom.min.js" type="text/javascript"></script>
<script src="/public/javascripts/geoportal/geoportal-api.min.js" type="text/javascript"></script>
<div id="map"></div>#map {
    height: 100%;
    width: 960px;
}Работа с API
- Когда бибилиотеки и api загружены, создается объект GeoPortal. Подключаемся к событию ready объекта GeoPortal. В момент сработки события, объект готов к использованию.
- После того, как сработало событие ready у объекта GeoPortal, создадим объект карты. А затем получим все доступные группы со слоями.
- Если группы получены (сработает функция groupsRequested(groups)), возьмем первую группу и первые два слоя в ней и добавим их на карту.
- Подключимся к событию popupclose объекта карты, чтобы убирать маркер в случае, если popUp будет закрыт. Подключимся к событию click, чтобы отслеживать точку клика по карте, а также к событию featureClicked, чтобы получить список объектов, которые будут найдены во включенных слоях в точке клика.
- Если список объектов не найден, выведем в консоль ошибку. Если список объектов в точке найден, установим в ней маркер, создадим у маркера popUp и выведем в него текст с заголовком первого найденного объекта.
$(function() {
    var gpMap,
        clickLatLn,
        marker;
    GeoPortal.on("ready",function() {
        //code
    },this);
});gpMap = new GeoPortal.Map('map');
GeoPortal.requestGroups(true,
    function (groups) {
        //code
    },
    function(status,error) {
        console.log("Error to request groups list. Status = " + status + ". Error text: " + error);
    }
);
var firstGroup = groups[0],
    layers = firstGroup.layers(),
    firstLayer,secondLayer;
firstLayer = layers[0];
gpMap.addLayer(firstLayer);
if(layers.length > 1) {
    secondLayer = layers[1];
    gpMap.addLayer(secondLayer);
}
gpMap.on("popupclose",
    function(data) {
        if (typeof marker != 'undefined') {
            gpMap.removeLayer(marker);
            marker = undefined;
        }
    },this);
    gpMap.on("click",function(e) {
        clickLatLng = e.latlng;
    },this);
    gpMap.on("featureClicked",function(data) {
        //code
    },this);
if (typeof marker != 'undefined') {
    gpMap.removeLayer(marker);
    marker = undefined;
}
if(typeof data.features == 'undefined') {
    console.log("Request features error. Status = " + data.status + ". Error text: " + data.error);
    return;
}
var features = data.features;
if(data.layer) {
    marker = new GeoPortal.Marker(data.layer._latlng);
    gpMap.addLayer(marker);
    marker.setPopup('<p>'+features[0].title()+'</p>');
} else if(clickLatLng && clickLatLng instanceof L.LatLng) {
    marker = new GeoPortal.Marker(clickLatLng);
    gpMap.addLayer(marker);
    marker.setPopup('<p>'+features[0].title()+'</p>');
}