OpenLayers DrawFeature生成一个新层



我有一个OpenLayers控件在我的地图上画一条线。这很好。现在我添加了一个显示直线坐标的表单。用户应该能够在那里编辑坐标,并且在提交表单时应该更新行。

问题是,我结束了两行可见。经过一些调试,我发现,虽然我为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]);

那么,为什么处理程序创建一个新的层,而不是使用指定的一个?

DrawFeature控件使用指定的图层,而OpenLayers.Handler.Path每次激活时都会创建一个新图层。

这个新图层注释为"临时绘图层"

你可以尝试重写OpenLayers.Handler的activate和deactivate方法。路径,强制它使用指定的层,但可能会出现一些意想不到的问题。https://github.com/openlayers/ol2/blob/master/lib/OpenLayers/Handler/Point.js L156(处理程序。路径扩展Handler.Point)

所以我会尝试用表单来解决问题。你没有发布"表单代码",所以我不能更具体,但你可以尝试更新这两个功能(在两个层),或者你可以尝试在表单编辑期间停用绘制控件/处理程序。

相关内容

  • 没有找到相关文章

最新更新