如何使用一个L.Shapefile / zip文件对象,但如何更改每一层的onEachFeature?

问题描述 投票:0回答:1

我目前遇到的问题是,我有多个包含形状文件的tileLayer。每个图块层基于某个变量表示一个不同的数据集,并相应地更改颜色。

如果我创建三个单独的Objects(L.shapefile(“”,{})...)并将其放入相应的层,则可以使它正常工作。问题是我的shapefile很大,只有12MB​​。当我这样做时,它将下载文件3次。

我将如何下载一次zip文件,然后从该下载中创建3个实例?

    shpfile = new L.Shapefile('/mydata/shpfile.zip', {
        onEachFeature: function (feature, layer) {
            console.log(feature, layer)
            if (feature.properties) {
                var data_name = feature.properties.Name;
                val = -1
                if (data)
                    val = data[days+'DAY']
                if (val==-1)
                    val="No Data";
                var tooltip_Html = data_name + "<hr>" + days + " " + val;
                layer.bindPopup(tooltip_Html, {
                    maxHeight: 200
                });
                layer.prop = {data_name , days};
                layer.setStyle({fillColor : getColor(val), 
                                color: "black",
                                weight: 1,
                                opacity: 1,
                                fillOpacity: 0.3
                                });
                layer.on("click", layerClick);
                if (vw>768) {
                    layer.on("mouseover", function () {
                            info.update(layer.prop);
                            layer.bindTooltip('<b>'+layer.prop.loc + '</b> Name<br>' + layer.prop.val);
                    });
                    layer.on("mouseout", function () {
                        info.update();
                    });
                }
            }
        }});

    shpfile.once("data:loaded", function() {
        console.log("Shape File Downloaded! "+ days + ' days');
      /* Tried this method of creating oneachfeature dynamically 
shpfile.onEachFeature(function(feature, layer) {
            var layerName;
        });

        */
    });
    L.tileLayer(mapboxUrl, {id: 'mapbox.streets', attribution: mbAttr}).addTo(shpfile)```

javascript leaflet shapefile
1个回答
0
投票

让我引用Leaflet.shapefile readme

用法:

new L.Shapefile(arrayBuffer or url[,options][,importUrl]);

L.shapefile(arrayBuffer or url[,options][,importUrl]);

因此,可以提供指向shapefile的URL,或者具有压缩shapefile内容的ArrayBuffer

所以现在的问题是:如何创建外部文件的ArrayBuffer?有几种方法,但我只涉及arrayBufferfetch API功能,例如

fetch
© www.soinside.com 2019 - 2024. All rights reserved.