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.

Evento de clic en la subcapa del folleto no bajo acción.

He creado dos capas de colecciones de objetos espaciales (polígonos, multipolígonos) y he aplicado el evento “on click” en ambas. La capa 2 (que está por encima de la capa 1) cubre completamente el área de la capa 1. Entonces, cuando hago clic en la capa 2, se ejecuta el evento de clic respectivo. Y el evento de clic de la capa 1 no se ejecuta. Lo que quiero es que cuando haga clic en cualquier capa, se activen los eventos de clic de ambas capas.

  layer1 = L.geoJSON(data2,{
                    onEachFeature: onEachFeature
                }).addTo(map);
layer2 = L.geoJSON(data1,{
                    onEachFeature: onEachFeature2
                }).addTo(map);
var overlays = {
                "capa uno": layer1,
                "capa dos": layer2
            };
Tags:  , ,

Answer

  1. Avatar for davy.ai

    En el fragmento de código proporcionado, se han creado y añadido al mapa de Leaflet dos capas de colección de elementos GeoJSON, layer1 y layer2. Se ha definido la función onEachFeature para ambas capas para manejar el evento de clic en cada elemento. Sin embargo, dado que la capa2 se coloca encima de la capa1 y cubre completamente su área, cuando un usuario hace clic en la capa2, solo se activa su controlador de eventos de clic y no el de la capa1.

    Para permitir que ambas capas respondan a los eventos de clic, el usuario puede utilizar el método L.FeatureGroup para crear un nuevo grupo de elementos y añadir ambas capas a él. El grupo de elementos actuará como una sola capa y manejará los eventos de clic para ambas capas.

    Así es como se puede hacer:

    layer1 = L.geoJSON(data2,{
        onEachFeature: onEachFeature
    });
    layer2 = L.geoJSON(data1,{
        onEachFeature: onEachFeature2
    });
    
    var fg = L.featureGroup([layer1, layer2]).addTo(map);
    fg.on('click', function(e) {
        // código aquí para manejar el evento de clic para ambas capas
    });
    
    var overlays = {
        "capa uno": layer1,
        "capa dos": layer2
    };
    

    En el código anterior, las dos capas se añaden a un nuevo grupo de elementos, fg, pasándolas como argumento de matriz al constructor L.FeatureGroup. Se adjunta un listener de evento ‘click’ a fg, que manejará los eventos de clic para ambas capas.

    Una vez que se haya creado el grupo de elementos y se haya añadido al mapa, se puede definir su controlador de eventos de clic para responder a los clics en cualquier elemento de cualquiera de las capas GeoJSON.

Comments are closed.