ArcGIS Runtime SDK for Java

Add a layer

There are two common roles for layers:

  • Basemap layers - provide context (a background) for your data
  • Operational layers - the map data actively in use

For example, a map of a utility network might show pipes in an operational layer and a street map background (basemap) to make it clear which houses those pipes serve.

To learn more about layer concepts, see Layers and tables. To learn about supported layer types and the details for each, see Layer types described.

If you want to quickly visualize data that's available to your app, but don't want to store it in an ArcGIS portal or a layer, consider using graphics.

Operational layers

Maps and scenes expose an operational layers property, which is a collection of layers. You can add and remove layers from the map's operational layers.

ArcGISMap map = new ArcGISMap();
map.getOperationalLayers().add(someLayer);
map.getOperationalLayers().remove(someLayer);

Basemap layers

Basemaps exposes a 'base layers' property, which contains all of the layers in the basemap. The getBaseLayers method can be accessed through the basemap on maps and scenes. Note that using a basemap for all your maps is recommended, when a suitable one is available. Some examples of basemaps that can be created using static factory methods are:

  • World imagery
  • World streets
  • National geographic
  • World navigation (vector)
  • World streets (vector)

// Use the navigation basemap constructor
ArcGISMap map = new ArcGISMap(Basemap.createNavigationVector());
// or
map.setBasemap(Basemap.createNavigationVector());
// or
map.getBasemap().getBaseLayers().add(someBasemapLayer);

Copying layers

A layer can only ever be added once to a single map or scene. If you add a layer already in one map or scene to another map or scene then an error will occur: Object is already owned. To use the same layer in more than one map or scene you have a few options:

  • If you need the layer to be in two map or scene objects (or one of each!) you can add a copy of the layer to your second map or scene.
    // add the layer to the operational layers of the first map
    firstMap.getOperationalLayers().add(featureLayer);
    
    // add a copy of the layer to the operational layers of the second map
    secondMap.getOperationalLayers().add(featureLayer.copy());
    Note:
    The copy method takes deep copy of the specific layer type, rather than the Layer base class. Any changes made to the original layer will not be reflected in the copied version of the layer.
  • You could make a new layer from the original source data. However, this is not the recommended approach, since it would require accessing the underlying data source twice. For example, in the case of layers made from an online source, it would mean accessing the associated service twice.
  • If you no longer need the layer in your first map or scene then remove the layer from the first map or scene and add it to the second map or scene
    firstMap.getOperationalLayers().remove(featureLayer);
    
    secondMap.getOperationalLayers().add(featureLayer));