2015-07-25 10 views
5

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

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

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 многоугольник, чтобы удалить его, но я не могу думать о том, как получить удаленные ранее многоугольник, когда другой полигон щелкнул.

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

Пожалуйста, помогите. Благодаря

ответ

0

В вашей clickAction() функции итерация над слоем данных и добавить каждую функцию к карте. Закончив, удалите текущую функцию.

Таким образом, ваша функция нажмите станет

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

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

+0

это сработало! спасибо тонну – jimmypage

+0

Приветственный брат :) – muzaffar