3

I draw flag feature on my map as follows:

myVectorLayer = new OpenLayers.Layer.Vector("Flag Geometry", {
renderers: renderer,
isBaseLayer: true,
projection: new OpenLayers.Projection("EPSG:900913"),
styleMap: new OpenLayers.StyleMap({
    "default": new OpenLayers.Style(OpenLayers.Util.applyDefaults({
        fillColor: "red",
        strokeColor: "gray",
        label: "${label}",
        fontColor: "${favColor}",
        fontSize: "12px",
        fontFamily: "Courier New, monospace",
        fontWeight: "bold",
        labelYOffset: 2 //for flag
    }, OpenLayers.Feature.Vector.style["default"])),
        "select": new OpenLayers.Style(OpenLayers.Util.applyDefaults({
    }, OpenLayers.Feature.Vector.style["select"]))
})
});

var pointList = [];
var xs = [0, 0, 240, 240, 8, 8, 0];
var ys = [0, 280, 280, 120, 120, 0, 0];

for(var p=0; p<6; ++p) {
    var newPoint = new OpenLayers.Geometry.Point(camera.get('latitude') + xs[p],
        camera.get('longitude') + ys[p]);

    pointList.push(newPoint);
}
pointList.push(pointList[0]);
var linearRing = new OpenLayers.Geometry.LinearRing(pointList);
var flagVector = new OpenLayers.Feature.Vector(
        new OpenLayers.Geometry.Polygon([linearRing]));

flagVector.attributes= {
    label: 'label',
    favColor: 'blue', //favorite color
    align: "cm"
};
myVectorLayer.addFeatures([flagVector]);

This zooms by default when zooming the map but when zooming out the feature becomes so small that it disappears. Is there a way to limit this zooming effect for the feature so that it stops zooming out the feature after a certain level?

1 Answer 1

1

You can control this with for example

minScale: 54168.1

On the layer, or use style rule and use :

    maxScaleDenominator: 60000000,
    minScaleDenominator: 433344,

The values are of course not hardcoded. That will let you control the layout depending on any zoomlevel.

I've written a more detailed code sample here , hope this helps.

edit: Can't seem to get this to get drawn in jsfiddle, feel free to fork/edit and let me know: http://jsfiddle.net/gplv2/9YBYG/

12
  • Unfortunately none of these ways affect the geometry drawn in this above mentioned way.
    – Marwa Hack
    Commented Oct 17, 2012 at 13:11
  • What way are you expecting it to behave ? Not so sure If I truly get the issue now.
    – Glenn Plas
    Commented Oct 17, 2012 at 14:02
  • Using Renederer.Symbol as mentioned here stackoverflow.com/questions/12496810/… minScale works perfectly, but then I face this geometry center problem.
    – Marwa Hack
    Commented Oct 17, 2012 at 14:25
  • Trying your code, I get this: ReferenceError: camera is not defined so I suspect it's defined before the copy/paste. Any chance to fill out the blanks, I got a jsfiddle -almost- working
    – Glenn Plas
    Commented Oct 17, 2012 at 14:48
  • camera.get('latitude') & camera.get('longitude') can be replaced by any valid latitude/longitude values e.g. 3658281.05255/4855543.17503
    – Marwa Hack
    Commented Oct 17, 2012 at 14:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.