You are not logged in.
- Topics: Active | Unanswered
Announcement
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
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 ![]()
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
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.
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
@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
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 ![]()
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