OpenLayers 3 modifie l'événement de fin


9

Je souhaite enregistrer les données de géométrie après les avoir modifiées, j'ai donc besoin d'un événement qui se déclenche une fois que j'ai fini de modifier la fonction. J'utilise ce qui suit à partir de ce message: l' auditeur modifie l'interaction

    var selected_features = select.getFeatures();
// when a feature is selected...
selected_features.on('add', function (event) {
    // get the feature
    var feature = event.element;
    feature.on("change", function (event) {
            logStatus(feature.getId() + " has been changed!\n");
    });
});

Mais cet auditeur se déclenche trop de fois en une seule modification, et si j'utilise «une fois» au lieu de «sur», il ne déclenche que le premier petit changement et pas plus, donc il ne sauvegarde pas le vrai changement. J'ai besoin de quelque chose comme "changeend" ou "modifyend" qui se déclenchera lorsque j'aurai fini de modifier la fonctionnalité, que puis-je utiliser?


2
Il s'agit d'une limitation connue. Un problème GitHub a été créé récemment: github.com/openlayers/ol3/issues/2946 .
erilem

Réponses:


10

Si vous avez besoin d'un événement modifyend, pourquoi ne l'utilisez-vous pas dans l'interaction de modification (je suppose que vous utilisez une interaction de modification)

modify.on('modifyend',function(e){
console.log("feature id is",e.features.getArray()[0].getId());
});

Cet événement est disponible dans les dernières versions de ol3. Dans mon extrait de code, je suppose que vous ne modifiez qu'une seule fonction à la fois (getArray () [0]). Si vous utilisez plus d'une fetaure pour modifier à la fois, récupérez le tableau fetaures et ajoutez une boucle pour une manipulation ultérieure. Ainsi:

modify.on('modifyend',function(e){
var features = e.features.getArray();
for (var i=0;i<features.length;i++){
console.log("feature changed id is",features[i].getId());
}
});

5
Vous devez spécifier que modifyc'est le nom de l'interaction de modification et que votre modifyendcode vient après avoir défini l'interaction: d'abord var modify = new ol.interaction.Modify({ features: select.getFeatures() });, puis votre code. selectest le nom de mon Select Interaction. Un développeur peut également faire e.features.getArray()[0].getGeometry().getCoordinates()ou e.features.getArray()[0].getGeometry().getType()obtenir les coordonnées ou le type. Belle réponse quand même mec.
slevin

3
Peut-être que je fais quelque chose de mal, mais avec OL5, il semblerait que e.features.getArray()[0].getId())renvoie toujours le même identifiant quelle que soit la fonctionnalité que je modifie. Y aurait-il une autre façon de savoir quelle fonction a été modifiée?
Félix Gagnon-Grenier
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.