es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener información de varias capas utilizando el método forEachFeatureAtPixel.

Quiero obtener información de varias capas, estoy utilizando el método forEachFeatureAtPixel, pero cuando obtengo los resultados solo obtengo el primer resultado. Cuando en la respuesta del navegador, veo que el JSON que regresa tiene más resultados. Cuando utilicé el método getFeaturesAtPixel, obtuve todos los resultados a través de un bucle FOR. Pero ahora no sé cómo obtener todos los resultados.

map.on("click", function (evt) {
    var result = map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
        return { feature, layer };
    });
    if (result) {
        var feature = result.feature;
        var layer = result.layer;
        if (layer === vec01) {
            contINFO.innerHTML = '<b>Uno nombre:</b> ' + feature.get('one_name');
        }else if (layer === vec02) {
            contINFO.innerHTML = '<b>Otro nombre:</b> ' + feature.get('other_name') + '<b>Porcentaje:</b> ' + feature.get('percent');
        }
    }
});
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para obtener información de varias capas, es necesario modificar el método forEachFeatureAtPixel. En lugar de devolver el primer resultado, es necesario almacenar todas las características en un array y luego recorrer el array para acceder a cada una de ellas. Así es como se puede modificar el código:

    map.on("click", function (evt) {
        var features = [];
        map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
            // agregar la característica al array
            features.push({ feature, layer });
        });
        if (features.length > 0) {
            // recorrer el array de características
            for (var i = 0; i < features.length; i++) {
                var feature = features[i].feature;
                var layer = features[i].layer;
                if (layer === vec01) {
                    contINFO.innerHTML += '<b>Un nombre:</b> ' + feature.get('one_name') + '<br>';
                } else if (layer === vec02) {
                    contINFO.innerHTML += '<b>Otro nombre:</b> ' + feature.get('other_name') + '<b>Porcentaje:</b> ' + feature.get('percent') + '<br>';
                }
            }
        }
    });
    

    Este código crea un array vacío features y agrega cada característica y su capa correspondiente al array. Luego, comprueba si hay características en el array features y las recorre para acceder a cada característica. Finalmente, utiliza el operador += para agregar la información de la característica al elemento contINFO en lugar de sobrescribirla.

Comments are closed.