繁体   English   中英

用户在Openlayers中绘制多边形后如何绘制变换框?

[英]How to draw a transformation box after a user draws a polygon in Openlayers?

我建立了一个应用程序,允许用户在另一个多边形内绘制一个多边形。 由于某些特定于应用程序的原因,这两个多边形位于不同的层中。 用户绘制多边形后,会调用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

Q1:您需要将TransformFeature和DrawFeature控件添加到图层以使用它们。

Q2更为复杂,要检查当前变换后内部多边形是否仍在内部,我认为您需要:

  1. 处理转型事件,
  2. 取消它们,如果3)签入失败,
  3. 在OpenLayers.Geometry.Polygon类型中,有一种方法“ containsPoint”,您可以使用该方法检查内部多边形的每个点是否仍在外部多边形的内部。 我不知道其他方法,该方法可以让您检查某个功能是否在另一个功能内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM