2013-05-13 18 views
0

사용자가 기능 및 특성 특성을 만들고 수정하고 삭제할 수있는 OpenLayers.Layer.Vector 계층이 있습니다. 변경 사항은 "변경 사항 저장"버튼을 누를 때 저장됩니다. 사용자가 새로운 지형지 물을 생성 한 후지도를 확대/축소하면 OpenLayers가 지형지 물의 모든 지형지 물을 제거하고 지오 서버 db에 저장된 지형지 물을 추가합니다. 나는 새로 생성 된 기능에 매달려 "로드 엔드"이벤트에서 레이어에 추가하려고 시도했지만 OpenLayers는 새로운 기능의 기하학을 파괴하여 쓸모가 없습니다. 축소 할 때 OpenLayers가 새로운 기능을 숨기지 않게하려면 어떻게합니까?OpenLayers는 축소 할 때 새로운 기능을 제거/제거합니다.

+0

는 여기에 내가 현재 사용하고 해결 방법입니다 풍모. OpenLayers는 db imho를 재 쿼리 할 때 INSERT 상태의 지형지 물을 제거해서는 안됩니다. – Hilo

+0

오픈 레이어에 기능을 어떻게 추가합니까? 지도에 추가하는 대신 손으로 그리는 것 같습니다. –

+0

새로운 기능은 레이어에 추가하는 OpenLayers 드로잉 컨트롤을 사용하여 사용자가 그려줍니다. – Hilo

답변

-1

필자는 featuresremoved 이벤트를 사용하여 제거 된 모든 기능을 얻은 다음 "삽입"상태인지 확인합니다. 다중 축소시 다중 삽입을 방지하기 위해이 기능을 중간 상태로 지정했습니다. 로드 엔드에서 삽입을 수행하여 상태를 다시 "삽입"으로 변경합니다. 한 번에 하나의 편집 레이어 만 있습니다. 레이어에서 "에 Loadstart는"핸들러, 새로운 기능을 모두 제거하고 계층 "loadend"핸들러에 새를 모두 다시 추가 :

var nuevas_features = null; 
.... 
.... 
.... 
.... 
eventListeners: { 

'loadstart': function(evt) { 
    nuevas_features = null; 

}, 
'featuresremoved' : function(algunfeature) { 

    nuevas_features = null; 
    nuevas_features = new Array(); 

    $(algunfeature.features).each(function(index, feature) 
    { 
      if(feature.state === 'Insert') 
      {  
       var feature_clonada = feature.clone(); 
       feature_clonada.state = "transicion"; 
       nuevas_features.push(feature_clonada); 
      } 
    }); 
}, 
'loadend': function(evt) { 

    $(nuevas_features).each(function(index, feature) 
    { 
      feature.state = "Insert"; 
      editingLayer.addFeatures(feature); 
    }); 
    console.log('end'); 

} 

}