Suite

Problème lors de la suppression de l'interaction après la fin du dessin dans openlayers-3


j'utilise OpenLayers-3.8.2. j'ai un dessiner l'interaction comme suit:

function drawEnd(){ map.removeInteraction(drawIneraction). } var drawInteraction = new ol.interaction.Draw({ source : masource, tapez : 'LineString' }); drawInteraction.on('drawend', drawEnd); map.addInteraction(drawInteraction);

Je veux que l'utilisateur dessine une seule caractéristique. Ce code fonctionne, mais lorsque l'utilisateur dessine une entité, zoome la carte en 2 niveaux.

Comment puis-je empêcher le zoom avant?


Vous pouvez écouter ledblclickévénement, puis simplementrenvoie faux ;pour désactiver le zoom ; Cependant, vous devez définir une condition pour qu'il ne désactive le zoom que lorsque l'utilisateur dessine.

map.on( "dblclick", function (e) { if ( drawingMode ) { return false; } });

La bonne façon de gérer cela est quelque chose comme:

// Trouver l'interaction double-clic qui se trouve sur la carte. var dblclickzoom; map.getInteractions().forEach(function (interaction) { if (interaction instanceof ol.interaction.DoubleClickZoom) { dblclickzoom=interaction; } }); // Supprime l'interaction de la carte. if (dblclickzoom) { map.removeInteraction(dblclickzoom); } /* Ajoutez votre interaction de dessin ici */ var drawinteraction=new ol.interaction.Draw(… ); // J'aime coller l'auditeur sur l'événement de changement de la source plutôt que // sur le drawend de l'interaction, mais je pense que l'un ou l'autre devrait fonctionner… drawinteraction.on('drawend', function () { map.removeInteraction(drawinteraction); // Do ceci dans un délai d'attente afin qu'il ne soit pas déclenché par le // double-clic potentiel qui a provoqué la fin du dessin. if (dblclickzoom) { setTimeout(function () { map.addInteraction(dblclickzoom); }); } }); // Lancer l'interaction de dessin… map.addInteraction(drawinteraction);

Essayez l'option stopClick

var drawInteraction = new ol.interaction.Draw({ source : masource, tapez : 'LineString', stopClick : true });

en définissant ceci avant le dessin, vous pouvez désactiver le zoom sur double clic,

ol.interaction.defaults({ doubleClickZoom :false })

après avoir supprimé l'interaction de dessin, remettez le zoom du double-clic sur vrai


Voir la vidéo: Building Covid GIS web app using Openlayers and Postgres from scratch (Octobre 2021).