Skip to main content
added 161 characters in body
Source Link
Angel
  • 11
  • 1
  • 4

Is there a simple way to show information for all the overlapping features? Here you can download my project: overlappingpolygons.zip

Is there a simple way to show information for all the overlapping features?

Is there a simple way to show information for all the overlapping features? Here you can download my project: overlappingpolygons.zip

Title edit, removed thanks.
Source Link
TomazicM
  • 27k
  • 24
  • 31
  • 42

Leaflet - handling Handling popups with overlapping layers in Leaflet

This is my first week working with Leaflet and I am a bit lost. Thank you in advance.

Leaflet - handling popups with overlapping layers

This is my first week working with Leaflet and I am a bit lost. Thank you in advance.

Handling popups with overlapping layers in Leaflet

This is my first week working with Leaflet and I am a bit lost.

Source Link
Angel
  • 11
  • 1
  • 4

Leaflet - handling popups with overlapping layers

I have two polygon layers (polygons) that overlap. I've created a leaflet map using qgis2web. The issues is that, if I click on the overlapping area, the popup only shows information for the topmost layer.

Is there a simple way to show information for all the overlapping features?

  <div id="map">
    </div>
    <script src="js/qgis2web_expressions.js"></script>
    <script src="http://unpkg.com/[email protected]/dist/leaflet.js"></script>
    <script src="js/leaflet.rotatedMarker.js"></script>
    <script src="js/leaflet.pattern.js"></script>
    <script src="js/leaflet-hash.js"></script>
    <script src="js/Autolinker.min.js"></script>
    <script src="js/rbush.min.js"></script>
    <script src="js/labelgun.min.js"></script>
    <script src="js/labels.js"></script>
    <script src="data/polygonlayer1_0.js"></script>
    <script src="data/polygonlayer2_1.js"></script>
    <script>
    var map = L.map('map', {
        zoomControl:true, maxZoom:28, minZoom:1
    }).fitBounds([[43.3692589418,-4.4186720562],[43.3951151,-4.35991701571]]);
    var hash = new L.Hash(map);
    map.attributionControl.addAttribution('<a href="https://github.com/tomchadwin/qgis2web" target="_blank">qgis2web</a>');
    var bounds_group = new L.featureGroup([]);
    var basemap0 = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        attribution: '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors,<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
        maxZoom: 28
    });
    basemap0.addTo(map);
    function setBounds() {
    }
    function pop_polygonlayer1_0(feature, layer) {
        var popupContent = '<table>\
                <tr>\
                    <th scope="row">id</th>\
                    <td>' + (feature.properties['id'] !== null ? Autolinker.link(String(feature.properties['id'])) : '') + '</td>\
                </tr>\
                <tr>\
                    <th scope="row">Name</th>\
                    <td>' + (feature.properties['Name'] !== null ? Autolinker.link(String(feature.properties['Name'])) : '') + '</td>\
                </tr>\
                <tr>\
                    <th scope="row">Code</th>\
                    <td>' + (feature.properties['Code'] !== null ? Autolinker.link(String(feature.properties['Code'])) : '') + '</td>\
                </tr>\
                <tr>\
                    <th scope="row">Type</th>\
                    <td>' + (feature.properties['Type'] !== null ? Autolinker.link(String(feature.properties['Type'])) : '') + '</td>\
                </tr>\
            </table>';
        layer.bindPopup(popupContent, {maxHeight: 400});
    }

    function style_polygonlayer1_0_0() {
        return {
            pane: 'pane_polygonlayer1_0',
            opacity: 1,
            color: 'rgba(0,0,0,1.0)',
            dashArray: '',
            lineCap: 'butt',
            lineJoin: 'miter',
            weight: 1.0, 
            fill: true,
            fillOpacity: 1,
            fillColor: 'rgba(255,207,32,0.701960784314)',
        }
    }
    map.createPane('pane_polygonlayer1_0');
    map.getPane('pane_polygonlayer1_0').style.zIndex = 400;
    map.getPane('pane_polygonlayer1_0').style['mix-blend-mode'] = 'normal';
    var layer_polygonlayer1_0 = new L.geoJson(json_polygonlayer1_0, {
        attribution: '<a href=""></a>',
        pane: 'pane_polygonlayer1_0',
        onEachFeature: pop_polygonlayer1_0,
        style: style_polygonlayer1_0_0,
    });
    bounds_group.addLayer(layer_polygonlayer1_0);
    map.addLayer(layer_polygonlayer1_0);
    function pop_polygonlayer2_1(feature, layer) {
        var popupContent = '<table>\
                <tr>\
                    <th scope="row">id</th>\
                    <td>' + (feature.properties['id'] !== null ? Autolinker.link(String(feature.properties['id'])) : '') + '</td>\
                </tr>\
                <tr>\
                    <th scope="row">Name</th>\
                    <td>' + (feature.properties['Name'] !== null ? Autolinker.link(String(feature.properties['Name'])) : '') + '</td>\
                </tr>\
                <tr>\
                    <th scope="row">Code</th>\
                    <td>' + (feature.properties['Code'] !== null ? Autolinker.link(String(feature.properties['Code'])) : '') + '</td>\
                </tr>\
                <tr>\
                    <th scope="row">Type</th>\
                    <td>' + (feature.properties['Type'] !== null ? Autolinker.link(String(feature.properties['Type'])) : '') + '</td>\
                </tr>\
            </table>';
        layer.bindPopup(popupContent, {maxHeight: 400});
    }

    function style_polygonlayer2_1_0() {
        return {
            pane: 'pane_polygonlayer2_1',
            opacity: 1,
            color: 'rgba(0,0,0,1.0)',
            dashArray: '',
            lineCap: 'butt',
            lineJoin: 'miter',
            weight: 1.0, 
            fill: true,
            fillOpacity: 1,
            fillColor: 'rgba(255,89,89,0.701960784314)',
        }
    }
    map.createPane('pane_polygonlayer2_1');
    map.getPane('pane_polygonlayer2_1').style.zIndex = 401;
    map.getPane('pane_polygonlayer2_1').style['mix-blend-mode'] = 'normal';
    var layer_polygonlayer2_1 = new L.geoJson(json_polygonlayer2_1, {
        attribution: '<a href=""></a>',
        pane: 'pane_polygonlayer2_1',
        onEachFeature: pop_polygonlayer2_1,
        style: style_polygonlayer2_1_0,
    });
    bounds_group.addLayer(layer_polygonlayer2_1);
    map.addLayer(layer_polygonlayer2_1);
    var baseMaps = {};
    L.control.layers(baseMaps,{'<img src="legend/polygonlayer2_1.png" /> polygonlayer2': layer_polygonlayer2_1,'<img src="legend/polygonlayer1_0.png" /> polygonlayer1': layer_polygonlayer1_0,},{collapsed:false}).addTo(map);
    setBounds();
    </script>

From what I've read here, I think I should probably use the point in polygon plugin?

This is my first week working with Leaflet and I am a bit lost. Thank you in advance.