Domanda

sto usando OpenLayers per visualizzare una mappa in una pagina web. Sto usando tessere dal CloudMade, ma gli stessi problemi si verificano con le piastrelle Mapnik da OpenStreetMap.

Sto cercando di limitare la mappa in modo che l'utente non può ingrandire tutta la via d'uscita per visione del mondo -. Voglio loro di rimanere più o meno uno zoom livello di città al minimo

Ho provato con le proprietà minZoomLevel / maxZoomLevel / numZoomLevels; solo le proprietà maxZoomLevel e numZoomLevels sembra funzionare, mentre la proprietà minZoomLevel sembra essere completamente ignorato.

C'è un altro modo per raggiungere questo obiettivo?

È stato utile?

Soluzione

minZoomLevel non è supportato per strati XYZ, di cui OSM è una sottoclasse.

Si vedano le seguenti biglietti per soluzioni alternative:

Altri suggerimenti

Si potrebbe ignorare la funzione isValidZoomLevel. Qualcosa di simile a questo (non testato):

OpenLayers.Map.isValidZoomLevel = function(zoomLevel) {
   return ( (zoomLevel != null) &&
      (zoomLevel >= 2) && // set min level here, could read from property
      (zoomLevel < this.getNumZoomLevels()) );
}

Modifica

In alternativa si avrebbe bisogno di ignorare le risoluzioni disponibili, vedere l'esempio qui: http: // dev.openlayers.org/examples/zoomLevels.html

Ho trovato il modo più semplice per limitare i livelli maxZoom per uno strato di XYZ è stato quello di sovrascrivere il metodo getNumZoomLevels:

map.getNumZoomLevels = function(){
        return 10;
        };

Questa pevents zoom oltre il livello 10 e anche disegna il controllo zoomBar correttamente. Questa e una combinazione dell'opzione zoomOffset dovrebbe consentire di controllare facilmente min zoom / max, senza dover pasticciare con risoluzioni o sottoclassi.

Altre risposte qui si riferiscono alle versioni OpenLayers precedenti alla versione 3.

Con OpenLayers 3, è possibile utilizzare l'opzione maxZoom mappa durante l'inizializzazione della mappa, come segue:

    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
        })
    });

Maggiori informazioni possono essere trovate in OpenLayers documentazione: http: // OpenLayers .org / it / v3.0.0 / doc / tutorial / concepts.html

Ora io uso questo in "Vista":

view: new ol.View({
    center: ol.proj.transform([-3.707524, 40.485644], 'EPSG:4326',EPSG:3857'),
    zoom: 15,
    maxZoom: 17,
    minZoom: 6
}),

E funziona benissimo

La definizione di risoluzioni non risolve il problema (anche in v2.1) - non ho trovato alcuna correzione pernament per questo, così ho fatto la mia zoombar in JS - questo è quello che mi sento di raccomandare a tutti coloro che incontra problemi con zoombar con piastrelle personalizzate.

Ho finito con questa soluzione come io non riuscivo a capire come utilizzare zoomOffset nella mia messa a punto.

        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;
        }

ho provato qualcosa di simile e funziona per me:

map.newMoveTo = map.moveTo;
map.moveTo = function(lonlat,zoom,options){
    return(zoom>=maxZoom && zoom<=minZoom)?map.newMoveTo(lonlat,zoom,options):false;
};

La risposta migliore che ho trovato (tra cui un esempio) era a OpenLayers - limitare il numero di livelli di zoom . Non mi incollo qui, si prega di vedere le istruzioni laggiù.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top