OL 2.11 - Problmatik der Anzeigebegrenzung

HI !

ich bin mal wieder am Basteln einer Karte und das wiederkehrende Problem liegt in der Begrenzung des Bereichs der von einer Karte angezeigt werden soll.

Hierzu gibt es einmal die Karte
www.tappenbeck.net/osm/sandbox/hanseatenweg/deu/index.htm

Der Source ist folgender - den ich mir mal wo “geklaut” habe:

	// Definition der Koordinatensysteme
    geographic_900913 = new OpenLayers.Projection("EPSG:900913");
    mercator_4326 = new OpenLayers.Projection("EPSG:4326");

	// Bereich für welchen die Karte verfügbar sein soll
	// var map_area =  new OpenLayers.Bounds(-180,-89,180,89).transform(mercator_4326, geographic_900913);
	// var map_area =  new OpenLayers.Bounds(10.68221,53.83476,10.70874,53.84561).transform(mercator_4326, geographic_900913);

   var map_area = new OpenLayers.Bounds();
   map_area.extend(new OpenLayers.LonLat(12.6,54.0).transform(mercator_4326, geographic_900913));
   map_area.extend(new OpenLayers.LonLat(12.4,54.2).transform(mercator_4326, geographic_900913));
   map_area.toBBOX();


    // Einrichten der Karte
    map = new OpenLayers.Map('map', {
        projection: geographic_900913,
        displayProjection: mercator_4326,
        controls: [
		  new OpenLayers.Control.MouseDefaults(),
		  new OpenLayers.Control.Attribution()],
        maxExtent: map_area,
        numZoomLevels: 18,
        maxResolution: 156543,
        units: 'meters'
    });

Aber irgendwie kann man die Karte immer weiter verschieben.

Hat einer von Euch eine gute Lösung um das “Problem” in Griff zu bekommen?

Gruß Jan :slight_smile:

Ich bin eigentlich immer mit der Option z.B.

restrictedExtent:new OpenLayers.Bounds(1090000,5930000,1500000,6230000)

sehr zufrieden. Die verhindert zwar nicht das rauszoomen aus dem Bereich (Zoom=0 ist immer die ganze Welt), aber das verschieben. Falls Du keine spherical mercator-Koordinaten magst, musst Du noch ein .transform(…,…) anhängen.

Grüße, Max

Edit: Hier hab ich mal ein altes Beispiel recycled und OL 2.11 verwendet.

HI !

aber das möchte ich gerade verhindern.

Es gibt manchmal Situationen in welchen es schwer zu argumentieren ist wenn der Kartenausschnitt nicht begrenzt werden kann.

Gruß Jan :slight_smile:

ich hab bei mir das drin:


var le=5.6; var ue=47.2; var re=15.3; var oe=55;    // brd
var projfrom = new OpenLayers.Projection("EPSG:4326");
var projto   = new OpenLayers.Projection("EPSG:3857");
var extent = new OpenLayers.Bounds(le,ue,re,oe).transform(projfrom,projto);
...
 map = new OpenLayers.Map("HKTS" ,{
         restrictedExtent : extent,                       <--------------- da
    	 controls: [ 
...

damit kann man nicht weit raus scrollen, nur rauszoomen geht noch. In ein anderes Land reinzoomen geht aber nicht.
ist doch schon fast 90% der Miete.

Gruss
walter

le: linke ecke, untere ecke, rechte. obere …

Zum Begrenzen der Zoom Level siehe OSM help: OpenLayers - limit the number of zoom levels.

Sorry, hab mich durch

vom eigentlichen Problem ablenken lassen :wink:

Seit OL 2.11 (?) gibts eine Option “zoomOffset”. Ein Layer mit

OpenLayers.Layer.OSM("OSM Mapnik",null,{maxResolution:152.874056549,numZoomLevels:9,zoomOffset:10})

hat 9 Zoomlevel und fängt bei Level 10 an. maxResolution scheint wichtig zu sein, ich hab “156543.03390625/(2^zoomOffset)” genommen.

Ich hab das Beispiel mal umgeschrieben. Ungetestet sind aber sämtliche Browser und alle Arten von Layer ausser OSM,XYZ und WMS.

Edit: maxResolution ausgebessert nach ikonors Hinweis in #8

Hi !

danke und muss probieren.

@ikonor: wenn man die grosse zoombar hat, dann reduziert sich diese aber auch nicht.

Bin deshalb schon auf die kleine umgestiegen.

Jan

Die Lösung scheint mir eleganter als mit resolutions/serverResolutions zu sein, das hatte ich irgendwie nicht mehr auf dem Schirm.

Laut 2.12 notes sollte man 156543.03390625 statt 156543.0339 nehmen.

Sollte sie aber schon, dann stimmt was noch nicht. Mit maxbe’s Lösung tut sie’s zumindest, scheint mir auch die einfachere Variante zu sein.

I will try!

wenn ich dann also alles zusammen erst einmal betrachte, dann bezieht sich nur #4 von Wambacher auf die Zoombereichsbegrenzung. Alle anderen auf die Zoomstufen!

Gruß Jan :slight_smile:

Kannst Du den Unterschied zwischen Zoombereichsbegrenzung und Begrenzung der Zoomstufen erklären? Was gefällt Dir am Beispiel aus #6 nicht? Man kann weder rauszoomen noch rausschieben…

Grüße, Max

Hallo maxbe,

jetzt wo Du gezielt fragst kann es sein das da die Begriffe etwas falsch gewählt wurden - es aber durch meinen Mustercode wie auch Reaktion von #4 (Wambacher) richtig verstanden wurde.

Es geht mir ursprünglich um die Begrenzung des Ausschnittes der mit PAN oder ählichen Wege angezeigt werden soll. Sozusagen ein Nord-Ost-Süd-West-Limit der Kartenanzeige.

Wenn dabei eine Lösung für die Zoomstufenbegrenzung bei gleichzeitiger automatischer Anpassung der Zoombar abfällt ist das auch nicht zu vernachlässigen.

Gruß Jan :slight_smile:

hi !

das Beispiel zur Ausschnittsbegrenzung von wambacher #4 hat den gewünschten Erfolg gebracht - danke dafür nochmal.

Gruß Jan :slight_smile:

obwohl jan zwar schon happy war, hab ich mit die Sache mit den Zoomlevels nochmals angesehen.
Es ist ja wirklich grauenhaft, wie das bei OL beschrieben wird - absolut unverständlich.

meine Lösung:


// resulutions wird einmal irgendwo am Anfang definiert.

var resolutions =       [156543.03390625, 78271.516953125, 39135.7584765625,
                               19567.87923828125, 9783.939619140625, 4891.9698095703125,
                               2445.9849047851562, 1222.9924523925781, 611.4962261962891,
                               305.74811309814453, 152.87405654907226, 76.43702827453613,
                               38.218514137268066, 19.109257068634033, 9.554628534317017,
                               4.777314267158508, 2.388657133579254, 1.194328566789627,
                               0.5971642833948135];

// später

 var hkts = new OpenLayers.Layer.Vector("hkts", {
                 baselayer:  false,
                 maxResolution: resolutions[10],           
                 minResolution:  resolutions[14],           
                ... 
      });

zum Testen layer-switcher aufmachen und durchzoomen. Von Zoom 10-14 ist das betreffende Layer aktiv. Was will man mehr :wink:

Gruss
walter

Moin!

Soweit so gut - aber +10 wäre es, wenn man auf dieses

Var Resolution

gänzlich verzichten könnte und die Zoomstufen direkt angegeben werden können.

Gruß Jan

hi !

mir hat das mit dem Array resolutions keine Ruhe gelassen und nochmal auf der OL-ML gefragt.

Dazu wurde geantwortet:


if baselayer = map.layers[0]
 
map.layers[0].resolutions.length
map.layers[0].resolutions[10]
map.layers[0].resolutions[14]

Bleibt nochmal die Ermittlung der ID für map.layers[] wenn nicht 0 zu implementieren. Später…

Gruß Jan :slight_smile: