2014-11-14 2 views
5

내 문제를 해결하기 위해 노력하고 있습니다.전단지에서는 한 번에 하나의 피쳐/다각형 만 편집 할 수 있습니까?

GeoJSON의 다각형 레이어가 있습니다. click 이벤트로 폴리곤을 수정하고 싶습니다. 다각형을 클릭하면 편집 가능하지만 원하는 것은 다른 다각형을 클릭하면 첫 번째 다각형이 더 이상 편집 가능한 모드가 아니라는 것입니다.

오픈 레이지만 자연스럽게 리플릿은 아닙니다.

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

한 사람이 그것을 할 수 있었다 그러나 나는 방법을 이해하는 어려움을 겪고 :

여기 내 코드에서 발췌 한 것입니다 당신이 가까운 생각 https://github.com/dwilhelm89/Ethermap

+0

데모에서 폴리곤/폴리 라인을 클릭하면 편집 가능 해집니다. 그런 다음 데모에서 다른 폴리를 클릭하면 첫 번째 폴리선에서의 편집이 비활성화되고 두 번째 폴리곤이 편집 가능하게됩니다. 지금 당장 당신이 원하는 방식으로 작동하고있는 것 같습니다. –

+0

해답을 주셔서 감사하지만 그건 내 데모가 아니야, 나 한테 그런 짓을 한 사람이 아니야 ^^, 나는 어떻게 해야할지 모르겠다. – Revocyl

+0

안녕하세요. (전단지 그릴 컨트롤 포함) 전체 코드를 게시 할 수 있습니까? 비슷한 일을하려고하지만 난 갇혀 있어요. – user1919

답변

4

합니다. onEachFeature 함수에서 클릭 처리기에서 편집을 활성화/비활성화 할 수 있도록 클릭 한 기능을 저장해야합니다.

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

그래, 작동! 고마워요 = D – Revocyl