从图层集合中 search/retrieve 原始容器 Leaflet 图层的最佳方法

Best way to search/retrieve the original container Leaflet Layer from a Collection of Layer

这是一个愚蠢的问题,在我的 leaflet/javascript 项目中我有一百层,(我没有创建,但我必须处理它),分为 LayerGroup、FeatureGroup、MarkerCluster 和 GeoJSON,我需要创建一个包含所有信息的单层根目录以进行一些研究,然后一旦找到信息,我想检索包含信息的单层。因此,为了制作合并层,我执行以下代码:

//My 100 Layer....
var library = new L.MarkerClusterGroup(/*some layer options*/);
var restaurant = new L.FeatureGroup(/*some layer options*/);
var house = new L.LayerGroup(/*some layer options*/);
var notClassified = new L.geoJson(content,/*some layer options*/);
//......

所以现在我想将所有这些图层合并到一个独特的图层,L.geoJson 和 L.MarkerClusterGroup 扩展了 L.FeatureGroup,L.FeatureGroup 扩展了 L.LayerGroup , 所以根层必须是 L.LayerGroup 除非有人有更好的建议:

var worldLayer = new L.LayerGroup(/*some layer options*/);
for(var layer in listOfAllLayers){
    worldlayer.addLayer(layer);
}
map.addLayer(worldLayer);

可选问题:这是最好的方法吗?

创建我的 worldLayer 后我做了一些研究,例如在世界层的 GeoJson 上跟踪分配给特定 L.Marker 或特定 Json 对象的 ID。所以我认为最好的方法是处理 WorldLayer 的 GeoJson 结果:

 //Get json content from the worldlayer Layer
var json = worldLayer.toGeoJSON();
var key =...,
var value = ..-;
for(var i =0; i < json.features.length; i++){
   var resulJson = searchJsonByKeyAndValue(json.features[i],key,value);
   //now work with resultJson....
}

//key is the id and the value is what i looking for e.g. 456
function searchJsonByKeyAndValue(json,key,value){
    for (var i = 0; i < json.length; i++) {
        try {
            if (json[i].hasOwnProperty(key)) {
                if (json[i][key] == value) {
                    return json[i];
                }
            }
        }catch(e){
            alert(e.message);
        }
    }
    return null;
}

可选问题 2:这是最好的方法吗?

我的问题:在其他信息中,有没有办法找到json对象信息的具体原始层?

例如 'worldLayer',我知道 'libraries' 中也存在特定信息,所以我想检索值 "libraries" 或对象层库。

现在我通过在特征 json 对象调用 "originLayers" 中向各个层的每个特征添加更多信息来解决问题,所以当我使用过程恢复 json 对象时我已经说明了,我什至恢复了想要的信息;但为此,我必须去分析所有层(不是很小)的 GeoJSON,并为每个单独的功能添加新信息。有其他方法可以改善一切吗?

提前感谢您的帮助。

我认为 the hasLayer method of layerGroup 是您需要的,而不是您的伪检索器函数来跟踪标记。

例如:

var map = map();
var a = layerGroup().addTo(map);
var b = featureGroup().addTo(a);
var c = featureGroup().addTo(a);
var marker = marker().addTo(b);

a.hasLayer(marker); // true
b.hasLayer(marker); // true
c.hasLayer(marker); // false