web-dev-qa-db-fra.com

Ouvrir le gestionnaire d'événement de la carte Layers 3 Zoom

Je dois gérer un événement de zoom dans Open Layers 3.

Voici mon code:

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

Ce code fonctionne sans erreur et affiche une carte, mais aucune sortie vers la console ne suggère que cette fonction ne se déclenche pas.

J'ai aussi essayé:

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

Et cela aussi ne fait rien.

Toute aide sur la manière de gérer les événements de contrôle de carte dans OL3 serait très appréciée (notamment le zoom!). Remarque J'ai essayé le zoom ainsi que le zoom pour le champ de type de la méthode on.

15
Single Entity
7
tonio

Juste pour ajouter à cela, vous pouvez vérifier les variations des événements disponibles avec 'propertychange', d'après ce que je vois, il n'y a pas de .on ('zoom', ...) explicite, mais vous pouvez accéder à 'resolution' et à d'autres propriétés comme mentionné dans les commentaires précédents:

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

Vous pouvez gérer l'événement moveend ...

Nous aurons besoin d’une variable globale pour déterminer le niveau de zoom de la carte. J'ai l'a nommé comme currentZoomLevel.

Il est disponible un événement moveend. Utilisons-le et ajoutons un niveau de zoom vérifier la fonction ..

En cas de nouveau niveau de zoom, nous déclenchons un événement zoomend sur Document de DOM.

Enfin, nous aurons besoin d'ajouter le programme d'écoute zoomend à l'élément de document.

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

La source

1
trucheromayor

Comme mentionné dans par par tonio , le moyen d'écouter le changement de zoom, appelé changement de résolution dans la terminologie des Openlayers, est avec 

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

Je trouve cela meilleur (plus succinct, moins cruel) que d’écouter la variable générale propertychange et de vérifier manuellement si le changement concerne la résolution.

Cela se déclenche rapidement lorsque vous utilisez le bouton de la souris, ce qui peut être une bonne idée avant de lancer tout calcul qui attend pour qu’il change.

Documentation pour View

0
Félix Gagnon-Grenier