OpenLayers.Bounds get left, bottom, top, right

Halloo :slight_smile:

Ich sitze mit einer Kollegin gerade an unserem Semesterprojekt mit YOURS.
In der init()-Methode vom yournavigation.js setzen wir die Bounds über OpenLayer.Bounds und übergeben die Werte top, left, right, bottom (siehe Werte hier: http://dev.openlayers.org/docs/files/OpenLayers/BaseTypes/Bounds-js.html)).


function init() {
    OpenLayers.Feature.Vector.style['default'].strokeWidth = '2';
    OpenLayers.Feature.Vector.style['default'].fillColor = '#0000FF';
    OpenLayers.Feature.Vector.style['default'].strokeColor = '#0000FF';

        

    // Map definition based on http://wiki.openstreetmap.org/index.php/OpenLayers_Simple_Example
    myFirstMap = new OpenLayers.Map ("map", {
        controls: [
            new OpenLayers.Control.Navigation(),
            new OpenLayers.Control.PanZoomBar(),
            new OpenLayers.Control.LayerSwitcher(),
            new OpenLayers.Control.Attribution()
        ],/*
        eventListeners: {
            //"moveend": mapEvent,
            //"zoomend": mapEvent,
            //"changelayer": mapLayerChanged,
            //"changebaselayer": onChangeBaseLayer
        },*/
        maxExtent: new OpenLayers.Bounds(48.330901011582,14.220893726627443,48.279518800937666,14.358222828184461),
        maxResolution: 156543.0399,
        numZoomLevels: 20,
        units: 'm',
        projection: new OpenLayers.Projection("EPSG:900913"),
        displayProjection: new OpenLayers.Projection("EPSG:4326")
    } );
    //map.events.register("changebaselayer", map, onChangeBaseLayer(this));
            
    var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
    var layerCycle = new OpenLayers.Layer.OSM.CycleMap("Cycle Map", {
        displayOutsideMaxExtent: true,
        wrapDateLine: true
    });


...

Wenn sich die Map jetzt verändert und man zoomed oder zu einem anderen Ort springt, möchten wir gerne diese Werte (top, left, right, bottom) wieder zurückbekommen.
Wir haben schon verschiedene Dinge ausprobiert:

var mapBounds = myFirstMap.getExtend();

oder


var bounds = var xyz = myFirstMap.getCenter();
var abc = myFirstMap.getResolution();
var bounds = myFirstMap.calculateBounds(xyz, abc);

Leider bekommen wir die nicht im richtigen Format, sondern in diesem:
bottom: 5621521.4854095
left: -15694526.253504
right: 16807721.161281
top: 5621521.485409

Wir haben bereits hier im Forum ein bisschen gesucht, aber keine Antwort gefunden.
Wir wissen hängen schon zwei Tage an diesem Problem und wissen nicht mehr was wir noch probieren könnten. Liegt es daran, dass wir die Funktionen falsch aufrufen?
Momentan probieren wir dies auch nur ohne einem onChange-Event, da wir bereits beim Laden der Seite falsche Werte bzw. ein falsches Format zurückbekommen.

Mit transform können wir schon einzelne Punkte richtig umwandeln, aber wie wir ein OpenLayers.Bounds-Objekt umwandeln, wissen wir nicht.

liebe Grüße,
Sabine und Sabina

Nahmd,

Das ist das intern verwendete Koordinatensystem.
Das ist vereinfachend gesagt die Entfernung in Metern vom 0°N 0°E, auf der y-Achse (bottom, top) durch die Merkatorprojektion gedehnt. Bei Merkator werden Objekte vergrößert dargestellt, je weiter sie vom Äquator entfernt sind. Vergleicht mal Grönland auf einem Globus und auf einer Karte.

Ihr macht das richtig. Bekommt die Daten nur in der falschen Projektion.

Die Transformation auf geographische Koordinaten läuft so:

bounds.transform(myFirstMap.getProjectionObject(), myFirstMap.displayProjection);

Wichtig zu wissen: das “transform” ändert direkt in den Bounds, es braucht also keine Zuweisung.

Genauso :slight_smile:

Gruß Wolf