6 votos

Cómo desactivar la etiqueta de polígono en los vértices (OpenLayers) en el modo de edición

Añadí el estilo en la capa de polígonos así.

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

El polígono se ve bien en modo normal.

label on normal mode

Sin embargo, en ModifyFeature , las etiquetas aparecen en todos los vértices.

enter image description here

Entonces, pruebo esto 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;
            }
        }
    }}
));

Entonces las etiquetas de los vértices se desactivan, PERO la etiqueta entre los vértices se sigue mostrando.

¿Cómo puedo desactivar las etiquetas entre los vértices? Gracias

23voto

Soldarnal Puntos 2646

Hoy me he encontrado con el mismo problema. Debido a que mi capa no contiene sólo características poligonales, la solución propuesta por CaptDragon no funcionó en mi caso. He pasado un par de horas para resolver mi problema y me gustaría compartir los resultados.

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

8voto

Vasu Puntos 11

Puedes asegurarte de que la geometría es de tipo polígono para que sólo reciba la etiqueta si es un polígono y no la línea o el punto. Añadiendo && feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Polygon" a su declaración if. Eso debería funcionar.

Así:

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

Actualización:

Aquí hay una Ejemplo de trabajo

Esta es la parte importante:

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

Para que sólo devuelva una etiqueta si es un polígono: enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X