Verschieben der Karte einschränken

Und wieder einmal Hallo liebes Forum,
leider hab ich schon wieder ein Problem, bei dem ich Hilfe gebrauchen könnte. Ich hab mir mit Mapnik meine eigenen Tiles gerendert und das ganze mit OpenLayers eingebunden. Nachdem ich schon beim Einschränken der Zoomstufen Hand am OpenLayers Code angelegt habe, müssste ich nun verhindern, dass der Benutzer die Karte über einen bestimmten Bereich zieht. Zum Beispiel:

  • Auf der Unterseite von Deutschland darf nur innerhalb von Deutschland gescrollt werden, auf der Unterseite von Österreich darf nicht bis rauf nach Skandinavien gescrollt werden usw. Laut OpenLayers funktioniert das mit maxExtent bzw. restrictedExtent und der maxResolution. In der Klasse XYZ.js des OpenLayers Frameworks wird die Map folgendermaßen initialisiert:

initialize: function(name, url, options) {
        if (options && options.sphericalMercator || this.sphericalMercator) {
            options = OpenLayers.Util.extend({
                maxExtent: new OpenLayers.Bounds(
                    -128 * 156543.0339,
                    -128 * 156543.0339,
                    128 * 156543.0339,
                    128 * 156543.0339
                ),
                maxResolution: 156543.0339,
                numZoomLevels: 19,
                units: "m",
                projection: "EPSG:900913"
            }, options);
        }
        url = url || this.url;
        name = name || this.name;
        var newArguments = [name, url, {}, options];
        OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments);
    }

Mein Problem: was bedeutet dieser maxExtent. Wenn ich diesen Wert halbiere:


maxExtent: new OpenLayers.Bounds(
        -64 * 156543.0339,
        -64 * 156543.0339,
         64 * 156543.0339,
         64 * 156543.0339
),

dann bleibt meine Karte weiß. Hat jemand einen Tip für mich, wie ich den scrollbaren Bereich der Karte in OpenLayers einschränken kann. Wie gesagt Änderungen am Quellcode sind kein Problem.

Danke euch allen.
Martin

Und hier die Auflösung. OpenLayers kann ganz ausgezeichnet das scrollen der Karte einschränken. Mein fehler war, dass ich den extent, den ich dem Map Objekt übergeben habe nicht in die Spherical Mercator Projection umgewandelt habe. Für alle, die mit OSM und OpenLayers mal das Scrollen der Karte eingrenzen müssen, hier seht ihr wie ichs mit Österreich gemacht hab:


/*Koordinaten und Zoom Einstellung*/
    var lat = 47.00;
    var lon = 13.41;
    var zoom = 7;
    var minZoom = 7;
    var maxZoom = 13;
    //Eingrenzung auf ein Land
    var leftBottom = new OpenLayers.LonLat(9,46) // Center of the map
    .transform(
      new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
      new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
    )
    var rightTop = new OpenLayers.LonLat(17,49) // Center of the map
    .transform(
      new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
      new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
    )
    var options = {
        restrictedExtent: extent
    }
    var extent = new OpenLayers.Bounds(leftBottom.lon, leftBottom.lat, rightTop.lon, rightTop.lat);
    /*Karte initialisieren*/
    map = new OpenLayers.Map("basicMap");
    map.minZoomLevel = minZoom;
    map.maxZoomLevel = maxZoom;
    map.restrictedExtent = extent;
    /*Layer mit den selbst gerenderten Kacheln*/
    var newLayer = new OpenLayers.Layer.OSM("New Layer", "/tiles/${z}/${x}/${y}.png");
    map.addLayer(newLayer);
    
    /*Die POIs auf der Karte platzieren*/
    var pois = new OpenLayers.Layer.SkiresortMarker( "My Points",
            { location:"/extensions/poi/oesterreich.txt",
              projection: map.displayProjection
            });
    map.addLayer(pois);
    //map.restrictedExtent = new OpenLayers.Bounds(9.4, 46.35, 17.33, 49.03);
    //map.addControl(new OpenLayers.Control.LayerSwitcher());
    /*Karte zentrieren und transformieren*/
    map.setCenter(new OpenLayers.LonLat(lon,lat) // Center of the map
    .transform(
      new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
      new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
    ), zoom // Initialier Zoom level
  );

Gruß
Martin

Danke. Gleich eingebaut, funkioniert prima.

Nop