## org.opengis.layer
Interface Layer

    @XmlElement(value="Layer")
    public interface Layer

Organizes the basic GO-1 constructs that may be added to `FeatureCanvas` or `Canvas`. A GO-1 application may be directed to "add" a `Layer`; it should then add the `Layer`'s `FeatureLayer` and `Graphic`s to the respective canvases.

### Mutability

In current version, layers are unmodifiable, i.e. they can't be modified through the API provided in this interface, but they are not immutable because they may (or may not, at implementor choice) reflect a change in the underlying database. This means that all methods returning a collection must returns either an unmodifiable one, or a copy. Modifying returned collections should have no affect on this `Layer`.

Note that the mutability aspect of `Layer` may be revisited in future versions, so users are encouraged to not rely strongly on current behavior.

Since:
  GeoAPI 2.0
Version:
  Implementation specification 1.3

Method Summary
`InternationalString` `getAbstract()` Provides the narrative description of this `Layer`.
`Attribution` `getAttribution()` Provides the attribution for this `Layer`, which identifies the source of the geographic information used in this layer.
`List<AuthorityURL>` `getAuthorityURLs()` Provides the authority URLs named in this `Layer`'s identifiers.
`Collection<Envelope>` `getBoundingBoxes()` Provides the bounding boxes that specify the coordinate ranges for this `Layer`, as `Envelope`s, including bounding boxes inherited from parent `Layer`s.
`int` `getCascaded()` Indicates how many times this `Layer` has been cascaded.
`Set<CoordinateReferenceSystem>` `getCRSs()` Provides the coordinate reference systems available to this `Layer`, which includes CRSs inherited from parent `Layer`s.
`List<DataURL>` `getDataURLs()` Provides the data URLs that offer links to the underlying data represented by this `Layer`.
`List<FeatureLayer>` `getFeatureLayers()` Gets the feature layers from this `Layer` that are suitable for adding to a `FeatureCanvas` in order to visually represent this `Layer`.
`List<FeatureListURL>` `getFeatureListURLs()` Provides the feature URLs that point to a list of features represented in this `Layer`.
`int` `getFixedHeight()` Indicates that this `Layer` is not able to produce a map with a height different from the fixed height indicated.
`int` `getFixedWidth()` Indicates that this `Layer` is not able to produce a map with a width different from the fixed width indicated.
`GeographicBoundingBox` `getGeographicBoundingBox()` Provides the geographic bounding box that specify the longitude and latitude ranges for this `Layer`.
`List<Graphic>` `getGraphics()` Gets the graphics from this `Layer` that are suitable for adding to a `Canvas` in order to visually represent this `Layer`.
`List<Identifier>` `getIdentifiers()` Provides the identifiers containing ID numbers or labels defined by a particular authority.
`List<InternationalString>` `getKeywordList()` Provides keywords to aid in catalogue searches.
`List<Layer>` `getLayers()` Gets the child layers of this `Layer`.
`double` `getMaxScaleDenominator()` Provides the upper bound for the range of scales for which it is appropriate to generate a map for this `Layer`.
`List<MetadataURL>` `getMetadataURLs()` Provides the Metadata URLs that offer detailed, standardized metadata about the data for this `Layer`.
`double` `getMinScaleDenominator()` Provides the lower bound for the range of scales for which it is appropriate to generate a map for this `Layer`.
`String` `getName()` Provides a unique name for identifying this `Layer`.
`List<Style>` `getStyles()` Provides the styles that may be requested for this `Layer`.
`InternationalString` `getTitle()` Provides the human-readable string for presenting this `Layer`.
`boolean` `isNoSubsets()` Indicates that this `Layer` is not able to produce a map of a geographic area other than this layer's declared bounding box.
`boolean` `isOpaque()` Indicates whether this `Layer`'s renderable data should be considered opaque, and therefore requested at the bottom of a stack of maps.
`boolean` `isQueryable()` Indicates whether the `GetFeatureInfo` operation is supported on this `Layer`.

Method Detail

### getName

    @XmlElement(value="Name")
    String getName()

  Provides a unique name for identifying this `Layer`. If, and only if, a layer has a name, then it is a map layer that can be requested by using that name in the `LAYERS` parameter of a `GetMap` request. A layer that contains a `Name` element is referred to as a named layer. If the layer has a title but no name, then that layer is only a category title for all the layers nested within. A Map Server that advertises a layer containing a name element shall be able to accept that name as the value of `LAYERS` argument in a `GetMap` request and return the corresponding map. A client shall not attempt to request a layer that has a title but no name.

  The name is not inherited by child layers.

  Returns:
    the unique string identifier for this `Layer`.

### getTitle

    @XmlElement(value="Title")
    InternationalString getTitle()

  Provides the human-readable string for presenting this `Layer`. Equivalent to `Citation.getTitle()` in ISO 19115.

  Returns:
    the human-readable title for this `Layer`.

### getAbstract

    @XmlElement(value="Abstract")
    InternationalString getAbstract()

  Provides the narrative description of this `Layer`. Equivalent to `Identification.getAbstract()` in ISO 19115. The abstract is not inherited by child layers.

  Returns:
    the narrative description of this `Layer`.

### getKeywordList

    @XmlElement(value="KeywordList")
    List<InternationalString> getKeywordList()

  Provides keywords to aid in catalogue searches. Equivalent to `TopicCategory` in ISO 19115 if the `vocabulary` attribute of `Keyword` element is "ISO19115:2003". Other vocabularies are permitted. The keywords are not inherited by child layers.

  The returned `List` (if modifiable) should not be live, and modifying it should not affect this `Layer`'s set of keywords.

  Returns:
    this `Layer`'s keyword list.

### getCRSs

    @XmlElement(value="CRS")
    Set<CoordinateReferenceSystem> getCRSs()

  Provides the coordinate reference systems available to this `Layer`, which includes CRSs inherited from parent `Layer`s. In order to indicate what layer CRSs are available, every named layer shall have at least one CRS. The root layer shall include a sequence of zero or more CRS elements listing all CRSs that are common to all subsidiary layers. A child layer may optionally add to the list inherited from a parent layer.

  If CRS and bounding boxes are backed by a `Map<CoordinateReferenceSystem,Envelope>` (from the J2SE collection framework), then the CRSs are the ket set of the above-cited map.

  This `Set` (if modifiable) should not be live, and modifying it should not affect this `Layer`'s set of CRSs.

  Returns:
    this `Layer`'s coordinate reference systems.

### getBoundingBoxes

    @XmlElement(value="BoundingBox")
    Collection<Envelope> getBoundingBoxes()

  Provides the bounding boxes that specify the coordinate ranges for this `Layer`, as `Envelope`s, including bounding boxes inherited from parent `Layer`s. Equivalent to `BoundingPolygon` in ISO 19115, except that it is strictly a box here.

  A layer may have multiple bounding box elements, but each one shall state a different CRS. A bounding box inherited from the parent layer for a particular CRS is replaced by any declaration for the same CRS in the child layer. A bounding box in the child for a new CRS not already declared by the parent is added to the list of bounding boxes for the child layer. A single layer element shall not contain more than one bounding box for the same CRS.

  NOTE: There is no provision for describing disjoint bounding boxes. For example, consider a dataset which covers two areas separated by some distance. The server cannot provide two separate bounding boxes in the same layer using the same CRS to separately describe those areas. To handle this type of situation, the server may either define a single larger bounding box which encloses both areas, or may define two separate layers that each have distinct name and bounding box values.

  A layer shall not provide a bounding box for a CRS it does not support. Conversely, a layer may support CRSs for which it does not provide a bounding box: a server that has the ability to transform data to different CRSs may choose not to provide an explicit bounding box for every possible CRS available for each layer. The server should provide bounding box information for at least the native CRS of the layer (that is, the CRS in which the layer is stored in the server's database).

  If CRS and bounding boxes are backed by a `Map<CoordinateReferenceSystem,Envelope>` (from the J2SE collection framework), then the bounding boxes are the values of the above-cited map.

  This `Collection` (if modifiable) should not be live, and modifying it should have no affect on this `Layer`'s set of bounding boxes.

  Returns:
    this `Layer`'s bounding box envelopes.

### getGeographicBoundingBox

    @XmlElement(value="GeographicBoundingBox")
    GeographicBoundingBox getGeographicBoundingBox()

  Provides the geographic bounding box that specify the longitude and latitude ranges for this `Layer`. Every named layer shall have exactly one geographic bounding box that is either stated explicitly or inherited from a parent layer. Geographic bounding box states, via the west bound longitude, east bound longitude, south bound latitude, and north bound latitude, the minimum bounding rectangle in decimal degrees of the area covered by the layer. Geographic bounding box shall be supplied regardless of what CRS the map server may support, but it may be approximate if the data are not natively in geographic coordinates. The purpose of beographic bounding box is to facilitate geographic searches without requiring coordinate transformations by the search engine.

  This method is conceptually similar to a bounding box in which the CRS is implicitly CRS:84. However, Geographic bounding box shall not be used as a substitute for `<BoundingBox CRS="CRS:84">`. If the server wishes to provide bounding box information in the CRS:84 CRS, then a separate bounding box element explicitly naming CRS:84 shall be included in the service metadata.

### getAttribution

    @XmlElement(value="Attribution")
    Attribution getAttribution()

  Provides the attribution for this `Layer`, which identifies the source of the geographic information used in this layer. This is partially equivalent to `ResponsibleParty` in ISO 19115. The attribution is inherited by child layers. Any redefinition by a child replaces the inherited value.

  Returns:
    this `Layer`'s attribution.

### getAuthorityURLs

    @XmlElement(value="AuthorityURL")
    List<AuthorityURL> getAuthorityURLs()

  Provides the authority URLs named in this `Layer`'s identifiers. Equivalent to `Contact.getOnLineResource()` in ISO 19115.

  The returned `List` (if modifiable) should not be live, and modifying it should have no affect on this `Layer`'s set of authority URLs.

  Returns:
    this `Layer`'s authority URLs.

### getIdentifiers

    @XmlElement(value="Identifier")
    List<Identifier> getIdentifiers()

  Provides the identifiers containing ID numbers or labels defined by a particular authority. Equivalent to `Identifier.getCode()` in ISO 19115.

  The returned `List` (if modifiable) should not be live, and modifying it should have no affect on this `Layer`'s set of identifiers.

  Returns:
    this `Layer`'s identifiers.

### getMetadataURLs

    @XmlElement(value="MetadataURL")
    List<MetadataURL> getMetadataURLs()

  Provides the Metadata URLs that offer detailed, standardized metadata about the data for this `Layer`.

  The returned `List` (if modifiable) should not be live, and modifying it should have no affect on this `Layer`'s set of metadata URLs.

  Returns:
    this `Layer`'s metadata URLs.

### getDataURLs

    @XmlElement(value="DataURL")
    List<DataURL> getDataURLs()

  Provides the data URLs that offer links to the underlying data represented by this `Layer`. Data URLs are not inherited by child layers.

  The returned `List` (if modifiable) should not be live, and modifying it should have no affect on this `Layer`'s set of data URLs.

  Returns:
    this `Layer`'s data URLs.

### getFeatureListURLs

    @XmlElement(value="FeatureListURL")
    List<FeatureListURL> getFeatureListURLs()

  Provides the feature URLs that point to a list of features represented in this `Layer`. Feature URLs are not inherited by child layers.

  The returned `List` (if modifiable) should not be live, and modifying it should have no affect on this `Layer`'s feature list URLs.

  Returns:
    this `Layer`'s feature list URLs.

### getStyles

    @XmlElement(value="Style")
    List<Style> getStyles()

  Provides the styles that may be requested for this `Layer`. Zero or more styles may be advertised for a layer or collection of layers, each of which shall have name and title. The style's name is used in the Map request `STYLES` parameter. The title is a human-readable string. If only a single style is available, that style is known as the "default" style and need not be advertised by the server.

  Style declarations are inherited by child layers. A child shall not redefine a style with the same name as one inherited from a parent. A child may define a new style with a new name that is not available for the parent layer.

  The returned `List` (if modifiable) should not be live, and modifying it should have no affect on this `Layer`'s styles.

  Returns:
    this `Layer`'s styles.

### getMinScaleDenominator

    @XmlElement(value="MinScaleDenominator")
    double getMinScaleDenominator()

  Provides the lower bound for the range of scales for which it is appropriate to generate a map for this `Layer`. See "Scale denominators" section in package description. A value of 0 indicates this `Layer` has no minimum scale denominator. Negative values are not allowed.

  Returns:
    the minimum scale denominator, inclusive.

### getMaxScaleDenominator

    @XmlElement(value="MaxScaleDenominator")
    double getMaxScaleDenominator()

  Provides the upper bound for the range of scales for which it is appropriate to generate a map for this `Layer`. See "Scale denominators" section in package description. A value of `Double.POSITIVE_INFINITY` indicates this `Layer` has no maximum scale denominator.

  Returns:
    the maximum scale denominator, exclusive.

### getLayers

    List<Layer> getLayers()

  Gets the child layers of this `Layer`. Typically, a `Layer` will have either child `Layer`s or some combination of `FeatureLayer`s and/or `Graphic`s.

  The returned `List` (if modifiable) should not be a live list. Modifying the list should have no affect on this `Layer`'s child layers.

  Returns:
    the child layers.

### isQueryable

    @XmlElement(value="queryable")
    boolean isQueryable()

  Indicates whether the `GetFeatureInfo` operation is supported on this `Layer`. A server may support `GetFeatureInfo` on some of its layers but not on all. A server shall issue a service exception ("LayerNotQueryable") if `GetFeatureInfo` is requested on a layer that is not queryable.

  Returns:
    `true` if this `Layer` supports `GetFeatureInfo`.

### getCascaded

    @XmlElement(value="cascaded")
    int getCascaded()

  Indicates how many times this `Layer` has been cascaded. A layer is said to have been "cascaded" if it was obtained from an originating server and then included in the service metadata of a different server. The second server may simply offer an additional access point for the layer, or may add value by offering additional output formats or reprojection to other coordinate reference systems.

  If a WMS cascades the content of another WMS then it shall increment by 1 the value of the cascaded attribute for the affected layers. If that attribute is missing from the originating server's service metadata, then the cascading WMS shall insert the attribute and set it to 1.

  Returns:
    how many times this `Layer` has been cascaded.

### isOpaque

    @XmlElement(value="opaque")
    boolean isOpaque()

  Indicates whether this `Layer`'s renderable data should be considered opaque, and therefore requested at the bottom of a stack of maps. If `false`, then maps made from that layer will generally have significant no-data areas that a client may display as transparent. Vector features such as points and lines are considered not to be opaque in this context (even though at some scales and symbol sizes a collection of features might fill the map area). A `true` value for opaque indicates that the layer represents an area-filling coverage. For example, a map that represents topography and bathymetry as regions of differing colours will have no transparent areas. The opaque declaration should be taken as a hint to the client to place such a layer at the bottom of a stack of maps.

  This attribute describes only the layer's data content, not the picture format of the map response. Whether or not a layer is listed as opaque, a server shall still comply the `GetMap` `TRANSPARENT` parameter: that is, the server shall send an image with a transparent background if and only if the client requests `TRANSPARENT=TRUE` and a picture `FORMAT` that supports transparency.

  Returns:
    `true` if this `Layer`'s data is mostly opaque.

### isNoSubsets

    @XmlElement(value="noSubsets")
    boolean isNoSubsets()

  Indicates that this `Layer` is not able to produce a map of a geographic area other than this layer's declared bounding box. For example, a WMS that houses a collection of digitized images of historical maps, or pre-computed browse images of satellite data, may not be able to subset or resize those images. However, it can still respond to `GetMap` requests for complete maps in the original size.

  Returns:
    `true` if this `Layer` is not able to display subsets.

### getFixedWidth

    @XmlElement(value="fixedWidth")
    int getFixedWidth()

  Indicates that this `Layer` is not able to produce a map with a width different from the fixed width indicated. A value of 0 indicates this `Layer` has no fixed width.

  Returns:
    the fixed width of this `Layer`, or 0 if the width is not fixed.

### getFixedHeight

    @XmlElement(value="fixedHeight")
    int getFixedHeight()

  Indicates that this `Layer` is not able to produce a map with a height different from the fixed height indicated. A value of 0 indicates this `Layer` has no fixed height.

  Returns:
    the fixed height of this `Layer`, or 0 if the height is not fixed.

### getFeatureLayers

    List<FeatureLayer> getFeatureLayers()

  Gets the feature layers from this `Layer` that are suitable for adding to a `FeatureCanvas` in order to visually represent this `Layer`.

  The returned `List` (if modifiable) should not be a live list of this `Layer`'s `FeatureLayer`s, and modifying the list should not affect this `Layer`'s set of `FeatureLayer`s.

  Returns:
    the feature layers to add to a `FeatureCanvas`.

### getGraphics

    List<Graphic> getGraphics()

  Gets the graphics from this `Layer` that are suitable for adding to a `Canvas` in order to visually represent this `Layer`.

  The returned `List` (if modifiable) should not be a live list of this `Layer`'s `Graphic`s, and modifying the list should not affect this `Layer`'s set of `Graphic`s.

  Returns:
    the `Graphic`s to add to a `Canvas`.

Copyright © 1994-2008 Open Geospatial Consortium. All Rights Reserved.