title: Extent with Uniform Additional Dimensions Schema
description: |-
   This extent schema includes optional additional dimensions, but will still validate for
   objects not conforming to UAD.
allOf:
   - type: object
     description: |-
        The extent of the data in the collection. In the Core only spatial and temporal
        extents are specified. Extensions may add additional members to represent other
        extents, for example, thermal or pressure ranges.

        The first item in the array describes the overall extent of
        the data. All subsequent items describe more precise extents,
        e.g., to identify clusters of data.
        Clients only interested in the overall extent will only need to
        access the first item in each array.
     properties:
        spatial:
          description: The spatial extent of the data in the collection.
          type: object
          properties:
            bbox:
              description: |-
                One or more bounding boxes that describe the spatial extent of the dataset.

                The first bounding box describes the overall spatial
                extent of the data. All subsequent bounding boxes describe
                more precise bounding boxes, e.g., to identify clusters of data.
                Clients only interested in the overall spatial extent will
                only need to access the first item in each array.
              type: array
              minItems: 1
              items:
                description: |-
                  Each bounding box is provided as four or six numbers, depending on
                  whether the coordinate reference system includes a vertical axis
                  (height or depth):

                  * Lower left corner, coordinate axis 1
                  * Lower left corner, coordinate axis 2
                  * Minimum value, coordinate axis 3 (optional)
                  * Upper right corner, coordinate axis 1
                  * Upper right corner, coordinate axis 2
                  * Maximum value, coordinate axis 3 (optional)

                  If the value consists of four numbers, the coordinate reference system is
                  WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)
                  unless a different coordinate reference system is specified in `crs` property.

                  If the value consists of six numbers, the coordinate reference system is WGS 84
                  longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h)
                  unless a different coordinate reference system is specified in `crs` property.

                  For WGS 84 longitude/latitude the values are in most cases the sequence of
                  minimum longitude, minimum latitude, maximum longitude and maximum latitude.
                  However, in cases where the box spans the antimeridian the first value
                  (west-most box edge) is larger than the third value (east-most box edge).

                  If the vertical axis is included, the third and the sixth number are
                  the bottom and the top of the 3-dimensional bounding box.

                  If a feature has multiple spatial geometry properties, it is the decision of the
                  server whether only a single spatial geometry property is used to determine
                  the extent or all relevant geometries.
                type: array
                oneOf:
                - minItems: 4
                  maxItems: 4
                - minItems: 6
                  maxItems: 6
                items:
                  type: number
                example:
                  - -180
                  - -90
                  - 180
                  - 90
            storageCrsBbox:
              description: |-
                One or more bounding boxes that describe the spatial extent of the dataset in the storage (native) CRS (`storageCrs` property).

                The first bounding box describes the overall spatial
                extent of the data. All subsequent bounding boxes describe
                more precise bounding boxes, e.g., to identify clusters of data.
                Clients only interested in the overall spatial extent will
                only need to access the first item in each array.
              type: array
              minItems: 1
              items:
                description: |-
                  Each bounding box is provided as four or six numbers, depending on
                  whether the coordinate reference system includes a vertical axis
                  (height or depth):

                  * Lower left corner, coordinate axis 1
                  * Lower left corner, coordinate axis 2
                  * Minimum value, coordinate axis 3 (optional)
                  * Upper right corner, coordinate axis 1
                  * Upper right corner, coordinate axis 2
                  * Maximum value, coordinate axis 3 (optional)
                type: array
                oneOf:
                - minItems: 4
                  maxItems: 4
                - minItems: 6
                  maxItems: 6
                items:
                  type: number
                example:
                  - -180
                  - -90
                  - 180
                  - 90
            crs:
              description: |-
                Coordinate reference system of the coordinates of the `bbox` property.
                The default reference system is WGS 84 longitude/latitude.
                WGS 84 longitude/latitude/ellipsoidal height for coordinates with height.
                For non-terrestrial coordinate reference system, another CRS may be specified.
              type: string
              enum:
                - 'http://www.opengis.net/def/crs/OGC/1.3/CRS84'
                - 'http://www.opengis.net/def/crs/OGC/0/CRS84h'
              default: 'http://www.opengis.net/def/crs/OGC/1.3/CRS84'
            grid:
              description: |-
                 Provides information about the limited availability of data within the collection organized
                 as a grid (regular or irregular) along each spatial dimension.
              type: array
              minItems: 2
              maxItems: 3
              items:
                $ref: 'grid.yaml'
        temporal:
          description: |-
            The temporal extent of the features in the collection.
          type: object
          properties:
            interval:
              description: |-
                One or more time intervals that describe the temporal extent of the dataset.
                In the Core only a single time interval is supported.

                Extensions may support multiple intervals.
                The first time interval describes the overall
                temporal extent of the data. All subsequent time intervals describe
                more precise time intervals, e.g., to identify clusters of data.
                Clients only interested in the overall extent will only need
                to access the first item in each array.
              type: array
              minItems: 1
              items:
                description: |-
                  Begin and end times of the time interval. The timestamps are in the
                  temporal coordinate reference system specified in `trs`. By default
                  this is the Gregorian calendar, expressed using RFC 3339 section 5.6.
                  Note that these times may be specified using time zone offsets to UTC time other than zero.

                  The value `null` for start or end time is supported and indicates a half-bounded time interval.
                type: array
                minItems: 2
                maxItems: 2
                items:
                  type: string
                  format: date-time
                  nullable: true
                example:
                  - '2011-11-11T12:22:11Z'
                  - '2011-11-11T08:22:11-04:00'
                  - null
            trs:
              description: |-
                Coordinate reference system of the coordinates in the temporal extent
                (property `interval`). The default reference system is the Gregorian calendar.
                In the Core this is the only supported temporal coordinate reference system.
                Extensions may support additional temporal coordinate reference systems and add
                additional enum values.
              type: string
              enum:
                - 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian'
              default: 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian'
            grid:
              $ref: 'grid.yaml'
   - anyOf:
     - type: object
       additionalProperties:
          description: |-
            The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial.
          type: object
          oneOf:
            - required: [ interval, definition ]
            - required: [ interval, trs ]
            - required: [ interval, vrs ]
          properties:
            interval:
              description: |-
                One or more intervals that describe the extent for this dimension of the dataset.
                The value `null` is supported and indicates an unbounded or half-bounded interval.
                The first interval describes the overall extent of the data for this dimension.
                All subsequent intervals describe more precise intervals, e.g., to identify clusters of data.
                Clients only interested in the overall extent will only need
                to access the first item (a pair of lower and upper bound values).
              type: array
              minItems: 1
              items:
                description: |-
                  Lower and upper bound values of the interval. The values
                  are in the coordinate reference system specified in `crs`, `trs` or `vrs`.
                type: array
                minItems: 2
                maxItems: 2
                items:
                  oneOf:
                     - type: string
                       nullable: true
                     - type: number
                example:
                  - '2011-11-11T12:22:11Z'
                  - '2011-11-11T08:22:11-04:00'
                  - 32.5
                  - null
            trs:
              type: string
              description: temporal coordinate reference system (e.g. as defined by Features for 'temporal')
            vrs:
              type: string
              description: vertical coordinate reference system (e.g. as defined in EDR for 'vertical')
            grid:
              $ref: 'grid.yaml'
            definition:
              type: string
              format: uri
              description: A URI to the definition of the measured or observed property corresponding to this dimension.
            unit:
              type: string
              description: The unit of measure in which the interval and/or grid values are expressed.
            unitLang:
              type: string
              default: UCUM
              description: The language (or vocabulary) in which the unit is expressed (defaults to "UCUM" if not specified).
            variableType:
              description: The type of variable which may inform correct interpretation and interpolation methods
              type: string
              enum:
                - continuous
                - numericalOrdinal
                - numericalNominal
                - categoricalOrdinal
                - categoricalNominal
