OpenLayers: Beschriftungen ein/ausblenden

Moin,

ich arbeite gerade ein einer etwas komplizierteren Karte und möchte dafür die Beschriftungen zunächst ausgeblendet haben. Der Nutzer soll diese aber später über eine Schaltfläche aktivieren können.

Das einzige Beispiel das in die Richtung geht ist das hier:
http://gis.ibbeck.de/ginfo/apps/OLExamples/OL26/examples/labels.html


function toggleLabels(flag,layer)
{
    var Anz=1;
    var obj = map.popups;

    var arrLabels=[];
    for(var i=0;i<obj.length;i++)
        if(obj[i].name=="LABEL_" + layer.id && flag==1)                     //"SHOW"
            document.getElementById(obj[i].id).style.display = "block";
        else if(obj[i].name=="LABEL_" + layer.id && flag==-1)                //"HIDE"
            document.getElementById(obj[i].id).style.display = "none";
        else if(obj[i].name=="LABEL_" + layer.id && flag==0)                //"TOGGLE"
            document.getElementById(obj[i].id).style.display = document.getElementById(obj[i].id).style.display == "block" ? "none" : "block";

}

Leider steht in der Doku nichts zu style.display drin :frowning: Ich würde das auch lieber direkt an dem Style ändern, da es bei mir sehr viele Objekte sind.
Hat jemand von euch vielleicht sowas schon mal gemacht?

Ich habs jetzt nicht ausprobiert, aber dieser typische CSS-Trick mit einer Position von -1000, der auch für Drop-Down-Menüs verwendet wird, kann man den hier nicht auch anwenden?

Uff das klingt für mich etwas weit hergeholt. Styling per CSS ist wohl möglich aber an das Label kommt man als Objekt nicht ran.
Ich denke auch, dass es da saubere wege gibt.

In der Doku steht das deshalb nichts drin, weil das ja an sich nichts mit openlayers direkt sondern eine allgemeine Javascript Technik ist.

document.getElementById ist der Befehl um ein bestimmtes Objekt im DOM zu bekommen

style dann der Befehl um die css Eigenschaft dieses Dom Objektes zu ändern.

in diesem Fall wird eben der css style “display” geändert entweder auf “none” (versteckt) oder “block” (angezeigt)

Wie die Labels von Openlayers im DOM zu finden sind steht ja auch schon im Beispiel : Sie fangen alle mit “LABEL_” + layer.id an und man bekommt sie über das object map.popups

Für solche Sachen verwendet man am besten Firebug, damit kann man schnell bestimmte Style Eigenschaften oder die namen, die openlayers den Objekten vergibt erkennen.

Um die Style Eigenschaften zu ändern kann man dann entweder wie in dem Beispiel mit document.getElementById auf die Elemente zugreifen und die dann so wie angegeben ändern. Noch etwas komfortabler geht das dann z.B. mit jQuery, wenn man das in größerem Umfang macht

Danke für die Erklärung, ich bin allerdings fündig geworden:
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(feature.layer.map.getZoom() < 12) {
                return feature.attributes.label;
            }
        }
    }}
));

So ähnlich hatte ich schon mal bei einer anderen Karte gearbeitet, da ging es allerdings um dynamische Ausprägungen.
Sorry für den Spam Leute :frowning: