【问题标题】: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 的麻烦。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多