# Interface DataSet

All Superinterfaces:
  `Resource`

All Known Subinterfaces:
  `FeatureSet`, `GridCoverageResource`, `WritableFeatureSet`, `WritableGridCoverageResource`

All Known Implementing Classes:
  `AbstractFeatureSet`, `AbstractGridCoverageResource`, `ConcatenatedFeatureSet`, `JoinFeatureSet`

public interface DataSet extends Resource
Collection of features that share a common set of attributes or properties. Features may be organized in coverages, but not necessarily. The common set of properties is described by feature types, grid geometries or sample dimensions, depending on the `DataSet` subtype. The actual values are provided by methods defined in `DataSet` subtypes.

## Example

The features contained in a `DataSet` could be all bridges in a city. A `DataSet` can be associated to one `FeatureType` which specifies that all bridges shall have `"construction date"` and `"height"` attributes, and an arbitrary number of `Feature` instances which contains the actual values for all bridges in the dataset.

## Metadata

Datasets should have `metadata` / `metadataScope` / `resourceScope` sets to `ScopeCode​.DATASET`. If this datasets is part of a series or an `Aggregate`, the aggregate name should be declared as the parent metadata. That parent metadata is often the same instance as `DataStore​.getMetadata()`.

Since:
  0.8

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from interface Resource

  `Resource​.FileSet`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Optional<Envelope>`
  `getEnvelope()`
  Returns the spatiotemporal extent of this resource in its most natural coordinate reference system.

  ### Methods inherited from interface Resource

  `addListener, getFileSet, getIdentifier, getMetadata, removeListener`

- ## Method Details

  - ### getEnvelope

    Optional<Envelope> getEnvelope() throws DataStoreException
    Returns the spatiotemporal extent of this resource in its most natural coordinate reference system. The following relationship to Resource.getMetadata() should hold (departures may exist):
    - The envelope should be contained in the union of all geographic, vertical or temporal extents described by `metadata` / `identificationInfo` / `extent`.
    - The coordinate reference system should be one of the instances returned by `referenceSystemInfo`.
    The envelope should use the coordinate reference system (CRS) that most closely matches the geometry of the resource storage. It is often a projected CRS, but other types like engineering CRS are also allowed. If this resource uses many different CRS with none of them covering all data, then the envelope should use a global system (typically a geographic CRS).

    #### Estimated envelopes

    The returned envelope is not necessarily the smallest bounding box encompassing all data. If the smallest envelope is too costly to compute, this method may conservatively return a larger envelope. The converse (returning a smaller envelope) should be avoided, but is not strictly forbidden because some resources may compute the envelope using only a subset of all the resource data.
    Returns:
      the spatiotemporal resource extent. May be absent if none or too costly to compute.
    Throws:
      `DataStoreException` - if an error occurred while reading or computing the envelope.