Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I have built an application which allows users to draw a polygon inside another polygon. The two polygons are in different layers for some application specific reasons. After the user draws a polygon, layer.events.register function is invoked to check if the polygon lies entirely inside the larger polygon. Now I want to modify the application and I have the following questions:

Q1) How can I add a transformation box to the polygon that is drawn by the user? I want the user to be able to rotate or scale the polygon after it is drawn.

Q2) How can I check that after the transformation(rotation or scaling) the polygon will still be inside the larger polygon?

** The polygon drawn by the user is in fact a rectangle inside another rectangle.

I have pasted some code below. Note that the layer named "BaseLayer" is where the user generated rectangles are added.

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);
});

What I've tried so far: I tried adding the transformation box to the feature inside the events.register() function (second last line in the code above) using the control.setFeature function, however this did not work. Adding a transformation box also invokes the events.register function which adds another transformation box and as a result invoking the events.register() again. This results in an infinite loop!

Any help is greatly appreciated. Thanks!

Edit: Here is an example of the type of transformation box I want: http://openlayers.org/dev/examples/transform-feature.html

share|improve this question
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.