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?

War es hilfreich?

Lösung

minZoomLevel ist nicht für XYZ Schichten unterstützt, von denen OSM eine Unterklasse ist.

Auch die folgenden Karten für Abhilfen:

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top