View on GitHub Sample viewer app

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

Image of group layers

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. Toggle the checkbox next to a layer’s name 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 empty GroupLayer.
  2. Add a child layer to the group layer’s layers collection.
  3. Set the group layer’s GroupVisibilityMode to change its behavior.
  • GroupVisibilityMode.INDEPENDENT allows each sublayer to change its visibility independently.
  • GroupVisibilityMode.EXCLUSIVE allows only one sublayer to be visible at a time.
  • GroupVisibilityMode.INHERITED treats the group layer as if it is one merged layer.
  1. To toggle the visibility of the group, simply change the group layer’s visibility property using layer.setVisible(boolean).

Relevant API

  • GroupLayer
  • GroupVisibilityMode

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 ignored.

The implementation shown here makes use of a custom tree cell for displaying layers in a tree view. In the custom tree cell, toggling the checkbox of the group layer cell does not also toggle the child cell’s checkbox. If you desire this behavior, use or extend JavaFX’s CheckBoxTreeCell and CheckBoxTreeItem.

Tags

group layer, layers

Sample Code

module-info.java module-info.java GroupLayersSample.java LayerTreeCell.java
/*
* Copyright 2022 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.
*/
module com.esri.samples.group_layers {
// require ArcGIS Maps SDK for Java module
requires com.esri.arcgisruntime;
// handle SLF4J http://www.slf4j.org/codes.html#StaticLoggerBinder
requires org.slf4j.nop;
// require JavaFX modules that the application uses
requires javafx.graphics;
requires javafx.controls;
exports com.esri.samples.group_layers;
}