我有一个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]);
那么,为什么处理程序创建一个新层,而不是使用指定的一个?
感谢您的解释。我已经认为这样的事情正在发生,但并不确定。我通过切换控制按钮两次来解决我的问题,即删除临时线路但保持控制活动。 – Matthieu