在各种单独的多边形之外屏蔽 Leaflet 地图时的奇怪行为

Strange behavior when masking a Leaflet map outside of a variety of separate polygons

受到 http://embed.plnkr.co/1I7dIw/ 的启发,我试图掩盖地图上各种多边形之外的其余部分。但是我似乎在顶点方面遇到了一些挑战。会不会是一些多边形没有关闭,所以遮罩在开始/停止时挣扎?在每个多边形内,起点/终点相同。

或者问题出在脚本上,即 L.mask?

L.Mask = L.Polygon.extend({

    options: {
        stroke: false,
        color: '#333',
        fillOpacity: 0.5,
        clickable: true,
        outerBounds: new L.LatLngBounds([-90, -360], [90, 360])
    },

    initialize: function (latLngs, options) {    

         var outerBoundsLatLngs = [
            this.options.outerBounds.getSouthWest(),
            this.options.outerBounds.getNorthWest(),
            this.options.outerBounds.getNorthEast(),
            this.options.outerBounds.getSouthEast()
        ];

        L.Polygon.prototype.initialize.call(this, [outerBoundsLatLngs, latLngs], options);  
    }

});

L.mask = function (latLngs, options) {
    return new L.Mask(latLngs, options);
};

寻求任何可能的帮助。

演示 ... https://jsfiddle.net/q7wo0ndf/7/(抱歉负载过重)

L.maskClass正确,你的数据有问题

让传单为您效劳:

var sanbartolome_001 = ...;
var sanbartolome_002 = ...;
...

var options = {
    style: function(feature) {
        return {
            "color": "black",
            "weight": 3,
            "opacity": 1,
            "fillColor": "transparent",
            "fillOpacity": 0.0
        };
    }
};

var latLngs = [];

var rfc_nerfc_001 = new L.geoJson(sanbartolome_001.features, options).addTo(map);
var rfc_nerfc_002 = new L.geoJson(sanbartolome_002.features, options).addTo(map);
var rfc_nerfc_003 = new L.geoJson(sanbartolome_003.features, options).addTo(map);
var rfc_nerfc_004 = new L.geoJson(sanbartolome_004.features, options).addTo(map);
var rfc_nerfc_005 = new L.geoJson(sanbartolome_005.features, options).addTo(map);


latLngs.push(rfc_nerfc_001.getLayers()[0].getLatLngs());
latLngs.push(rfc_nerfc_002.getLayers()[0].getLatLngs());
latLngs.push(rfc_nerfc_003.getLayers()[0].getLatLngs());
latLngs.push(rfc_nerfc_004.getLayers()[0].getLatLngs());
latLngs.push(rfc_nerfc_005.getLayers()[0].getLatLngs());

var rfc_nerfc_000 = L.mask(latLngs).addTo(map);