6

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..

2
  • 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, 2012 at 18:22
  • oh, i am sorry, it's showing labels in ModifyFeature. You used SelectFeature which is working fine. Thx Feb 10, 2012 at 1:30

2 Answers 2

8

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

4
  • would you mind providing a working example? I haven't been able to successfully hide the duplicate labels in edit mode. Thanks a ton! Feb 13, 2012 at 2:59
  • 3
    No problem, please view my update.
    – CaptDragon
    Feb 13, 2012 at 15:23
  • @MichelleChan : Did this solve your problem? Let me know. :)
    – CaptDragon
    Feb 14, 2012 at 16:06
  • How to get unique label per feature(remove duplicates like arcgis) of any feature.? Dec 23, 2015 at 11:32
3

I've faced with the same issue today. Because my layer contains not only polygonal features, solution proposed by CaptDragon didn't work in my case. I've spent couple of hours for resolving my problem and would like to share results.

#Create custom symbolizer for virtual vertices (withot label option)
OpenLayers.Feature.Vector.style['virtual'] = {
    fillColor: "#ee9900",
    fillOpacity: 0.4,
    strokeColor: "#ee9900",
    strokeOpacity: 1,
    strokeWidth: 1,
    pointRadius: 3
}

var styleMap = new OpenLayers.StyleMap({
   "default":OpenLayers.Feature.Vector.style['default'],
   "virtual": OpenLayers.Feature.Vector.style['virtual']
}, {extendDefault: false});

var vectors = new OpenLayers.Layer.Vector('features', {styleMap: styleMap});
var modify = new OpenLayers.Control.ModifyFeature(vectors, {vertexRenderIntent: "virtual"});

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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