I added the style on the polygon layer like so.

var style = $.extend(true, {}, OpenLayers.Feature.Vector.style['default']); // get a copy of the default style
style.label = "1233456 ha"
style.fillOpacity = 0.1
style.strokeWidth = 3
var styleMap = new OpenLayers.StyleMap({"default": style});
polygonLayer = new OpenLayers.Layer.Vector("Polygon Layer", {styleMap: styleMap});

The polygon looks fine on normal mode.

label on normal mode

However, on ModifyFeature, labels are showing up on every vertex.

enter image description here

So, I test this http://trac.osgeo.org/openlayers/ticket/2176.

var styleMap = new OpenLayers.StyleMap(new OpenLayers.Style({
        label: "${getLabel}"
        // your other symbolizer properties here
    }, {context: {
        getLabel: function(feature) {
            if(mycontrolIsNotInEditMode) {
                return feature.attributes.label;
            }
        }
    }}
));

Then the labels on the vertices are disabled, BUT the label between vertices are still showing up.

how can I disable the labels between the vertices? Thank you..

link|improve this question
1  
I'm using your exact code and cannot duplicate this behaviour. Can you provide us with more code that will help us duplicate this behavior. My tests don't have the problems you are having. Are you using the latest OpenLayers? – CaptDragon Feb 9 at 18:22
oh, i am sorry, it's showing labels in ModifyFeature. You used SelectFeature which is working fine. Thx – Michelle Chan Feb 10 at 1:30
feedback

1 Answer

up vote 2 down vote accepted

You can make sure that the geometry is of type polygon so that it only gets the label if it's a polygon and not the line or point. By adding && feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Polygon" to your if statement. That should work.

Like this:

...
getLabel: function (feature) {
    if (mycontrolIsNotInEditMode && feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Polygon") {
        return feature.attributes.label;
    }
}
...

Update:

Here is a Working Example

This is the important part:

var style = $.extend(true, {}, OpenLayers.Feature.Vector.style['default']); // get a copy of the default style
style.label = "${getLabel}";
style.fillOpacity = 0.1
style.strokeWidth = 3

var styleMap = new OpenLayers.StyleMap({
    "default": new OpenLayers.Style(style, {
        context: {
            getLabel: function (feature) {
                if (feature.geometry && feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Polygon") {
                    return "1233456 ha";
                } else {
                    return "";
                }
            }
        }
    })
});  

So that it only returns a label if it's a polygon: enter image description here

link|improve this answer
would you mind providing a working example? I haven't been able to successfully hide the duplicate labels in edit mode. Thanks a ton! – Michelle Chan Feb 13 at 2:59
2  
No problem, please view my update. – CaptDragon Feb 13 at 15:23
@MichelleChan : Did this solve your problem? Let me know. :) – CaptDragon Feb 14 at 16:06
yay! thanks a lot, it works now! – Michelle Chan Feb 15 at 9:40
feedback

Your Answer

 
or
required, but never shown

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