Отключить масштабирование с помощью Openlayers

Я использую OpenLayers для отображения пользовательских карт OSM на моем веб-сайте.

Я должен уважать некоторые моменты: карта должна быть исправлена (это означает, что мы не можем перетащить ее или увеличить).

У меня проблема с масштабированием,Я не могу отключить масштабирование с помощью мыши. У кого есть совет?

map = new OpenLayers.Map('map');
map.events.remove("move");
map.events.remove("movestart");
map.events.remove("moveend");
map.events.remove("zoomend");
map.events.remove("mouseover");
map.events.remove("mouseout");
map.events.remove("mousemove");
map.events.remove("zoomstart");
var nav = new OpenLayers.Control.Navigation({
  defaultDblClick: function(event) { return ; }
});
map[index].addControl(nav);

кроме того, если у кого-то есть подсказка, чтобы удалить все события навигации проще, чем это, было бы весьма признателен.

5 ответов


отключите элементы управления по умолчанию на карте, передав пустой массив:

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

упрощение подхода Махди приводит к

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

таким образом, отключение масштабирования на колесе мыши не требует настройки параметров при построении карты, например, путем создания карты без какого-либо контроля (хотя это было несколько запрошено Lght). Кроме того, повторное включение zoom работает эквивалентно.

кроме того, путем поиска элементов управления, соответствующих включенному свойству zoomWheelEnabled вместо имени класса он поддерживает пользовательские элементы управления, производные от OpenLayers.Control.Navigation.


вы также можете сделать следующее:

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

нашел здесь.

для других параметров, таких как отключить перетаскивание, вы можете взглянуть на документация и настроить вышеуказанный код.


для OpenLayers3 массив взаимодействия также должен быть пустым.

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

вот еще один простой способ ограничить событие масштабирования на основе некоторой логики. Потому что OpenLayers не предоставляет "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
};

Как это работает:

для любого вида масштабирования API OpenLayers в конечном итоге вызывает функцию zoomto. Поэтому, прежде чем переопределить его, мы копируем эту функцию в новую функцию под названием "zoomToProxy". Мы переопределяем его и добавляем нашу условную логику масштабирования. Если мы хотим, чтобы масштабирование произошло, мы просто вызываем новую функцию proxy :)