2016-08-23 21 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)

因此,我會嘗試,而不是解決與形式的問題。您沒有發佈「表單代碼」,所以我不能更具體,但可以嘗試更新兩個功能(在兩個圖層上),或者您可以嘗試在表單編輯期間停用繪圖控制/處理程序。

+1

感謝您的解釋。我已經認爲這樣的事情正在發生,但並不確定。我通過切換控制按鈕兩次來解決我的問題,即刪除臨時線路但保持控制活動。 – Matthieu