OpenLayers 3 modifica el evento final

9

Quiero guardar los datos de geometría después de modificarlos, por lo que necesito un evento que se active después de que termine de modificar la función. Utilizo lo siguiente de esta publicación: el oyente modifica la interacción

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

Pero este oyente dispara demasiadas veces en una sola modificación, y si estoy usando 'una vez' en lugar de 'encendido', solo se activa el primer pequeño cambio y no más, por lo que no está guardando el cambio real. Necesito algo como "changeend" o "modifyend" que se activará cuando termine de modificar la función, ¿qué puedo usar?

Jordán
fuente
2
Esta es una limitación conocida. Recientemente se creó un problema de GitHub para eso: github.com/openlayers/ol3/issues/2946 .
erilem

Respuestas:

10

Si necesita un evento modifyend, ¿por qué no lo usa dentro de la interacción de modificación? (Supongo que usa una interacción de modificación) verifique esto

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

Este evento está disponible en las últimas versiones de ol3. En mi fragmento de código, supongo que solo modifica una característica a la vez (getArray () [0]). Si usa más de una característica para modificar a la vez, obtenga la matriz de características y agregue un bucle para una mayor manipulación. Al igual que:

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());
}
});
Pavlos
fuente
55
Debe especificar que ese modifyes el nombre de la interacción de modificación y que su modifyendcódigo viene después de definir la interacción: primero var modify = new ol.interaction.Modify({ features: select.getFeatures() });y luego su código. selectes el nombre de mi interacción seleccionada. También un desarrollador puede hacer e.features.getArray()[0].getGeometry().getCoordinates()o e.features.getArray()[0].getGeometry().getType()obtener las coordenadas o el tipo. Buena respuesta de todos modos amigo.
slevin
3
Tal vez estoy haciendo algo mal, pero con OL5 parece que e.features.getArray()[0].getId())siempre devuelve la misma identificación, sea cual sea la función que estoy modificando. ¿Habría otra forma de saber qué función ha cambiado?
Félix Gagnon-Grenier