Group layers

View on GitHub
Sample viewer app

Group a collection of layers together and toggle their visibility as a group.

Group layers sample

Use case

Group layers communicate to the user that layers are related and can be managed together. In a land development project, you might group layers according to the phase of development.

How to use the sample

The layers in the map will be displayed in a table of contents. For project area group layers, toggle the switch next to a layer's name. For the buildings group layers, tap the cell to change its visibility. Turning a group layer's visibility off will override the visibility of its child layers.

How it works

  1. Create an AGSGroupLayer object.
  2. Add a child layer to the group layer's layers collection.
  3. Set the group layer's groupVisibilityMode to change its behavior:

    • independent allows each sublayer to change its visibility independently.
    • inherited treats the group layer as if it is one merged layer.
    • exclusive allows only one sublayer to be visible at a time.
  4. To toggle the visibility of the group, simply change the group layer's isVisible property.

Relevant API

  • AGSGroupLayer

Additional information

The full extent of a group layer may change when child layers are added/removed. Group layers do not have a spatial reference, but the full extent will have the spatial reference of the first child layer.

Group layers can be saved to web scenes. In web maps, group layers will be flattened in the web map's operational layers.

Tags

group layer, layers

Sample Code

GroupLayersSectionView.swiftGroupLayersViewController.swiftLayersTableViewController.swift
                                   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Copyright 2019 Esri.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import UIKit

final class GroupLayersSectionView: UITableViewHeaderFooterView {
    @IBOutlet var layerNameLabel: UILabel!
    @IBOutlet var layerVisibilitySwitch: UISwitch?
    weak var delegate: GroupLayersSectionViewDelegate?

    static let reuseIdentifier = String(describing: self)

    static var nib: UINib {
        return UINib(nibName: String(describing: self), bundle: nil)
    }

    @IBAction func toggleSwitch(_ sender: UISwitch) {
        delegate?.didToggleSwitch(self, isOn: sender.isOn)
    }
}

protocol GroupLayersSectionViewDelegate: AnyObject {
    func didToggleSwitch(_ sectionView: GroupLayersSectionView, isOn: Bool)
}

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.