2012-09-11 16 views
6

sto usando OpenLayers per visualizzare mappe OSM personalizzate sul mio sito web.Disattiva zoom con Openlayers

Ho alcuni punti da rispettare: la mappa deve essere risolta (ovvero non possiamo trascinarla o ingrandirla).

Ho un problema con lo zoom, non riesco a disabilitare lo zoom con il mouse. Qualcuno ha un consiglio?

Inoltre, se qualcuno ha un suggerimento per rimuovere tutti gli eventi di navigazione più facile di quello, sarebbe molto apprezzato.

risposta

10

disabilitare i comandi di default sulla vostra mappa passando un array vuoto:

var map = new OpenLayers.Map('map', { controls: [] }); 
+0

Sì, più facile! Grazie. – GeoffreyB

3

È possibile effettuare le seguenti anche:

map = new OpenLayers.Map({ 
    // options here ... 
} 

var Navigation = new OpenLayers.Control.Navigation({ 
    'zoomWheelEnabled': false, 
    'defaultDblClick': function (event) { 
     return; 
    } 
}); 

map.addControl(Navigation); 

var NavigationControls = map.getControlsByClass('OpenLayers.Control.Navigation') 
    , i; 

for (i = 0; i < NavigationControls.length; i++) { 
    NavigationControls[i].disableZoomWheel(); 
} 

Trovato here.

Per altre opzioni come disabilitare il trascinamento, è possibile dare un'occhiata allo documentation e personalizzare il codice precedente.

1

Ecco un altro modo semplice per limitare l'evento di zoom in base a una logica. Perché OpenLayers doesnt fornire un 'beforezoom'

map.zoomToProxy = map.zoomTo; 
map.zoomTo = function (zoom,xy){ 
// if you want zoom to go through call 
map.zoomToProxy(zoom,xy); 
//else do nothing and map wont zoom 
}; 

Come funziona:

Per qualsiasi tipo di zoom attività, OpenLayers chiamate API in ultima analisi, la funzione chiamata zoomTo. Quindi, prima di sovrascriverlo, copiamo quella funzione in una nuova funzione chiamata 'zoomToProxy'. Lo sovrascriviamo e aggiungiamo la nostra logica di zoom condizionale. Se vogliamo lo zoom per accadere chiamiamo semplicemente la nuova funzione di proxy :)

+0

Grazie mille !!! È un modo fantastico. Grazie mille – javagc

4

Semplificare approccio dei risultati del Mahdi in

var i, l, c = map.getControlsBy("zoomWheelEnabled", true); 
for (i = 0, l = c.length; i < l; i++) { 
    c[i].disableZoomWheel(); 
} 

In questo modo la disabilitazione dello zoom rotellina del mouse non richiede per personalizzare le opzioni sulla costruzione di mappa per esempio creando una mappa senza alcun controllo (anche se questo è stato in qualche modo richiesto da Lght). Inoltre, il riattivazione dello zoom funziona in modo equivalente.

Inoltre, cercando i controlli corrispondenti alla proprietà abilitata zoomWheelEnabled anziché il nome della classe supporta i controlli personalizzati derivati ​​da OpenLayers.Control.Navigation.

+0

Non posso testarlo, ma a mio parere sembra un altro buon modo per farlo. Anche se volevo sapere come stavate disabilitando lo zoom della rotellina della ruota in OpenLayers, il mio obiettivo era rimuovere tutto (lo zoom era l'unica cosa rimasta). Grazie per la tua risposta, spero che possa aiutare più persone! – GeoffreyB

+0

Che ha funzionato perfettamente! Molto più semplice da qualsiasi altra soluzione vista finora. – user1919

+0

E per abilitare nuovamente: 'var i, l, c = map.getControlsBy (" zoomWheelEnabled ", false); per (i = 0, l = c.length; i igneosaur

3

Per OpenLayers3 anche l'array di interazione deve essere vuoto.

var map = new ol.Map({ 
    controls: [], 
    interactions: [] 
});