gpt4 book ai didi

javascript - OpenLayers DrawFeature 生成一个新图层

转载 作者:行者123 更新时间:2023-11-27 22:35:49 26 4
gpt4 key购买 nike

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

问题是我最终看到了两条可见的线。经过一些调试后,我发现,尽管我指定了 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.Path 的 activate 和 deactivate 方法,强制其使用指定的图层,但可能会出现一些意想不到的问题。 https://github.com/openlayers/ol2/blob/master/lib/OpenLayers/Handler/Point.js#L156 (Handler.Path 扩展 Handler.Point)

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

关于javascript - OpenLayers DrawFeature 生成一个新图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39104803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com