我构建了一个应用程序,允许用户在另一个多边形内绘制多边形。出于某些特定应用的原因,这两个多边形位于不同的层中。在用户绘制多边形之后,调用layer.events.register函数以检查多边形是否完全位于较大的多边形内。现在我想修改应用程序,我有以下问题:
Q1)如何将变换框添加到用户绘制的多边形?我希望用户能够在绘制多边形后旋转或缩放多边形。
Q2)如何在变换(旋转或缩放)后检查多边形是否仍然在较大的多边形内?
**用户绘制的多边形实际上是另一个矩形内的矩形。
我在下面粘贴了一些代码。请注意,名为“BaseLayer”的图层是添加用户生成的矩形的位置。
var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
var baseLayer = new OpenLayers.Layer.Vector("BaseLayer", {
styleMap: new OpenLayers.StyleMap({
"transform": new OpenLayers.Style({
display:"${getDisplay}",
cursor: "${role}",
pointRadius: 3,
fillColor: "white",
fillOpacity: 1,
strokeColor: "black"
},{
context:{
getDisplay: function(feature){
return feature.attributes.role === "se-resive" ? "none": "";
}
}
})
}),
renderers: renderer
});
var transformControl = new OpenLayers.Control.TransformFeature(baseLayer, {
renderIntent: "transform",
rotationHandleSymbolizer: "rotate"
});
var drawPolygonFeature = new OpenLayers.Control.DrawFeature(baseLayer, OpenLayers.Handler.RegularPolygon,
{'displayClass':'olControlDrawFeaturePolygon',
handlerOptions:{sides: 4,
irregular:true,
style: polygonStyle,
id: "processingPolygon"
}
});
baseLayer.events.register("featureadded", feature, function(evt){
// DOES SOME ERROR CHECKING HERE.
// transformControl.setFeature(evt.feature);
});
到目前为止我尝试过的事情: 我尝试使用control.setFeature函数将转换框添加到events.register()函数内部的功能(上面代码中的第二行),但这不起作用。添加转换框还会调用events.register函数,该函数会添加另一个转换框,并因此再次调用events.register()。这导致无限循环!
非常感谢任何帮助。谢谢!
编辑: 这是我想要的转换盒类型的示例: http://openlayers.org/dev/examples/transform-feature.html
答案 0 :(得分:0)
Q1:您需要将TransformFeature和DrawFeature控件添加到图层以使用它们。
Q2更复杂,要检查当前转换后内部多边形是否仍在内部,我认为你需要: