Zoom auf alle angezeigten Marker und zentrieren

Hallo zusammen,

ich lade über ein Array Daten zu Features in die Karte.

var clubs = new OpenLayers.Layer.Vector("Clubs", {
    projection: "EPSG:4326",
    strategies: [
        new OpenLayers.Strategy.Fixed(),
        new OpenLayers.Strategy.Cluster({distance: 10, threshold: 1})
    ],
    protocol: new OpenLayers.Protocol.HTTP({
        format: new OpenLayers.Format.Clubs()
    }),
    styleMap: new OpenLayers.StyleMap({
        "default": pin_style
    })
});

OpenLayers.Format.Clubs = OpenLayers.Class(OpenLayers.Format, {
    read: function(obj) {
        return mb.get_features(that.data);
    },
    data: mb.get_features(that.data),
    keepData: true
});

Nun möchte ich die Ansicht am Anfang so zoomen, dass alle Pins gut zu sehen sind und die Karte auf dem Zentrum aller Pins zentrieren. Die Daten werden jeweils Regionsweise gefiltert. Also alle Clubs in Deutschland oder alle in Berlin.

Ich hatte es mit

var bounds = clubs.getDataExtent();
this.map.zoomToExtent(bounds);

versucht, aber laut Doku hat getDataExtent bei Vector erstmal keinerlei Funktionalität.

Weiß jemand wie ich das auf elegante Weise lösen kann?

Wo in der Doku? Ich bin mir ziemlich sicher dass “getDataExtent” funktioniert (sagt meine Doku auch).

Das Problem ist, dass unmittelbar nach dem Einbinden des Layers noch keine Daten da sind. Die werden ja asynchron nachgeladen. Kannst ja mal zum Testen ein “alert(clubs.getDataExtent());” nach ein paar Sekunden aufrufen.

Ich habs noch nie gebraucht, aber ich denke onFeatureInsert wäre die Stelle, an der ich alle Marker ansehen würde und dann eine bounding box aus ihren Koordinaten bauen würde. Oder es gibt eine Stelle, wo man sich nach dem Laden aller Marker reinhängen kann, dort ginge dann auch getDataExtent(), aber die Stelle finde ich nicht…

Grüße, Max

Ich hab grad ein Déjà-vu :wink:

http://forum.openstreetmap.org/viewtopic.php?pid=257783#p257783

Gruß,
Norbert

Immer dieses asynchrone Zeug. :roll_eyes: :smiley:

Nachdem ich die zwei Zeilen in das Event mit rein gepackt habe funktioniert es.

Prima, Danke für’s Feedback.