Min / Max-Zoomstufe in Openlayers
-
27-09-2019 - |
Frage
Ich bin mit Openlayers eine Karte auf einer Webseite angezeigt werden soll. Ich bin mit Fliesen von Cloudmade, aber die gleichen Probleme treten mit den Mapnik Fliesen von OpenStreetMap.
Ich versuche, um die Karte zu beschränken, so dass der Benutzer nicht den ganzen Weg, um Weltbild vergrößern kann. - Ich möchte, dass sie in etwa auf Stadtebene Zoom auf Minimum bleiben
Ich habe versucht, die minZoomLevel
/ maxZoomLevel
/ numZoomLevels
Eigenschaften verwendet wird; nur die maxZoomLevel
und numZoomLevels
Eigenschaften scheinen zu arbeiten, während die minZoomLevel
Eigenschaft vollständig ignoriert zu werden scheint.
Gibt es eine andere Möglichkeit, dies zu erreichen?
Lösung
minZoomLevel ist nicht für XYZ Schichten unterstützt, von denen OSM eine Unterklasse ist.
Auch die folgenden Karten für Abhilfen:
- http://trac.osgeo.org/openlayers/ticket/2909 ( Tragen Sie eine Zoom-Offset)
- http://trac.osgeo.org/openlayers/ticket/2189 ( hinzufügen minZoomLevel Patch)
Andere Tipps
Sie könnten die isValidZoomLevel
Funktion außer Kraft setzen. So etwas wie diese (nicht getestet):
OpenLayers.Map.isValidZoomLevel = function(zoomLevel) {
return ( (zoomLevel != null) &&
(zoomLevel >= 2) && // set min level here, could read from property
(zoomLevel < this.getNumZoomLevels()) );
}
Bearbeiten
Oder Sie müßten die verfügbaren Auflösungen außer Kraft zu setzen, siehe das Beispiel hier: http: // dev.openlayers.org/examples/zoomLevels.html
Ich fand den einfachste Weg, um die maxZoom Ebene für eine XYZ-Schicht zu beschränken war die getNumZoomLevels Methode außer Kraft zu setzen:
map.getNumZoomLevels = function(){
return 10;
};
Diese pEvents jenseits Ebene Zoomen 10 und zieht auch die Zoombar Steuerung richtig. Diese und eine Kombination der zoomOffset
Option sollten Sie ermöglichen, leicht min / max Zoom zu steuern, ohne um zu verwirren, die mit Auflösungen oder Subklassen.
Andere Antworten hier auf Openlayers-Versionen beziehen sich vor Version 3.
Mit Openlayers 3 können Sie die maxZoom
Karte Option verwenden, wenn die Karte zu initialisieren, wie folgt:
var map = new ol.Map({
target: 'mapcontainer-001',
layers: layers, // Layers need to be initialized previously
view: new ol.View({
center: ol.proj.transform([-5.12345, 42.12345], 'EPSG:4326', 'EPSG:3857'),
zoom: 12,
maxZoom: 19
})
});
Weitere Informationen finden Sie in Openlayers Dokumentation: http: // openlayers .org / en / v3.0.0 / doc / tutorials / concepts.html
Jetzt benutze ich dies in der "View":
view: new ol.View({
center: ol.proj.transform([-3.707524, 40.485644], 'EPSG:4326',EPSG:3857'),
zoom: 15,
maxZoom: 17,
minZoom: 6
}),
Und es funktioniert
Auflösungen definieren löst nicht das Problem (auch in v2.1) - Ich habe keine pernament Lösung für diesen finden, so dass ich meine eigene Zoombar in JS gemacht - das ist, was ich würde jedem empfehlen, die Probleme Begegnungen mit Zoombar mit benutzerdefinierten Fliesen.
beenden ich mit dieser Lösung, wie ich kann nicht herausfinden, wie zoomOffset in meinem Setup zu verwenden.
map.getNumZoomLevels = function(){
return (options.maxzoom-options.minzoom+1);
};
map.isValidZoomLevel = function(zoomLevel) {
var valid = ( (zoomLevel != null) &&
(zoomLevel >= options.minzoom) &&
(zoomLevel <= options.maxzoom) );
if(!valid && map.getZoom() == 0){
map.zoomTo(options.maxzoom - (options.maxzoom - options.minzoom)/2);
}
return valid;
}
habe ich versucht, so etwas wie diese und es funktioniert für mich:
map.newMoveTo = map.moveTo;
map.moveTo = function(lonlat,zoom,options){
return(zoom>=maxZoom && zoom<=minZoom)?map.newMoveTo(lonlat,zoom,options):false;
};
Die beste Antwort, die ich (einschließlich Beispiel) gefunden wurde auf Openlayers - begrenzen die Anzahl der Zoomstufen . Ich werde es nicht hier einfügen, benutzen Sie bitte die Anweisungen dort sehen.