Class WmtsLayer

  • All Implemented Interfaces:
    RemoteResource, LayerContent, Loadable

    public final class WmtsLayer
    extends ImageTiledLayer
    implements RemoteResource
    Displays data from a WMTS service by using pre-generated tiles.

    Web Map Tile Service (WMTS) is an Open GeospatialConsortium (OGC) standard for delivering geographic data via raster tiles. ArcGIS Runtime supports WMTS 1.0.0. The service may be hosted in the cloud on ArcGIS Online, on a third party server, or on-premises with ArcGIS Server.

    A WMTS layer uses pre-generated tiles to create a map instead of dynamically generating map images.

    Functional characteristics

    The maps provided by a WMTS service use predefined symbology defined by the server. As a result, it is not possible to apply custom renderers or to visualize feature selection.

    A WMTS service can contain multiple layers in a hierarchy. A WMTS layer can be constructed directly with a URL to a service and the uniquely identifying name of the desired layer. Alternatively, a WMTS service can be used to programmatically explore the available layers and allow the user to choose layers at run time.

    Performance characteristics

    WMTS layer consumes raster tiles that were prerendered by a server. WMTS requires fewer server resources than WMS because the images are rendered and cached ahead of time. WMTS layer requires a connection to the service at all times.

    Creating a WTMS layer from URL

    For some WMTS services it may be necessary to provide a direct URI to the getCapabilities resource, by appending either /1.0.0/WMTSCapabilities.xml or ?service=wmts&request=getCapabilities&version=1.0.0 to the root WMTS URI.

    Example for working with WMTS layer

     final WmtsLayer wmtsLayer = new WmtsLayer(
               "http://sampleserver6.arcgisonline.com/arcgis/rest/services/WorldTimeZones/MapServer/WMTS?", "WorldTimeZones");
    
     wmtsLayer.addDoneLoadingListener(() -> {
       if (wmtsLayer.getLoadStatus() == LoadStatus.LOADED) {
         // work with WMTS layer here
       }
     });
     map.getOperationalLayers().add(wmtsLayer);
     
    The layer is loaded when displayed in a MapView or a SceneView; if using the layer without a MapView or a SceneView, call the Layer.loadAsync() method. Use the layer done loading event to determine when the layer is ready, and check the loaded status before using the layer.
    Since:
    100.1.0
    See Also:
    Layer, ImageTiledLayer, WmtsService, WmtsServiceInfo, WmtsLayerInfo, WmtsTileMatrixSet, Layer
    • Constructor Detail

      • WmtsLayer

        public WmtsLayer​(java.lang.String url,
                         java.lang.String layerId)
        Creates an instance of WmtsLayer from a url and a layer ID.
        Parameters:
        url - the WMTS layer URL
        layerId - layer ID
        Throws:
        java.lang.IllegalArgumentException - if url is null or empty
        java.lang.IllegalArgumentException - if layerId is null or empty
        Since:
        100.1.0
      • WmtsLayer

        public WmtsLayer​(java.lang.String url,
                         java.lang.String layerId,
                         TileInfo.ImageFormat preferredImageFormat)
        Creates an instance of WmtsLayer from a URL, layer ID, and a preferred image format.
        Parameters:
        url - the WMTS layer URL
        layerId - layer ID
        preferredImageFormat - preferred image format
        Throws:
        java.lang.IllegalArgumentException - if url is null or empty
        java.lang.IllegalArgumentException - if layerId is null or empty
        java.lang.IllegalArgumentException - if preferredImageFormat is null
        Since:
        100.1.0
      • WmtsLayer

        public WmtsLayer​(java.lang.String url,
                         java.lang.String layerId,
                         java.lang.String tileMatrixSetId)
        Creates an instance of WmtsLayer from a URL, layer ID, and a tile matrix set ID.
        Parameters:
        url - the WMTS layer URL
        layerId - layer ID
        tileMatrixSetId - tile matrix set ID
        Throws:
        java.lang.IllegalArgumentException - if url is null or empty
        java.lang.IllegalArgumentException - if layerId is null or empty
        java.lang.IllegalArgumentException - if tileMatrixSetId is null or empty
        Since:
        100.1.0
      • WmtsLayer

        public WmtsLayer​(java.lang.String url,
                         java.lang.String layerId,
                         java.lang.String tileMatrixSetId,
                         TileInfo.ImageFormat preferredImageFormat)
        Creates an instance of WmtsLayer from a URL, layer ID, tile matrix set ID, and a preferred image format.
        Parameters:
        url - the WMTS layer URL
        layerId - layer ID
        tileMatrixSetId - tile matrix set ID
        preferredImageFormat - preferred image format
        Throws:
        java.lang.IllegalArgumentException - if url is null or empty
        java.lang.IllegalArgumentException - if layerId is null or empty
        java.lang.IllegalArgumentException - if tileMatrixSetId is null or empty
        java.lang.IllegalArgumentException - if preferredImageFormat is null
        Since:
        100.1.0
      • WmtsLayer

        public WmtsLayer​(WmtsLayerInfo layerInfo)
        Creates an instance of WmtsLayer from a WmtsLayerInfo.
        Parameters:
        layerInfo - layer info
        Throws:
        java.lang.IllegalArgumentException - if layerInfo is null
        Since:
        100.1.0
      • WmtsLayer

        public WmtsLayer​(WmtsLayerInfo layerInfo,
                         TileInfo.ImageFormat preferredImageFormat)
        Creates an instance of WmtsLayer from a WmtsLayerInfo, and a preferred image format.
        Parameters:
        layerInfo - layer info
        preferredImageFormat - preferred image format
        Throws:
        java.lang.IllegalArgumentException - if layerInfo is null
        java.lang.IllegalArgumentException - if preferredImageFormat is null
        Since:
        100.1.0
      • WmtsLayer

        public WmtsLayer​(WmtsLayerInfo layerInfo,
                         WmtsTileMatrixSet tileMatrixSet)
        Creates an instance of WmtsLayer from a WmtsLayerInfo, and a tile matrix set.
        Parameters:
        layerInfo - layer info
        tileMatrixSet - tile matrix set
        Throws:
        java.lang.IllegalArgumentException - if layerInfo is null
        java.lang.IllegalArgumentException - if tileMatrixSet is null
        Since:
        100.1.0
      • WmtsLayer

        public WmtsLayer​(WmtsLayerInfo layerInfo,
                         WmtsTileMatrixSet tileMatrixSet,
                         TileInfo.ImageFormat preferredImageFormat)
        Creates an instance of WmtsLayer from a WmtsLayerInfo, tile matrix set, and a preferred image format.
        Parameters:
        layerInfo - layer info
        tileMatrixSet - tile matrix set
        preferredImageFormat - preferred image format
        Throws:
        java.lang.IllegalArgumentException - if layerInfo is null
        java.lang.IllegalArgumentException - if tileMatrixSet is null
        java.lang.IllegalArgumentException - if preferredImageFormat is null
        Since:
        100.1.0
    • Method Detail

      • copy

        public WmtsLayer copy()
        Creates a deep copy of this WmtsLayer instance.
        Returns:
        a deep copy of this WmtsLayer instance, which means that copies of all fields of this layer are made including its loading state
        Since:
        100.1.0
      • getPreferredImageFormat

        public TileInfo.ImageFormat getPreferredImageFormat()
        Gets the preferred image format.

        Note that this will return the value you specified in the constructor, not necessarily what the service returned.

        Returns:
        the preferred image format
        Since:
        100.1.0
      • getLayerInfo

        public WmtsLayerInfo getLayerInfo()
        Gets the layer info.
        Returns:
        the layer info
        Since:
        100.1.0
      • getLayerId

        public java.lang.String getLayerId()
        Gets the layer ID that was used to construct this layer.
        Returns:
        the layer ID that was used to construct this layer
        Since:
        100.1.0
      • getTileMatrixSet

        public WmtsTileMatrixSet getTileMatrixSet()
        Gets the tile matrix set.
        Returns:
        the tile matrix set
        Since:
        100.1.0
      • getCustomParameters

        public java.util.Map<java.lang.String,​java.lang.String> getCustomParameters()
        Gets a Map containing custom parameters that are applied to all GetTile requests related to this layer. Modify this Map to change the parameters that are used. If a parameter with the same name is defined in the service's custom parameters, then layer-specific values take precedence over service-wide values.
        Returns:
        a modifiable Map; the keys are parameters names and the values are parameters values
        Since:
        100.6.0
      • setCredential

        public void setCredential​(Credential credential)
        Description copied from interface: RemoteResource
        Sets a Credential to be used by the network-enabled resource in the event of an authentication challenge. The default credential is null.

        Only applicable if the resource is secured.

        Specified by:
        setCredential in interface RemoteResource
        Parameters:
        credential - the Credential to be used for authentication
      • getCredential

        public Credential getCredential()
        Description copied from interface: RemoteResource
        Gets the Credential that is set on the network-enabled resource.

        Only applicable if the resource is secured.

        Specified by:
        getCredential in interface RemoteResource
        Returns:
        the Credential, or null if there is none
      • getUri

        public java.lang.String getUri()
        Gets the URL of the WMTS layer.
        Specified by:
        getUri in interface RemoteResource
        Returns:
        the URL of the WMTS layer
        Since:
        100.1.0
      • getTile

        protected byte[] getTile​(TileKey tileKey)
        Description copied from class: ImageTiledLayer
        Gets the encoded bytes that represents a tile for the given tile key. The encoding must match TileInfo specified in the constructor ImageTiledLayer(TileInfo, Envelope).
        Specified by:
        getTile in class ImageTiledLayer
        Parameters:
        tileKey - key for the expected tile
        Returns:
        the encoded bytes that represent the tile for the given tile key