Обработчик событий Open Layers 3 Zoom map

Мне нужно обработать событие масштабирования в Open Layers 3.

Ниже приведен мой код:

map_object = new ol.Map({
target: 'map',
controls: controls_list,
interactions: interactions_list,
overlays: [overlay],
layers: [OSM_raster, WFS_layer],
    view: view
});


map_object.on("Zoom", function() {
  console.log('Zooming...');
});

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

Я также пробовал:

map_object.on("drag", function() {
  console.log('Dragging...');
});

И это тоже ничего не дает.

Буду очень признателен за любую помощь в том, как обрабатывать события управления картой в OL3 (особенно масштабирование!). Примечание. Я пробовал «масштабирование», а также «масштабирование» для поля типа метода on.


person Single Entity    schedule 04.11.2014    source источник


Ответы (4)


попробуйте с событием moveend. (см. https://openlayers.org/en/latest/apidoc/module-ol_MapEvent-MapEvent.html#event:moveend).

person tonio    schedule 06.11.2014
comment
К сожалению, это не решает проблему обработки события масштабирования. Мне нужно знать, когда и только когда происходит масштабирование (а не панорамирование или вращение) и в каком направлении происходит масштабирование. Однако я нашел обходное решение, которое я вскоре опубликую, которое не связано с «нестабильными» событиями и отлично работает. Все равно спасибо. - person Single Entity; 06.11.2014
comment
подойдет ли map.getView().on('change:resolution') вашим потребностям? - person tonio; 06.11.2014
comment
Это работает, но является ли событие change:resolution минимальным? Кто-нибудь может это подтвердить? - person Christophe Roussy; 04.05.2015

Просто чтобы добавить к этому, вы можете проверить варианты событий, доступных с помощью «изменения свойств», из того, что я вижу, нет явного .on ('zoom', ...), но вы можете получить доступ к «разрешению» и другим свойствам, как указано в предыдущих комментариях:

map.getView().on('propertychange', function(e) {
   switch (e.key) {
      case 'resolution':
        console.log(e.oldValue);
        break;
   }
});
person ako977    schedule 21.05.2015

Как упоминается tonio, способ прослушивания изменения масштаба, который в терминологии openlayers называется изменение разрешения, заключается в использовании

map.getView().on('change:resolution', (event) => {
    console.log(event);
});

Я считаю, что это лучше (более лаконично, менее бесполезно), чем прослушивание общего propertychange и проверка вручную, касается ли изменение разрешения.

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

Документация для просмотра

person Félix Adriyel Gagnon-Grenier    schedule 18.02.2019

Вы можете управлять событием moveend...

Нам понадобится глобальная переменная для определения уровня масштабирования карты. Я назвал его currentZoomLevel.

Доступно событие moveend. Давайте воспользуемся этим и добавим функцию проверки уровня масштабирования.

В случае появления нового уровня масштабирования мы запускаем событие zoomend для документа DOM.

Наконец, нам нужно добавить прослушиватель zoomend к элементу документа.

var = currentZoomLevel;

map.on('moveend', checknewzoom);

function checknewzoom(evt)
{
   var newZoomLevel = map.getView().getZoom();
   if (newZoomLevel != currentZoomLevel)
   {
      currentZoomLevel = newZoomLevel;
      $(document).trigger("zoomend", zoomend_event);
   }
}

$(document).on('zoomend', function () {
   console.log("Zoom");
   //Your code here
});

Источник

person trucheromayor    schedule 01.10.2015
comment
замените zoomend_event на evt и передайте его функции события zoomend для использования в собственном коде - person Mojtaba Arvin; 01.05.2018