2014-11-14 9 views
5

Sorunumu çözmeye çalıştığım günler oldu.Leaflet ile bir defada sadece bir özellik/çokgenin nasıl düzenlenmesine izin verilir?

GeoJSON'dan çokgen katmanım var. Çokgenlerimi tıklama etkinliği ile düzenlemek istiyorum. Çokgen üzerine tıkladığımda düzenlenebilir hale gelir, ancak istediğim başka bir çokgeni tıkladığımda, ilk çokgenin artık düzenlenebilir modda olmamasıdır.

OpenLayers ancak doğal olarak Leaflet değil.

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(); 
        }); 
       } 

Bir kişi bunu başardı ama nasıl anlamakta zorluk yaşıyorum:

İşte benim kodundan bir alıntı sana yakın olduğunu düşünüyorum https://github.com/dwilhelm89/Ethermap

+0

Demoda çokgen/çizgi çizgilerini tıklattığımda, düzenlenebilir hale gelir. Sonra, demonuzda başka bir poli'yi tıklattığımda, ilk üzerinde düzenleme devre dışı bırakılır ve 2. çokgen düzenleme için etkinleştirilir. Şu an istediğin gibi çalışıyor gibi görünüyor. –

+0

cevabınız için teşekkürler, ama bu benim demom değil, bunu bana yapan başka bir kişi ^^, ve nasıl olduğunu bilmiyorum. – Revocyl

+0

Hey. Tüm kodunuzu (broşür çizim kontrolleri dahil) gönderir misiniz? Ben benzer bir şey yapmaya çalışıyorum ama şaşırdım. – user1919

cevap

4

. OnEachFeature işlevinizde, tıklatılan özelliği saklayın, böylece tıklatma işleyicisinde düzenlemeyi etkinleştirebilir/devre dışı bırakabilirsiniz.

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

Evet, işe yarıyor! Teşekkürler adam = D – Revocyl

İlgili konular