- Когда бибилиотеки и api загружены, создается объект GeoPortal. Подключаемся к событию ready объекта GeoPortal. В момент сработки события, объект готов к использованию.
$(function() {
    var distance,
        restangle,
        gpMap,
        layersStore = new Array(),
        marker;
    GeoPortal.on("ready",function() {
        //code
    },this);
});
 
- После того, как сработало событие ready у объекта GeoPortal, создадим объект карты. Подключимся к событию popupclose, чтобы убирать маркер, если закрывается popUp.
    А затем получим все доступные группы со слоями.
gpMap = new GeoPortal.Map('map');
gpMap.on("popupclose",removeMarker,this);
GeoPortal.requestGroups(true,
    function(groups) {
        //code
    },
    function(status,error) {
        console.log(status);
        console.log(error);
    }
);
function removeMarker() {
    if (typeof marker != 'undefined') {
        gpMap.removeLayer(marker);
        marker = undefined;
    }
}
 
- Если группы получены (сработает функция getGroups(groups)), добавим слои первых двух групп на боковую панель. Обработает клик по элементу input у каждого слоя, чтобы при включении галочки, включался и слой на карте, и наоборот.
drawGroup(groups[0]);
    if(groups.length > 1)
        drawGroup(groups[1]);
    $("#groups").find(".layer").find("input").on("click",function() {
        var id = $(this).val(),
        layer = layersStore[id];
        if(typeof layer != 'undefined') {
            layer.turn(gpMap);
        }
    });
//code
function drawGroup(group){
    //code
}
 
- Создадим и добавим на карту графический элемент "Distance". Подключимся к событиям "control:distance:enable" и "control:distance:disable"
distance = new GeoPortal.Control.Distance();
    distance.on("control:distance:enable", function(data) {
        console.log("control:distance:enable");
    },this);
    distance.on("control:distance:disable", function(data) {
        console.log("control:distance:disable");
    },this);
    gpMap.addControl(distance);
 
- Создадим и добавим на карту графический элемент "RectangleDraw". Подключимся к событиям "control:RectangleDraw:enable" и "control:RectangleDraw:disable","control:RectangleDraw:created"
restangle = new GeoPortal.Control.RectangleDraw();
    restangle.on("control:RectangleDraw:enable", function(data) {
        console.log("control:RectangleDraw:enable");
    },this);
    restangle.on("control:RectangleDraw:disable", function(data) {
        console.log("control:RectangleDraw:disable");
    },this);
    restangle.on("control:RectangleDraw:created", function(data) {
        //code
    },this);
    gpMap.addControl(restangle);
 
- После того, как сработает событие "control:RectangleDraw:created", отправим запрос на получение объектов включенных слоев, которые попадают в выбранную область.
    Если объекты получены, убираем предыдущий маркер, если он был, и устанавливаем в центре области новый маркер. В popUp маркера выводим количество найденных объектов.
restangle.on("control:RectangleDraw:created", function(data) {
    var latLngsBounds = L.latLngBounds(data.latLngs);
    if (typeof marker != 'undefined'){
        gpMap.off("popupclose",removeMarker,this);
        removeMarker();
        gpMap.on("popupclose",removeMarker,this);
    }
    gpMap.featuresWithin(latLngsBounds,
        function(data) {
            marker = new GeoPortal.Marker(latLngsBounds.getCenter());
            gpMap.addLayer(marker);
            marker.setPopup("Найдено "+ data.length +" объекта(ов)");
        },
        function(status, error) {
            console.log(error);
        }
    );
},this);