Javascript 在各种独立多边形之外遮罩传单贴图时的奇怪行为

Javascript 在各种独立多边形之外遮罩传单贴图时的奇怪行为,javascript,leaflet,polygon,masking,Javascript,Leaflet,Polygon,Masking,受此启发,我尝试在各种多边形之外遮罩贴图的其余部分。但我似乎在顶点方面遇到了一些挑战。可能是因为某些多边形没有闭合,所以遮罩在开始/停止时遇到困难?在每个多边形内,起点/终点相同 或者问题在于脚本,即L.mask L.Mask = L.Polygon.extend({ options: { stroke: false, color: '#333', fillOpacity: 0.5, clickable: true,

受此启发,我尝试在各种多边形之外遮罩贴图的其余部分。但我似乎在顶点方面遇到了一些挑战。可能是因为某些多边形没有闭合,所以遮罩在开始/停止时遇到困难?在每个多边形内,起点/终点相同

或者问题在于脚本,即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);
};
寻找任何可能的帮助


演示。。。(很抱歉负重)

L.mask
类是正确的,您的数据有问题

让传单为您服务:

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);

哇,说真的,谢谢你!那太让我难以忍受了。有趣的是,操作顺序是如何改变的。所以我们生成了多边形,然后创建了遮罩,而不是反之亦然?然后获取图层的ID并返回路径中的点数组,然后将其传递给L.mask?这是否只是利用数据绕过错误来创建闭合多边形,然后有效地传递?只是试着去理解。再次感谢你!更新小提琴。。。我不完全理解你的评论,但我试着解释一下。这并不复杂。下面将替换您的循环以获取latlngs:使用L.geojson,我们将geojson字符串转换为传单层,然后从新geojsonLayer中唯一的层获取latlngs,并将其添加到latlngs数组中。我们这样做是因为传单有更好的逻辑将geojson转换为latlngs。然后我们创建L.mask,使用与前面相同的latlngs数组。没有身份证…收到了,我想我明白了。再次感谢您在这方面的帮助!