You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***

#1 2012-01-30 10:52:35

soeckebaer
Member
Registered: 2011-12-07
Posts: 3

OpenLayers.Bounds get left, bottom, top, right

Halloo :-)

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/Op … s-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

Last edited by soeckebaer (2012-01-30 12:40:25)

Offline

#2 2012-01-30 14:16:54

Netzwolf
Member
Registered: 2008-04-01
Posts: 1,681
Website

Re: OpenLayers.Bounds get left, bottom, top, right

Nahmd,

soeckebaer wrote:

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

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.

soeckebaer wrote:

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?

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.

soeckebaer wrote:

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

Genauso smile

Gruß Wolf

Last edited by Netzwolf (2012-01-30 14:18:04)


Fragen zu meinen Posts via Mastodon oder per Twitter-DM.

Offline

Board footer

Powered by FluxBB