2014-11-14 49 views
5

Sono giorni che cerco di risolvere il mio problema.Come consentire la modifica di una sola funzione/poligono alla volta con Leaflet?

Ho uno strato poligono da un GeoJSON. Voglio modificare i miei poligoni con l'evento click. Quando clicco su un poligono diventa modificabile, ma quello che voglio è che quando clicco su un altro poligono, il primo poligono non è più in modalità modificabile.

OpenLayers ma naturalmente non Leaflet.

Ecco un estratto dal mio codice:

var editableLayers = new L.FeatureGroup().addTo(map); 
var polygon_json; 
    $.ajax({ 
    type: "GET", 
    dataType: "json", 
    url: "get_json.php", 
    success: function (response) { 
         meaux_json = L.geoJson(response, { 
         onEachFeature: onEachFeature  
         }); 
         } 
    }); 

//edit the targeted polygon 
function onEachFeature (feature, layer) { 
        editableLayers.addLayer(layer); 
        layer.on('click', function(e){ 
        e.target.editing.enable(); 
        }); 
       } 

Una persona è stata in grado di farlo, ma io sto avendo difficoltà a capire come: https://github.com/dwilhelm89/Ethermap

+0

Quando faccio clic su un poligono/polilinea nella demo, diventa modificabile. Quindi quando clicco su un altro poly nella tua demo, la modifica sul primo è disabilitata e il 2 ° poligono è abilitato per la modifica. Sembra che funzioni come vuoi adesso. –

+0

grazie per la risposta ma non è la mia demo, è un'altra persona che l'ha fatto non io ^^, e non so come. – Revocyl

+0

Ehi. Potete per favore postare l'intero codice (compresi i controlli di disegno dell'opuscolo?) Cerco di fare qualcosa di simile ma sono bloccato. – user1919

risposta

4

Penso che vi sono vicino. Nella funzione onEachFeature è necessario memorizzare la funzione su cui è stato fatto clic in modo da poter abilitare/disabilitare la modifica nel gestore di clic.

var selectedFeature = null; 
//edit the targeted polygon 
function onEachFeature (feature, layer) { 
    editableLayers.addLayer(layer); 
    layer.on('click', function(e){ 
      if(selectedFeature) 
       selectedFeature.editing.disable(); 
      selectedFeature = e.target; 
      e.target.editing.enable(); 
    }); 
} 
+0

Sì, funziona !!! Grazie uomo = D – Revocyl