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