10 votos

OpenLayers 3 modifica el evento final

Quiero guardar los datos de la geometría después de modificarla, así que necesito un evento que se dispare después de que termine de modificar la característica. Yo uso el siguiente de este post: oyente modificar 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 listener se dispara demasiadas veces en una sola modificación, y si estoy usando 'once' en lugar de 'on' se dispara sólo el primer pequeño cambio y no más, por lo que no guarda el cambio real. Necesito algo como "changeend" o "modifyend" que se disparará cuando voy a terminar de modificar la función, ¿qué puedo usar?

2 votos

Se trata de una limitación conocida. Recientemente se ha creado una incidencia en GitHub al respecto: github.com/openlayers/ol3/issues/2946 .

10voto

Gunny Puntos 16

Si necesitas un evento modifyend por qué no lo usas dentro de la interacción modify.(supongo que usas una interacción modify) mira 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, asumo que sólo modificas una fetaure a la vez (getArray()[0]) . Si utilizas más de una fetaure para modificar a la vez entonces obtén el array de fetaures y añade un bucle para su posterior manipulación. Por ejemplo

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 votos

Debe especificar que modify es el nombre de la Interacción Modificar y que su modifyend viene después de definir la Interacción : primero var modify = new ol.interaction.Modify({ features: select.getFeatures() }); y luego tu código. select es el nombre de mi Select Interaction. También un desarrollador puede hacer e.features.getArray()[0].getGeometry().getCoordinates() o e.features.getArray()[0].getGeometry().getType() para obtener las coordenadas o el tipo. Buena respuesta de todos modos amigo.

4 votos

Tal vez estoy haciendo algo mal, pero con OL5 parece que e.features.getArray()[0].getId()) siempre devuelve el mismo id sea cual sea la característica que estoy modificando. ¿Habría otra forma de saber qué característica se ha modificado?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X