OpenLayers DrawFeature 生成新图层
OpenLayers DrawFeature generates a new layer
我有一个 OpenLayers 控件可以在我的地图上画一条线。那很好用。
现在我添加了一个显示线坐标的表单。用户应该能够在那里编辑坐标,并在提交表格时更新行。
问题是我最后看到了两条线。经过一些调试后我发现,虽然我为 DrawFeature 指定要使用哪个层,但处理程序会创建一个名为 "OpenLayers.Handler.Path" 的新层。所以我用鼠标画的所有东西都画在上面,而通过提交表单创建的线画在 "My Layer".
上
我有以下代码:
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每次激活都会创建一个新图层。
这个新图层被注释为 "The temporary drawing layer"。
您可以尝试覆盖OpenLayers.Handler.Path的activate和deactivate方法,强制使用指定图层,但可能会出现一些意想不到的问题。
https://github.com/openlayers/ol2/blob/master/lib/OpenLayers/Handler/Point.js#L156(Handler.Path 扩展 Handler.Point)
所以我会尝试使用表单来解决问题。你没有 post "form code",所以我不能更具体,但你可以尝试更新这两个功能(在两个层上),或者你可以尝试在期间停用绘图 control/handler表单编辑。
我有一个 OpenLayers 控件可以在我的地图上画一条线。那很好用。 现在我添加了一个显示线坐标的表单。用户应该能够在那里编辑坐标,并在提交表格时更新行。
问题是我最后看到了两条线。经过一些调试后我发现,虽然我为 DrawFeature 指定要使用哪个层,但处理程序会创建一个名为 "OpenLayers.Handler.Path" 的新层。所以我用鼠标画的所有东西都画在上面,而通过提交表单创建的线画在 "My Layer".
上我有以下代码:
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每次激活都会创建一个新图层。
这个新图层被注释为 "The temporary drawing layer"。
您可以尝试覆盖OpenLayers.Handler.Path的activate和deactivate方法,强制使用指定图层,但可能会出现一些意想不到的问题。 https://github.com/openlayers/ol2/blob/master/lib/OpenLayers/Handler/Point.js#L156(Handler.Path 扩展 Handler.Point)
所以我会尝试使用表单来解决问题。你没有 post "form code",所以我不能更具体,但你可以尝试更新这两个功能(在两个层上),或者你可以尝试在期间停用绘图 control/handler表单编辑。