2016-08-23 3 views
0

지도에 선을 그리는 OpenLayers 컨트롤이 있습니다. 그건 잘 작동합니다. 이제 선의 좌표가 표시되는 양식을 추가했습니다. 사용자는 좌표를 편집 할 수 있어야하며 양식을 제출할 때 행을 업데이트해야합니다.OpenLayers DrawFeature는 새로운 레이어를 생성합니다.

문제는 결국 두 줄이 보입니다. 디버깅을 한 후에 DrawFeature에 사용할 레이어를 지정했지만 핸들러는 "OpenLayers.Handler.Path"라는 새 레이어를 만듭니다. 따라서 마우스로 그려지는 모든 것은 그 위에 그려지며 양식을 제출하여 작성된 선은 "내 레이어"에 그려집니다.

나는 다음과 같은 코드가 있습니다

layer = new OpenLayers.Layer.Vector("My Layer"); 
geoExtMap.map.addLayer(layer); 

Control = { 
    line: new OpenLayers.Control.DrawFeature(layer, 
     OpenLayers.Handler.Path, { 
      callbacks: { 
       "point": pointHandler, 
       "done": doneHandler 
      }, 
      handlerOptions: { 
       persist: true, 
       maxVertices: 2, 
       freehand: false, 
       layerOptions: { 
        styleMap: styleMapControls 
       } 
      } 
     }) 
}; 

geoExtMap.map.addControl(Control.line); 


var points = new Array(
    new OpenLayers.Geometry.Point(x1, y1).transform(EPSG, projectData.crs), 
    new OpenLayers.Geometry.Point(x2, y2).transform(EPSG, projectData.crs) 
); 

var line = new OpenLayers.Geometry.LineString(points); 
var lineFeature = new OpenLayers.Feature.Vector(line, null, sketchSymbolizersControls.Line); 

layer.removeAllFeatures(); 
layer.addFeatures([lineFeature]); 

왜 핸들러가 새 레이어를 생성하고 사용하지 않는이 하나를 지정?

답변

0

DrawFeature 컨트롤은 지정된 레이어를 사용하는 반면 OpenLayers.Handler.Path는 매번 새로운 레이어를 만듭니다.

이 새 레이어는 "임시 드로잉 레이어"로 주석 처리됩니다.

OpenLayers.Handler.Path의 activate 및 deactivate 메서드를 재정의하여 지정된 레이어를 사용하도록 할 수는 있지만 예기치 않은 문제가 발생할 수 있습니다. https://github.com/openlayers/ol2/blob/master/lib/OpenLayers/Handler/Point.js#L156 (Handler.Path는 Handler.Point를 확장합니다.)

그래서이 양식의 문제를 해결하려고합니다. 당신은 "폼 코드"를 게시하지 않았기 때문에 더 구체적 일 수는 없지만 (두 레이어 모두에서) 두 가지 기능을 모두 업데이트하거나 폼 편집 중에 draw 컨트롤/핸들러를 비활성화 할 수 있습니다.

+1

설명해 주셔서 감사합니다. 나는 벌써 그런 일이 벌어지고 있다고 생각했지만 확실치 않았습니다. 난 그냥 일시적 라인을 제거하지만 컨트롤을 활성 상태로 유지하는 컨트롤에 대한 버튼을 두 번 토글하여 문제를 해결했습니다. – Matthieu

관련 문제