Получение удаленного полигона TOPOJSON при нажатии на новый

Я пытаюсь создать интерактивную карту, используя слой leaflet и topojson. Я хочу сделать следующее:

1- Когда щелкаешь по определенному полигону топоисона, он должен удалиться.

2- Когда вы щелкаете по другому полигону, он должен удалиться, а полигон, на который вы нажали ранее, должен быть добавлен обратно.

Таким образом, в принципе всегда может отсутствовать только один полигон. Вот блок кода для карты:

function addRegions(map) {
    var regionLayer = new L.TopoJSON();
    $.getJSON('map-developmentregions.topo.json').done(addRegionData);

    function addRegionData(topoData){
        regionLayer.addData(topoData);
        regionLayer.addTo(map);
        regionLayer.eachLayer(handleLayer);
    }

    function handleLayer(layer) {  
        layer.setStyle({
            fillColor : getColor(getNewsCount(layer.feature.properties.REGION)),
            weight: 2,
            opacity: 1,
            color: 'white',
            fillOpacity: 1
        });

        layer.on({
            mouseover : enterLayer,
            mouseout: leaveLayer,
            click: clickAction
        });
    }

    //Here's  the code for clickAction... this is where I suppose the code should be placed

    function clickAction(e) {
        var layer = e.target;
        map.removeLayer(layer);
    }
}

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

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

Пожалуйста помоги. Спасибо


person jimmypage    schedule 25.07.2015    source источник


Ответы (1)


В своей функции clickAction() переберите слой данных и добавьте каждый объект на карту. После завершения удалите текущую функцию.

Итак, ваша функция щелчка станет

function clickAction(e) {
    regionLayer.eachLayer(function(layer){
        map.addLayer(layer)
    });
    var layer = e.target;
    map.removeLayer(layer);
}

Примечание. Обязательно измените область действия переменной regionLayer на глобальную переменную, чтобы сделать ее доступной внутри вашей функции щелчка.

person muzaffar    schedule 25.07.2015