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.
essayez avec l'événement moveend
. (voir https://openlayers.org/en/latest/apidoc/module-ol_MapEvent-MapEvent.html#event:moveend ).
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;
}
});
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 });
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.