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-07-31 13:34:58

Lübeck
Member
Registered: 2009-02-17
Posts: 2,874

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/hanseate … /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 :-)


Redmi Note 9 Pro  mit Android 11, Tablet Android 8.1, PC: Win10

Offline

#2 2012-07-31 13:49:52

maxbe
Member
Registered: 2010-01-19
Posts: 3,255
Website

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

Lübeck wrote:

das wiederkehrende Problem liegt in der Begrenzung des Bereichs der von einer Karte angezeigt werden soll.

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.

Last edited by maxbe (2012-07-31 14:00:34)

Offline

#3 2012-07-31 14:13:27

Lübeck
Member
Registered: 2009-02-17
Posts: 2,874

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

HI !

Die verhindert zwar nicht das rauszoomen aus dem Bereich (Zoom=0 ist immer die ganze Welt), aber das verschieben.

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 :-)


Redmi Note 9 Pro  mit Android 11, Tablet Android 8.1, PC: Win10

Offline

#4 2012-07-31 15:09:55

wambacher
Member
From: Schlangenbad/Wambach, Germany
Registered: 2009-12-16
Posts: 16,769
Website

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

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 ..

Last edited by wambacher (2012-07-31 15:13:16)

Offline

#5 2012-07-31 16:23:24

ikonor
Member
Registered: 2010-11-08
Posts: 637
Website

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

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

Offline

#6 2012-07-31 16:24:19

maxbe
Member
Registered: 2010-01-19
Posts: 3,255
Website

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

Sorry, hab mich durch

Aber irgendwie kann man die Karte immer weiter verschieben.

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

Last edited by maxbe (2012-07-31 16:55:25)

Offline

#7 2012-07-31 16:42:19

Lübeck
Member
Registered: 2009-02-17
Posts: 2,874

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

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


Redmi Note 9 Pro  mit Android 11, Tablet Android 8.1, PC: Win10

Offline

#8 2012-07-31 16:45:38

ikonor
Member
Registered: 2010-11-08
Posts: 637
Website

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

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

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

maxbe wrote:

maxResolution scheint wichtig zu sein, ich hab "156543.0339/(2^zoomOffset)" genommen.

Laut 2.12 notes sollte man 156543.03390625 statt 156543.0339 nehmen.

Offline

#9 2012-07-31 16:49:10

ikonor
Member
Registered: 2010-11-08
Posts: 637
Website

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

Lübeck wrote:

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

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.

Offline

#10 2012-07-31 17:32:53

Lübeck
Member
Registered: 2009-02-17
Posts: 2,874

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

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 :-)

Last edited by Lübeck (2012-07-31 20:25:07)


Redmi Note 9 Pro  mit Android 11, Tablet Android 8.1, PC: Win10

Offline

#11 2012-07-31 23:13:45

maxbe
Member
Registered: 2010-01-19
Posts: 3,255
Website

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

Lübeck wrote:

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

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

Offline

#12 2012-08-01 05:31:36

Lübeck
Member
Registered: 2009-02-17
Posts: 2,874

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

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 :-)


Redmi Note 9 Pro  mit Android 11, Tablet Android 8.1, PC: Win10

Offline

#13 2012-08-02 08:40:24

Lübeck
Member
Registered: 2009-02-17
Posts: 2,874

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

hi !

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

Gruß Jan :-)


Redmi Note 9 Pro  mit Android 11, Tablet Android 8.1, PC: Win10

Offline

#14 2012-08-04 00:07:57

wambacher
Member
From: Schlangenbad/Wambach, Germany
Registered: 2009-12-16
Posts: 16,769
Website

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

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

Offline

#15 2012-08-14 07:04:48

Lübeck
Member
Registered: 2009-02-17
Posts: 2,874

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

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


Redmi Note 9 Pro  mit Android 11, Tablet Android 8.1, PC: Win10

Offline

#16 2012-08-17 08:34:03

Lübeck
Member
Registered: 2009-02-17
Posts: 2,874

Re: OL 2.11 - Problmatik der Anzeigebegrenzung

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 :-)


Redmi Note 9 Pro  mit Android 11, Tablet Android 8.1, PC: Win10

Offline

Board footer

Powered by FluxBB