【问题标题】:Getting the LayerGroup a layer belongs to with OpenLayers使用 OpenLayers 获取图层所属的图层组
【发布时间】:2020-08-06 12:56:21
【问题描述】:
我的地图中有很多 Tile Layers,它们都被组织成不同的组(有时它们甚至是嵌套的)。
我在 API 中看到有一个 getLayer() 方法来检索矢量特征所属的图层,以及一个 getLayerGroup() 来检索与地图关联的所有组。
但是,我在获取与图层关联的 layerGroup 时找不到任何信息。
假设我有这种情况:
var myGroup = new LayerGroup();
var myLayer = new TileLayer();
myGroup.getLayers().insertAt(0, myLayer);
有没有办法从myLayer 获取myGroup?
【问题讨论】:
标签:
javascript
openlayers
【解决方案1】:
要获取图层的父组需要编写自己的搜索功能,例如
function searchGroups(group, layer) {
var result;
var layers = group.getLayers().getArray();
for (var i = 0; i < layer.length; i++) {
if (layers[i] === layer) {
result = group;
} else if (layers[i] instanceof LayerGroup) {
result = searchGroup(layers[i], layer)
}
if (result) {
break;
}
}
return result;
}
然后调用
var myGroup = searchGroups(map.getLayerGroup(), mylayer);
您链接的getLayers() 函数仅适用于选择交互,如果没有对每个矢量图层中的特征进行类似搜索,您无法从随机特征确定它属于哪个层(并且它可能在多个层中)来源。
【解决方案2】:
我意识到这个问题已经得到解答,但或者,您也有图层的属性属性,因此您可以将一组组名称添加到图层本身。例如:
let parent_group = "parent_group";
let sub_group = "sub_group";
let group = new LayerGroup({
name: parent_group,
layers: [
new LayerGroup({
name: sub_group,
layers: [
new TileLayer() {
properties: [
parent_group,
sub_group
]
}
]
})
]
})
然后,只需查找图层名称并查找其属性数组 - 最初设置可能有点麻烦,但它可以省去递归搜索 layerGroups 的麻烦。