diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 05bd470fd..a1350ec96 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -13,19 +13,7 @@ # # https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/about-code-owners -/extensions/datacube/ @m-mohr /extensions/eo/ @matthewhanson -/extensions/file/ @m-mohr -/extensions/item-assets/ @matthewhanson -/extensions/label/ @jisantuc -/extensions/pointcloud/ @matthewhanson -/extensions/processing/ @emmanuelmathot /extensions/projection/ @matthewhanson -/extensions/sar/ @emmanuelmathot @m-mohr -/extensions/sat/ @emmanuelmathot /extensions/scientific/ @m-mohr -/extensions/single-file-stac/ @matthewhanson -/extensions/tiled-assets/ @constantinius -/extensions/timestamps/ @m-mohr -/extensions/version/ @m-mohr /extensions/view/ @matthewhanson \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index f90bf1d7e..837e31080 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,9 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - 'via' and 'canonical' rel types as options in items. - Assets on Collections are now defined in the core Collection specification ([#1008](https://github.com/radiantearth/stac-spec/pull/1008)) - Added clarification about how collection-level asset object properties do not remove the need for item-level asset object properties in the `item-assets` extension ([#880](https://github.com/radiantearth/stac-spec/pull/880)) -- Added [processing extension](extensions/processing/README.md) -- Added [file info extension](extensions/file/README.md) ([#879](https://github.com/radiantearth/stac-spec/pull/879), [#921](https://github.com/radiantearth/stac-spec/issues/921)) -- Added additional acquisition parameters in the `sat` extension: sat:platform_international_designator, sat:absolute_orbit, sat:anx_datetime* ([#894](https://github.com/radiantearth/stac-spec/pull/894)) +- Added reference to three new (non-core) extensions: [processing](https://github.com/stac-extensions/processing), [file info](https://github.com/stac-extensions/file) and [card4l](https://github.com/stac-extensions/card4l). - 'summaries' are now available in the Catalog spec, so both catalogs and collections can make use of it. ([#903](https://github.com/radiantearth/stac-spec/issues/903)) - Recommendation to enable CORS - A 'visual' option as an asset role. @@ -40,6 +38,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Checksum extension (field `checksum:multihash`). Use File Info extension (field `file:checksum`) instead for assets. There's no replacement for links. - Collection Assets extension, as the core construct of Assets in a Collection is now part of the core Collection spec. No change is required except removing `collection-assets` from the list of `stac_extensions`. +- Numerous extensions (Data Cube, Item Assets, Point Cloud, SAR, Single File STAC, Tiled Assets, Timestamps & Versioning) have been moved out of the core specification, into their own repos in the [stac-extensions](https://github.com/stac-extensions/) GitHub organization. They must now be referred to by their schemas directly - the name shortcuts for them are no longer valid. ### Fixed diff --git a/best-practices.md b/best-practices.md index e4dd98b0e..cd7e6e1e9 100644 --- a/best-practices.md +++ b/best-practices.md @@ -251,8 +251,8 @@ than the overall best resolution. a single reprojected version (such as a Web Mercator preview image), it is sensible to specify the main projection in the Item and the alternate projection for the affected asset(s). - `proj:shape`/`proj:transform` ([projection extension](extensions/projection/)): If assets have different spatial resolutions and slightly different exact bounding boxes, specify these per asset to indicate the size of the asset in pixels and its exact GeoTransform in the native projection. -- `sar:polarizations` ([sar extension](extensions/sar/)): Provide the polarization content and ordering of a specific asset, similar to `eo:bands`. -- `sar:product_type` ([sar extension](extensions/sar/)): If mixing multiple product types within a single Item, this can be used to specify the product_type for each asset. +- `sar:polarizations` ([sar extension](https://github.com/stac-extensions/sar)): Provide the polarization content and ordering of a specific asset, similar to `eo:bands`. +- `sar:product_type` ([sar extension](https://github.com/stac-extensions/sar)): If mixing multiple product types within a single Item, this can be used to specify the product_type for each asset. ### Working with Media Types @@ -338,7 +338,7 @@ actual role requirements. | iso-19115 | Best Practice | Points to an [ISO 19115](https://www.iso.org/standard/53798.html) metadata file | | reflectance, temperature, saturation, cloud, cloud-shadow | [EO Extension](extensions/eo/README.md#best-practices) | See the [table](extensions/eo/README.md#best-practices) in EO for more information, and the definitive list of roles related to EO. | | incidence-angle, azimuth, sun-azimuth, sun-elevation, terrain-shadow, terrain-occlusion, terrain-illumination | [View Extension](extensions/view/README.md#best-practices) | See the [table](extensions/view/README.md#best-practices) in View for more information, and the definitive list of roles related to viewing angles. | -| local-incidence-angle, noise-power, amplitude, magnitude, sigma0, beta0, gamma0, date-offset, covmat, prd | [SAR Extension](extensions/sar/README.md#best-practices) | See the [table](extensions/sar/README.md#best-practices) in SAR for more information. , and the definitive list of roles related to SAR. | +| local-incidence-angle, noise-power, amplitude, magnitude, sigma0, beta0, gamma0, date-offset, covmat, prd | [SAR Extension](https://github.com/stac-extensions/sar/README.md#best-practices) | See the [table](https://github.com/stac-extensions/sar/README.md#best-practices) in SAR for more information. , and the definitive list of roles related to SAR. | Some of the particular asset roles also have some best practices: @@ -593,13 +593,19 @@ a number of the common official relations that are used in production STAC imple ### Versioning for Catalogs -In the Item and Collection STAC JSON, versions and deprecation can be indicated with the [Versioning Indicators Extension](./extensions/version). +In the Item and Collection STAC JSON, versions and deprecation can be indicated with the [Versioning Indicators Extension](https://github.com/stac-extensions/version). -The [Items and Collections API Version Extension](https://github.com/radiantearth/stac-api-spec/tree/master/extensions/version/README.md) provides endpoints and semantics for keeping and accessing previous versions of Collections and Items. The same semantics can be used in static catalogs to preserve previous versions of the documents and link them together. +The [Items and Collections API Version Extension](https://github.com/stac-extensions/version/) provides endpoints and +semantics for keeping and accessing previous versions of Collections and Items. The same semantics can be used in static +catalogs to preserve previous versions of the documents and link them together. -In order to achieve this, the static catalog must make sure that for every record created, a copy of the record is also created in a separate location and it is named with the version id adopted by the catalog. See [here](https://github.com/radiantearth/stac-api-spec/tree/master/extensions/version/README.md#version-id) for recommendations on versioning schema. +In order to achieve this, the static catalog must make sure that for every record created, a copy of the record is also +created in a separate location and it is named with the version id adopted by the catalog. See +[here](https://github.com/stac-extensions/version/README.md#version-id) for recommendations on versioning schema. -The main record should also provide a link to the versioned record following the linking patterns described [here](./extensions/version/README.md#relation-types). For every update to the record, the same cycle is repeated: +The main record should also provide a link to the versioned record following the linking patterns described +[here](https://github.com/stac-extensions/version/README.md#relation-types). For every update to the record, the same +cycle is repeated: 1. Add link from the updated record to the previous version 2. Create a copy of the updated record and name it correctly diff --git a/catalog-spec/catalog-spec.md b/catalog-spec/catalog-spec.md index 5c71b5a94..3f7516b43 100644 --- a/catalog-spec/catalog-spec.md +++ b/catalog-spec/catalog-spec.md @@ -52,7 +52,7 @@ also a valid STAC Catalog. #### stac_extensions -A list of extensions the Catalog implements. This does NOT declare the extensions of children or Items. The list contains URLs to the JSON Schema files it can be validated against. For official [content extensions](../extensions/README.md#list-of-stac-extensions), a "shortcut" can be used. This means you can specify the folder name of the extension, for example `pointcloud` for the Point Cloud extension. If the versions of the extension and the Catalog diverge, you can specify the URL of the JSON schema file. +A list of extensions the Catalog implements. This does NOT declare the extensions of children or Items. The list contains URLs to the JSON Schema files it can be validated against. For [core extensions](../extensions/README.md#core-stac-extensions), a "shortcut" can be used. This means you can specify the folder name of the extension, for example `view` for the View extension. If the versions of the extension and the Catalog diverge, you can specify the URL of the JSON schema file. This list must only contain extensions that extend the Catalog itself, see the the 'Scope' column in the list of extensions. ### Link Object diff --git a/collection-spec/collection-spec.md b/collection-spec/collection-spec.md index ce7405cab..bc8057bc8 100644 --- a/collection-spec/collection-spec.md +++ b/collection-spec/collection-spec.md @@ -45,8 +45,16 @@ it is a fairly unique name, or their name combined with the domain they operate #### stac_extensions -A list of extensions the Collection implements. This does NOT declare the extensions of child Catalogs or Items. The list contains URLs to the JSON Schema files it can be validated against. For official [extensions](../extensions/README.md#list-of-stac-extensions), a "shortcut" can be used. This means you can specify the folder name of the extension, for example `version` for the Versioning Indicators extension. If the versions of the extension and the Collection diverge, you can specify the URL of the JSON schema file. -This list must only contain extensions that extend the Collection itself, see the the 'Scope' column in the list of extensions. If an extension has influence on multiple parts of the whole STAC structure, it must be listed in all affected parts (e.g. Collection and Item for the `datacube` extension). If a structure such as the summaries extension provide fields in their JSON structure, these extensions must not be listed here as they don't extend the Collection itself. For example, if a Collection includes the field `sat:platform` in the summaries, the Collection still does not list the `sat` extension in the `stac_extensions` field. +A list of extensions the Collection implements. This does NOT declare the extensions of child Catalogs or Items. The list +contains URLs to the JSON Schema files it can be validated against. For official +[extensions](../extensions/README.md#core-stac-extensions), a "shortcut" can be used. This means you can specify the folder +name of the extension, for example `view` for the View extension. If the versions of the extension and +the Collection diverge, you can specify the URL of the JSON schema file. This list must only contain extensions that extend +the Collection itself, see the the 'Scope' column in the list of extensions. If an extension has influence on multiple parts +of the whole STAC structure, it must be listed in all affected parts (e.g. Collection and Item for the `datacube` extension). +If a structure such as the summaries extension provide fields in their JSON structure, these extensions must not be listed +here as they don't extend the Collection itself. For example, if a Collection includes the field `sat:platform` in the +summaries, the Collection still does not list the `sat` extension in the `stac_extensions` field. #### license @@ -84,7 +92,6 @@ There are a few guidelines for using the asset construct at the Collection level * Collection-level assets SHOULD NOT list any files also available in Items. * If possible, item-level assets are always the preferable way to expose assets. -* To list what assets are available in Items see the [Item Assets Definition Extension](../extensions/item-assets/README.md). Collection-level assets can be useful in some scenarios, for example: 1. Exposing additional data that applies Collection-wide and you don't want to expose it in each Item. This can be Collection-level metadata or a thumbnail for visualization purposes. @@ -223,13 +230,3 @@ STAC Collections which don't link to any Item are called **standalone Collection To describe them with more fields than the Collection fields has to offer, it is allowed to re-use the metadata fields defined by extensions for Items in the `summaries` field. This makes much sense for fields such as `platform` or `proj:epsg`, which are often the same for a whole Collection, but doesn't make much sense for `eo:cloud_cover`, which usually varies heavily across a Collection. The data provider is free to decide, which fields are reasonable to be used. - -## Extensions - -Commonly used extensions for the STAC Collection specification: - -* [Item Assets Definition](../extensions/item-assets/README.md): Allows to indicate the structure of the Item assets. -* [Scientific Citation extension](../extensions/scientific/README.md): Add fields to indicate citations and DOIs. -* [Versioning Indicators extension](../extensions/version/README.md): Allows versioning by adding the fields `version` and `deprecated`. - -The [extensions page](../extensions/README.md) gives a full overview about relevant extensions for STAC Collections. diff --git a/examples/extended-item.json b/examples/extended-item.json index eddee54f8..a84586008 100644 --- a/examples/extended-item.json +++ b/examples/extended-item.json @@ -3,7 +3,7 @@ "stac_extensions": [ "eo", "projection", - "sat", + "scientific", "view" ], "type": "Feature", @@ -69,8 +69,6 @@ 0, 1 ], - "sat:orbit_state": "ascending", - "sat:relative_orbit": 34523, "view:sun_elevation": 54.9, "view:off_nadir": 3.8, "view:sun_azimuth": 135.7, @@ -78,7 +76,8 @@ "rd:anomalous_pixels": 0.14, "rd:earth_sun_distance": 1.014156, "rd:sat_id": "cool_sat2", - "rd:product_level": "LV3A" + "rd:product_level": "LV3A", + "sci:doi": "10.5061/dryad.s2v81.2/27.2" }, "collection": "simple-collection", "links": [ diff --git a/extensions/README.md b/extensions/README.md index 122213563..50613c808 100644 --- a/extensions/README.md +++ b/extensions/README.md @@ -1,39 +1,66 @@ # Extensions -This folder contains extensions to the SpatioTemporal Asset Catalog specification. The core STAC specification -defines only a minimal core, but is designed for extension. It is expected that most real-world -implementations will use several extensions to fully describe their data. +- [Overview](#overview) +- [General Conventions](#general-conventions) +- [Core STAC Extensions](#core-stac-extensions) +- [Community Extensions](#community-extensions) + - [Extension Maturity](#extension-maturity) + - [List of STAC Community Extensions](#list-of-stac-community-extensions) + - [Proposed extensions](#proposed-extensions) +- [Extending STAC](#extending-stac) + - [Proposing new extensions](#proposing-new-extensions) + - [Prefixes](#prefixes) + - [Use of arrays and objects](#use-of-arrays-and-objects) + - [Directory Structure](#directory-structure) + +## Overview + +One of the most important aspects of the SpatioTemporal Asset Catalog specification is its extensibility. The core +STAC specification defines only a minimal core, but is designed for extension. It is expected that most real-world +implementations will use several 'extensions' to fully describe their data. This document describes how extensions +work, and links to the 'core' extensions included in this repo, as well as to a variety of 'community' extensions. Extensions to the core STAC specification provide additional JSON fields that can be used to better describe the data. Most tend to be about describing a particular domain or type of data, but some imply -functionality. +functionality. -Extensions should include a JSON Schema precisely describing the structure, a natural language description of the fields, and thorough examples. -Any data provider can create a proprietary extension, and when providers work together to share fields between -them they can create a shared extension and include it in the STAC repository. +Extensions include a JSON Schema precisely describing the structure, a natural language description of the fields, and thorough examples. -Anyone is welcome to create an extension (see section 'Extending STAC'), and is encouraged to at least link -to the extension from here. The [third-party / vendor extensions](#third-party--vendor-extensions) section is -for the sharing of extensions. As third-parties create useful extensions for their implementation, it is -expected that others will make use -of it, and then evolve to make it a 'community extension', that several providers maintain -together. For now anyone from the community is welcome to use this extensions/ folder of the -stac-spec repository to collaborate. +Anybody can create an extension for their data, and data providers often work together to share +fields between them to create a shared community extensions. See the section below on '[Extending STAC](#extending-stac)') +for information on how to get started. And everyone is encouraged to link to the extension in the table below, so others +can be aware of it. ## General Conventions -1. Additional attributes relating to an [Item](../item-spec/item-spec.md) should be added into the Item Properties object, rather than directly in the Item object. +1. Additional attributes relating to an [Item](../item-spec/item-spec.md) should be added into the Item Properties object, rather than directly in the Item object. 2. In general, additional attributes that apply to an Item Asset should also be allowed in Item Properties and vice-versa. -For example, the `eo:bands` attribute may be used in Item Properties to describe the aggregation of all bands available in +For example, the `eo:bands` attribute may be used in Item Properties to describe the aggregation of all bands available in the Item Asset objects contained in the Item, but may also be used in an individual Item Asset to describe only the bands available in that asset. -3. Additional attributes relating to a [Catalog](../catalog-spec/catalog-spec.md) or [Collection](../collection-spec/collection-spec.md) should be added to the root of the object. +3. Additional attributes relating to a [Catalog](../catalog-spec/catalog-spec.md) or [Collection](../collection-spec/collection-spec.md) should be added to the root of the object. -## Extension Maturity +## Core STAC Extensions -Extensions in this directory are meant to evolve to maturity, and thus may be in different states -in terms of stability and number of implementations. All extensions included must include a -maturity classification, so that STAC spec users can easily get a sense of how much they can count -on the extension. +These extensions are considered stable, and are included directly in this repository. + +| Extension Title | Identifier | Field Name Prefix | Scope | Description | +|---------------------------------------------|------------|-------------------|------------------|-------------| +| [Electro-Optical](eo/README.md) | eo | eo | Item | Covers electro-optical data that represents a snapshot of the Earth for a single date and time. It could consist of multiple spectral bands, for example visible bands, infrared bands, red edge bands and panchromatic bands. The extension provides common fields like bands, cloud cover, gsd and more. | +| [Projection](projection/README.md) | projection | proj | Item | Provides a way to describe Items whose assets are in a geospatial projection. | +| [Scientific Citation](scientific/README.md) | scientific | sci | Item, Collection | Metadata that indicate from which publication data originates and how the data itself should be cited or referenced. | +| [View Geometry](view/README.md) | view | view | Item | View Geometry adds metadata related to angles of sensors and other radiance angles that affect the view of resulting data | + +## Community Extensions + +There are many more extensions that the broader STAC community is working on. These aren't included directly in the +main repository as many are still evolving through active usage. But they are listed here. + +### Extension Maturity + +There are many extensions being built with STAC, but they have varying degrees of maturity. All community extensions +listed here included must include a maturity classification, so that STAC spec users can easily get a sense of how +much they can count on the extension. Extension creators are encouraged to list their extensions here, even if it is just +an rough proposal, so others can potentially collaborate. | Maturity Classification | Min Impl # | Description | Stability | | ----------------------- | ----------- | ----------- | --------- | @@ -51,60 +78,58 @@ the less breaking changes of the next level. A 'mature' classification level will likely be added once there are extensions that have been stable for over a year and are used in twenty or more implementations. -## List of STAC Extensions +### List of STAC Community Extensions -These extensions add new fields or semantics to STAC objects. +This is a list of all known STAC Community extensions. It is currently more oriented to general domains, but it will include +more data provider specific extensions in the future as well. Any extension with documentation and a published schema +is encouraged to list here. | Extension Title | Identifier | Field Name Prefix | Scope | Maturity | Description | | ------------------------------------------------ | ----------------- | ------------------- | ------------------------- | ---------- | ----------- | -| [Data Cube](datacube/README.md) | datacube | cube | Item, Collection | *Proposal* | Data Cube related metadata, especially to describe their dimensions. | -| [Electro-Optical](eo/README.md) | eo | eo | Item | *Proposal* | Covers electro-optical data that represents a snapshot of the Earth for a single date and time. It could consist of multiple spectral bands, for example visible bands, infrared bands, red edge bands and panchromatic bands. The extension provides common fields like bands, cloud cover, gsd and more. | -| [File Info](file/README.md) | file | file | Item, Collection | *Proposal* | Provides a way to specify file details such as size, data type and checksum for assets in Items and Collections. | -| [Item Asset Definition](item-assets/README.md) | item-assets | - | Collection | *Proposal* | Provides a way to specify details about what assets may be found in Items belonging to a Collection. | -| [Label](label/README.md) | label | label | Item | *Proposal* | Items that relate labeled AOIs with source imagery | -| [Point Cloud](pointcloud/README.md) | pointcloud | pc | Item | *Proposal* | Provides a way to describe point cloud datasets. The point clouds can come from either active or passive sensors, and data is frequently acquired using tools such as LiDAR or coincidence-matched imagery. | -| [Processing](processing/README.md) | processing | processing | Item, Collection | *Proposal* | Indicates from which processing chain data originates and how the data itself has been produced. | -| [Projection](projection/README.md) | projection | proj | Item | *Proposal* | Provides a way to describe Items whose assets are in a geospatial projection. | -| [SAR](sar/README.md) | sar | sar | Item | *Proposal* | Covers synthetic-aperture radar data that represents a snapshot of the earth for a single date and time. | -| [Satellite](sat/README.md) | sat | sat | Item | *Proposal* | Satellite related metadata for data collected from satellites. | -| [Scientific Citation](scientific/README.md) | scientific | sci | Item, Collection | *Proposal* | Metadata that indicate from which publication data originates and how the data itself should be cited or referenced. | -| [Tiled Assets](tiled-assets/README.md) | tiled-assets | tiles | Item, Catalog, Collection | *Proposal* | Allows to specify numerous assets using asset templates via tile matrices and dimensions. | -| [Timestamps](timestamps/README.md) | timestamps | - | Item | *Proposal* | Allows to specify numerous timestamps for assets and metadata. | -| [Versioning Indicators](version/README.md) | version | - | Item, Collection | *Proposal* | Provides fields and link relation types to provide a version and indicate deprecation. | -| [View Geometry](view/README.md) | view | view | Item | *Proposal* | View Geometry adds metadata related to angles of sensors and other radiance angles that affect the view of resulting data | - -## Third-party / vendor extensions - -The following extensions are provided by third parties (vendors). They address specific -use-cases and may be less stable than the official extensions. Once stable and adopted by multiple -parties, extensions may be made official and incorporated in the STAC repository. - -Please contact a STAC maintainer or open a Pull Request to add your extension to this table. - -| Name | Field Name Prefix | Scope | Description | Vendor | -| --------------------------------------------------- | ----------------- | ----- | ------------------------------------------------------------ | ---------------------------------------------- | -| [CARD4L](https://github.com/stac-extensions/card4l) | card4l | Item | How to comply to the CEOS CARD4L product family specifications (Optical and SAR) | [openEO Platform](https://platform.openeo.org) | - -## Proposed extensions - -The following extensions are proposed through the -[STAC issue tracker](https://github.com/radiantearth/stac-spec/issues) and are considered to be -implemented. If you would find any of these helpful or are considering to implement a similar -extension, please get in touch through the referenced issues: - -- [Drone Extension](https://github.com/radiantearth/stac-spec/issues/149) -- [Full Motion Video Extension](https://github.com/radiantearth/stac-spec/issues/156) -- [Storage Extensions](https://github.com/radiantearth/stac-spec/issues/148) -- [gRPC STAC Extensions](https://github.com/radiantearth/stac-spec/issues/575) +| [Data Cube](https://github.com/stac-extensions/datacube) | datacube | cube | Item, Collection | *Proposal* | Data Cube related metadata, especially to describe their dimensions. | +| [File Info](https://github.com/stac-extensions/file) | file | file | Item, Collection | *Pilot* | Provides a way to specify file details such as size, data type and checksum for assets in Items and Collections. | +| [Item Asset Definition](https://github.com/stac-extensions/item-assets) | item-assets | - | Collection | *Proposal* | Provides a way to specify details about what assets may be found in Items belonging to a Collection. | +| [Point Cloud](https://github.com/stac-extensions/pointcloud) | pointcloud | pc | Item | *Pilot* | Provides a way to describe point cloud datasets. The point clouds can come from either active or passive sensors, and data is frequently acquired using tools such as LiDAR or coincidence-matched imagery. | +| [Processing](https://github.com/stac-extensions/processing) | processing | processing | Item, Collection | *Pilot* | Indicates from which processing chain data originates and how the data itself has been produced. | +| [SAR](https://github.com/stac-extensions/sar) | sar | sar | Item | *Pilot* | Covers synthetic-aperture radar data that represents a snapshot of the earth for a single date and time. | +| [Single File STAC](https://github.com/stac-extensions/single-file-stac) | single-file-stac | - | Catalog | *Pilot* | An extension to provide a set of Collections and Items within a single file STAC. | +| [Tiled Assets](https://github.com/stac-extensions/tiled-assets) | tiled-assets | tiles | Item, Catalog, Collection | *Proposal* | Allows to specify numerous assets using asset templates via tile matrices and dimensions. | +| [Timestamps](https://github.com/stac-extensions/timestamps) | timestamps | - | Item | *Proposal* | Allows to specify numerous timestamps for assets and metadata. | +| [Versioning Indicators](https://github.com/stac-extensions/version) | version | - | Item, Collection | *Proposal* | Provides fields and link relation types to provide a version and indicate deprecation. | +| [CARD4L](https://github.com/stac-extensions/card4l) | card4l | card4l | Item | *Proposal* | How to comply to the CEOS CARD4L product family specifications (Optical and SAR), from [openEO Platform](https://platform.openeo.org) | + +### Proposed extensions + +Beyond the list above there have been a number of extensions that people have proposed to the STAC community. These +can be found in the STAC [Issue Tracker](https://github.com/radiantearth/stac-spec/issues) under the +[new extension](https://github.com/radiantearth/stac-spec/issues?q=is%3Aissue+is%3Aopen+label%3A%22new+extension%22) label. +These are ideas that others would likely use and potentially collaborate on. Anyone is free to add new +ideas there, and see the section below on [proposing new extensions](#proposing-new-extensions) for the +workflow to advance ideas into full-fledged community extensions. ## Extending STAC Anyone is welcome to create an extension. There are several types of extensions, some just add additional fields, -some change the behaviour of STAC and some introduce completely new functionality. New extensions should try to align +some change the behavior of STAC and some introduce completely new functionality. New extensions should try to align with existing extensions as well as possible and may even re-use fields and their definitions until they may get split into a new extension that combines commonly used fields across multiple extensions. Best practices for extension proposals are still emerging in this section. +### Proposing new extensions + +Extensions can be hosted anywhere, but should use the [extension template](https://github.com/stac-extensions/stac-extensions.github.io#using-the-stac-extensions-template) +as a starting point. If you'd like to add a repository to the [stac-extensions](https://github.com/stac-extensions) +GitHub organization, just ask on [Gitter](https://gitter.im/SpatioTemporal-Asset-Catalog/Lobby)! This is fine for +work-in-progress extensions. You can also host the extension repository in your own GitHub account, and optionally +transfer it to the stac-extensions org later. + +For new extensions that require community discussion, we recommend the following workflow: + +- Use the stac-extensions template to sketch out your proposed extension +- Open an issue on this repository with the prefix "New Extension: " and describe the extension. Include a link to the extension repository. +- Discussion can occur on that issue, or discussion can move to issues/pull requests on the extension repository directly. +- Once the extension has an initial release, the issue on stac-spec will be closed. + ### Prefixes A STAC Item can combine schema information from several different sources - the core STAC Item information, @@ -148,7 +173,7 @@ An example of this can be seen in a Landsat example: ### Use of arrays and objects -For extensions, it is recommended to +For extensions, it is recommended to 1. Use arrays only as enumerations/lists (possibly sorted), without implying additional meaning (such as order) 2. To avoid using nested objects, in favor of multiple attributes with a similar naming scheme. diff --git a/extensions/datacube/README.md b/extensions/datacube/README.md deleted file mode 100644 index 7650ed23e..000000000 --- a/extensions/datacube/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# Data Cube Extension Specification - -- **Title: Data Cube** -- **Identifier: datacube** -- **Field Name Prefix: cube** -- **Scope: Item, Collection** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @m-mohr - -Data cube related metadata, especially to describe their dimensions. - -- Examples: - - [Item example](examples/example-item.json) - - [Collection example](examples/example-collection.json) -- [JSON Schema](json-schema/schema.json) - -## Item Properties and Collection Fields - -These fields may be added to either [Item](../../item-spec/item-spec.md) Properties or [Collection](../../collection-spec/collection-spec.md). - -| Field Name | Type | Description | -| --------------- | -------------------------------------------------- | ------------------------------------------- | -| cube:dimensions | Map | **REQUIRED.** Uniquely named dimensions of the data cube. | - -### Dimension Object - -A *Dimension Object* comes in different flavors, each of them is defined below. The fields define mostly very similar fields, but they differ slightly depending on their use case. All objects share the fields `type` and `description` with the same definition, but `type` may be restricted to certain values. The definition of`axis` is shared between the spatial dimensions, but restricted to certain values, too. `extent`, `values` and `step` share the same definition, but differ in the supported data types (number or string) depending on the type of dimension. Whenever it's useful to specify these fields, the objects add the additional fields `reference_system` and `unit` with very similar definitions across the objects. - -### Horizontal Spatial Dimension Object - -A spatial dimension in one of the horizontal (x or y) directions. - -| Field Name | Type | Description | -| ---------------- | -------------- | ------------------------------------------------------------ | -| type | string | **REQUIRED.** Type of the dimension, always `spatial`. | -| axis | string | **REQUIRED.** Axis of the spatial dimension (`x`, `y`). | -| description | string | Detailed multi-line description to explain the dimension. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| extent | \[number] | **REQUIRED.** Extent (lower and upper bounds) of the dimension as two-dimensional array. Open intervals with `null` are not allowed. | -| values | \[number] | Optionally, a set of all potential values. | -| step | number\|null | The space between the values. Use `null` for irregularly spaced steps. | -| reference_system | string\|number\|object | The spatial reference system for the data, specified as [EPSG code](http://www.epsg-registry.org/), [WKT2 (ISO 19162) string](http://docs.opengeospatial.org/is/18-010r7/18-010r7.html), [PROJJSON](https://proj.org/specifications/projjson.html) or [PROJ definition](https://proj.org/usage/quickstart.html). Defaults to EPSG code 4326. | - -### Vertical Spatial Dimension Object - -A spatial dimension in vertical (z) direction. - -| Field Name | Type | Description | -| ---------------- | ---------------- | ------------------------------------------------------------ | -| type | string | **REQUIRED.** Type of the dimension, always `spatial`. | -| axis | string | **REQUIRED.** Axis of the spatial dimension, always `z`. | -| description | string | Detailed multi-line description to explain the dimension. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| extent | \[number\|null\] | If the dimension consists of [ordinal](https://en.wikipedia.org/wiki/Level_of_measurement#Ordinal_scale) values, the extent (lower and upper bounds) of the values as two-dimensional array. Use `null` for open intervals. | -| values | \[number\|string\] | A set of all potential values, especially useful for [nominal](https://en.wikipedia.org/wiki/Level_of_measurement#Nominal_level) values. | -| step | number\|null | If the dimension consists of [interval](https://en.wikipedia.org/wiki/Level_of_measurement#Interval_scale) values, the space between the values. Use `null` for irregularly spaced steps. | -| unit | string | The unit of measurement for the data, preferably compliant to [UDUNITS-2](https://ncics.org/portfolio/other-resources/udunits2/) units (singular). | -| reference_system | string\|number\|object | The spatial reference system for the data, specified as [EPSG code](http://www.epsg-registry.org/), [WKT2 (ISO 19162) string](http://docs.opengeospatial.org/is/18-010r7/18-010r7.html), [PROJJSON](https://proj.org/specifications/projjson.html) or [PROJ definition](https://proj.org/usage/quickstart.html). Defaults to EPSG code 4326. | - -An Vertical Spatial Dimension Object MUST specify an `extent` or a set of `values`. It MAY specify both. - -### Temporal Dimension Object - -A temporal dimension based on the ISO 8601 standard. The temporal reference system for the data is expected to be ISO 8601 compliant (Gregorian calendar / UTC). Data not compliant with ISO 8601 can be represented as an *Additional Dimension Object* with `type` set to `temporal`. - -| Field Name | Type | Description | -| ---------- | --------------- | ------------------------------------------------------------ | -| type | string | **REQUIRED.** Type of the dimension, always `temporal`. | -| description | string | Detailed multi-line description to explain the dimension. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| extent | \[string\|null] | **REQUIRED.** Extent (lower and upper bounds) of the dimension as two-dimensional array. The dates and/or times must be strings compliant to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). `null` is allowed for open date ranges. | -| values | \[string] | If the dimension consists of set of specific values they can be listed here. The dates and/or times must be strings compliant to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). | -| step | string\|null | The space between the temporal instances as [ISO 8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations), e.g. `P1D`. Use `null` for irregularly spaced steps. | - -### Additional Dimension Object - -An additional dimension that is not `spatial`, but may be `temporal` if the data is not compliant with ISO 8601. - -| Field Name | Type | Description | -| ---------------- | ----------------- | ------------------------------------------------------------ | -| type | string | **REQUIRED.** Custom type of the dimension, never `spatial`. | -| description | string | Detailed multi-line description to explain the dimension. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| extent | \[number\|null] | If the dimension consists of [ordinal](https://en.wikipedia.org/wiki/Level_of_measurement#Ordinal_scale) values, the extent (lower and upper bounds) of the values as two-dimensional array. Use `null` for open intervals. | -| values | \[number\|string] | A set of all potential values, especially useful for [nominal](https://en.wikipedia.org/wiki/Level_of_measurement#Nominal_level) values. | -| step | number\|null | If the dimension consists of [interval](https://en.wikipedia.org/wiki/Level_of_measurement#Interval_scale) values, the space between the values. Use `null` for irregularly spaced steps. | -| unit | string | The unit of measurement for the data, preferably compliant to [UDUNITS-2](https://ncics.org/portfolio/other-resources/udunits2/) units (singular). | -| reference_system | string | The reference system for the data. | - -An Additional Dimension Object MUST specify an `extent` or a set of `values`. It MAY specify both. - -## Implementations - -openEO has multiple implementations. Some example Collections: -- [Sentinel-2 Collection on openEO Google Earth Engine](https://earthengine.openeo.org/v1.0/collections/COPERNICUS/S2) (STAC 1.0.0-beta.2) -- [AGERA5 Collection on openEO VITO](https://openeo.vito.be/openeo/1.0/collections/AGERA5) (STAC 0.9.0) diff --git a/extensions/datacube/examples/example-collection.json b/extensions/datacube/examples/example-collection.json deleted file mode 100644 index 54c3039e8..000000000 --- a/extensions/datacube/examples/example-collection.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "type": "Collection", - "stac_extensions": [ - "datacube" - ], - "id": "Sentinel2-L1C", - "title": "Sentinel-2: MultiSpectral Instrument, Level-1C", - "description": "Multi-dimensional Sentinel-2 data cube in a STAC collection.", - "license": "proprietary", - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -56, - 180, - 83 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2015-06-23T00:00:00Z", - "2019-07-10T13:44:56Z" - ] - ] - } - }, - "cube:dimensions": { - "x": { - "type": "spatial", - "axis": "x", - "extent": [ - -180, - 180 - ], - "reference_system": 3857 - }, - "y": { - "type": "spatial", - "axis": "y", - "extent": [ - -56, - 83 - ], - "reference_system": 3857 - }, - "time": { - "type": "temporal", - "extent": [ - "2015-06-23T00:00:00Z", - "2019-07-10T13:44:56Z" - ], - "step": "P5D" - }, - "spectral": { - "type": "bands", - "values": [ - "B1", - "B2", - "B3", - "B4", - "B5", - "B6", - "B7", - "B8", - "B8A", - "B9", - "B10", - "B11", - "B12", - "QA10", - "QA20", - "QA60" - ] - } - }, - "summaries": { - "datetime": { - "minimum": "2015-06-23T00:00:00Z", - "maximum": "2019-07-10T13:44:56Z" - }, - "gsd": [ - 10, - 30, - 60 - ], - "eo:platform": [ - "sentinel-2a", - "sentinel-2b" - ], - "eo:constellation": [ - "sentinel-2" - ], - "eo:instrument": [ - "msi" - ], - "proj:epsg": [ - 3857 - ], - "eo:bands": [ - [ - { - "name": "B1", - "common_name": "coastal", - "center_wavelength": 4.439 - }, - { - "name": "B2", - "common_name": "blue", - "center_wavelength": 4.966 - }, - { - "name": "B3", - "common_name": "green", - "center_wavelength": 5.6 - }, - { - "name": "B4", - "common_name": "red", - "center_wavelength": 6.645 - }, - { - "name": "B5", - "center_wavelength": 7.039 - }, - { - "name": "B6", - "center_wavelength": 7.402 - }, - { - "name": "B7", - "center_wavelength": 7.825 - }, - { - "name": "B8", - "common_name": "nir", - "center_wavelength": 8.351 - }, - { - "name": "B8A", - "center_wavelength": 8.648 - }, - { - "name": "B9", - "center_wavelength": 9.45 - }, - { - "name": "B10", - "center_wavelength": 1.3735 - }, - { - "name": "B11", - "common_name": "swir16", - "center_wavelength": 1.6137 - }, - { - "name": "B12", - "common_name": "swir22", - "center_wavelength": 2.2024 - } - ] - ] - }, - "links": [ - { - "rel": "self", - "href": "https://example.sentinel2-hub.com/stac/example-collection.json" - }, - { - "rel": "license", - "href": "https://scihub.copernicus.eu/twiki/pub/SciHubWebPortal/TermsConditions/Sentinel_Data_Terms_and_Conditions.pdf", - "title": "Legal notice on the use of Copernicus Sentinel Data and Service Information" - } - ] -} diff --git a/extensions/datacube/examples/example-item.json b/extensions/datacube/examples/example-item.json deleted file mode 100644 index fcaf52d8d..000000000 --- a/extensions/datacube/examples/example-item.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "datacube" - ], - "id": "datacube-123", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -122.308150179, - 37.488035566 - ], - [ - -122.597502109, - 37.538869539 - ], - [ - -122.576687533, - 37.613537207 - ], - [ - -122.2880486, - 37.562818007 - ], - [ - -122.308150179, - 37.488035566 - ] - ] - ] - }, - "bbox": [ - -122.59750209, - 37.48803556, - -122.2880486, - 37.613537207 - ], - "properties": { - "title": "Multi-dimensional data cube 123 in a STAC Item.", - "datetime": "2016-05-03T13:21:30.040Z", - "cube:dimensions": { - "x": { - "type": "spatial", - "axis": "x", - "extent": [ - -122.59750209, - -122.2880486 - ], - "reference_system": 4326 - }, - "y": { - "type": "spatial", - "axis": "y", - "extent": [ - 37.48803556, - 37.613537207 - ], - "reference_system": 4326 - }, - "pressure_levels": { - "type": "spatial", - "axis": "z", - "extent": [ - 0, - 1000 - ], - "step": 100, - "unit": "Pa" - }, - "metered_levels": { - "type": "spatial", - "axis": "z", - "values": [ - 0, - 10, - 25, - 50, - 100, - 1000 - ], - "unit": "m" - }, - "time": { - "type": "temporal", - "values": [ - "2016-05-03T13:21:30.040Z" - ] - }, - "spectral": { - "type": "bands", - "values": [ - "red", - "green", - "blue" - ] - } - } - }, - "assets": { - "data": { - "href": "http://cool-sat.com/catalog/datacube-123/data.nc", - "type": "application/netcdf", - "title": "netCDF Data cube" - }, - "thumbnail": { - "href": "http://cool-sat.com/catalog/datacube-123/thumbnail.png", - "type": "image/png", - "title": "Thumbnail" - } - }, - "links": [ - { - "rel": "self", - "href": "http://cool-sat.com/catalog/datacube-123/example-item.json" - } - ] -} diff --git a/extensions/datacube/json-schema/schema.json b/extensions/datacube/json-schema/schema.json deleted file mode 100644 index e19d7bee5..000000000 --- a/extensions/datacube/json-schema/schema.json +++ /dev/null @@ -1,341 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/datacube/json-schema/schema.json#", - "title": "Data Cube Extension", - "description": "STAC Data Cube Extension to STAC Items and STAC Collections", - "oneOf": [ - { - "allOf": [ - { - "$ref": "../../../item-spec/json-schema/item.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "type": "object", - "required": [ - "properties" - ], - "properties": { - "properties": { - "$ref": "#/definitions/datacube" - } - } - } - ] - }, - { - "allOf": [ - { - "$ref": "../../../collection-spec/json-schema/collection.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "$ref": "#/definitions/datacube" - } - ] - } - ], - "definitions": { - "stac_extensions": { - "type": "object", - "required": [ - "stac_extensions" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "datacube", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/datacube/json-schema/schema.json" - ] - } - } - } - }, - "datacube": { - "type": "object", - "required": [ - "cube:dimensions" - ], - "properties": { - "cube:dimensions": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/objects/additional_dimension" - }, - { - "$ref": "#/definitions/objects/horizontal_spatial_dimension" - }, - { - "$ref": "#/definitions/objects/vertical_spatial_dimension" - }, - { - "$ref": "#/definitions/objects/temporal_dimension" - } - ] - } - } - } - }, - "objects": { - "additional_dimension": { - "title": "Additional Dimension Object", - "type": "object", - "anyOf": [ - { - "required": [ - "type", - "extent" - ] - }, - { - "required": [ - "type", - "values" - ] - } - ], - "not": { - "required": ["axis"] - }, - "properties": { - "type": { - "allOf": [ - { - "type": "string" - }, - { - "not": { - "type": "string", - "const": "spatial" - } - } - ] - }, - "description": { - "$ref": "#/definitions/description" - }, - "extent": { - "$ref": "#/definitions/extent_open" - }, - "values": { - "$ref": "#/definitions/values" - }, - "step": { - "$ref": "#/definitions/step" - }, - "unit": { - "$ref": "#/definitions/unit" - }, - "reference_system": { - "type": "string" - } - } - }, - "horizontal_spatial_dimension": { - "title": "Horizontal Spatial Dimension Object", - "type": "object", - "required": [ - "type", - "axis", - "extent" - ], - "properties": { - "type": { - "$ref": "#/definitions/type_spatial" - }, - "axis": { - "$ref": "#/definitions/axis_xy" - }, - "description": { - "$ref": "#/definitions/description" - }, - "extent": { - "$ref": "#/definitions/extent_closed" - }, - "values": { - "$ref": "#/definitions/values_numeric" - }, - "step": { - "$ref": "#/definitions/step" - }, - "reference_system": { - "$ref": "#/definitions/reference_system_spatial" - } - } - }, - "vertical_spatial_dimension": { - "title": "Vertical Spatial Dimension Object", - "type": "object", - "anyOf": [ - { - "required": [ - "type", - "axis", - "extent" - ] - }, - { - "required": [ - "type", - "axis", - "values" - ] - } - ], - "properties": { - "type": { - "$ref": "#/definitions/type_spatial" - }, - "axis": { - "$ref": "#/definitions/axis_z" - }, - "description": { - "$ref": "#/definitions/description" - }, - "extent": { - "$ref": "#/definitions/extent_open" - }, - "values": { - "$ref": "#/definitions/values" - }, - "step": { - "$ref": "#/definitions/step" - }, - "unit": { - "$ref": "#/definitions/unit" - }, - "reference_system": { - "$ref": "#/definitions/reference_system_spatial" - } - } - }, - "temporal_dimension": { - "title": "Temporal Dimension Object", - "type": "object", - "required": [ - "type", - "extent" - ], - "not": { - "required": ["axis"] - }, - "properties": { - "type": { - "type": "string", - "const": "temporal" - }, - "description": { - "$ref": "#/definitions/description" - }, - "values": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "extent": { - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "type": [ - "string", - "null" - ] - } - }, - "step": { - "type": [ - "string", - "null" - ] - } - } - } - }, - "type_spatial": { - "type": "string", - "const": "spatial" - }, - "axis_xy": { - "type": "string", - "enum": [ - "x", - "y" - ] - }, - "axis_z": { - "type": "string", - "const": "z" - }, - "extent_closed": { - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "type": "number" - } - }, - "extent_open": { - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "type": [ - "number", - "null" - ] - } - }, - "values_numeric": { - "type": "array", - "minItems": 1, - "items": { - "type": "number" - } - }, - "values": { - "type": "array", - "minItems": 1, - "items": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - } - }, - "step": { - "type": [ - "number", - "null" - ] - }, - "unit": { - "type": "string" - }, - "reference_system_spatial": { - "type": [ - "string", - "number", - "object" - ], - "default": 4326 - }, - "description": { - "type": "string" - } - } -} \ No newline at end of file diff --git a/extensions/eo/README.md b/extensions/eo/README.md index 6f3fb4e0b..68ddbe51e 100644 --- a/extensions/eo/README.md +++ b/extensions/eo/README.md @@ -10,7 +10,7 @@ This document explains the fields of the STAC Electro-Optical (EO) Extension to a STAC [Item](../../item-spec/item-spec.md). These fields defined by this extension follow the convention for -[additional fields for a STAC Item](../../item-spec/item-spec.md#additional-fields-for-assets) and are +[additional asset fields for a STAC Item](../../item-spec/item-spec.md#additional-fields-for-assets) and are allowed in either Item Properties or Item Assets. EO data is considered to be data that represents a snapshot of the Earth for a single date and time. It @@ -18,13 +18,13 @@ could consist of multiple spectral bands in any part of the electromagnetic spec data include sensors with visible, short-wave and mid-wave IR bands (e.g., the OLI instrument on Landsat-8), long-wave IR bands (e.g. TIRS aboard Landsat-8). -If the data has been collected by a satellite, it is strongly recommended to use the [`sat` extension](../sat/README.md), which in turn requires the [Instrument Fields](../../item-spec/common-metadata.md#instrument). If the data has been collected on an airborne platform it is strongly recommended to use the [Instrument Fields](../../item-spec/common-metadata.md#instrument). +It is strongly recommended to use [Instrument Fields](../../item-spec/common-metadata.md#instrument) with the EO extension, +to provide information about the platform (satellite, aerial, etc) used to capture the images. For defining view geometry of data, it is strongly recommended to use the [`view` extension](../view/README.md). - Examples: - [Example using bands and cloud_cover](../../examples/extended-item.json) - - [Landsat 8 with bands in Item Asset Definition and Collection Summaries](../item-assets/examples/example-landsat8.json) - [JSON Schema](json-schema/schema.json) ## Item Properties or Item Asset fields @@ -130,13 +130,6 @@ The difference between the `nir`, `nir08`, and `nir09` bands are that the `nir` A number of implementations listed on [STAC Examples on stacspec.org](https://stacspec.org/#examples) are making use of the core EO properties, including the SpaceNet, CBERS, sat-api and Planet implementations. This is not marked as more mature because the eo:bands portion is still being fleshed out. -## Extensions - -The [extensions page](../README.md) gives an overview about related extensions. Of particular relevance to EO data: - -* the [Sat Extension Specification](../sat/README.md) to describe SAR data collected from a satellite. -* the [View Geometry Extension Specification](../view/README.md) to describe angles of sensors collecting earth observation data from above the earth. - ## Best Practices One of the emerging best practices is to use [Asset Roles](../../item-spec/item-spec.md#asset-roles) to provide clients with more diff --git a/extensions/eo/examples/example-landsat8.json b/extensions/eo/examples/example-landsat8.json deleted file mode 100644 index cfb8e0109..000000000 --- a/extensions/eo/examples/example-landsat8.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "eo", - "view" - ], - "id": "LC08_L1TP_107018_20181001_20181001_01_RT", - "collection": "landsat-8-l1", - "type": "Feature", - "bbox": [ - 148.13933, - 59.51584, - 152.52758, - 60.63437 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 152.52758, - 60.63437 - ], - [ - 149.1755, - 61.19016 - ], - [ - 148.13933, - 59.51584 - ], - [ - 151.33786, - 58.97792 - ], - [ - 152.52758, - 60.63437 - ] - ] - ] - }, - "properties": { - "platform": "landsat-8", - "instrument": [ - "oli", - "tirs" - ], - "datetime": "2018-10-01T01:08:32.033Z", - "gsd": 30, - "view:sun_azimuth": 168.8989761, - "view:sun_elevation": 26.32596431, - "view:off_nadir": 0, - "landsat:path": 107, - "landsat:row": 18, - "eo:cloud_cover": 78 - }, - "assets": { - "ANG": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_ANG.txt", - "title": "Angle coefficients file", - "type": "text/plain" - }, - "B1": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B1.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B1", - "common_name": "coastal", - "center_wavelength": 0.44, - "full_width_half_max": 0.02 - } - ], - "title": "Band 1 (coastal)" - }, - "B2": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B2.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B2", - "common_name": "blue", - "center_wavelength": 0.48, - "full_width_half_max": 0.06 - } - ], - "title": "Band 2 (blue)" - }, - "B3": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B3.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B3", - "common_name": "green", - "center_wavelength": 0.56, - "full_width_half_max": 0.06 - } - ], - "title": "Band 3 (green)" - }, - "B4": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B4.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B4", - "common_name": "red", - "center_wavelength": 0.65, - "full_width_half_max": 0.04 - } - ], - "title": "Band 4 (red)" - }, - "B5": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B5.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B5", - "common_name": "nir", - "center_wavelength": 0.86, - "full_width_half_max": 0.03 - } - ], - "title": "Band 5 (nir)" - }, - "B6": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B6.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B6", - "common_name": "swir16", - "center_wavelength": 1.6, - "full_width_half_max": 0.08 - } - ], - "title": "Band 6 (swir16)" - }, - "B7": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B7.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B7", - "common_name": "swir22", - "center_wavelength": 2.2, - "full_width_half_max": 0.2 - } - ], - "title": "Band 7 (swir22)" - }, - "B8": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B8.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B8", - "common_name": "pan", - "center_wavelength": 0.59, - "full_width_half_max": 0.18 - } - ], - "title": "Band 8 (pan)" - }, - "B9": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B9.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B9", - "common_name": "cirrus", - "center_wavelength": 1.37, - "full_width_half_max": 0.02 - } - ], - "title": "Band 9 (cirrus)" - }, - "B10": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B10.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B10", - "common_name": "lwir11", - "center_wavelength": 10.9, - "full_width_half_max": 0.8 - } - ], - "title": "Band 10 (lwir)" - }, - "B11": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B11.TIF", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B11", - "common_name": "lwir12", - "center_wavelength": 12, - "full_width_half_max": 1 - } - ], - "title": "Band 11 (lwir)" - }, - "BQA": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_BQA.TIF", - "title": "Band quality data", - "type": "image/tiff; application=geotiff" - }, - "MTL": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_MTL.txt", - "title": "original metadata file", - "type": "text/plain" - }, - "thumbnail": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_thumb_large.jpg", - "title": "Thumbnail image", - "type": "image/jpeg" - }, - "index": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/index.html", - "type": "text/html", - "title": "HTML index page" - } - }, - "links": [ - { - "rel": "self", - "href": "https://odu9mlf7d6.execute-api.us-east-1.amazonaws.com/stage/search?id=LC08_L1TP_107018_20181001_20181001_01_RT" - }, - { - "rel": "parent", - "href": "https://odu9mlf7d6.execute-api.us-east-1.amazonaws.com/stage/stac/collections/landsat-8-l1" - }, - { - "rel": "root", - "href": "https://odu9mlf7d6.execute-api.us-east-1.amazonaws.com/stage/stac" - } - ] -} \ No newline at end of file diff --git a/extensions/file/README.md b/extensions/file/README.md deleted file mode 100644 index 72bfc8b2a..000000000 --- a/extensions/file/README.md +++ /dev/null @@ -1,103 +0,0 @@ -# File Info Extension Specification - -- **Title: File Info** -- **Identifier: file** -- **Field Name Prefix: file** -- **Scope: Item, Collection** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @m-mohr - -Provides a way to specify file related details such as checksum, data type and size for assets in -[STAC Items](../../item-spec/item-spec.md) as well as [STAC Collections](../../collection-spec/collection-spec.md)  -that implement [collection-level assets](../../collection-spec/collection-spec.md#asset-object). - -- Examples: - - [Item Assets](examples/item.json) - - [Collection Assets](examples/collection.json) -- [JSON Schema](json-schema/schema.json) - -## *Asset Object* fields - -The following fields can be used for assets (in the [`Asset Object`](../../item-spec/item-spec.md#asset-object)). - -| Field Name | Type | Description | -| -------------------- | --------------------------------------- | ------------------------------------------------------------ | -| file:bits_per_sample | integer | Bits per sample, e.g. 8, 16, 32, ... | -| file:byte_order | string | The byte order of integer values in the file. One of `big-endian` or `little-endian`. | -| file:checksum | string | Provides a way to specify file [checksums](#checksums) (e.g. BLAKE2, MD5, SHA1, SHA2, SHA3). The hashes are self-identifying hashes as described in the [Multihash specification](https://github.com/multiformats/multihash) and must be encoded as hexadecimal (base 16) string with lowercase letters. | -| file:data_type | string | The data type of the file. One of the [data types](#data-types) below. | -| file:header_size | integer | The header [size](#sizes) of the file, specified in bytes. | -| file:nodata | \[any] | Value(s) for no-data. | -| file:size | integer | The file [size](#sizes), specified in bytes. | -| file:unit | string | The unit of measurement for the values in the file, preferably compliant to [UDUNITS-2](https://ncics.org/portfolio/other-resources/udunits2/) units (singular). | -| file:values | \[[Mapping Object](#mapping-object)\] | Lists the value that are in the file and describes their meaning. See the [Mapping Object](#mapping-object) chapter for an example. If given, at least one array element is required. | - -**Note:** File specific details should not be part of the [Item Assets Definition](../item-assets/README.md) in Collections. - -### Mapping Object - -Value maps are used by assets that are used as classification layers and give details about the values in the asset and their meanings. - -| Field Name | Data Type | Description | -| ---------- | --------- | ------------------------------------------------------------ | -| values | \[any] | **REQUIRED.** The value(s) in the file. At least one array element is required. | -| summary | string | **REQUIRED.** A short description of the value(s). | - - For example for a cloud cover mask, `file:values` property could contain the following data: - -```json -[ - {"value": [0], "summary": "clear"}, - {"value": [1], "summary": "clouds"}, - {"value": [2], "summary": "cloud shadows"} -] -``` - -### Sizes - -Please be aware that the integer values (always unsigned) given for the sizes (especially `file:size`) may exceed the maximum value for the default integer data type in your environment / programming language. In this specification `integer` specifies a integer number without an upper limit. You might need to use other data types to store the values in. For example, files with a size larger than around 2,14 GB would exceed the maximum value for int32 and in JavaScript `BigInt` could be used then. - -### Data Types - -The data type gives information about the values in the file. -This can be used to indicate the (maximum) range of numerical values expected. -For example `uint8` indicates that the numbers are in a range between 0 and 255, -they can never be smaller or larger. This can help to pick the optimal numerical -data type when reading the files to keep memory consumption low. -Nevertheless, it doesn't necessarily mean that the expected values fill the whole range. -For example, there can be use cases for `uint8` that just use the numbers 0 to 10 for example. -Through other extensions it might be possible to specify an exact value range so -that visualizations can be optimized. -The allowed values for `file:data_type` are: - -- `int8`: 8-bit integer -- `int16`: 16-bit integer -- `int32`: 32-bit integer -- `int64`: 64-bit integer -- `uint8`: unsigned 8-bit integer (common for 8-bit RGB PNG's) -- `uint16`: unsigned 16-bit integer -- `uint32`: unsigned 32-bit integer -- `uint64`: unsigned 64-bit integer -- `float16`: 16-bit float -- `float32`: 32-bit float -- `float64`: 64-big float -- `cint16`: 16-bit complex integer -- `cint32`: 32-bit complex integer -- `cfloat32`: 32-bit complex float -- `cfloat64`: 64-bit complex float -- `other`: Other data type than the ones listed above (e.g. boolean, string, higher precision numbers) - -### Checksums - -`file:checksum` was previously defined in the [`checksum` extension](https://github.com/radiantearth/stac-spec/tree/v1.0.0-beta.2/extensions/checksum/README.md) and the field name was `checksum:multihash` before STAC v1.0.0-beta.3. The specification of the field has not changed. - -Checksum examples for some algorithms supported by [Multihash](https://github.com/multiformats/multihash) in `file:checksum`. The examples are given for a text file with file content `test`. - -- Algorithm `sha1` (160 bits): `1114a94a8fe5ccb19ba61c4c0873d391e987982fbbd3` -- Algorithm `sha2` (256 bits): `12209f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08` -- Algorithm `sha2` (256 bits truncated to 160 bits): `12149f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b` -- Algorithm `blake2b-128`: `90e4021044a8995dd50b6657a037a7839304535b` - -## Implementations - -None yet, still in proposal stage. diff --git a/extensions/file/examples/collection.json b/extensions/file/examples/collection.json deleted file mode 100644 index 47bb28da6..000000000 --- a/extensions/file/examples/collection.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "type": "Collection", - "stac_extensions": [ - "file" - ], - "id": "example", - "title": "File Example", - "description": "This examples shows how to use the file extension for collection assets.", - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -90, - 180, - 90 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2012-01-15T12:00:00Z", - "2014-12-15T12:00:00Z" - ] - ] - } - }, - "license": "Apache-2.0", - "links": [ - { - "href": "https://example.com", - "type": "text/html", - "rel": "about" - } - ], - "assets": { - "thumbnail": { - "href": "logo.png", - "title": "A preview image for visualization.", - "type": "image/png", - "roles": [ - "thumbnail" - ], - "file:data_type": "uint8", - "file:checksum": "90e4021044a8995dd50b6657a037a7839304535b", - "file:nodata": [ - 255 - ], - "file:size": 153600, - "file:bits_per_sample": 8 - } - } -} diff --git a/extensions/file/examples/item.json b/extensions/file/examples/item.json deleted file mode 100644 index bd6d8ef82..000000000 --- a/extensions/file/examples/item.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "id": "S1A_EW_GRDM_1SSH_20181103T235855_20181103T235955_024430_02AD5D_5616", - "type": "Feature", - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "file" - ], - "bbox": [ - -70.275032, - -64.72924, - -65.087479, - -51.105831 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -67.071648, - -64.72924 - ], - [ - -65.087479, - -56.674374 - ], - [ - -68.033211, - -51.105831 - ], - [ - -70.275032, - -59.805672 - ], - [ - -67.071648, - -64.72924 - ] - ] - ] - }, - "properties": { - "datetime": "2018-11-03T23:58:55Z" - }, - "assets": { - "noises": { - "href": "./annotation/calibration/noise-s1a-ew-grd-hh-20181103t235855-20181103t235955-024430-02ad5d-001.xml", - "title": "Calibration Schema", - "type": "text/xml", - "file:checksum": "90e40210a30d1711e81a4b11ef67b28744321659" - }, - "calibrations": { - "href": "./annotation/calibration/calibration-s1a-ew-grd-hh-20181103t235855-20181103t235955-024430-02ad5d-001.xml", - "title": "Noise Schema", - "type": "text/xml", - "file:checksum": "90e402104fc5351af67db0b8f1746efe421a05e4" - }, - "products": { - "href": "./annotation/s1a-ew-grd-hh-20181103t235855-20181103t235955-024430-02ad5d-001.xml", - "title": "Product Schema", - "type": "text/xml", - "file:checksum": "90e402107a7f2588a85362b9beea2a12d4514d45" - }, - "measurement": { - "href": "./measurement/s1a-ew-grd-hh-20181103t235855-20181103t235955-024430-02ad5d-001.tiff", - "title": "Measurements", - "type": "image/tiff", - "sar:polarizations": [ - "HH" - ], - "file:byte_order": "little-endian", - "file:data_type": "uint16", - "file:size": 209715200, - "file:header_size": 4096, - "file:checksum": "90e40210163700a8a6501eccd00b6d3b44ddaed0" - }, - "thumbnail": { - "href": "./preview/quick-look.png", - "title": "Thumbnail", - "type": "image/png", - "file:byte_order": "big-endian", - "file:data_type": "uint8", - "file:size": 146484, - "file:checksum": "90e40210f52acd32b09769d3b1871b420789456c" - } - }, - "links": [ - { - "rel": "self", - "href": "https://example.com/collections/sentinel-1/items/S1A_EW_GRDM_1SSH_20181103T235855_20181103T235955_024430_02AD5D_5616" - }, - { - "rel": "parent", - "href": "https://example.com/collections/sentinel-1", - "file:checksum": "11146d97123fd2c02dec9a1b6d3b13136dbe600cf966" - }, - { - "rel": "root", - "href": "https://example.com/collections", - "file:checksum": "1114fa4b9d69fdddc7c1be7bed9440621400b383b43f" - } - ] -} diff --git a/extensions/file/json-schema/schema.json b/extensions/file/json-schema/schema.json deleted file mode 100644 index d8e2aeafe..000000000 --- a/extensions/file/json-schema/schema.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/file/json-schema/schema.json#", - "title": "File Info Extension Specification", - "description": "STAC File Info Extension to a STAC Item, Catalog or Collection", - "oneOf": [ - { - "allOf": [ - { - "$ref": "../../../item-spec/json-schema/item.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "$ref": "#/definitions/file_assets" - } - ] - }, - { - "allOf": [ - { - "$ref": "../../../collection-spec/json-schema/collection.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "$ref": "#/definitions/file_assets" - } - ] - } - ], - "definitions": { - "stac_extensions": { - "type": "object", - "required": [ - "stac_extensions" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "file", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/file/json-schema/schema.json" - ] - } - } - } - }, - "file_assets": { - "type": "object", - "properties": { - "assets": { - "type": "object", - "patternProperties": { - ".+": { - "$ref": "#/definitions/file" - } - } - } - } - }, - "file": { - "type": "object", - "properties": { - "file:bits_per_sample": { - "type": "integer", - "minimum": 0, - "title": "Bits per Sample" - }, - "file:byte_order": { - "type": "string", - "enum": [ - "big-endian", - "little-endian" - ], - "title": "File Byte Order" - }, - "file:checksum": { - "type": "string", - "pattern": "^[a-f0-9]+$", - "title": "File Checksum (Multihash)" - }, - "file:data_type": { - "type": "string", - "enum": [ - "int8", - "int16", - "int32", - "int64", - "uint8", - "uint16", - "uint32", - "uint64", - "float16", - "float32", - "float64", - "cint16", - "cint32", - "cfloat32", - "cfloat64", - "other" - ], - "title": "File Data Type" - }, - "file:header_size": { - "type": "integer", - "minimum": 0, - "title": "File Header Size" - }, - "file:nodata": { - "type": "array", - "items": { - "description": "Any data type is allowed" - }, - "title": "No data values" - }, - "file:size": { - "type": "integer", - "minimum": 0, - "title": "File Size" - }, - "file:unit": { - "type": "string", - "title": "Unit" - }, - "file:values": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "values", - "summary" - ], - "properties": { - "values": { - "type": "array", - "minItems": 1, - "items": { - "description": "Any data type is allowed" - } - }, - "summary": { - "type": "string" - } - } - }, - "title": "Value Map" - } - } - } - } -} diff --git a/extensions/item-assets/README.md b/extensions/item-assets/README.md deleted file mode 100644 index cbc05ed53..000000000 --- a/extensions/item-assets/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Item Assets Definition Specification - -- **Title: Item Assets Definition** -- **Identifier: item-assets** -- **Field Name Prefix: -** -- **Scope: Collection** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @matthewhanson - -A Collection extension to provide details about assets that are available in member Items. - -- [Example](examples/example-landsat8.json) -- [JSON Schema](json-schema/schema.json) - -This extension serves two purposes: - -1. Provide a human-readable definition of assets available in any Items belonging to this Collection so that the user can determine the key(s) of assets they are interested in. -2. Provide a way to programmatically determine what assets are available in any member Item. - Otherwise a random Item needs to be examined to determine assets available, but a random Item may not be representative of the set. - -## Collection fields - -This extension introduces a single new field, `item_assets` at the top level of a Collection. -An Asset Object defined at the Collection level is nearly the same as the [Asset Object in Items](../../item-spec/item-spec.md#asset-object), except for two differences. -The `href` field is not required, because Collections don't point to any data by themselves, but at least two other fields must be present. - -| Field Name | Type | Description | -| ----------- | ------------------------------------------ | ----------- | -| item_assets | Map | **REQUIRED.** A dictionary of assets that can be found in member Items | - -### Asset Object - -An asset is an object that contains details about the datafiles that will be included in member Items. -Assets included at the Collection level do not imply that all assets are available from all Items. -However, it is recommended that the Asset Definition is a complete set of all assets that may be available from any member Items. - -| Field Name | Type | Description | -| ----------- | --------- | ----------- | -| title | string | The displayed title for clients and users. | -| description | string | A description of the Asset providing additional details, such as how it was processed or created. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| type | string | [Media type](../../catalog-spec/catalog-spec.md#media-types) of the asset. | -| roles | \[string] | The [semantic roles](../../item-spec/item-spec.md#asset-role-types) of the asset, similar to the use of `rel` in links. | - -Other custom fields, or fields from other extensions may also be included in the Asset object. - -Any property that exists for a Collection-level asset object must also exist in the corresponding assets object in each Item. If a collection's asset object contains properties that are not explicitly stated in the Item's asset object then that property does not apply to the item's asset. Item asset objects at the Collection-level can describe any of the properties of an asset, but those assets properties and values must also reside in the item's asset object. -To consolidate item-level asset object properties in an API setting, consider storing the STAC Items without the larger properties internally as 'invalid' STAC items, and merge in the desired properties at serving time from the Collection-level. - -At least two fields (e.g. `title` and `type`) are required to be provided, in order for it to adequately describe Item assets. -The two fields must not necessarily be taken from the list above and may include any custom field. - -## Implementations - -- AWS Public Dataset catalogs, [landsat-8](http://landsat-stac.s3.amazonaws.com/landsat-8-l1/catalog.json) and [sentinel-2](http://sentinel-stac.s3.amazonaws.com/sentinel-2-l1c/catalog.json) define an Asset definition at the Collection level. diff --git a/extensions/item-assets/examples/example-landsat8.json b/extensions/item-assets/examples/example-landsat8.json deleted file mode 100644 index 6d2401e12..000000000 --- a/extensions/item-assets/examples/example-landsat8.json +++ /dev/null @@ -1,311 +0,0 @@ -{ - "id": "landsat-8-l1", - "type": "Collection", - "title": "Landsat 8 L1", - "description": "Landat 8 imagery radiometrically calibrated and orthorectified using gound points and Digital Elevation Model (DEM) data to correct relief displacement.", - "keywords": [ - "landsat", - "earth observation", - "usgs" - ], - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "item-assets" - ], - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -90, - 180, - 90 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2013-06-01T00:00:00Z", - null - ] - ] - } - }, - "providers": [ - { - "name": "USGS", - "roles": [ - "producer" - ], - "url": "https://landsat.usgs.gov/" - }, - { - "name": "Planet Labs", - "roles": [ - "processor" - ], - "url": "https://github.com/landsat-pds/landsat_ingestor" - }, - { - "name": "AWS", - "roles": [ - "host" - ], - "url": "https://landsatonaws.com/" - }, - { - "name": "Development Seed", - "roles": [ - "processor" - ], - "url": "https://github.com/sat-utils/sat-api" - } - ], - "license": "PDDL-1.0", - "summaries": { - "gsd": [ - 15 - ], - "platform": [ - "landsat-8" - ], - "instruments": [ - "oli", - "tirs" - ], - "view:off_nadir": [ - 0 - ], - "eo:bands": [ - { - "name": "B1", - "common_name": "coastal", - "center_wavelength": 0.44, - "full_width_half_max": 0.02 - }, - { - "name": "B2", - "common_name": "blue", - "center_wavelength": 0.48, - "full_width_half_max": 0.06 - }, - { - "name": "B3", - "common_name": "green", - "center_wavelength": 0.56, - "full_width_half_max": 0.06 - }, - { - "name": "B4", - "common_name": "red", - "center_wavelength": 0.65, - "full_width_half_max": 0.04 - }, - { - "name": "B5", - "common_name": "nir", - "center_wavelength": 0.86, - "full_width_half_max": 0.03 - }, - { - "name": "B6", - "common_name": "swir16", - "center_wavelength": 1.6, - "full_width_half_max": 0.08 - }, - { - "name": "B7", - "common_name": "swir22", - "center_wavelength": 2.2, - "full_width_half_max": 0.2 - }, - { - "name": "B8", - "common_name": "pan", - "center_wavelength": 0.59, - "full_width_half_max": 0.18 - }, - { - "name": "B9", - "common_name": "cirrus", - "center_wavelength": 1.37, - "full_width_half_max": 0.02 - }, - { - "name": "B10", - "common_name": "lwir11", - "center_wavelength": 10.9, - "full_width_half_max": 0.8 - }, - { - "name": "B11", - "common_name": "lwir12", - "center_wavelength": 12, - "full_width_half_max": 1 - } - ] - }, - "item_assets": { - "thumbnail": { - "type": "image/jpeg", - "title": "Thumbnail", - "description": "A medium sized thumbnail", - "roles": [ - "thumbnail" - ] - }, - "metadata": { - "type": "mtl", - "roles": [ - "metadata" - ], - "title": "Original Metadata", - "description": "The original MTL metadata file provided for each Landsat scene" - }, - "B1": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B1", - "common_name": "coastal", - "center_wavelength": 0.44, - "full_width_half_max": 0.02 - } - ], - "title": "Coastal Band (B1)", - "description": "Coastal Band Top Of the Atmosphere" - }, - "B2": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B2", - "common_name": "blue", - "center_wavelength": 0.48, - "full_width_half_max": 0.06 - } - ], - "title": "Blue Band (B2)", - "description": "Blue Band Top Of the Atmosphere" - }, - "B3": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B3", - "common_name": "green", - "center_wavelength": 0.56, - "full_width_half_max": 0.06 - } - ], - "title": "Green Band (B3)", - "description": "Green Band (B3) Top Of the Atmosphere" - }, - "B4": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B4", - "common_name": "red", - "center_wavelength": 0.65, - "full_width_half_max": 0.04 - } - ], - "title": "Red Band (B4)", - "description": "Red Band (B4) Top Of the Atmosphere" - }, - "B5": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B5", - "common_name": "nir", - "center_wavelength": 0.86, - "full_width_half_max": 0.03 - } - ], - "title": "NIR Band (B5)", - "description": "NIR Band (B5) Top Of the Atmosphere" - }, - "B6": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B6", - "common_name": "swir16", - "center_wavelength": 1.6, - "full_width_half_max": 0.08 - } - ], - "title": "SWIR Band (B6)", - "description": "SWIR Band at 1.6um (B6) Top Of the Atmosphere" - }, - "B7": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B7", - "common_name": "swir22", - "center_wavelength": 2.2, - "full_width_half_max": 0.2 - } - ], - "title": "SWIR Band (B7)", - "description": "SWIR Band at 2.2um (B7) Top Of the Atmosphere" - }, - "B8": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B8", - "common_name": "pan", - "center_wavelength": 0.59, - "full_width_half_max": 0.18 - } - ], - "title": "Panchromatic Band (B8)", - "description": "Panchromatic Band (B8) Top Of the Atmosphere" - }, - "B9": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B9", - "common_name": "cirrus", - "center_wavelength": 1.37, - "full_width_half_max": 0.02 - } - ], - "title": "Cirrus Band (B9)", - "description": "Cirrus Band (B9) Top Of the Atmosphere - for cirrus cloud detection" - }, - "B10": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B10", - "common_name": "lwir11", - "center_wavelength": 10.9, - "full_width_half_max": 0.8 - } - ], - "title": "LWIR Band (B10)", - "description": "Long-wave IR Band at 11um (B10) Top Of the Atmosphere" - }, - "B11": { - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B11", - "common_name": "lwir12", - "center_wavelength": 12, - "full_width_half_max": 1 - } - ], - "title": "LWIR Band (B11)", - "description": "Long-wave IR Band at 12um (B11) Top Of the Atmosphere" - } - }, - "links": [] -} diff --git a/extensions/item-assets/json-schema/schema.json b/extensions/item-assets/json-schema/schema.json deleted file mode 100644 index fdb3bbc0a..000000000 --- a/extensions/item-assets/json-schema/schema.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/item-assets/json-schema/schema.json#", - "title": "Asset Definition Extension Specification", - "description": "STAC Asset Definition Extension to a STAC Collection", - "allOf": [ - { - "$ref": "../../../collection-spec/json-schema/collection.json" - }, - { - "$ref": "#/definitions/item_assets" - } - ], - "definitions": { - "item_assets": { - "title": "Item Assets Definition", - "type": "object", - "required": [ - "stac_extensions", - "item_assets" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "item-assets", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/item-assets/json-schema/schema.json" - ] - } - }, - "item_assets": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/asset" - } - } - } - }, - "asset": { - "type": "object", - "minProperties": 2, - "properties": { - "title": { - "title": "Asset title", - "type": "string" - }, - "description": { - "title": "Asset description", - "type": "string" - }, - "type": { - "title": "Asset type", - "type": "string" - }, - "roles": { - "title": "Asset roles", - "type": "array", - "items": { - "type": "string" - } - } - } - } - } -} \ No newline at end of file diff --git a/extensions/label/README.md b/extensions/label/README.md deleted file mode 100644 index b9ef6e558..000000000 --- a/extensions/label/README.md +++ /dev/null @@ -1,173 +0,0 @@ -# Label Extension Specification - -- **Title: Label** -- **Identifier: label** -- **Field Name Prefix: label** -- **Scope: Item** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @jisantuc - -This extension is meant to support using labeled AOIs with Machine Learning models, particularly training data sets, but can be used in any application where labeled AOIs are needed. - -This document explains the fields of the STAC Label Extension to a STAC Item. It is used to describe labeled Areas of Interest (AOIs) that are used with earth observation imagery. These labels can take several forms, though all are expected to be contained with a GeoJSON `FeatureCollection`: -- **Tile classification labels:** A GeoJSON `FeatureCollection` with a single `Feature`. This feature's geometry should match the bounds of the labeled image tile, and a `Feature` property should define the class (see below). -- **Tile regression labels:** A GeoJSON `FeatureCollection` with a single `Feature`. This feature's geometry should match the bounds of the labeled image tile, and a `Feature` property should define the regression value (see below). -- **Object detection labels:** A GeoJSON `FeatureCollection` containing rectangular bounding boxes (as `Polygon` geometry `Feature`s) defining the bounds of an object of interest (e.g. a car). A `Feature` property **must** define the class of the object labeled. Additional `Feature` properties may be defined for additional metadata. -- **Segmentation labels:** A GeoJSON `FeatureCollection` containing `Polygon` geometry `Feature`s that trace the boundaries of objects of interest (e.g. buildings, vegetation, bodies of water), or raster-formatted pixel masks defining pixel classes. (See [raster label notes](#raster-label-notes)) - -## Examples - -**Roads:** -- [Example Roads Item](examples/spacenet-roads/roads_item.json) -- [Example Roads Asset (labels)](examples/spacenet-roads/spacenetroads_AOI_3_Paris_img101.geojson) -- [Example Roads Source Imagery Item](examples/spacenet-roads/roads_source.json) -- [Example Roads Collection](examples/spacenet-roads/roads_collection.json) - -**Buildings:** -- [Example Collection of Two Building Footprint Label Catalogs](examples/multidataset/catalog.json) -- [Example SpaceNet Buildings Collection](examples/multidataset/spacenet-buildings/collection.json) -- [Example SpaceNet Buildings (Vegas) Item](examples/multidataset/spacenet-buildings/AOI_2_Vegas_img2636.json) -- [Example SpaceNet Buildings (Paris) Item](examples/multidataset/spacenet-buildings/AOI_3_Paris_img1648.json) -- [Example SpaceNet Buildings (Shanghai) Item](examples/multidataset/spacenet-buildings/AOI_4_Shanghai_img3344.json) -- [Example World Bank Zanzibar Buildings Collection](examples/multidataset/zanzibar/collection.json) -- [Example World Bank Zanzibar Building Item 1](examples/multidataset/zanzibar/znz001.json) -- [Example World Bank Zanzibar Building Item 2](examples/multidataset/zanzibar/znz029.json) -## Schema -- [JSON Schema](json-schema/schema.json) - -## Fields - -A Label Item represents a polygon, set of polygons, or raster data defining labels and label metadata and should be part of a Collection. See the [raster label notes](#raster-label-notes) section below for details on raster-formatted labels. It is up to the data provider how to group their catalog, but a typical use might have a Collection of a series of label sets (Items) that are related. For example a "Building" Collection might have 50 Items, each one was a set of building AOIs for a single country. The Collection holds details on the data providers and the license. - -Like other extensions, the Label extension adds additional fields to a STAC Item, which are detailed after some additional clarification on what the core fields mean with respect to a Label Item. - -### Item fields -Some additional notes are given here for some of the core STAC Item fields and what they represent for label. - -- **bbox** and **geometry**: The bounding box and the geometry of a Label Item represents the region for which the label(s) is/are valid. The geometry _must_ include areas for which labeling was attempted but no features were identified, if such areas exist. For example, consider a cloud labeling object detection task for this chip taken from a Sentinel-2 image, which happens not to have any clouds. The geometry for the label Item with this Item as its `source` must be the geometry of the image (or whatever area within the image was considered), even though the label Item's asset won't have any features. - -![](./images/cuba-island.png) - -- **properties.datetime**: The datetime of a Label Item is the nominal datetime for which the label applies, typically this is the datetime of the source imagery used to generate the labels. If the label applies over a range of datetimes (e.g., generated from multiple source images) then use the [Date and Time Range fields](../../item-spec/common-metadata.md#date-and-time-range) to indicate start and end datetimes. -- **assets**: The label assets are GeoJSON FeatureCollection assets containing the actual label features. As with the core STAC Item a thumbnail asset is also strongly encouraged. - -### Item Properties fields -| Field Name | Type | Name | Description | -| ----------------- | -------------------------------- | -------------------------- | ----------- | -| label:properties | \[string]\|null | Name | **REQUIRED** These are the names of the property field(s) in each `Feature` of the label asset's `FeatureCollection` that contains the classes (keywords from `label:classes` if the property defines classes). If labels are rasters, use `null`. | -| label:classes | \[[Class Object](#class-object)] | Classes | **REQUIRED** if using categorical data. A Class Object defining the list of possible class names for each `label:properties`. (e.g., tree, building, car, hippo) | -| label:description | string | Description | **REQUIRED** A description of the label, how it was created, and what it is recommended for. [CommonMark 0.29](https://commonmark.org/) syntax MAY be used for rich text representation. | -| label:type | string | Type | **REQUIRED** An ENUM of either `vector` label type or `raster` label type | -| label:tasks | \[string] | Task | Recommended to be a subset of 'regression', 'classification', 'detection', or 'segmentation', but may be an arbitrary value | -| label:methods | \[string] | Method | Recommended to be a subset of 'automated' or 'manual', but may be an arbitrary value. | -| label:overviews | \[[Label Overview Object](#label-overview-object)] | Overview | An Object storing counts (for classification-type data) or summary statistics (for continuous numerical/regression data). | - -#### Class Object -| Field Name | Type | Name | Description | -| ---------- | -------------------- | ------- | ----------- | -| name | string\|null | Name | **REQUIRED** The property key within the asset's each `Feature` corresponding to class labels. If labels are raster-formatted, use null. | -| classes | \[string]\|\[number] | Classes | **REQUIRED** The different possible class values within the property `name`. | - -#### Label Overview Object - -| Field Name | Type | Name | Description | -| ------------ | -------------------------------- | ------------ | ----------- | -| property_key | string | Property Key | The property key within the asset corresponding to class labels. | -| counts | \[[Count Object](#count-object)] | Counts | An object containing counts for categorical data. | -| statistics | \[[Stats Object](#stats-object)] | Statistics | An object containing statistics for regression/continuous numeric value data. | - -`label:overviews ` generally won't have both counts and statistics, but one of the two. - -#### Count Object - -| Field Name | Type | Name | Description | -| ---------- | ------- | ---------- | ----------- | -| name | string | Class Name | The different possible classes within the property `name`. | -| count | integer | Count | The number of occurrences of the class. | - -```json - { - "property_key": "road_type", - "counts": [ - { - "name": "dirt", - "count": 10 - }, - { - "name": "paved", - "count": 99 - } - ] - } - -``` - -#### Stats Object - -| Field Name | Type | Name | Description | -| ---------- | ------ | --------- | ----------- | -| name | string | Stat Name | The name of the statistic being reported. | -| value | number | Value | The value of the statistic `name`. | - -```json - { - "property_key": "elevation", - "statistics": [ - { - "name": "mean", - "value": 100.1 - }, - { - "name": "median", - "value": 102.3 - }, - { - "name": "max", - "value": 100000 - } - ] - } - -``` - -#### Assets - -##### labels (required) - -The Label Extension requires an asset with the key "labels". The asset will contain a link to the actual label data. This asset has these requirements: - -- is a GeoJSON FeatureCollection -- if `label:tasks` is tile_classification, object_detection, or segmentation, each feature should have one or more properties containing the label(s) for the class (one of `label:classes`). the name of the property can be anything (use "label" if making from scratch), but needs to be specified in the `Item` with the `label:properties` field. -- if `label:tasks` is tile_regression, each feature should have one or more properties defining the value for regression. the name of the property can be anything (use "label" if making from scratch), but needs to be specified in the `Item` with the `label:properties` field. - -##### Raster Label Notes - -If the labels are formatted as rasters - for example, a pixel mask with 1s where there is water and 0s where there is land - the following approach is recommended for including those data. - -The raster label file (e.g. a GeoTIFF) should be included as an asset under the item. Along with the image file, a GeoJSON `FeatureCollection` asset should be included. That `FeatureCollection` should contain a single `Feature`, ideally a polygon geometry defining the extent of the raster. - -##### Rendered images (optional) -The source imagery used for creating the label is linked to under `links` (see below). However the source imagery is likely to have been rendered in some way when creating the training data. For instance, a byte-scaled true color image may have been created from the source imagery. It may be useful to save this image and include it as an asset in the `Item`. - -#### Links: source imagery -A Label Item links to any source imagery that the AOI applies to by linking to the STAC Item representing the imagery. Source imagery is indicated by using a `rel` type of "source" and providing the link to the STAC Item. - -In addition the source imagery link has a new label extension specific field: - -| Field Name | Type | Name | Description | -| ------------ | --------- | ------ | ----------- | -| label:assets | \[string] | Assets | The keys for the assets within the `source` Item to which this label Item applies. | - -The `label:assets` field applies to situations where the labels may apply to certain assets inside the source imagery Item, but not others (e.g. if the labels were traced on top of RGB imagery, but the source Item also contains assets for a Digital Elevation Model). - -## Implementations - -The SpaceNet Challenge Round 2 dataset has a [STAC catalog](https://spacenet-dataset.s3.amazonaws.com/spacenet-stac/SN2_buildings/catalog.json) generated using [PySTAC](https://pystac.readthedocs.io/en/latest) containing Label Items. Further example implementations can be found in [Examples](#Examples). The Roads implementation provides an example item for labels from the [SpaceNet Road Network Extraction Challenge Dataset](https://spacenet.ai/spacenet-roads-dataset/), providing segmentation labels for road networks. The Misc Samples implementation provides an example catalog of Collections with sample label items from several training datasets, [SpaceNet Buildings](https://spacenet.ai/spacenet-buildings-dataset-v2/) and [Open AI Tanzania Building Footprint Segmentation Challenge](https://competitions.codalab.org/competitions/20100) for now, providing segmentation labels for buildings. - -[Raster Foundry](https://rasterfoundry.azavea.com/) supports exporting STAC-compliant training data label items, assets, and sources in a self-contained `zip` file and as an s3 directory when initiated from an internal annotation and labeling tool. - -[PySTAC](https://pystac.readthedocs.io/en/latest/) supports [reading/writing](https://pystac.readthedocs.io/en/latest/tutorials/how-to-create-stac-catalogs.html#Adding-label-items-to-the-Spacenet-5-catalog) STAC Collections according to this extension. - -## Extensions -While the EO extension doesn't make sense within a Label Item itself, most Label Items will link to source data which will frequently use the EO Extension. -The [extensions page](../README.md) gives an overview about these and other extensions. diff --git a/extensions/label/examples/multidataset/catalog.json b/extensions/label/examples/multidataset/catalog.json deleted file mode 100644 index 00394fc8a..000000000 --- a/extensions/label/examples/multidataset/catalog.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": "label_extension_demo", - "title": "label extension demo", - "description": "Sample ML training data labels in the STAC format", - "stac_version": "1.0.0-beta.2", - "links": [ - { - "rel": "root", - "href": "./catalog.json" - }, - { - "rel": "child", - "href": "zanzibar/collection.json" - }, - { - "rel": "child", - "href": "spacenet-buildings/collection.json" - } - ] -} \ No newline at end of file diff --git a/extensions/label/examples/multidataset/spacenet-buildings/AOI_2_Vegas_img2636.json b/extensions/label/examples/multidataset/spacenet-buildings/AOI_2_Vegas_img2636.json deleted file mode 100644 index 56855b32c..000000000 --- a/extensions/label/examples/multidataset/spacenet-buildings/AOI_2_Vegas_img2636.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "label", - "version" - ], - "id": "AOI_2_Vegas_img2636", - "type": "Feature", - "bbox": [ - -115.23556259985658, - 36.12654269972625, - -115.23412932899998, - 36.12829769972975 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -115.23556259985658, - 36.12654269972625 - ], - [ - -115.23556259985658, - 36.12829769972975 - ], - [ - -115.23412932899998, - 36.12829769972975 - ], - [ - -115.23412932899998, - 36.12654269972625 - ] - ] - ] - }, - "assets": { - "labels": { - "title": "AOI_2_Vegas_img2636_label", - "href": "https://spacenet-dataset.s3.amazonaws.com/spacenet/SN2_buildings/train/AOI_2_Vegas/geojson_buildings/SN2_buildings_train_AOI_2_Vegas_geojson_buildings_img2636.geojson", - "type": "application/geo+json", - "license": "CC-BY-SA-4.0" - }, - "raster": { - "title": "AOI_2_Vegas_img2636_previewcog", - "href": "https://spacenet-dataset.s3.amazonaws.com/AOIs/AOI_2_Vegas/PS-MS/AOI_2_Vegas_PS-MS_COG.tif", - "type": "image/tiff; application=geotiff; profile=cloud-optimized" - } - }, - "properties": { - "datetime": "2016-08-26T22:41:55.000000Z", - "label:properties": [ - "OBJECTID_1" - ], - "label:description": "building footprints manually labeled", - "label:tasks": [ - "segmentation" - ], - "label:type": "vector", - "label:methods": [ - "manual" - ], - "version": "1", - "label:classes": [ - { - "name": "OBJECTID_1", - "classes": [ - "0" - ] - } - ], - "label:overviews": [ - { - "property_key": "OBJECTID_1", - "counts": [ - { - "name": "0", - "count": 27 - } - ] - } - ] - }, - "links": [ - { - "rel": "root", - "href": "../catalog.json" - }, - { - "rel": "parent", - "href": "collection.json" - }, - { - "rel": "collection", - "href": "collection.json" - }, - { - "rel": "source", - "href": "https://spacenet-dataset.s3.amazonaws.com/spacenet/SN2_buildings/train/AOI_2_Vegas/PS-RGB/SN2_buildings_train_AOI_2_Vegas_PS-RGB_img2636.tif", - "title": "The source imagery these building labels were derived from", - "label:assets": "OBJECTID_1" - } - ] -} \ No newline at end of file diff --git a/extensions/label/examples/multidataset/spacenet-buildings/AOI_3_Paris_img1648.json b/extensions/label/examples/multidataset/spacenet-buildings/AOI_3_Paris_img1648.json deleted file mode 100644 index 9b15184b0..000000000 --- a/extensions/label/examples/multidataset/spacenet-buildings/AOI_3_Paris_img1648.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "label", - "version" - ], - "id": "AOI_3_Paris_img1648", - "type": "Feature", - "bbox": [ - 2.288201399928881, - 49.00383090002822, - 2.289956399928177, - 49.00558590002751 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 2.288201399928881, - 49.00383090002822 - ], - [ - 2.289956399928177, - 49.00383090002822 - ], - [ - 2.289956399928177, - 49.00558590002751 - ], - [ - 2.288201399928881, - 49.00558590002751 - ] - ] - ] - }, - "assets": { - "labels": { - "title": "AOI_3_Paris_img1648_label", - "href": "https://spacenet-dataset.s3.amazonaws.com/spacenet/SN2_buildings/train/AOI_3_Paris/geojson_buildings/SN2_buildings_train_AOI_3_Paris_geojson_buildings_img1648.geojson", - "type": "application/geo+json", - "license": "CC-BY-SA-4.0" - }, - "raster": { - "title": "AOI_3_Paris_img1648_previewcog", - "href": "https://spacenet-dataset.s3.amazonaws.com/AOIs/AOI_3_Paris/PS-MS/AOI_3_Paris_PS-MS_COG.tif", - "type": "image/tiff; application=geotiff; profile=cloud-optimized", - "license": "CC-BY-SA-4.0" - } - }, - "properties": { - "datetime": "2016-08-26T22:41:55.000000Z", - "label:properties": [ - "OBJECTID_1" - ], - "label:description": "building footprints manually labeled", - "label:tasks": [ - "segmentation" - ], - "label:type": "vector", - "label:methods": [ - "manual" - ], - "version": "1", - "label:classes": [ - { - "name": "OBJECTID_1", - "classes": [ - "0" - ] - } - ], - "label:overviews": [ - { - "property_key": "OBJECTID_1", - "counts": [ - { - "name": "0", - "count": 39 - } - ] - } - ] - }, - "links": [ - { - "rel": "root", - "href": "../catalog.json" - }, - { - "rel": "parent", - "href": "collection.json" - }, - { - "rel": "collection", - "href": "collection.json" - }, - { - "rel": "source", - "href": "https://spacenet-dataset.s3.amazonaws.com/spacenet/SN2_buildings/train/AOI_3_Paris/PS-RGB/SN2_buildings_train_AOI_3_Paris_PS-RGB_img1648.tif", - "title": "The source imagery these building labels were derived from", - "label:assets": "OBJECTID_1" - } - ] -} \ No newline at end of file diff --git a/extensions/label/examples/multidataset/spacenet-buildings/AOI_4_Shanghai_img3344.json b/extensions/label/examples/multidataset/spacenet-buildings/AOI_4_Shanghai_img3344.json deleted file mode 100644 index 2dd26e13f..000000000 --- a/extensions/label/examples/multidataset/spacenet-buildings/AOI_4_Shanghai_img3344.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "label", - "version" - ], - "id": "AOI_4_Shanghai_img3344", - "type": "Feature", - "bbox": [ - 121.66563419996653, - 31.234725900085653, - 121.66738919996575, - 31.236480900084874 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 121.66563419996653, - 31.234725900085653 - ], - [ - 121.66563419996653, - 31.236480900084874 - ], - [ - 121.66738919996575, - 31.236480900084874 - ], - [ - 121.66738919996575, - 31.234725900085653 - ] - ] - ] - }, - "assets": { - "labels": { - "title": "AOI_4_Shanghai_img3344_label", - "href": "https://spacenet-dataset.s3.amazonaws.com/spacenet/SN2_buildings/train/AOI_4_Shanghai/geojson_buildings/SN2_buildings_train_AOI_4_Shanghai_geojson_buildings_img3344.geojson", - "type": "application/geo+json", - "license": "CC-BY-SA-4.0" - }, - "raster": { - "title": "AOI_4_Shanghai_img3344_previewcog", - "href": "https://spacenet-dataset.s3.amazonaws.com/AOIs/AOI_4_Shanghai/PS-MS/AOI_4_Shanghai_PS-MS_COG.tif", - "type": "image/tiff; application=geotiff; profile=cloud-optimized" - } - }, - "properties": { - "datetime": "2016-08-26T22:41:55.000000Z", - "label:properties": [ - "OBJECTID_1" - ], - "label:description": "building footprints manually labeled", - "label:tasks": [ - "segmentation" - ], - "label:type": "vector", - "label:methods": [ - "manual" - ], - "version": "1", - "label:classes": [ - { - "name": "OBJECTID_1", - "classes": [ - "0" - ] - } - ], - "label:overviews": [ - { - "property_key": "OBJECTID_1", - "counts": [ - { - "name": "0", - "count": 8 - } - ] - } - ] - }, - "links": [ - { - "rel": "root", - "href": "../catalog.json" - }, - { - "rel": "parent", - "href": "collection.json" - }, - { - "rel": "collection", - "href": "collection.json" - }, - { - "rel": "source", - "href": "https://spacenet-dataset.s3.amazonaws.com/spacenet/SN2_buildings/train/AOI_4_Shanghai/PS-RGB/SN2_buildings_train_AOI_4_Shanghai_PS-RGB_img3344.tif", - "title": "The source imagery these building labels were derived from", - "label:assets": "OBJECTID_1" - } - ] -} \ No newline at end of file diff --git a/extensions/label/examples/multidataset/spacenet-buildings/collection.json b/extensions/label/examples/multidataset/spacenet-buildings/collection.json deleted file mode 100644 index 119d4f41b..000000000 --- a/extensions/label/examples/multidataset/spacenet-buildings/collection.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "id": "spacenet-buildings-collection", - "title": "spacenet-buildings AoI", - "description": "Collection of training labels for spacenet-buildings", - "extent": { - "spatial": { - "bbox": [ - [ - -115.23556259985658, - 31.234725900085653, - 121.66738919996575, - 49.00558590002751 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2016-08-28T00:00:00Z", - null - ] - ] - } - }, - "collection version": "1.0", - "keywords": [ - "demo" - ], - "license": "CC-BY-SA-4.0", - "providers": [ - { - "name": "SpaceNet", - "roles": [ - "licensor", - "host", - "producer", - "processor" - ], - "url": "https://spacenet.ai" - } - ], - "links": [ - { - "rel": "root", - "href": "../catalog.json" - }, - { - "rel": "parent", - "href": "../catalog.json" - }, - { - "rel": "item", - "href": "AOI_2_Vegas_img2636.json" - }, - { - "rel": "item", - "href": "AOI_3_Paris_img1648.json" - }, - { - "rel": "item", - "href": "AOI_4_Shanghai_img3344.json" - } - ] -} diff --git a/extensions/label/examples/multidataset/zanzibar/collection.json b/extensions/label/examples/multidataset/zanzibar/collection.json deleted file mode 100644 index b16f2e73b..000000000 --- a/extensions/label/examples/multidataset/zanzibar/collection.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "id": "zanzibar-collection", - "title": "zanzibar AoI", - "description": "Collection of training labels for zanzibar", - "extent": { - "spatial": { - "bbox": [ - [ - 39.28919876472999, - -5.878778696206506, - 39.356865475223195, - -5.722212794937691 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2016-08-28T00:00:00Z", - null - ] - ] - } - }, - "collection version": "1.0", - "keywords": [ - "demo" - ], - "license": "CC-BY-4.0", - "providers": [ - { - "name": "Commission for Lands (COLA) ; Revolutionary Government of Zanzibar (RGoZ)", - "roles": [ - "licensor" - ], - "url": "http://www.zanzibarmapping.com/" - }, - { - "name": "Zanzibar Mapping Initiative", - "roles": [ - "producer" - ], - "url": "http://www.zanzibarmapping.com/" - }, - { - "name": "OpenStreetMap", - "roles": [ - "producer" - ], - "url": "https://www.openstreetmap.org" - }, - { - "name": "WeRobotics", - "roles": [ - "processor" - ], - "url": "https://werobotics.org/" - }, - { - "name": "World Bank", - "roles": [ - "processor" - ], - "url": "https://www.worldbank.org" - } - ], - "links": [ - { - "rel": "root", - "href": "../catalog.json" - }, - { - "rel": "parent", - "href": "../catalog.json" - }, - { - "rel": "item", - "href": "znz001.json" - }, - { - "rel": "item", - "href": "znz029.json" - } - ] -} diff --git a/extensions/label/examples/multidataset/zanzibar/znz001.json b/extensions/label/examples/multidataset/zanzibar/znz001.json deleted file mode 100644 index 385df4c00..000000000 --- a/extensions/label/examples/multidataset/zanzibar/znz001.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "label", - "version" - ], - "id": "znz001", - "type": "Feature", - "bbox": [ - 39.28919876472999, - -5.743028283012867, - 39.31302874892266, - -5.722212794937691 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 39.28919876472999, - -5.743028283012867 - ], - [ - 39.31302874892266, - -5.743028283012867 - ], - [ - 39.31302874892266, - -5.722212794937691 - ], - [ - 39.28919876472999, - -5.722212794937691 - ] - ] - ] - }, - "assets": { - "labels": { - "title": "znz001_label", - "href": "https://www.dropbox.com/sh/ct3s1x2a846x3yl/AAARCAOqhcRdoU7ULOb9GJl9a/grid_001.geojson?dl=1", - "type": "application/geo+json", - "license": "CC-BY-4.0" - }, - "raster": { - "title": "znz001_previewcog", - "href": "https://oin-hotosm.s3.amazonaws.com/5afeda152b6a08001185f11a/0/5afeda152b6a08001185f11b.tif", - "type": "image/tiff; application=geotiff; profile=cloud-optimized" - }, - "thumbnail": { - "title": "znz001_thumbnail", - "href": "https://oin-hotosm.s3.amazonaws.com/5afeda152b6a08001185f11a/0/5afeda152b6a08001185f11b.png", - "type": "image/png" - } - }, - "properties": { - "datetime": "2019-04-23T00:00:00Z", - "label:properties": [ - "building", - "condition" - ], - "label:description": "building footprints manually labeled and classified according to building completion status", - "label:tasks": [ - "segmentation" - ], - "label:type": "vector", - "label:methods": [ - "manual" - ], - "version": "1", - "label:classes": [ - { - "name": "building", - "classes": [ - "yes" - ] - }, - { - "name": "condition", - "classes": [ - "Complete", - "Incomplete", - "Foundation" - ] - } - ], - "label:overviews": [ - { - "property_key": "building", - "counts": [ - { - "name": "yes", - "count": 4440 - } - ] - } - ] - }, - "links": [ - { - "rel": "root", - "href": "../catalog.json" - }, - { - "rel": "parent", - "href": "collection.json" - }, - { - "rel": "collection", - "href": "collection.json" - }, - { - "rel": "source", - "href": "https://oin-hotosm.s3.amazonaws.com/5afeda152b6a08001185f11a/0/5afeda152b6a08001185f11b.tif", - "title": "The source imagery these building labels were derived from", - "label:assets": "building" - } - ] -} \ No newline at end of file diff --git a/extensions/label/examples/multidataset/zanzibar/znz029.json b/extensions/label/examples/multidataset/zanzibar/znz029.json deleted file mode 100644 index 40b24c578..000000000 --- a/extensions/label/examples/multidataset/zanzibar/znz029.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "label", - "version" - ], - "id": "znz029", - "type": "Feature", - "bbox": [ - 39.3411063109548, - -5.878778696206506, - 39.356865475223195, - -5.851576529338078 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 39.3411063109548, - -5.878778696206506 - ], - [ - 39.3411063109548, - -5.851576529338078 - ], - [ - 39.356865475223195, - -5.851576529338078 - ], - [ - 39.356865475223195, - -5.878778696206506 - ] - ] - ] - }, - "assets": { - "labels": { - "title": "znz029_label", - "href": "https://www.dropbox.com/sh/ct3s1x2a846x3yl/AADHytc8fSCf3gna0wNAW3lZa/grid_029.geojson?dl=1", - "type": "application/geo+json", - "license": "CC-BY-4.0" - }, - "raster": { - "title": "znz029_previewcog", - "href": "https://oin-hotosm.s3.amazonaws.com/5ae242fd0b093000130afd38/0/5ae242fd0b093000130afd39.tif", - "type": "image/tiff; application=geotiff; profile=cloud-optimized" - }, - "thumbnail": { - "title": "znz029_thumbnail", - "href": "https://oin-hotosm.s3.amazonaws.com/5ae242fd0b093000130afd38/0/5ae242fd0b093000130afd39.png", - "type": "image/png" - } - }, - "properties": { - "datetime": "2019-04-23T00:00:00Z", - "label:properties": [ - "building", - "condition" - ], - "label:description": "building footprints manually labeled and classified according to building completion status", - "label:tasks": [ - "segmentation" - ], - "label:type": "vector", - "label:methods": [ - "manual" - ], - "version": "1", - "label:classes": [ - { - "name": "building", - "classes": [ - "yes" - ] - }, - { - "name": "condition", - "classes": [ - "Complete", - "Incomplete", - "Foundation" - ] - } - ], - "label:overviews": [ - { - "property_key": "building", - "counts": [ - { - "name": "yes", - "count": 1612 - } - ] - } - ] - }, - "links": [ - { - "rel": "root", - "href": "../catalog.json" - }, - { - "rel": "parent", - "href": "collection.json" - }, - { - "rel": "collection", - "href": "collection.json" - }, - { - "rel": "source", - "href": "https://oin-hotosm.s3.amazonaws.com/5ae242fd0b093000130afd38/0/5ae242fd0b093000130afd39.tif", - "title": "The source imagery these building labels were derived from", - "label:assets": "building" - } - ] -} \ No newline at end of file diff --git a/extensions/label/examples/spacenet-roads/roads_collection.json b/extensions/label/examples/spacenet-roads/roads_collection.json deleted file mode 100644 index 77128f816..000000000 --- a/extensions/label/examples/spacenet-roads/roads_collection.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "id": "spacenet-roads-sample", - "description": "A sample of the SpaceNet Roads dataset built during STAC Sprint 4. The dataset contains hand-labeled roads.", - "keywords": [ - "spacenet", - "roads", - "labels" - ], - "license": "CC-BY-SA-4.0", - "providers": [ - { - "name": "SpaceNet", - "roles": [ - "licensor", - "host", - "producer", - "processor" - ], - "url": "https://spacenet.ai" - } - ], - "extent": { - "spatial": { - "bbox": [ - [ - 2.23379639995, - 49.0178709, - 2.23730639995, - 49.0213809 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2016-08-26T22:41:55.000000Z", - null - ] - ] - } - }, - "links": [ - { - "href": "roads_collection.json", - "rel": "root", - "title": "sample SpaceNet roads label collection" - }, - { - "rel": "item", - "href": "roads_item.json" - } - ] -} diff --git a/extensions/label/examples/spacenet-roads/roads_item.json b/extensions/label/examples/spacenet-roads/roads_item.json deleted file mode 100644 index ef0db0b61..000000000 --- a/extensions/label/examples/spacenet-roads/roads_item.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "label", - "version" - ], - "id": "AOI_3_Paris_img101", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 2.23379639995, - 49.0178709 - ], - [ - 2.23730639995, - 49.0178709 - ], - [ - 2.23730639995, - 49.0213809 - ], - [ - 2.23379639995, - 49.0213809 - ] - ] - ] - }, - "bbox": [ - 2.23379639995, - 49.0178709, - 2.23730639995, - 49.0213809 - ], - "properties": { - "datetime": "2016-08-26T22:41:55.000000Z", - "title": "AOI 3 Paris img101 road network labels", - "label:properties": [ - "road_type", - "lane_number", - "paved" - ], - "label:type": "vector", - "label:description": "sample SpaceNet roads label", - "label:classes": [ - { - "name": "road_type", - "classes": [ - "1", - "2", - "3", - "4", - "5", - "6" - ] - }, - { - "name": "lane_number", - "classes": [ - "1", - "2", - "3", - "4", - "5" - ] - }, - { - "name": "paved", - "classes": [ - "0", - "1" - ] - } - ], - "label:tasks": [ - "segmentation" - ], - "label:methods": [ - "manual" - ], - "version": "1", - "label:overviews": [ - { - "property_key": "road_type", - "counts": [ - { - "name": "1", - "count": 0 - }, - { - "name": "2", - "count": 0 - }, - { - "name": "3", - "count": 0 - }, - { - "name": "4", - "count": 0 - }, - { - "name": "5", - "count": 15 - }, - { - "name": "6", - "count": 4 - } - ] - }, - { - "property_key": "lane_number", - "statistics": [ - { - "name": "mean", - "value": 1.8 - }, - { - "name": "max", - "value": 2 - } - ] - }, - { - "property_key": "paved", - "counts": [ - { - "name": "1", - "count": 19 - } - ] - } - ] - }, - "links": [ - { - "href": "roads_collection.json", - "rel": "root", - "title": "sample SpaceNet roads label collection" - }, - { - "href": "roads_collection.json", - "rel": "parent", - "title": "sample SpaceNet roads label collection" - }, - { - "href": "roads_collection.json", - "rel": "collection", - "title": "sample SpaceNet roads label collection" - }, - { - "href": "roads_source.json", - "rel": "source", - "title": "The source imagery these road labels were derived from", - "label:assets": "road_labels" - } - ], - "assets": { - "road_labels": { - "href": "spacenetroads_AOI_3_Paris_img101.geojson", - "title": "AOI_3_Paris_img101_roads", - "type": "application/geo+json" - } - } -} diff --git a/extensions/label/examples/spacenet-roads/roads_source.json b/extensions/label/examples/spacenet-roads/roads_source.json deleted file mode 100644 index 99a11ad61..000000000 --- a/extensions/label/examples/spacenet-roads/roads_source.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [], - "type": "Feature", - "bbox": [ - 2.23379639995, - 49.0178709, - 2.23730639995, - 49.0213809 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 2.23379639995, - 49.0178709 - ], - [ - 2.23730639995, - 49.0178709 - ], - [ - 2.23730639995, - 49.0213809 - ], - [ - 2.23379639995, - 49.0213809 - ] - ] - ] - }, - "id": "AOI_3_Paris_img101", - "properties": { - "collection": "imagery", - "datetime": "2016-08-26T22:41:55.000000Z" - }, - "assets": { - "rgb": { - "title": "RGB Pan Sharpened (primary)", - "href": "https://spacenet-dataset.s3.amazonaws.com/SpaceNet_Roads_Competition/Train/AOI_3_Paris_Roads_Train/RGB-PanSharpen/RGB-PanSharpen_AOI_3_Paris_img101.tif", - "type": "image/tiff; application=geotiff" - }, - "multi": { - "title": "8 band multispectral", - "href": "https://spacenet-dataset.s3.amazonaws.com/SpaceNet_Roads_Competition/Train/AOI_3_Paris_Roads_Train/MUL/MUL_AOI_3_Paris_img101.tif", - "type": "image/tiff; application=geotiff" - }, - "multi-pan": { - "title": "8 band pan-sharpened multispectral", - "href": "https://spacenet-dataset.s3.amazonaws.com/SpaceNet_Roads_Competition/Train/AOI_3_Paris_Roads_Train/MUL-PanSharpen/MUL-PanSharpen_AOI_3_Paris_img101.tif", - "type": "image/tiff; application=geotiff" - }, - "pan": { - "title": "Single band panchromatic", - "href": "https://spacenet-dataset.s3.amazonaws.com/SpaceNet_Roads_Competition/Train/AOI_3_Paris_Roads_Train/PAN/PAN_AOI_3_Paris_img101.tif", - "type": "image/tiff; application=geotiff" - } - }, - "links": [] -} \ No newline at end of file diff --git a/extensions/label/examples/spacenet-roads/spacenetroads_AOI_3_Paris_img101.geojson b/extensions/label/examples/spacenet-roads/spacenetroads_AOI_3_Paris_img101.geojson deleted file mode 100644 index adac52ddf..000000000 --- a/extensions/label/examples/spacenet-roads/spacenetroads_AOI_3_Paris_img101.geojson +++ /dev/null @@ -1,25 +0,0 @@ -{ -"type": "FeatureCollection", -"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, -"features": [ -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 1341, "road_type": "5", "origarea": 0, "origlen": 0.0083851293635207637, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23651228818259, 49.0178709 ], [ 2.23684989867, 49.018264519600002 ], [ 2.23697827602, 49.018392896949997 ], [ 2.23701291753, 49.018588519600002 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 2411, "road_type": "5", "origarea": 0, "origlen": 0.0078374931327305046, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.236978806598071, 49.0178709 ], [ 2.23691054121, 49.018103470809997 ], [ 2.23684989867, 49.018264519600002 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 32, "road_type": "5", "origarea": 0, "origlen": 0.005262307903355825, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23596022399, 49.019704335199997 ], [ 2.23593526172, 49.019707901229999 ], [ 2.23552312965, 49.019777693690003 ], [ 2.23511863908, 49.019857165380003 ], [ 2.23487716738, 49.019916259719999 ], [ 2.23457456361, 49.019998788030001 ], [ 2.2341619221, 49.020117995569997 ], [ 2.2339204504, 49.020199505009998 ], [ 2.23379639995, 49.020242708786981 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 1237, "road_type": "5", "origarea": 0, "origlen": 0.0032547106719565929, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23640881665, 49.02041910178 ], [ 2.23540901644, 49.02078127859 ], [ 2.23495052587, 49.020935127649999 ], [ 2.23463263908, 49.021051278590001 ], [ 2.23435754474, 49.021152146520002 ], [ 2.23429131832, 49.021176599349999 ], [ 2.23392860134, 49.021292750290002 ], [ 2.23379639995, 49.021343939380436 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 458, "road_type": "5", "origarea": 0, "origlen": 0.001344537627113142, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.237206484589297, 49.0213809 ], [ 2.23715818979, 49.021341624110001 ], [ 2.23698498224, 49.021139888260002 ], [ 2.23682603885, 49.020954454300004 ], [ 2.23659781243, 49.020665095810003 ], [ 2.2365144475, 49.020561846790002 ], [ 2.23644268251, 49.020471758479999 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 269, "road_type": "6", "origarea": 0, "origlen": 0.00042561371007552261, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23429131832, 49.021176599349999 ], [ 2.2344758479381, 49.0213809 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 3204, "road_type": "5", "origarea": 0, "origlen": 0.0049925728413408917, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.2371828655, 49.018442467269999 ], [ 2.23722623428, 49.018421229060003 ], [ 2.23730639995, 49.018381970975128 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 362, "road_type": "5", "origarea": 0, "origlen": 0.0010420871748481001, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23379639995, 49.018320599340164 ], [ 2.23391606848, 49.018532481859999 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "1", "lane_number": "1", "one_way_ty": "2", "paved": "1", "road_id": 213, "road_type": "6", "origarea": 0, "origlen": 0.00053774020025546617, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23500116282, 49.018414293180001 ], [ 2.23469020512, 49.01808993897 ], [ 2.23476865795, 49.018049184250003 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 2133, "road_type": "5", "origarea": 0, "origlen": 0.00043513581403347709, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23722623428, 49.018421229060003 ], [ 2.2371828655, 49.018442467269999 ], [ 2.23714160135, 49.018422089909997 ], [ 2.23705856361, 49.018405788019997 ], [ 2.23697827602, 49.018392896949997 ], [ 2.23693579003, 49.018311033309999 ], [ 2.23689401644, 49.018239712549999 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 818, "road_type": "5", "origarea": 0, "origlen": 0.013601301936360558, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23730639995, 49.018038874181883 ], [ 2.23722738923, 49.0180770479 ], [ 2.23705723829, 49.018143274309999 ], [ 2.23689401644, 49.018239712549999 ], [ 2.23684989867, 49.018264519600002 ], [ 2.23630837036, 49.018501915820003 ], [ 2.23603123829, 49.018632330919999 ], [ 2.23547289866, 49.018887047900002 ], [ 2.23522327602, 49.01898587809 ], [ 2.2349604081, 49.019106104499997 ], [ 2.23470772885, 49.01922021771 ], [ 2.23442754017, 49.019347576199998 ], [ 2.23428902995, 49.01941302609 ], [ 2.23424210621, 49.01943519884 ], [ 2.23381010621, 49.019628783750001 ], [ 2.23379639995, 49.01963472537976 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 2391, "road_type": "5", "origarea": 0, "origlen": 0.00029178304063897428, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23704450244, 49.018660859219999 ], [ 2.23703296011, 49.018634423569999 ], [ 2.23705907305, 49.018523976700003 ], [ 2.23710390323, 49.018483221990003 ], [ 2.2371828655, 49.018442467269999 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "1", "lane_number": "1", "one_way_ty": "2", "paved": "1", "road_id": 469, "road_type": "6", "origarea": 0, "origlen": 0.00058927465279848463, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23547289866, 49.018887047900002 ], [ 2.23514614047, 49.018396666720001 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 3012, "road_type": "5", "origarea": 0, "origlen": 0.0072082119124253973, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23684989867, 49.018264519600002 ], [ 2.23672406848, 49.018209500730002 ], [ 2.23650501187, 49.018232934689998 ], [ 2.23622584206, 49.018261462989997 ], [ 2.23565935149, 49.018332783749997 ], [ 2.23533637036, 49.018373538459997 ], [ 2.23514614047, 49.018396666720001 ], [ 2.23500116282, 49.018414293180001 ], [ 2.23451923829, 49.018479500730002 ], [ 2.23391606848, 49.018532481859999 ], [ 2.23379639995, 49.018549365785418 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 1683, "road_type": "5", "origarea": 0, "origlen": 0.0015379471530766596, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23428902995, 49.01941302609 ], [ 2.23404096337, 49.019358907129998 ], [ 2.23379639995, 49.019306970272403 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "1", "lane_number": "1", "one_way_ty": "2", "paved": "1", "road_id": 610, "road_type": "5", "origarea": 0, "origlen": 0.0016873310040949839, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23730639995, 49.019173802966776 ], [ 2.23730462022, 49.019174523869999 ], [ 2.23709982776, 49.019234637079997 ], [ 2.23704073342, 49.019233618210002 ], [ 2.23695311078, 49.019266221990001 ], [ 2.23633873342, 49.019430259719996 ], [ 2.23623888436, 49.01944859935 ], [ 2.23606262021, 49.019505655949999 ], [ 2.23584495513, 49.019562358569999 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 197, "road_type": "5", "origarea": 0, "origlen": 0.0029264847460930988, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23644268251, 49.020471758479999 ], [ 2.23640881665, 49.02041910178 ], [ 2.23632243153, 49.020286108779999 ], [ 2.23629084663, 49.02023567482 ], [ 2.23618590323, 49.020072655950003 ], [ 2.23602594097, 49.019838316330002 ], [ 2.23596022399, 49.019704335199997 ], [ 2.23593526172, 49.019707901229999 ], [ 2.23584495513, 49.019562358569999 ], [ 2.23583031833, 49.01953876916 ], [ 2.23571926172, 49.01933601444 ], [ 2.23569379002, 49.019294240859999 ], [ 2.23570907304, 49.019237184250002 ], [ 2.23580280889, 49.019182165380002 ], [ 2.23606975229, 49.019074165379998 ], [ 2.23635707304, 49.018939674819997 ], [ 2.23703296011, 49.018634423569999 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "1", "lane_number": "1", "one_way_ty": "2", "paved": "1", "road_id": 871, "road_type": "6", "origarea": 0, "origlen": 0.0018047015170918751, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23632243153, 49.020286108779999 ], [ 2.23681963908, 49.020096599349998 ], [ 2.23685428059, 49.020087429539998 ], [ 2.23690828059, 49.020080297459998 ], [ 2.2369714504, 49.020071127649999 ], [ 2.23730639995, 49.019944799693256 ] ] } }, -{ "type": "Feature", "properties": { "bridge_typ": "2", "heading": "0", "lane_numbe": "2", "lane_number": "2", "one_way_ty": "2", "paved": "1", "road_id": 372, "road_type": "5", "origarea": 0, "origlen": 0.0047752606718936613, "partialDec": 1, "truncated": 0 }, "geometry": { "type": "LineString", "coordinates": [ [ 2.23701291753, 49.018588519600002 ], [ 2.23703296011, 49.018634423569999 ], [ 2.23704450244, 49.018660859219999 ], [ 2.23713620055, 49.0187311611 ], [ 2.23730639995, 49.018907711224209 ] ] } } -] -} diff --git a/extensions/label/images/cuba-island.png b/extensions/label/images/cuba-island.png deleted file mode 100755 index e525bd2be..000000000 Binary files a/extensions/label/images/cuba-island.png and /dev/null differ diff --git a/extensions/label/json-schema/schema.json b/extensions/label/json-schema/schema.json deleted file mode 100644 index ab87afc44..000000000 --- a/extensions/label/json-schema/schema.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/label/json-schema/schema.json#", - "title": "Label Extension", - "description": "STAC Label Data Item Extension Spec", - "allOf": [ - { - "$ref": "../../../item-spec/json-schema/item.json" - }, - { - "$ref": "#/definitions/label" - } - ], - "definitions": { - "label": { - "type": "object", - "required": [ - "stac_extensions", - "properties" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "label", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/label/json-schema/schema.json" - ] - } - }, - "properties": { - "type": "object", - "required": [ - "label:properties", - "label:description", - "label:type" - ], - "properties": { - "label:properties": { - "title": "Property", - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "label:classes": { - "title": "Classes", - "type": "array", - "items": { - "type": "object", - "required": [ - "name", - "classes" - ], - "properties": { - "name": { - "title": "Name", - "type": "string" - }, - "classes": { - "title": "Classes", - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "array", - "items": { - "type": "number" - } - } - ] - } - } - } - }, - "label:description": { - "title": "Description", - "type": "string" - }, - "label:type": { - "title": "Type", - "type": "string", - "enum": [ - "raster", - "vector" - ] - }, - "label:tasks": { - "title": "Task", - "type": "array", - "items": { - "type": "string" - } - }, - "label:methods": { - "title": "Method", - "type": "array", - "items": { - "type": "string" - } - }, - "label:overviews": { - "title": "Overview", - "type": "array", - "items": { - "type": "object", - "properties": { - "property_key": { - "title": "Property Key", - "type": "string" - }, - "counts": { - "title": "Counts", - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "title": "Class Name", - "type": "string" - }, - "count": { - "title": "Count", - "type": "integer" - } - } - } - }, - "statistics": { - "title": "Statistics", - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "title": "Stat Name", - "type": "string" - }, - "value": { - "title": "Value", - "type": "number" - } - } - } - } - } - } - } - } - } - } - } - } -} diff --git a/extensions/pointcloud/README.md b/extensions/pointcloud/README.md deleted file mode 100644 index 2cab950d9..000000000 --- a/extensions/pointcloud/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# Point Cloud Extension Specification - -- **Title: Point Cloud** -- **Identifier: pointcloud** -- **Field Name Prefix: pc** -- **Scope: Item** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @matthewhanson - -This document explains the fields of the Point Cloud Extension to a STAC Item, -which allows STAC to more fully describe point cloud datasets. The point clouds can -come from either active or passive sensors, and data is frequently acquired using -tools such as LiDAR or coincidence-matched imagery. - -- [Example](examples/example-autzen.json) -- [JSON Schema](json-schema/schema.json) - -## Item Properties fields - -| Field Name | Type | Description | -| ------------- | --------------------------------- | ----------- | -| pc:count | integer | **REQUIRED.** The number of points in the Item. | -| pc:type | string | **REQUIRED.** Phenomenology type for the point cloud. Possible valid values might include `lidar`, `eopc`, `radar`, `sonar`, or `other` | -| pc:encoding | string | **REQUIRED.** Content encoding or format of the data. | -| pc:schemas | [[Schema Object](#schema-object)] | **REQUIRED.** A sequential array of Items that define the dimensions and their types. | -| pc:density | number | Number of points per square unit area. | -| pc:statistics | [[Stats Object](#stats-object)] | A sequential array of Items mapping to `pc:schemas` defines per-channel statistics. | - -### Schema Object - -A sequential array of Items that define the dimensions or channels of -the point cloud, their types, and their sizes (in full bytes). - -| Field Name | Type | Description | -| ---------- | ------- | -------------------------- | -| name | string | **REQUIRED.** The name of the dimension. | -| size | integer | **REQUIRED.** The size of the dimension in bytes. Whole bytes only are supported. | -| type | string | **REQUIRED.** Dimension type. Valid values are `floating`, `unsigned`, and `signed` | - -### Stats Object - -A sequential array of Items mapping to `pc:schemas` defines per-channel statistics. The channel name is required and at least one statistic. - -| Field Name | Type | Description | -| ---------- | ------- | ----------- | -| name | string | **REQUIRED.** The name of the channel. | -| position | integer | Position of the channel in the schema. | -| average | number | The average of the channel. | -| count | integer | The number of elements in the channel. | -| maximum | number | The maximum value of the channel. | -| minimum | number | The minimum value of the channel. | -| stddev | number | The standard deviation of the channel. | -| variance | number | The variance of the channel. | - -## Implementations - -None yet, still in proposal stage. diff --git a/extensions/pointcloud/examples/example-autzen.json b/extensions/pointcloud/examples/example-autzen.json deleted file mode 100644 index a9bfbf87e..000000000 --- a/extensions/pointcloud/examples/example-autzen.json +++ /dev/null @@ -1,302 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "pointcloud" - ], - "assets": {}, - "bbox": [ - -123.0755422, - 44.04971882, - 123.791472, - -123.0619599, - 44.06278031, - 187.531248 - ], - "geometry": { - "coordinates": [ - [ - [ - -123.07498674, - 44.04971882 - ], - [ - -123.07554223, - 44.06248623 - ], - [ - -123.0625126, - 44.06278031 - ], - [ - -123.06195992, - 44.05001283 - ], - [ - -123.07498674, - 44.04971882 - ] - ] - ], - "type": "Polygon" - }, - "id": "autzen-full.laz", - "links": [ - { - "href": "/Users/hobu/dev/git/pdal/test/data/autzen/autzen-full.laz", - "rel": "self" - } - ], - "properties": { - "datetime": "2013-07-17T00:00:00Z", - "pc:count": 10653336, - "pc:density": 0, - "pc:encoding": "LASzip", - "pc:schemas": [ - { - "name": "X", - "size": 8, - "type": "floating" - }, - { - "name": "Y", - "size": 8, - "type": "floating" - }, - { - "name": "Z", - "size": 8, - "type": "floating" - }, - { - "name": "Intensity", - "size": 2, - "type": "unsigned" - }, - { - "name": "ReturnNumber", - "size": 1, - "type": "unsigned" - }, - { - "name": "NumberOfReturns", - "size": 1, - "type": "unsigned" - }, - { - "name": "ScanDirectionFlag", - "size": 1, - "type": "unsigned" - }, - { - "name": "EdgeOfFlightLine", - "size": 1, - "type": "unsigned" - }, - { - "name": "Classification", - "size": 1, - "type": "unsigned" - }, - { - "name": "ScanAngleRank", - "size": 4, - "type": "floating" - }, - { - "name": "UserData", - "size": 1, - "type": "unsigned" - }, - { - "name": "PointSourceId", - "size": 2, - "type": "unsigned" - }, - { - "name": "GpsTime", - "size": 8, - "type": "floating" - }, - { - "name": "Red", - "size": 2, - "type": "unsigned" - }, - { - "name": "Green", - "size": 2, - "type": "unsigned" - }, - { - "name": "Blue", - "size": 2, - "type": "unsigned" - } - ], - "pc:statistics": [ - { - "average": 637294.1783, - "count": 10653336, - "maximum": 639003.73, - "minimum": 635577.79, - "name": "X", - "position": 0, - "stddev": 967.9329805, - "variance": 936894.2548 - }, - { - "average": 851247.6953, - "count": 10653336, - "maximum": 853537.66, - "minimum": 848882.15, - "name": "Y", - "position": 1, - "stddev": 1322.356387, - "variance": 1748626.415 - }, - { - "average": 434.1025002, - "count": 10653336, - "maximum": 615.26, - "minimum": 406.14, - "name": "Z", - "position": 2, - "stddev": 24.67893148, - "variance": 609.0496589 - }, - { - "average": 77.14742312, - "count": 10653336, - "maximum": 254, - "minimum": 0, - "name": "Intensity", - "position": 3, - "stddev": 62.62422344, - "variance": 3921.793362 - }, - { - "average": 1.17801438, - "count": 10653336, - "maximum": 4, - "minimum": 1, - "name": "ReturnNumber", - "position": 4, - "stddev": 0.4653418642, - "variance": 0.2165430505 - }, - { - "average": 1.358579791, - "count": 10653336, - "maximum": 4, - "minimum": 1, - "name": "NumberOfReturns", - "position": 5, - "stddev": 0.6656066447, - "variance": 0.4430322055 - }, - { - "average": 0.4989654884, - "count": 10653336, - "maximum": 1, - "minimum": 0, - "name": "ScanDirectionFlag", - "position": 6, - "stddev": 0.4999993213, - "variance": 0.2499993213 - }, - { - "average": 0, - "count": 10653336, - "maximum": 0, - "minimum": 0, - "name": "EdgeOfFlightLine", - "position": 7, - "stddev": 0, - "variance": 0 - }, - { - "average": 1.256686262, - "count": 10653336, - "maximum": 2, - "minimum": 1, - "name": "Classification", - "position": 8, - "stddev": 0.436805292, - "variance": 0.1907988632 - }, - { - "average": -0.812061405, - "count": 10653336, - "maximum": 20, - "minimum": -21, - "name": "ScanAngleRank", - "position": 9, - "stddev": 8.484319324, - "variance": 71.98367439 - }, - { - "average": 126.4052859, - "count": 10653336, - "maximum": 156, - "minimum": 115, - "name": "UserData", - "position": 10, - "stddev": 3.833000243, - "variance": 14.69189086 - }, - { - "average": 7329.903705, - "count": 10653336, - "maximum": 7334, - "minimum": 7326, - "name": "PointSourceId", - "position": 11, - "stddev": 3.107430355, - "variance": 9.656123408 - }, - { - "average": 121.3214254, - "count": 10653336, - "maximum": 255, - "minimum": 35, - "name": "Red", - "position": 12, - "stddev": 45.56263834, - "variance": 2075.954013 - }, - { - "average": 126.2526972, - "count": 10653336, - "maximum": 255, - "minimum": 49, - "name": "Green", - "position": 13, - "stddev": 36.85451838, - "variance": 1358.255525 - }, - { - "average": 111.2207554, - "count": 10653336, - "maximum": 255, - "minimum": 49, - "name": "Blue", - "position": 14, - "stddev": 31.95561927, - "variance": 1021.161603 - }, - { - "average": 247608.4011, - "count": 10653336, - "maximum": 249783.703, - "minimum": 245369.8966, - "name": "GpsTime", - "position": 15, - "stddev": 1178.538827, - "variance": 1388953.768 - } - ], - "pc:type": "lidar", - "title": "USGS 3DEP LiDAR" - }, - "type": "Feature" -} diff --git a/extensions/pointcloud/json-schema/schema.json b/extensions/pointcloud/json-schema/schema.json deleted file mode 100644 index 582c15940..000000000 --- a/extensions/pointcloud/json-schema/schema.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/pointcloud/json-schema/schema.json#", - "title": "Point Cloud Extension", - "description": "STAC Point Cloud Extension to a STAC Item", - "allOf": [ - { - "$ref": "../../../item-spec/json-schema/item.json" - }, - { - "$ref": "#/definitions/pointcloud" - } - ], - "definitions": { - "pointcloud": { - "type": "object", - "required": [ - "stac_extensions", - "properties" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "pointcloud", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/pointcloud/json-schema/schema.json" - ] - } - }, - "properties": { - "type": "object", - "required": [ - "pc:count", - "pc:type", - "pc:encoding", - "pc:schemas" - ], - "properties": { - "pc:count": { - "type": "integer", - "minimum": 0 - }, - "pc:type": { - "type": "string" - }, - "pc:encoding": { - "type": "string" - }, - "pc:schemas": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/schema" - } - }, - "pc:density": { - "type": "number", - "minimum": 0 - }, - "pc:statistics": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/stats" - } - } - } - } - } - }, - "schema": { - "type": "object", - "required": [ - "name", - "size", - "type" - ], - "properties": { - "name": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "type": { - "type": "string", - "enum": [ - "floating", - "unsigned", - "signed" - ] - } - } - }, - "stats": { - "type": "object", - "minProperties": 2, - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "average": { - "type": "number" - }, - "count": { - "type": "integer" - }, - "maximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "stddev": { - "type": "number" - }, - "variance": { - "type": "number" - } - } - } - } -} diff --git a/extensions/pointcloud/pdal-to-stac.py b/extensions/pointcloud/pdal-to-stac.py deleted file mode 100755 index d862f13d0..000000000 --- a/extensions/pointcloud/pdal-to-stac.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env python - -# Read 'pdal info --all' output and emit a STAC pc object -# conda create -n pdal-stac -c conda-forge pdal -# conda activate pdal-stac -# pdal info --all ~/dev/git/pdal/test/data/autzen/autzen-full.laz |./pdal-to-stac.py - -import sys -import json -import os - - -data = sys.stdin.read() - -j = json.loads(data) - -def capture_date(pdalinfo): - import datetime - year = pdalinfo['metadata']['creation_year'] - day = pdalinfo['metadata']['creation_doy'] - date = datetime.datetime(int(year), 1, 1) + datetime.timedelta(int(day) - 1) - return date.astimezone().isoformat()+'Z' - -def convertGeometry(geom, srs): - import ogr - import osr - in_ref = osr.SpatialReference() - in_ref.SetFromUserInput(srs) - out_ref = osr.SpatialReference() - out_ref.SetFromUserInput('EPSG:4326') - - g = ogr.CreateGeometryFromJson(json.dumps(geom)) - g.AssignSpatialReference(in_ref) - g.TransformTo(out_ref) - return json.loads(g.ExportToJson()) - - -def convertBBox(obj): - output = [] - output.append(float(obj['minx'])) - output.append(float(obj['miny'])) - output.append(float(obj['minz'])) - output.append(float(obj['maxx'])) - output.append(float(obj['maxy'])) - output.append(float(obj['maxz'])) - return output - - -output = {} - -try: - output['geometry'] = convertGeometry(j['boundary']['boundary_json'],j['metadata']['comp_spatialreference']) -except KeyError: - output['geometry'] = j['stats']['bbox']['EPSG:4326']['boundary'] - -output['bbox'] = convertBBox(j['stats']['bbox']['EPSG:4326']['bbox']) -output['id'] = os.path.basename(j['filename']) -output['type'] = 'Feature' - -assets = {} -#assets['thumbnail'] = -properties = {} - -properties['pc:schemas'] = j['schema']['dimensions'] -properties['pc:statistics'] = j['stats']['statistic'] -properties['title'] = "USGS 3DEP LiDAR" -properties['item:provider'] = "USGS" -properties['item:license'] = 'LICENSE' -properties['pc:type'] = 'lidar' # eopc, lidar, radar, sonar -try: - properties['pc:density'] = j['boundary']['avg_pt_per_sq_unit'] -except KeyError: - properties['pc:density'] = 0 -properties['pc:count'] = j['metadata']['count'] - -properties['pc:encoding'] = 'LASzip' if bool(j['metadata']['compressed']) else 'None' - -properties['datetime'] = capture_date(j) - -output['properties'] = properties -output['assets'] = assets - -link = {'rel':'self',"href":j['filename']} -output['links'] = [link] - -sys.stdout.write(json.dumps(output,sort_keys=True, - indent=2, separators=(',', ': '))) diff --git a/extensions/processing/README.md b/extensions/processing/README.md deleted file mode 100644 index a74075d4b..000000000 --- a/extensions/processing/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# Processing Extension Specification - -- **Title: Processing** -- **Identifier: processing** -- **Field Name Prefix: processing** -- **Scope: Item, Collection** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @emmanuelmathot - -Processing metadata is considered to be data that indicate from which processing chain a data originates and how the data itself has been produced. Overall, it helps to increase traceability and search among processing levels and multiple algorithm versions. - -Often, data items are the result of one or more waterfall processing pipeline. Tracing information such as the processing facility, the algorithm version or the processing date helps in the data version management. - -This extension applies to STAC Items and STAC Collections. As these processing information are often closely bound to the Collection level and therefore are shared across all items, it is recommended adding the fields to the corresponding STAC Collection. - -- [Examples](examples/): [Sentinel-1 Item](examples/sentinel1-item.json), [Sentinel-2 Level 1C Collection](examples/sentinel2-collection.json) -- [JSON Schema](json-schema/schema.json) - -## Item Properties and Collection Fields - -* For Items, the fields are placed in the properties. Additionally, STAC allows all Item properties to be used in the Asset Object. -* For Collections, the fields are placed in the [Provider Objects](../../collection-spec/collection-spec.md#Provider-Object) for the `providers` that have the role `producer` or `processor` assigned. - -| Field Name | Type | Description | -| ----------------------- | ------------------- | ----------- | -| processing:lineage | string | Lineage Information provided as free text information about the how observations were processed or models that were used to create the resource being described [NASA ISO](https://wiki.earthdata.nasa.gov/display/NASAISO/Lineage+Information). For example, `GRD Post Processing` for "GRD" product of Sentinel-1 satellites. [CommonMark 0.29](https://commonmark.org/) syntax MAY be used for rich text representation. | -| processing:level | string | The name commonly used to refer to the processing level to make it easier to search for product level across collections or items. The short name must be used (only `L`, not `Level`). See the [list of suggested processing levels](#suggested-processing-levels). | -| processing:facility | string | The name of the facility that produced the data. For example, `Copernicus S1 Core Ground Segment - DPA` for product of Sentinel-1 satellites. | -| processing:software | Map | A dictionary with name/version for key/value describing one or more softwares that produced the data. For example, `"Sentinel-1 IPF":"002.71"` for the software that produces Sentinel-1 satellites data. | - -*At least one of the fields must be specified.* - -### Processing Date Time - -The time of the processing is directly specified via the `created` properties of the target asset as specified in the [STAC Common metadata](https://github.com/radiantearth/stac-spec/blob/master/item-spec/common-metadata.md#date-and-time) - -### Linking the Items - -In Items that declare this `processing` extension, it is recommended to add one or more [Links](../../item-spec/item-spec.md#relation-types) with `derived_from` or `via` relationships to the eventual source metadata & data used in the processing. They could be used to trace back the processing history of the dataset. - -### Suggested Processing Levels - -The `processing:level` is the name that is commonly used to refer to that processing level properties. The table below shows some processing level used by the industry for some data product. - -Each level represents a step in the abstraction process by which data relevant to physical information (raw, level 0, level 1) are turned into data relevant to geo physical information (level 2, level 3), and finally turned into data relevant to thematic information (level4) - -This list is not exhaustive and can be extended with the processing level specific to a data product. - -| Level Name | Description | Typical data product | -| ---------- | ----------- | -------------------- | -| RAW | Data in their original packets, as received from the instrument. | [Sentinel-1 RAW](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-1-sar/products-algorithms/level-0-products/raw) | -| L0 | Reconstructed unprocessed instrument data at full space time resolution with all available supplemental information to be used in subsequent processing (e.g., ephemeris, health and safety) appended. | [Landsat Level 0](https://www.usgs.gov/media/files/landsat-8-level-0-reformatted-data-format-control-book) | -| L1 | Unpacked, reformatted level 0 data, with all supplemental information to be used in subsequent processing appended. Optional radiometric and geometric correction applied to produce parameters in physical units. Data generally presented as full time/space resolution. A wide variety of sub level products are possible (see below). | [Sentinel-1 Level 1](https://sentinel.esa.int/web/sentinel/user-guides/sentinel-1-sar/product-types-processing-levels/level-1) [Sentinel-2 L1A](https://sentinel.esa.int/web/sentinel/user-guides/sentinel-2-msi/product-types/level-1a) | -| L2 | Retrieved environmental variables (e.g., ocean wave height, soil-moisture, ice concentration) at the same resolution and location as the level 1 source data. A wide variety of sub-level products are possible (see below). | [Sentinel-2 L2A](https://earth.esa.int/web/sentinel/technical-guides/sentinel-2-msi/level-2a-processing) | -| L3 | Data or retrieved environmental variables which have been spatiallyand/or temporally re-sampled (i.e., derived from level 1 or 2 products). Such re-sampling may include averaging and compositing. A wide variety of sub-level products are possible (see below). | [ENVISAT Level-3](http://envisat.esa.int/level3/), [Sentinel-2 L3](https://s2gm.sentinel-hub.com/) | -| L4 | Model output or results from analyses of lower level data (i.e.,variables that are not directly measured by the instruments, but are derived from these measurements) | | - -## Extensions - -The [extensions page](../README.md) gives an overview about related extensions. Of particular relevance to processing levels: - -* the [Sat Extension Specification](../sat/README.md) to describe data collected from a satellite. diff --git a/extensions/processing/examples/sentinel1-item.json b/extensions/processing/examples/sentinel1-item.json deleted file mode 100644 index 67c57a4cb..000000000 --- a/extensions/processing/examples/sentinel1-item.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "stac_extensions": [ - "sat", - "sar", - "processing" - ], - "stac_version": "1.0.0-beta.2", - "id": "S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF", - "properties": { - "datetime": "2016-08-22T18:28:23.368922Z", - "start_datetime": "2016-08-22T18:28:23.368922Z", - "end_datetime": "2016-08-22T18:28:48.368201Z", - "created": "2016-08-23T00:38:22Z", - "platform": "sentinel-1a", - "constellation": "sentinel-1", - "mission": "sentinel-1", - "instruments": [ - "c-sar" - ], - "sat:absolute_orbit": 12717, - "sat:orbit_state": "ascending", - "sat:relative_orbit": 45, - "sat:anx_datetime": "2016-08-22T18:24:52.513706Z", - "sar:instrument_mode": "IW", - "sar:frequency_band": "C", - "sar:polarizations": [ - "VV", - "VH" - ], - "sar:product_type": "GRD", - "processing:lineage": "GRD Post Processing", - "processing:level": "L1C", - "processing:facility": "Copernicus S1 Core Ground Segment - DPA", - "processing:software": { - "Sentinel-1 IPF": "002.71" - } - }, - "links": [], - "assets": { - "manifest": { - "type": "text/xml", - "roles": [ - "metadata" - ], - "title": "SAFE Manifest", - "href": "data/S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF.SAFE/manifest.safe", - "created": "2016-08-23T00:30:33.319454" - }, - "quick-look": { - "type": "image/png", - "roles": [ - "overview" - ], - "href": "data/S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF.SAFE/preview/quick-look.png" - }, - "annotation-vv-iw": { - "type": "text/xml", - "roles": [ - "metadata" - ], - "title": "Annotation VV IW", - "href": "data/S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF.SAFE/annotation/s1a-iw-grd-vv-20160822t182823-20160822t182848-012717-013ffe-001.xml", - "sar:polarizations": [ - "VV" - ] - }, - "amplitude-vv-iw": { - "type": "image/tiff; application=geotiff", - "roles": [ - "data" - ], - "title": "IW VV Amplitude pixel values", - "href": "data/S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF.SAFE/annotation/s1a-iw-grd-vv-20160822t182823-20160822t182848-012717-013ffe-001.tiff", - "gsd": 0, - "sar:polarizations": [ - "VV" - ] - }, - "annotation-vh-iw": { - "type": "text/xml", - "roles": [ - "metadata" - ], - "title": "Annotation VH IW", - "href": "data/S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF.SAFE/annotation/s1a-iw-grd-vh-20160822t182823-20160822t182848-012717-013ffe-002.xml", - "sar:polarizations": [ - "VH" - ] - }, - "amplitude-vh-iw": { - "type": "image/tiff; application=geotiff", - "roles": [ - "data" - ], - "title": "IW VH Amplitude pixel values", - "href": "data/S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF.SAFE/annotation/s1a-iw-grd-vh-20160822t182823-20160822t182848-012717-013ffe-002.tiff", - "gsd": 0, - "sar:polarizations": [ - "VH" - ] - }, - "calibration-vv-iw": { - "type": "text/xml", - "roles": [ - "data" - ], - "title": "Calibration VV IW", - "href": "data/S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF.SAFE/annotation/calibration/calibration-s1a-iw-grd-vv-20160822t182823-20160822t182848-012717-013ffe-001.xml", - "gsd": 0, - "sar:polarizations": [ - "VV" - ] - }, - "calibration-vh-iw": { - "type": "text/xml", - "roles": [ - "data" - ], - "title": "Calibration VH IW", - "href": "data/S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF.SAFE/annotation/calibration/calibration-s1a-iw-grd-vh-20160822t182823-20160822t182848-012717-013ffe-002.xml", - "gsd": 0, - "sar:polarizations": [ - "VH" - ] - } - }, - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -5.730959, - 14.953436 - ], - [ - -3.431006, - 15.388663 - ], - [ - -3.136116, - 13.880572 - ], - [ - -5.419919, - 13.441674 - ], - [ - -5.730959, - 14.953436 - ] - ] - ] - }, - "bbox": [ - -5.730959, - 13.441674, - -3.136116, - 15.388663 - ] -} diff --git a/extensions/processing/examples/sentinel2-collection.json b/extensions/processing/examples/sentinel2-collection.json deleted file mode 100644 index 848050389..000000000 --- a/extensions/processing/examples/sentinel2-collection.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "type": "Collection", - "stac_extensions": [ - "processing" - ], - "id": "Sentinel2-L2A", - "title": "Sentinel-2 MSI: MultiSpectral Instrument, Level-2A", - "description": "Sentinel-2 is a wide-swath, high-resolution, multi-spectral imaging mission.", - "license": "proprietary", - "keywords": [ - "copernicus", - "esa", - "eu", - "msi", - "radiance", - "sentinel" - ], - "providers": [ - { - "name": "European Union/ESA/Copernicus", - "roles": [ - "producer", - "licensor" - ], - "url": "https://sentinel.esa.int/web/sentinel/user-guides/sentinel-2-msi", - "processing:lineage": "Generation of Level-1C User Product", - "processing:level": "L1C", - "processing:facility": "Copernicus S2 Processing and Archiving Facility", - "processing:software_version": { - "IPF-S2L1C": "02.06" - } - }, - { - "name": "Processing Corp.", - "roles": [ - "processor" - ], - "processing:lineage": "Generation of Level-2A User Product", - "processing:level": "L2A", - "processing:software_version": { - "Sentinel-2 Toolbox": "8.0.0" - } - } - ], - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -56, - 180, - 83 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2015-06-23T00:00:00Z", - null - ] - ] - } - }, - "summaries": { - "datetime": { - "minimum": "2015-06-23T00:00:00Z", - "maximum": "2019-07-10T13:44:56Z" - }, - "platform": [ - "sentinel-2a", - "sentinel-2b" - ], - "constellation": [ - "sentinel-2" - ], - "instruments": [ - "msi" - ], - "gsd": [ - 10, - 30, - 60 - ] - }, - "links": [ - { - "rel": "self", - "href": "https://processing-corp.com/catalog/COPERNICUS_S2.json" - }, - { - "rel": "parent", - "href": "https://processing-corp.com/catalog/catalog.json" - }, - { - "rel": "root", - "href": "https://processing-corp.com/catalog/catalog.json" - }, - { - "rel": "license", - "href": "https://scihub.copernicus.eu/twiki/pub/SciHubWebPortal/TermsConditions/Sentinel_Data_Terms_and_Conditions.pdf", - "title": "Legal notice on the use of Copernicus Sentinel Data and Service Information" - } - ] -} diff --git a/extensions/processing/json-schema/schema.json b/extensions/processing/json-schema/schema.json deleted file mode 100644 index 020d14ed1..000000000 --- a/extensions/processing/json-schema/schema.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/processing/json-schema/schema.json#", - "title": "Processing Extension", - "description": "STAC Processing Extension to a STAC Item or STAC Collections", - "oneOf": [ - { - "allOf": [ - { - "$ref": "../../../item-spec/json-schema/item.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "$ref": "#/definitions/item_properties" - } - ] - }, - { - "allOf": [ - { - "$ref": "../../../collection-spec/json-schema/collection.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "$ref": "#/definitions/providers" - } - ] - } - ], - "definitions": { - "stac_extensions": { - "type": "object", - "required": [ - "stac_extensions" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "processing", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/processing/json-schema/schema.json" - ] - } - } - } - }, - "item_properties": { - "type": "object", - "required": [ - "properties" - ], - "properties": { - "properties": { - "$ref": "#/definitions/processing" - } - } - }, - "providers": { - "type": "object", - "required": [ - "providers" - ], - "properties": { - "providers": { - "type": "array", - "minItems": 1, - "items": { - "allOf": [ - { - "type": "object", - "required": [ - "roles" - ], - "properties": { - "roles": { - "type": "array", - "contains": { - "enum": [ - "producer", - "processor" - ] - } - } - } - }, - { - "$ref": "#/definitions/processing" - } - ] - } - } - } - }, - "processing": { - "type": "object", - "anyOf": [ - { - "required": [ - "processing:lineage" - ] - }, - { - "required": [ - "processing:level" - ] - }, - { - "required": [ - "processing:facility" - ] - }, - { - "required": [ - "processing:software" - ] - } - ], - "properties": { - "processing:lineage": { - "title": "Processing Lineage Information", - "type": "string", - "example": "Post Processing GRD" - }, - "processing:level": { - "title": "Processing Level", - "type": "string", - "examples": [ - "RAW", - "L1", - "L1A", - "L1B", - "L1C", - "L2", - "L2A", - "L3", - "L4" - ] - }, - "processing:facility": { - "title": "Processing Facility", - "type": "string", - "example": "Copernicus S1 Core Ground Segment - DPA" - }, - "processing:software": { - "title": "Processing Software Name / version", - "type": "object", - "patternProperties": { - ".{1,}": { - "type": "string" - } - }, - "example": { - "Sentinel-1 IPF": "002.71" - } - } - } - } - } -} \ No newline at end of file diff --git a/extensions/sar/README.md b/extensions/sar/README.md deleted file mode 100644 index afd70a667..000000000 --- a/extensions/sar/README.md +++ /dev/null @@ -1,109 +0,0 @@ -# SAR Extension Specification - -- **Title: SAR** -- **Identifier: sar** -- **Field Name Prefix: sar** -- **Scope: Item** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @m-mohr, @emmanuelmathot - -This document explains the fields of the STAC Synthetic-Aperture Radar (SAR) Extension to a STAC Item. -SAR data is considered to be data that represents a snapshot of the earth for a single date and time taken by a synthetic-aperture radar system such as Sentinel-1, RADARSAT or EnviSAT. - -If the data has been collected by a satellite, it is strongly recommended to use the [`sat` extension](../sat/README.md), which in turn requires the [Instrument Fields](../../item-spec/common-metadata.md#instrument). If the data has been collected on an airborne platform it is strongly recommended to use the [Instrument Fields](../../item-spec/common-metadata.md#instrument). - -To describe frame start and end times, use the [Date and Time Range fields](../../item-spec/common-metadata.md#date-and-time-range). - -- Examples: [Envisat](examples/sar-envisat-example.json) and - [Sentinel-1](examples/sentinel-1-example.json )) -- [JSON Schema](json-schema/schema.json) - -## Item Properties or Item Asset fields - -**Note:** In the following specification *range* values are meant to be measured perpendicular to the flight path and *azimuth* values are meant to be measured parallel to the flight path. - -| Field Name | Type | Description | -| --------------------------- | --------- | ------------------------------------------------------------ | -| sar:instrument_mode | string | **REQUIRED.** The name of the sensor acquisition mode that is commonly used. This should be the short name, if available. For example, `WV` for "Wave mode" of Sentinel-1 and Envisat ASAR satellites. | -| sar:frequency_band | string | **REQUIRED.** The common name for the frequency band to make it easier to search for bands across instruments. See section "Common Frequency Band Names" for a list of accepted names. | -| sar:center_frequency | number | The center frequency of the instrument, in gigahertz (GHz). | -| sar:polarizations | \[string] | **REQUIRED.** Any combination of polarizations. | -| sar:product_type | string | **REQUIRED.** The product type, for example `SSC`, `MGD`, or `SGC` | -| sar:resolution_range | number | The range resolution, which is the maximum ability to distinguish two adjacent targets perpendicular to the flight path, in meters (m). | -| sar:resolution_azimuth | number | The azimuth resolution, which is the maximum ability to distinguish two adjacent targets parallel to the flight path, in meters (m). | -| sar:pixel_spacing_range | number | The range pixel spacing, which is the distance between adjacent pixels perpendicular to the flight path, in meters (m). Strongly RECOMMENDED to be specified for products of type `GRD`. | -| sar:pixel_spacing_azimuth | number | The azimuth pixel spacing, which is the distance between adjacent pixels parallel to the flight path, in meters (m). Strongly RECOMMENDED to be specified for products of type `GRD`. | -| sar:looks_range | number | Number of range looks, which is the number of groups of signal samples (looks) perpendicular to the flight path. | -| sar:looks_azimuth | number | Number of azimuth looks, which is the number of groups of signal samples (looks) parallel to the flight path. | -| sar:looks_equivalent_number | number | The equivalent number of looks (ENL). | -| sar:observation_direction | string | Antenna pointing direction relative to the flight trajectory of the satellite, either `left` or `right`. | - -**sar:polarizations** specifies a single polarization or a polarization combination. For single polarized radars one of `HH`, `VV`, `HV` or `VH` must be set. Fully polarimetric radars add all four polarizations to the array. Dual polarized radars and alternating polarization add the corresponding polarizations to the array, for instance for `HH+HV` add both `HH` and `HV`. - -**sar:product_type**: The product type defines the type of processed data contained in the assets. A list of suggestions include: - -| sar:product_type | Type | Description | -| ----------------- | --------- | ----------- | -| SSC | complex | Single-look Slant-range Complex image (standard SLC) | -| MGD | amplitude | Multilooked Ground-range Detected image | -| GRD | amplitude | Multilooked Ground-range Detected image (used by Sentinel-1) | -| GEC | amplitude | Geocoded Ellipsoid Corrected image | -| GTC | amplitude | Geocoded Terrain Corrected image | -| RTC | amplitude | Geocoded Radiometrically Terrain Corrected image | -| SGC | complex | Single-look Ground projected Complex image | -| SLC | complex | Single-look Ground projected Complex image (used by Sentinel-1) | - -This can vary by data provider, who all may use slightly different names. Sentinel-1 for instance uses `GRD`, wihch is the same as the more general `MGD` and `SLC` instead of `SGC`. - -### Common Frequency Band Names - -The `sar:frequency_band` is the name that is commonly used to refer to that band's spectral -properties. The table below shows the common name based on the wavelength and frequency ranges for several SAR satellites. - -| Common Name | Wavelength Range (cm) | Frequency Range (GHz) | Satellites | -| ----------- | --------------------- | --------------------- | ---------- | -| P | 30 - 120 | 0.25 - 1 | | -| L | 15 - 30 | 1 - 2 | ALOS, JERS, NISAR, SOACOM | -| S | 7.5 - 15 | 2 - 4 | HJ-1C | -| C | 3.8 - 7.5 | 4 - 8 | EnviSat, ERS, Radarsat, Risat-1, Sentinel-1 | -| X | 2.4 - 3.8 | 8 - 12.5 | Cosmo-SkyMed, TerraSAR-X, RanDEM-X, PAZ, KOMPSat-5 | -| Ku | 1.7 - 2.4 | 12.5 - 18 | | -| K | 1.1 - 1.7 | 18 - 26.5 | | -| Ka | 0.75 - 1.1 | 26.5 - 40 | | - -### Date and Time - -In SAR, you usually have frame start and end time. To describe this information it is recommended to use the [Date and Time Range fields](../../item-spec/common-metadata.md#date-and-time-range). -The center time of the frame should be specified with the `datetime` property for STAC Items. - -### Item [`Asset Object`](../../item-spec/item-spec.md#asset-object) fields -| Field Name | Type | Description | -| ----------------- | --------- | -------------------------------------------- | -| sar:polarizations | \[string] | Lists the polarizations available in the asset, in order. Any of `HH`, `VV`, `HV`, `VH`. | - -## Extensions - -The [extensions page](../README.md) gives an overview about related extensions. Of particular relevance to SAR data: - -* the [Sat Extension Specification](../sat/README.md) to describe SAR data collected from a satellite. - -## Best Practices - -One of the emerging best practices is to use [Asset Roles](../../item-spec/item-spec.md#asset-roles) to provide clients with more -information about the assets in an item. The following list includes a shared vocabulary for some common EO assets. This list should -not be considered definitive, and implementors are welcome to use other asset roles. If consensus and tooling consolidates around -these role names then they will be specified in the future as more standard than just 'best practices'. - -| Role Name | Description | -| --------- | ---------------------------------------------------------------------- | -| local-incidence-angle | Points to the local incidence angle file. | -| ellipsoid-incidence-angle | Points to the ellipsoid incidence angle file. | -| noise-power | Points to the noise power file. | -| amplitude | Points to the intensity file with focused SAR data that has been ground range detected (e.g. GRD). | -| magnitude | Points to the intensity file where data are represented as complex numbers containing amplitude and phase information (e.g SLC). | -| sigma0 | Points to the radar backscatter file where data is referenced in ground surface. It is often derived from an `amplitude` or a `magnitude` role asset. | -| beta0 | Points to the radar backscatter file where data is referenced in the slant range plane and is radiometrically calibrated. It is often derived from an `amplitude` or a `magnitude` role asset. | -| gamma0 | Points to the radar backscatter file where data is referenced in the plane perpendicular to the line of sight. It is often derived from an `amplitude` or a `magnitude` role asset. | -| date-offset | Points to the date-offset file. | -| covmat | Points to the Points to the Normalized Polarimetric Radar Covariance Matrix (CovMat) file. | -| prd | Points to the Polarimetric Radar Decomposition (PRD) file. | diff --git a/extensions/sar/examples/sar-envisat-example.json b/extensions/sar/examples/sar-envisat-example.json deleted file mode 100644 index 0404b39a6..000000000 --- a/extensions/sar/examples/sar-envisat-example.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "type": "Feature", - "stac_version": "1.0.0-beta.2", - "id": "sar-envisat-example", - "properties": { - "datetime": "2009-05-20T02:40:46.763325Z", - "start_datetime": "2009-05-20T02:40:01.042784Z", - "end_datetime": "2009-05-20T02:41:31.483865Z", - "platform": "envisat", - "constellation": "envisat", - "instruments": [ - "asar" - ], - "sat:orbit_state": "descending", - "sar:instrument_mode": "GM", - "sar:polarizations": [ - "HH" - ], - "sar:resolution_range": 1000, - "sar:resolution_azimuth": 1000, - "sar:pixel_spacing_range": 500, - "sar:pixel_spacing_azimuth": 500, - "sar:looks_range": 3, - "sar:looks_azimuth": 4, - "sar:frequency_band": "C", - "sar:center_frequency": 5.331, - "sar:product_type": "GM1_1P" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 65.212918, - 114.587673 - ], - [ - 71.179088, - 117.542266 - ], - [ - 70.096391, - 128.611298 - ], - [ - 64.302468, - 123.2946 - ], - [ - 65.212918, - 114.587673 - ] - ] - ] - }, - "links": [ - { - "rel": "about", - "href": "https://earth.esa.int/pub/ESA_DOC/ENVISAT/ASAR/asar.ProductHandbook.2_2.pdf", - "type": "application/pdf", - "title": "ASAR Product Handbook" - }, - { - "rel": "about", - "href": "https://earth.esa.int/web/sppa/mission-performance/esa-missions/envisat/asar/products-and-algorithms", - "type": "text/html", - "title": "ASAR Product and Algorithms" - }, - { - "rel": "root", - "href": "../../catalog.json", - "type": "application/json" - }, - { - "rel": "parent", - "href": "../collection.json", - "type": "application/json" - } - ], - "assets": { - "product": { - "href": "../../../stac-spec/examples/collection-example-1/ASA_GM1_1PNPDE20090520_023957_000001022079_00118_37747_3607.n1.gz", - "type": "application/gzip", - "description": "Amplitude and Intensity. Intensity equals the square of the amplitude band", - "sar:polarizations": [ - "HH", - "HH" - ] - } - }, - "bbox": [ - 64.302468, - 114.587673, - 71.179088, - 128.611298 - ], - "stac_extensions": [ - "sat", - "sar" - ] -} \ No newline at end of file diff --git a/extensions/sar/examples/sentinel-1-example.json b/extensions/sar/examples/sentinel-1-example.json deleted file mode 100644 index 8261984b8..000000000 --- a/extensions/sar/examples/sentinel-1-example.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "Feature", - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "file", - "sar", - "sat" - ], - "id": "sentinel-1-example", - "properties": { - "datetime": "2018-11-03T23:58:55.617217Z", - "start_datetime": "2018-11-03T23:58:55.121559Z", - "end_datetime": "2018-11-03T23:59:55.112875Z", - "platform": "sentinel-1a", - "constellation": "sentinel-1", - "instruments": [ - "c-sar" - ], - "sat:orbit_state": "ascending", - "sat:relative_orbit": 33, - "sar:instrument_mode": "EW", - "sar:polarizations": [ - "HH" - ], - "sar:resolution_range": 50, - "sar:resolution_azimuth": 50, - "sar:pixel_spacing_range": 25, - "sar:pixel_spacing_azimuth": 25, - "sar:looks_range": 3, - "sar:looks_azimuth": 1, - "sar:looks_equivalent_number": 2.7, - "sar:frequency_band": "C", - "sar:center_frequency": 5.405, - "sar:product_type": "GRD" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -67.071648, - -64.72924 - ], - [ - -65.087479, - -56.674374 - ], - [ - -68.033211, - -51.105831 - ], - [ - -70.275032, - -59.805672 - ], - [ - -67.071648, - -64.72924 - ] - ] - ] - }, - "links": [ - { - "rel": "root", - "href": "../../catalog.json", - "type": "application/json" - }, - { - "rel": "parent", - "href": "../collection.json", - "type": "application/json" - } - ], - "assets": { - "noises": { - "href": "https://example.com/collections/sentinel-1/items/annotation/calibration/noise-s1a-ew-grd-hh-20181103t235855-20181103t235955-024430-02ad5d-001.xml", - "type": "text/xml", - "title": "Calibration Schema", - "file:checksum": "90e40210a30d1711e81a4b11ef67b28744321659" - }, - "calibrations": { - "href": "https://example.com/collections/sentinel-1/items/annotation/calibration/calibration-s1a-ew-grd-hh-20181103t235855-20181103t235955-024430-02ad5d-001.xml", - "type": "text/xml", - "title": "Noise Schema", - "file:checksum": "90e402104fc5351af67db0b8f1746efe421a05e4" - }, - "products": { - "href": "https://example.com/collections/sentinel-1/items/annotation/s1a-ew-grd-hh-20181103t235855-20181103t235955-024430-02ad5d-001.xml", - "type": "text/xml", - "title": "Product Schema", - "file:checksum": "90e402107a7f2588a85362b9beea2a12d4514d45" - }, - "measurement": { - "href": "https://example.com/collections/sentinel-1/items/measurement/s1a-ew-grd-hh-20181103t235855-20181103t235955-024430-02ad5d-001.tiff", - "type": "image/tiff", - "title": "Measurements", - "sar:polarizations": [ - "HH" - ], - "file:checksum": "90e40210163700a8a6501eccd00b6d3b44ddaed0" - }, - "thumbnail": { - "href": "https://example.com/collections/sentinel-1/items/preview/quick-look.png", - "type": "image/png", - "title": "Thumbnail", - "file:checksum": "90e40210f52acd32b09769d3b1871b420789456c" - } - }, - "bbox": [ - -70.275032, - -64.72924, - -65.087479, - -51.105831 - ] -} \ No newline at end of file diff --git a/extensions/sar/json-schema/schema.json b/extensions/sar/json-schema/schema.json deleted file mode 100644 index 4b6cb825d..000000000 --- a/extensions/sar/json-schema/schema.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/sar/json-schema/schema.json#", - "title": "SAR Extension", - "description": "STAC SAR Extension to a STAC Item", - "allOf": [ - { - "$ref": "../../../item-spec/json-schema/item.json" - }, - { - "$ref": "#/definitions/sar" - } - ], - "definitions": { - "sar": { - "type": "object", - "required": [ - "stac_extensions", - "properties", - "assets" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "sar", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/sar/json-schema/schema.json" - ] - } - }, - "properties": { - "type": "object", - "required": [ - "sar:instrument_mode", - "sar:frequency_band", - "sar:polarizations", - "sar:product_type" - ], - "properties": { - "sar:instrument_mode": { - "title": "Instrument Mode", - "type": "string", - "example": "WV" - }, - "sar:frequency_band": { - "title": "Frequency Band", - "type": "string", - "enum": [ - "P", - "L", - "S", - "C", - "X", - "Ku", - "K", - "Ka" - ] - }, - "sar:center_frequency": { - "title": "Center Frequency (GHz)", - "type": "number" - }, - "sar:polarizations": { - "$ref": "#/definitions/polarizations" - }, - "sar:product_type": { - "title": "Product type", - "type": "string", - "examples": [ - "SSC", - "MGD", - "SGC" - ] - }, - "sar:resolution_range": { - "title": "Resolution range (m)", - "type": "number", - "minimum": 0 - }, - "sar:resolution_azimuth": { - "title": "Resolution azimuth (m)", - "type": "number", - "minimum": 0 - }, - "sar:pixel_spacing_range": { - "title": "Pixel spacing range (m)", - "type": "number", - "minimum": 0 - }, - "sar:pixel_spacing_azimuth": { - "title": "Pixel spacing azimuth (m)", - "type": "number", - "minimum": 0 - }, - "sar:looks_range": { - "title": "Looks range", - "type": "integer", - "minimum": 0 - }, - "sar:looks_azimuth": { - "title": "Looks azimuth", - "type": "integer", - "minimum": 0 - }, - "sar:looks_equivalent_number": { - "title": "Equivalent number of looks (ENL)", - "type": "number", - "minimum": 0 - }, - "sar:observation_direction": { - "title": "Antenna pointing direction", - "type": "string", - "enum": [ - "left", - "right" - ] - } - } - }, - "assets": { - "type": "object", - "properties": { - "sar:polarizations": { - "$ref": "#/definitions/polarizations" - } - } - } - } - }, - "polarizations": { - "title": "Polarizations", - "type": "array", - "minItems": 1, - "maxItems": 4, - "uniqueItems": true, - "items": { - "type": "string", - "enum": [ - "HH", - "VV", - "HV", - "VH" - ] - } - } - } -} \ No newline at end of file diff --git a/extensions/sat/README.md b/extensions/sat/README.md deleted file mode 100644 index 05b1ff1dc..000000000 --- a/extensions/sat/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Satellite Extension Specification - -- **Title: Satellite** -- **Identifier: sat** -- **Field Name Prefix: sat** -- **Scope: Item** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @emmanuelmathot - -This document explains the fields of the Satellite Extension to a STAC [Item](../../item-spec/item-spec.md). Sat adds -metadata related to a satellite that carries an instrument for collecting data. It will often be combined with other -extensions that describe the actual data, such as the `eo` or `sar` extensions. - -The Satellite extension requires the [Instrument Fields](../../item-spec/common-metadata.md#instrument). - -- [Example (Landsat 8)](examples/example-landsat8.json) -- [Example (Sentinel 1)](examples/example-sentinel1.json) -- [JSON Schema](json-schema/schema.json) - -## Item Properties or Item Asset fields - -| Field Name | Type | Description | -| ---------------- | ------------------------ | ----------- | -| sat:platform_international_designator | string | The International Designator, also known as COSPAR ID, and NSSDCA ID | -| sat:orbit_state | string | The state of the orbit. Either `ascending` or `descending` for polar orbiting satellites, or `geostationary` for geosynchronous satellites | -| sat:absolute_orbit | integer | The obsolute orbit number at the time of acquisition. | -| sat:relative_orbit | integer | The relative orbit number at the time of acquisition. | -| sat:anx_datetime | string | The [Ascending Node](https://en.wikipedia.org/wiki/Orbital_node) Crossing (ANX) time, in UTC. It is formatted according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). | - -*At least one of the fields must be specified.* - -### Additional Field Information - -#### sat:platform_international_designator - -The [International Designator](https://en.wikipedia.org/wiki/International_Designator), also known as COSPAR ID, and NSSDCA ID -and is an international identifier assigned to artificial objects in space. - -#### sat:orbit_state - -Indicates the type and current state of orbit. Satellites are either geosynchronous in which case they have one state: -`geostationary`, or they are sun synchronous (i.e., polar orbiting satellites) in which case they are either `ascending` or -`descending`. For sun synchronous satellites it is daytime during one of these states, and nighttime during the other. - -#### sat:absolute_orbit - -A count of orbits from 1 to the number of orbits made in the total satellite lifecycle. In mission planning and tasking, the -absolute orbit may be used as a reference in the non systematic acquisition missions. The resulting Item can be tagged with the -absolute orbit and thus searchable as such. In the case of orbital changes during the mission modifying the ground track and -thus the repeat cycle and thus the number or relative orbits, the combination of cycle and relative orbit is not sufficient to -derive an absolute orbit. - -#### sat:relative_orbit - -A count of orbits from 1 to the number of orbits contained in a repeat cycle, where relative orbit 1 starts from a specific -reference location of the sub-satellite point (the point on the earth directly below the satellite). It resets to 1 when the -sub-satellite point revisits the reference location. - -#### sat:anx_datetime - -The UTC time when the satellite crosses the [Ascending Node](https://en.wikipedia.org/wiki/Orbital_node). For geocentric and -heliocentric orbits, the ascending node (or north node) is where the orbiting object moves north through the plane of -reference. Used to quickly compute orbital parameters without having to download the product. For instance to compute on the -fly a baseline between 2 satellite acquisition, to find the best candidate in the archive from a post-disaster event (e.g -earthquake) scene acquisition for a DInSAR processing. - -## Implementations - -[DotNetStac](https://github.com/Terradue/DotNetStac) uses this extension specification for the satellite extension plugin with accessor to the value specified of this extension and allowing orbital computation from orbital state vectors. - -Some documented examples are available for [Sentinel-1](examples/example-sentinel1.json). - -## Extensions - -The [extensions page](../README.md) gives an overview about related extensions. Of particular relevance to sat data. diff --git a/extensions/sat/examples/example-landsat8.json b/extensions/sat/examples/example-landsat8.json deleted file mode 100644 index df262b712..000000000 --- a/extensions/sat/examples/example-landsat8.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "sat", - "view" - ], - "id": "LC08_L1TP_107018_20181001", - "collection": "landsat-8-l1", - "type": "Feature", - "bbox": [ - 148.13933, - 59.51584, - 152.52758, - 60.63437 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 152.52758, - 60.63437 - ], - [ - 149.1755, - 61.19016 - ], - [ - 148.13933, - 59.51584 - ], - [ - 151.33786, - 58.97792 - ], - [ - 152.52758, - 60.63437 - ] - ] - ] - }, - "properties": { - "datetime": "2018-10-01T01:08:32.033Z", - "view:sun_azimuth": 168.8989761, - "view:sun_elevation": 26.32596431, - "platform": "landsat-8", - "instruments": [ - "oli", - "tirs" - ], - "constellation": "landsat", - "sat:orbit_state": "ascending", - "view:off_nadir": 0 - }, - "assets": { - "blue": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B2.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 2 (blue)" - }, - "green": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B3.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 3 (green)" - }, - "red": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B4.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 4 (red)" - }, - "thumbnail": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_thumb_large.jpg", - "title": "Thumbnail image", - "type": "image/jpeg" - }, - "index": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/index.html", - "type": "text/html", - "title": "HTML index page" - } - }, - "links": [ - { - "rel": "collection", - "href": "http://landsat-stac.s3.amazonaws.com/landsat-8-l1/catalog.json" - } - ] -} diff --git a/extensions/sat/examples/example-sentinel1.json b/extensions/sat/examples/example-sentinel1.json deleted file mode 100644 index 0081e2017..000000000 --- a/extensions/sat/examples/example-sentinel1.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "sar", - "sat" - ], - "id": "S1A_IW_SLC__1SDV_20150305T051937_20150305T052005_004892_006196_ABBB", - "type": "Feature", - "bbox": [ - 9.768469, - 40.479584, - 13.182633, - 42.516747 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 12.756503, - 40.479584 - ], - [ - 9.768469, - 40.877575 - ], - [ - 10.115331, - 42.516747 - ], - [ - 13.182633, - 42.119347 - ], - [ - 12.756503, - 40.479584 - ] - ] - ] - }, - "properties": { - "title": "Sentinel-1A SLC IW SDV T95 2015-03-05T05:19:37/2015-03-05T05:20:05", - "datetime": "2015-03-05T05:19:37.9237880Z", - "start_datetime": "2015-03-05T05:19:37.9237880Z", - "end_datetime": "2015-03-05T05:20:05.2359650Z", - "platform": "sentinel-1a", - "constellation": "sentinel-1", - "instruments": [ - "c-sar" - ], - "sat:platform_serial_identifier": "2014-016A", - "sat:orbit_state": "descending", - "sat:absolute_orbit": 4892, - "sat:relative_orbit": 95, - "sat:anx_datetime": "2015-03-05T04:41:46.5788740Z", - "sat:across_track_incidence_angle": 33.05, - "sar:instrument_mode": "IW", - "sar:polarizations": [ - "VV", - "VH" - ], - "sar:resolution_range": 3.5, - "sar:resolution_azimuth": 22, - "sar:pixel_spacing_range": 2.3, - "sar:pixel_spacing_azimuth": 14.1, - "sar:looks_range": 1, - "sar:looks_azimuth": 1, - "sar:looks_equivalent_number": 1, - "sar:frequency_band": "C", - "sar:center_frequency": 5.405, - "sar:product_type": "SLC" - }, - "assets": { - "noises_iw1_vh": { - "href": "./annotation/calibration/noise-s1a-iw1-slc-vh-20150305t051939-20150305t052005-004892-006196-001.xml", - "title": "Calibration Schema", - "type": "text/xml", - "sar:polarizations": [ - "VH" - ] - }, - "calibrations_iw1_vh": { - "href": "./annotation/calibration/calibration-s1a-iw1-slc-vh-20150305t051939-20150305t052005-004892-006196-001.xml", - "title": "Noise Schema", - "type": "text/xml", - "sar:polarizations": [ - "VH" - ] - }, - "products_iw1_vh": { - "href": "./annotation/s1a-iw1-slc-vh-20150305t051939-20150305t052005-004892-006196-001.xml", - "title": "Product Schema", - "type": "text/xml", - "sar:polarizations": [ - "VH" - ] - }, - "measurement_iw1_vh": { - "href": "./measurement/s1a-iw1-slc-vh-20150305t051939-20150305t052005-004892-006196-001.tiff", - "title": "Measurements", - "type": "image/tiff", - "sar:polarizations": [ - "VH" - ] - }, - "thumbnail": { - "href": "./preview/quick-look.png", - "title": "Thumbnail", - "type": "image/png" - } - }, - "links": [ - { - "rel": "self", - "href": "https://example.com/collections/sentinel-1/items/S1A_EW_GRDM_1SSH_20181103T235855_20181103T235955_024430_02AD5D_5616" - }, - { - "rel": "parent", - "href": "https://example.com/collections/sentinel-1" - }, - { - "rel": "root", - "href": "https://example.com/collections" - } - ] -} diff --git a/extensions/sat/json-schema/schema.json b/extensions/sat/json-schema/schema.json deleted file mode 100644 index 4b81661b0..000000000 --- a/extensions/sat/json-schema/schema.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/sat/json-schema/schema.json#", - "title": "Sat Extension", - "description": "STAC Sat Extension to a STAC Item.", - "allOf": [ - { - "$ref": "../../../item-spec/json-schema/item.json" - }, - { - "$ref": "#/definitions/sat" - }, - { - "$ref": "../../../item-spec/json-schema/instrument.json" - } - ], - "definitions": { - "sat": { - "type": "object", - "required": [ - "stac_extensions", - "properties" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "sat", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/sat/json-schema/schema.json" - ] - } - }, - "properties": { - "type": "object", - "minProperties": 1, - "properties": { - "sat:platform_international_designator": { - "type": "string" - }, - "sat:orbit_state": { - "title": "Orbit State", - "type": "string", - "enum": [ - "ascending", - "descending", - "geostationary" - ] - }, - "sat:absolute_orbit": { - "type": "integer", - "minimum": 1 - }, - "sat:relative_orbit": { - "type": "integer", - "minimum": 1 - }, - "sat:anx_datetime": { - "type": "string", - "format": "date-time" - } - } - } - } - } - } -} diff --git a/extensions/scientific/examples/item.json b/extensions/scientific/examples/item.json index a7689a195..846890a07 100644 --- a/extensions/scientific/examples/item.json +++ b/extensions/scientific/examples/item.json @@ -1,7 +1,6 @@ { "stac_version": "1.0.0-beta.2", "stac_extensions": [ - "file", "scientific" ], "id": "MERRAclim.2_5m_min_80s", @@ -75,8 +74,7 @@ "primary": { "href": "https://datadryad.org/stash/downloads/file_stream/100467", "type": "application/zip", - "title": "MERRAclim. 2_5m_min_80s", - "file:checksum": "90e4021044a8995dd50b6657a037a7839304535b" + "title": "MERRAclim. 2_5m_min_80s" } } } diff --git a/extensions/tiled-assets/README.md b/extensions/tiled-assets/README.md deleted file mode 100644 index ca0319b9c..000000000 --- a/extensions/tiled-assets/README.md +++ /dev/null @@ -1,140 +0,0 @@ -# Tiled Assets specification - -- **Title: Tiled Assets** -- **Identifier: tiled-assets** -- **Field Name Prefix: tiles** -- **Scope: Item, Catalog, Collection** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @constantinius - -Some data products are too big to be handled in a single file or a small set of enumerated files and are thus split into tiles. For example, Sentinel-2 datastrips are tiled into overlapping granules, in some cases in even more than one coordinate reference system. Other very big datasets, such as continental or global mosaics can also only be handled in a tiled fashion. Usually, they go one step further and provide multiple layers of resolution to allow a quick inspection of larger areas but also retain the possibility to get to the full resolution data. - -When a very large dataset is split into many tiles it is very impractical to list all possible files with the `assets` property. - -This extension allows the specification of tiled assets within STAC Items. With this extension it is possible to allow the description of assets using template references and rules to construct those in order to get the tiles the user is interested in. The new `asset_templates` property allows to specify template URLs where components can be replaced to get the final URLs to the actual files. - -This extension is modelled in close alignment to the [OGC Two Dimensional Tile Matrix Set](http://docs.opengeospatial.org/is/17-083r2/17-083r2.html). The main access approach and the templating mechanism used is defined in the [OGC WMTS Simple Profile](http://docs.opengeospatial.org/is/13-082r2/13-082r2.html). - -- Examples: [Tiled](examples/example-tiled.json), [Dimension](examples/example-dimension.json) -- [JSON Schema](json-schema/schema.json) - -## Item Properties, Collection, and Catalog Fields - -These fields can be applied to Item Properties, Collection, or Catalog objects. - -| Field Name | Type | Description | -| ------------------------ | --------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| tiles:tile_matrix_sets | Map | **REQUIRED for Collections and Catalogs.** A mapping of tile matrix set identifier to a tile matrix set link object. | - -### Tile Matrix Set Object - -Tile matrix sets can be directly embedded in a Collection, Catalog or Item. Such directly embedded tile matrix set objects must conform to the [OGC Two Dimensional Tile Matrix Set JSON schema](http://schemas.opengis.net/tms/1.0/json/tms-schema.json). - -## Item Properties fields - -| Field Name | Type | Description | -| --------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | -| tiles:tile_matrix_set_links | Map | A mapping of tile matrix set identifier to a tile matrix set link object. | - -The keys of the `tiles:tile_matrix_set_links` mapping can be used as a substitution of the `{TileMatrixSet}` template parameters for the `href` field of the [Asset Object](../../item-spec/item-spec.md#asset-object) used as `asset_template`. - -### Tile Matrix Set Link Object - -This object allows to reference a tile matrix set. This concept is modelled after the [TileMatrixSetLink2D requirement class](http://docs.opengeospatial.org/is/17-083r2/17-083r2.html#18). - -| Field Name | Type | Description | -| -------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| url | string | The URL reference to the actual tile matrix definition. | -| well_known_scale_set | string | If the tile matrix set completely aligns with a well known scale set can be referenced. | -| limits | Map | Optional limits for each tile matrix. | -| pixel_buffer | Map | An optional pixel buffer description object per tile matrix. By default, no pixel buffers are used. | - -**url**/**well_known_scale_set**: Either one of these parameters must be present. - -**url**: The URL must refer to a valid tile matrix set definition as defined in the Two-dimensional tile matrix set specification in any encoding (JSON, JSON-LD, or XML). -It is also possible, to have the tile matrix set embedded in the Item's Collection, Catalog or even in the Item's file itself using the `tiles:tile_matrix_sets` property. When referring to an embedded tile matrix set definition, the name of the map key of that tile matrix set definition must be used as a URL fragment. - -Example reference to an external tile matrix definition: - -```js -"url": "http://schemas.opengis.net/tms/1.0/json/examples/WebMercatorQuad.json" -``` - -Example reference to an embedded definition in a Collection: - -```js -"url": "https://example.com/collections/stac.json#WebMercatorQuad" -``` - -Example reference to an embedded definition in the same Item: - -```js -"url": "#WebMercatorQuad" -``` - -**limits**: The keys of the map are the identifiers of the tile matrices in their respective tile matrix set. When present, only the referenced tile matrices are used -for the assets. When the `limits` are not present, the tile matrix set in full is referenced. - -**pixel_buffer**: For each tile matrix in a tile matrix set, a pixel buffer can be specified. Similarly to the `limits` property, the key of the mapping must be the identifier of one tile matrix. - -### Tile Matrix Limits Object - -This object allows to specify subset region of the source tileset. This concept is modelled after the [TileMatrixSetLimits2D requirement class](http://docs.opengeospatial.org/is/17-083r2/17-083r2.html#17). - -| Field Name | Type | Description | -| ------------- | ------- | --------------------------------------------------------------------------------------------------------------------- | -| min_tile_row | number | Minimum tile row index valid for this layer. If not specified it uses the the one from the referenced tile matrix. | -| max_tile_row | number | Maximum tile row index valid for this layer. If not specified it uses the the one from the referenced tile matrix. | -| min_tile_col | number | Minimum tile column index valid for this layer. If not specified it uses the the one from the referenced tile matrix. | -| max_tile_col | number | Maximum tile column index valid for this layer. If not specified it uses the the one from the referenced tile matrix. | - -### Pixel Buffer Object - -Pixel buffer objects allow the definition of image boundaries, so that the internal tiles may overlap. When using this information, the clients may be able to reduce the number of requests. - -| Field Name | Type | Description | -| ------------- | ------- | ------------------------------------------------------------------------------------------------------------------ | -| top | number | The size of the pixel-buffer in the top border of the image. Default is `0`. | -| left | number | The size of the pixel-buffer in the left border of the image. Default is `0`. | -| bottom | number | The size of the pixel-buffer in the bottom border of the image. Default is `0`. | -| right | number | The size of the pixel-buffer in the right border of the image. Default is `0`. | -| border_top | boolean | Whether or not the pixel-buffer is included images on the top border of the first tile row. Default is `true`. | -| border_left | boolean | Whether or not the pixel-buffer is included images on the left border of the first tile column. Default is `true`. | -| border_bottom | boolean | Whether or not the pixel-buffer is included images on the bottom border of the last tile row. Default is `true`. | -| border_right | boolean | Whether or not the pixel-buffer is included images on the right border of the last tile column. Default is `true`. | - -## Item fields - -| Field Name | Type | Description | -| ------------------- | ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| asset_templates | Map | **REQUIRED.** An map key to Asset objects that use template parameters for later substitution | - -**asset_templates**: The `href` field can make use of template parameters that can be replaced with values to generate references to actual files. The available template parameters are `{TileMatrixSet}`, `{TileMatrix}`, `{TileRow}`, and `{TileCol}`. The templating mechanism is detailed in the [OGC WMTS Simple Profile](http://docs.opengeospatial.org/is/13-082r2/13-082r2.html#17). Additional template substitution parameters may be present, see the next section for more details. -Also: it is not mandatory, that all template parameters are present. If, for example, the data is only available in one specific tile matrix, then that parameter can be omitted. It is possible, for whatever reason, to have the same template parameter more than once in the same template string. - -### Template Parameters from other extensions - -| Extension | Property | Template parameter | Mapping description | -| ------------- | ---------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------- | -| eo | bands | `{eo:band}` | Each bands name can be used as a substitution value for this bands parameter. | -| datacube | dimensions | `{cube:dimensions:}` | The template parameter must specify which dimension it refers to by replacing the ``. Any value that is representable via a `dimension` can be used as a substitution. | - -This list is not exhaustive, other useful template substitutions may exist. - -### Template examples - -* Plain: - - `http://example.com/data/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.jpeg` - -* Using `eo:bands`: - - `http://example.com/data/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}/{eo:bands}.jpeg` - -* Using `cube:dimensions`: - - `http://example.com/data/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}/{cube:dimensions:elevation}.jpeg` - -## Implementations - -None. Still in proposal stage diff --git a/extensions/tiled-assets/examples/example-dimension.json b/extensions/tiled-assets/examples/example-dimension.json deleted file mode 100644 index 5a2ce4cf5..000000000 --- a/extensions/tiled-assets/examples/example-dimension.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "datacube", - "eo", - "tiled-assets" - ], - "id": "sen2l2a-cog-converted", - "type": "Feature", - "bbox": [ - 14.326171874999998, - 48.603515625, - 14.501953125000002, - 48.33984374999999 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 14.326257705688475, - 48.33992958068847 - ], - [ - 14.501867294311525, - 48.33992958068847 - ], - [ - 14.501867294311525, - 48.60342979431152 - ], - [ - 14.326257705688475, - 48.60342979431152 - ], - [ - 14.326257705688475, - 48.33992958068847 - ] - ] - ] - }, - "properties": { - "datetime": "2018-01-01T00:00:00Z", - "start_datetime": "2018-01-01T00:00:00Z", - "end_datetime": "2018-12-31T23:59:59Z", - "platform": "sentinel-2", - "instruments": [ - "msi" - ], - "gsd": 10, - "cube:dimensions": { - "timeSpan": { - "type": "enumeration", - "values": [ - "2018-02-26_2018-03-11", - "2018-03-12_2018-03-16", - "2018-03-17_2018-04-01", - "2018-04-02_2018-04-17", - "2018-04-18_2018-05-02" - ] - } - } - }, - "asset_templates": { - "B02": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/{cube:dimensions:timeSpan}_s2_l2a/{cube:dimensions:timeSpan}_s2_l2a_B02.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B2", - "common_name": "blue" - } - ] - }, - "B03": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/{cube:dimensions:timeSpan}_s2_l2a/{cube:dimensions:timeSpan}_s2_l2a_B03.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B3", - "common_name": "green" - } - ] - }, - "B04": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/{cube:dimensions:timeSpan}_s2_l2a/{cube:dimensions:timeSpan}_s2_l2a_B04.tif", - "title": "", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B4", - "common_name": "red" - } - ] - }, - "B05": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/{cube:dimensions:timeSpan}_s2_l2a/{cube:dimensions:timeSpan}_s2_l2a_B05.tif", - "title": "", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B5" - } - ] - }, - "B06": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/{cube:dimensions:timeSpan}_s2_l2a/{cube:dimensions:timeSpan}_s2_l2a_B06.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B6" - } - ] - }, - "B07": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/{cube:dimensions:timeSpan}_s2_l2a/{cube:dimensions:timeSpan}_s2_l2a_B07.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B7" - } - ] - }, - "B08": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/{cube:dimensions:timeSpan}_s2_l2a/{cube:dimensions:timeSpan}_s2_l2a_B08.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B8", - "common_name": "nir" - } - ] - }, - "B11": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/{cube:dimensions:timeSpan}_s2_l2a/{cube:dimensions:timeSpan}_s2_l2a_B11.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B11" - } - ] - } - }, - "assets": { - "B02": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/2018-02-26_2018-03-11_s2_l2a/2018-02-26_2018-03-11_s2_l2a_B02.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B2", - "common_name": "blue" - } - ] - }, - "B03": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/2018-02-26_2018-03-11_s2_l2a/2018-02-26_2018-03-11_s2_l2a_B03.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B3", - "common_name": "green" - } - ] - }, - "B04": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/2018-02-26_2018-03-11_s2_l2a/2018-02-26_2018-03-11_s2_l2a_B04.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B4", - "common_name": "red" - } - ] - }, - "B05": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/2018-02-26_2018-03-11_s2_l2a/2018-02-26_2018-03-11_s2_l2a_B05.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B5" - } - ] - }, - "B06": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/2018-02-26_2018-03-11_s2_l2a/2018-02-26_2018-03-11_s2_l2a_B06.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B6" - } - ] - }, - "B07": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/2018-02-26_2018-03-11_s2_l2a/2018-02-26_2018-03-11_s2_l2a_B07.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B7" - } - ] - }, - "B08": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/2018-02-26_2018-03-11_s2_l2a/2018-02-26_2018-03-11_s2_l2a_B08.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B8", - "common_name": "nir" - } - ] - }, - "B11": { - "href": "http://cloudless.eox.at/sen2l2a-cog-converted/2018-02-26_2018-03-11_s2_l2a/2018-02-26_2018-03-11_s2_l2a_B11.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B11" - } - ] - } - }, - "links": [ - { - "rel": "self", - "href": "http://cloudless.eox.at/sen2l2a-cog-converted.json" - }, - { - "rel": "root", - "href": "http://cloudless.eox.at/stac.json" - } - ] -} diff --git a/extensions/tiled-assets/examples/example-tiled.json b/extensions/tiled-assets/examples/example-tiled.json deleted file mode 100644 index a1d401c4a..000000000 --- a/extensions/tiled-assets/examples/example-tiled.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "eo", - "tiled-assets" - ], - "id": "s2cloudless_2018", - "type": "Feature", - "bbox": [ - -180, - 90, - 180, - 90 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 180, - 90 - ], - [ - -180, - 90 - ], - [ - -180, - -90 - ], - [ - 180, - -90 - ], - [ - 180, - 90 - ] - ] - ] - }, - "properties": { - "collection": "s2cloudless", - "datetime": "2018-01-01T00:00:00Z", - "start_datetime": "2018-01-01T00:00:00Z", - "end_datetime": "2018-12-31T23:59:59Z", - "platform": "sentinel-2", - "instruments": [ - "msi" - ], - "gsd": 10, - "tiles:tile_matrix_links": { - "WebMercatorQuad": { - "url": "http://schemas.opengis.net/tms/1.0/json/examples/WebMercatorQuad.json", - "limits": { - "0": {}, - "1": { - "min_tile_col": 0, - "max_tile_col": 0, - "min_tile_row": 0, - "max_tile_row": 0 - }, - "2": { - "min_tile_col": 1, - "max_tile_col": 1, - "min_tile_row": 2, - "max_tile_row": 2 - }, - "3": { - "min_tile_col": 2, - "max_tile_col": 2, - "min_tile_row": 4, - "max_tile_row": 4 - }, - "4": { - "min_tile_col": 4, - "max_tile_col": 5, - "min_tile_row": 8, - "max_tile_row": 9 - } - } - } - }, - "tiles:tile_matrix_sets": { - "WebMercatorQuad": { - "type": "TileMatrixSetType", - "title": "Google Maps Compatible for the World", - "identifier": "WebMercatorQuad", - "boundingBox": { - "type": "BoundingBoxType", - "crs": "http://www.opengis.net/def/crs/EPSG/0/3857", - "lowerCorner": [ - -20037508.3427892, - -20037508.3427892 - ], - "upperCorner": [ - 20037508.3427892, - 20037508.3427892 - ] - }, - "supportedCRS": "http://www.opengis.net/def/crs/EPSG/0/3857", - "wellKnownScaleSet": "http://www.opengis.net/def/wkss/OGC/1.0/GoogleMapsCompatible", - "tileMatrix": [ - { - "type": "TileMatrixType", - "identifier": "0", - "scaleDenominator": 559082264.028717, - "topLeftCorner": [ - -20037508.3427892, - 20037508.3427892 - ], - "tileWidth": 256, - "tileHeight": 256, - "matrixWidth": 1, - "matrixHeight": 1 - }, - { - "type": "TileMatrixType", - "identifier": "1", - "scaleDenominator": 279541132.014358, - "topLeftCorner": [ - -20037508.3427892, - 20037508.3427892 - ], - "tileWidth": 256, - "tileHeight": 256, - "matrixWidth": 2, - "matrixHeight": 2 - }, - { - "type": "TileMatrixType", - "identifier": "2", - "scaleDenominator": 139770566.007179, - "topLeftCorner": [ - -20037508.3427892, - 20037508.3427892 - ], - "tileWidth": 256, - "tileHeight": 256, - "matrixWidth": 4, - "matrixHeight": 4 - }, - { - "type": "TileMatrixType", - "identifier": "3", - "scaleDenominator": 69885283.0035897, - "topLeftCorner": [ - -20037508.3427892, - 20037508.3427892 - ], - "tileWidth": 256, - "tileHeight": 256, - "matrixWidth": 8, - "matrixHeight": 8 - }, - { - "type": "TileMatrixType", - "identifier": "4", - "scaleDenominator": 34942641.5017948, - "topLeftCorner": [ - -20037508.3427892, - 20037508.3427892 - ], - "tileWidth": 256, - "tileHeight": 256, - "matrixWidth": 16, - "matrixHeight": 16 - } - ] - } - } - }, - "asset_templates": { - "bands": { - "href": "http://cloudless.eox.at/s2cloudless_2018/{TileMatrixSet}/{TileRow}/{TileCol}.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B4", - "common_name": "red" - }, - { - "name": "B3", - "common_name": "green" - }, - { - "name": "B2", - "common_name": "blue" - }, - { - "name": "B8", - "common_name": "nir" - } - ] - }, - "B02": { - "href": "http://cloudless.eox.at/s2cloudless_2018/{TileMatrixSet}/{TileRow}/{TileCol}_B02.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B2", - "common_name": "blue" - } - ] - }, - "B03": { - "href": "http://cloudless.eox.at/s2cloudless_2018/{TileMatrixSet}/{TileRow}/{TileCol}_B03.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B3", - "common_name": "green" - } - ] - }, - "B04": { - "href": "http://cloudless.eox.at/s2cloudless_2018/{TileMatrixSet}/{TileRow}/{TileCol}_B04.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B4", - "common_name": "red" - } - ] - }, - "B08": { - "href": "http://cloudless.eox.at/s2cloudless_2018/{TileMatrixSet}/{TileRow}/{TileCol}_B08.tif", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B8", - "common_name": "nir" - } - ] - } - }, - "assets": { - "thumbnail": { - "href": "http://cloudless.eox.at/s2cloudless_2018/0/0/0.tif", - "title": "Overview of the whole tiled dataset.", - "type": "image/tiff; application=geotiff", - "eo:bands": [ - { - "name": "B4", - "common_name": "red" - }, - { - "name": "B3", - "common_name": "green" - }, - { - "name": "B2", - "common_name": "blue" - }, - { - "name": "B8", - "common_name": "nir" - } - ] - } - }, - "links": [ - { - "rel": "self", - "href": "http://cloudless.eox.at/s2cloudless_2018/stac.json" - }, - { - "rel": "parent", - "href": "http://cloudless.eox.at/s2cloudless/stac.json" - }, - { - "rel": "root", - "href": "http://cloudless.eox.at/stac.json" - } - ] -} diff --git a/extensions/tiled-assets/json-schema/schema.json b/extensions/tiled-assets/json-schema/schema.json deleted file mode 100644 index 4f0e19bb0..000000000 --- a/extensions/tiled-assets/json-schema/schema.json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/tiled-assets/json-schema/schema.json#", - "title": "Tiled Assets Extension", - "description": "Tiled Assets Extension to a STAC Item", - "oneOf": [ - { - "allOf": [ - { - "$ref": "../../../item-spec/json-schema/item.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "$ref": "#/definitions/item-tiles" - } - ] - }, { - "allOf": [ - { - "$ref": "../../../catalog-spec/json-schema/catalog.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "$ref": "#/definitions/catalog-collection-tiles" - } - ] - }, { - "allOf": [ - { - "$ref": "../../../collection-spec/json-schema/collection.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "$ref": "#/definitions/catalog-collection-tiles" - } - ] - } - ], - "definitions": { - "stac_extensions": { - "type": "object", - "required": [ - "stac_extensions" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "tiled-assets", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/tiled-assets/json-schema/schema.json" - ] - } - } - } - }, - "catalog-collection-tiles": { - "title": "Tile matrix additions to STAC Collections and Catalogs", - "description": "Allows the definition of tile matrix sets on a Collection or Catalog.", - "type": "object", - "required": [ - "tiles:tile_matrix_set" - ], - "properties": { - "tiles:tile_matrix_set": { - "$ref": "#/definitions/tile_matrix_set" - } - } - }, - "item-tiles": { - "type": "object", - "required": [ - "properties", - "asset_templates" - ], - "properties": { - "properties": { - "type": "object", - "required": [], - "properties": { - "tiles:tile_matrix_set": { - "$ref": "#/definitions/tile_matrix_set" - }, - "tiles:tile_matrix_links": { - "title": "A map of tile matrix identifier to its definition with possible limits.", - "type": "object", - "patternProperties": { - "[a-zA-Z0-9]+": { - "$ref": "#/definitions/tile_matrix_link" - } - } - } - } - }, - "asset_templates": { - "title": "Asset template links", - "description": "Links to assets templates. These are regular assets that may have template arguments in their href property.", - "type": "object", - "additionalProperties": { - "$ref": "../../../item-spec/json-schema/item.json#/definitions/asset" - } - } - } - }, - "tile_matrix_set": { - "$ref": "http://schemas.opengis.net/tms/1.0/json/tms-schema.json" - }, - "tile_matrix_link": { - "type": "object", - "oneOf": [ - { "required": ["url"] }, - { "required": ["well_known_scale_set"] } - ], - "properties": { - "url": { - "type": "string", - "description": "The URL to access the linked tile matrix set." - }, - "well_known_scale_set": { - "type": "string", - "description": "The name of a Well Known Scale Set.", - "enum": [ - "GlobalCRS84Scale", - "GlobalCRS84Pixel", - "GoogleCRS84Quad", - "WorldMercatorWGS84" - ] - }, - "limits": { - "type": "object", - "description": "Optional limits for each tile matrix. Keys in this mapping must be all be valid tile matrix identifiers of the reference tile matrix set.", - "additionalProperties": { - "$ref": "#/definitions/tile_matrix_limits" - } - }, - "pixel_buffer": { - "type": "object", - "description": "An optional pixel buffer description object per tile matrix. By default, no pixel buffers are used. Keys in this mapping must be all be valid tile matrix identifiers of the reference tile matrix set.", - "additionalProperties": { - "$ref": "#/definitions/pixel_buffer" - } - } - } - }, - "tile_matrix_limits": { - "type": "object", - "description": "This object allows to specify subset region of the source tileset. This concept is modelled after the TileMatrixSetLimits2D requirement class.", - "properties": { - "min_tile_row": { - "type": "integer", - "description": "Minimum tile row index valid for this layer. If not specified it uses the the one from the referenced tile matrix." - }, - "max_tile_row": { - "type": "integer", - "description": "Maximum tile row index valid for this layer. If not specified it uses the the one from the referenced tile matrix." - }, - "min_tile_col": { - "type": "integer", - "description": "Minimum tile column index valid for this layer. If not specified it uses the the one from the referenced tile matrix." - }, - "max_tile_col": { - "type": "integer", - "description": "Maximum tile column index valid for this layer. If not specified it uses the the one from the referenced tile matrix." - } - } - }, - "pixel_buffer": { - "type": "object", - "properties": { - "top": { - "type": "integer", - "description": "The size of the pixel-buffer in the top border of the image. Default is `0`.", - "minimum": 0 - }, - "left": { - "type": "integer", - "description": "The size of the pixel-buffer in the left border of the image. Default is `0`.", - "minimum": 0 - }, - "bottom": { - "type": "integer", - "description": "The size of the pixel-buffer in the bottom border of the image. Default is `0`.", - "minimum": 0 - }, - "right": { - "type": "integer", - "description": "The size of the pixel-buffer in the right border of the image. Default is `0`.", - "minimum": 0 - }, - "border_top": { - "type": "boolean", - "description": "Whether or not the pixelbuffer is included images on the top border of the first tile row. Default is `true`." - }, - "border_left": { - "type": "boolean", - "description": "Whether or not the pixelbuffer is included images on the left border of the first tile column. Default is `true`." - }, - "border_bottom": { - "type": "boolean", - "description": "Whether or not the pixelbuffer is included images on the bottom border of the last tile row. Default is `true`." - }, - "border_right": { - "type": "boolean", - "description": "Whether or not the pixelbuffer is included images on the right border of the last tile row. Default is `true`." - } - } - } - } -} diff --git a/extensions/timestamps/README.md b/extensions/timestamps/README.md deleted file mode 100644 index 6cf88014c..000000000 --- a/extensions/timestamps/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# Timestamps Extension Specification - -- **Title: Timestamps** -- **Identifier: timestamps** -- **Field Name Prefix: -** -- **Scope: Item** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @m-mohr - -This document explains the fields of the Timestamps Extension to a STAC Item. -Allows to specify numerous timestamps for assets and metadata in addition to [`created`, `updated` and `datetime` (incl. start and end)](../../item-spec/common-metadata.md#date-and-time). - -- [Example (Landsat 8)](examples/example-landsat8.json) -- [JSON Schema](json-schema/schema.json) - -## Item Properties or Asset fields - -| Field Name | Type | Description | -| ----------- | ------ | ----------- | -| published | string | Date and time the corresponding data (see below) was published the first time. | -| expires | string | Date and time the corresponding data (see below) expires (is not valid any longer). | -| unpublished | string | Date and time the corresponding data (see below) was unpublished. | - -*At least one of the fields must be specified.* - -All timestamps MUST be formatted according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - -The timestamps have different meaning depending on where they are used. -If those fields are available in the Item `properties`, it's referencing to the timestamps valid for of the metadata. -Having those fields in the Item `assets` refers to the timestamps valid for the actual data linked to in the Asset Object. - -### Lifecycle - -An overview over the lifecycle of data and their corresponding timestamps: - -1. Data capture, start: `start_datetime` -2. Data capture, often center: `datetime` -3. Data capture, end: `end_datetime` -4. Data first modified (stored): `created` -5. Data last modified: `updated` -6. Data first published: `published` -7. Data last published: N/A -8. Data valid until: `expires` -9. Data removed / unpublished: `unpublished` - -## Implementations - -- [openEO](https://api.openeo.org) implements the `expires` field. - -## Outlook - -Once these fields get broadly adopted, it is planned to move them to Common Metadata and place them together with `created` and `updated`. -As this extension doesn't have a prefix, it doesn't lead to any breaking changes and the thus it is only a structural change for the specification. - -This fields - together with `created` and `updated` - also seem relevant for STAC Collections and may be adopted there, too, for both metadata and [collection-level assets](../../collection-spec/collection-spec.md#asset-object). diff --git a/extensions/timestamps/examples/example-landsat8.json b/extensions/timestamps/examples/example-landsat8.json deleted file mode 100644 index 5c5bc1597..000000000 --- a/extensions/timestamps/examples/example-landsat8.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "timestamps" - ], - "id": "LC08_L1TP_107018_20181001", - "type": "Feature", - "bbox": [ - 148.13933, - 59.51584, - 152.52758, - 60.63437 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 152.52758, - 60.63437 - ], - [ - 149.1755, - 61.19016 - ], - [ - 148.13933, - 59.51584 - ], - [ - 151.33786, - 58.97792 - ], - [ - 152.52758, - 60.63437 - ] - ] - ] - }, - "properties": { - "datetime": "2018-10-01T01:08:32Z", - "created": "2018-10-02T00:00:03Z", - "updated": "2020-05-20T12:13:02Z", - "published": "2018-10-03T06:45:55Z", - "expires": "2025-01-01T00:00:00Z", - "platform": "landsat-8", - "instruments": [ - "oli", - "tirs" - ], - "constellation": "landsat" - }, - "assets": { - "blue": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B2.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 2 (blue)", - "created": "2018-10-02T00:00:00Z" - }, - "green": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B3.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 3 (green)", - "created": "2018-10-02T00:00:00Z" - }, - "red": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B4.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 4 (red)", - "created": "2018-10-02T00:00:00Z" - }, - "thumbnail": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_thumb_large.jpg", - "title": "Thumbnail image", - "type": "image/jpeg", - "created": "2018-10-02T00:00:01Z" - }, - "index": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/index.html", - "type": "text/html", - "title": "HTML index page", - "created": "2018-10-02T00:00:02Z", - "updated": "2020-05-20T12:13:01Z" - } - }, - "links": [] -} diff --git a/extensions/timestamps/json-schema/schema.json b/extensions/timestamps/json-schema/schema.json deleted file mode 100644 index 6d6723e0f..000000000 --- a/extensions/timestamps/json-schema/schema.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/timestamps/json-schema/schema.json#", - "title": "Timestamps Extension", - "description": "STAC Timestamps Extension to a STAC Item.", - "allOf": [ - { - "$ref": "../../../item-spec/json-schema/item.json" - }, - { - "type": "object", - "required": [ - "stac_extensions", - "properties", - "assets" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "timestamps", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/timestamps/json-schema/schema.json" - ] - } - }, - "properties": { - "$ref": "#/definitions/all" - }, - "assets": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/all" - } - } - } - } - ], - "definitions": { - "all": { - "type": "object", - "properties": { - "published": { - "$ref": "#/definitions/published" - }, - "unpublished": { - "$ref": "#/definitions/unpublished" - }, - "expires": { - "$ref": "#/definitions/expires" - } - } - }, - "published": { - "title": "Publish Time", - "type": "string", - "format": "date-time" - }, - "unpublished": { - "title": "Removal Time", - "type": "string", - "format": "date-time" - }, - "expires": { - "title": "Expiry Time", - "type": "string", - "format": "date-time" - } - } -} \ No newline at end of file diff --git a/extensions/version/README.md b/extensions/version/README.md deleted file mode 100644 index 24d6de8cc..000000000 --- a/extensions/version/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Versioning Indicators Extension Specification - -- **Title: Versioning Indicators** -- **Identifier: version** -- **Field Name Prefix: -** -- **Scope: Item, Collection** -- **Extension [Maturity Classification](../README.md#extension-maturity): Proposal** -- **Owner**: @m-mohr - -This extension allows to version STAC Collections and STAC Items. Therefore, it also allows to deprecate legacy versions. Only fields and possible link relation types are defined in this extension, but it does NOT suggest any versioning best practices to structure static or dynamic catalogs. Instead check the [Versioning Best Practices for Catalogs](../../best-practices.md#versioning-for-catalogs). - -This extension applies to STAC Items and STAC Collections. - -- Examples: [Collection](examples/collection.json), [Item](examples/item.json) -- [JSON Schema](json-schema/schema.json) - -## Item Properties and Collection Fields - -For Items, the fields are placed in the `properties`. For Collections, the fields are placed on the top level of the Collection. - -| Field Name | Type | Description | -| ---------- | ------- | ----------- | -| version | string | **REQUIRED**. Version of the Collection or Item. | -| deprecated | boolean | Specifies that the Collection or Item is deprecated with the potential to be removed. Defaults to `false`. It should be transitioned out of usage as soon as possible and users should refrain from using it in new projects. A link with relation type `latest-version` SHOULD be added to the links and MUST refer to the resource that can be used instead. | - -## Relation types - -The following types should be used as applicable `rel` types for the [Link Object](../../item-spec/item-spec.md#link-object) to reference the latest version, the predecessor version and successor versions. These are all following [RFC 5829](https://tools.ietf.org/html/rfc5829). - -| Type | Description | -| ------------------- | ----------- | -| latest-version | This link points to a resource containing the latest (e.g., current) version. | -| predecessor-version | This link points to a resource containing the predecessor version in the version history. | -| successor-version | This link points to a resource containing the successor version in the version history. | - -## Implementations - -None yet, still in proposal stage. diff --git a/extensions/version/examples/collection.json b/extensions/version/examples/collection.json deleted file mode 100644 index 8adc4e587..000000000 --- a/extensions/version/examples/collection.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "type": "Collection", - "stac_extensions": [ - "version" - ], - "id": "merraclim", - "title": "MERRAclim", - "description": "A high-resolution global dataset of remotely sensed bioclimatic variables for ecological modelling.", - "license": "CC0-1.0", - "version": "1", - "deprecated": true, - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -90, - 180, - 90 - ] - ] - }, - "temporal": { - "interval": [ - [ - "1980-01-01T00:00:00Z", - "2009-12-31T23:59:59Z" - ] - ] - } - }, - "links": [ - { - "rel": "self", - "href": "https://datadryad.org/resource/doi:10.5061/dryad.s2v81/v1/collection.json" - }, - { - "rel": "item", - "href": "https://datadryad.org/resource/doi:10.5061/dryad.s2v81/v1/item.json" - }, - { - "rel": "root", - "href": "https://datadryad.org/resource/doi:10.5061/dryad.s2v81/catalog.json" - }, - { - "rel": "latest-version", - "href": "https://datadryad.org/resource/doi:10.5061/dryad.s2v81/v2/collection.json" - } - ] -} diff --git a/extensions/version/examples/item.json b/extensions/version/examples/item.json deleted file mode 100644 index 18815c643..000000000 --- a/extensions/version/examples/item.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "version" - ], - "id": "MERRAclim.2_5m_min_80s", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -180, - -90 - ], - [ - 180, - -90 - ], - [ - 180, - 90 - ], - [ - -180, - 90 - ], - [ - -180, - -90 - ] - ] - ] - }, - "bbox": [ - -180, - -90, - 180, - 90 - ], - "properties": { - "version": "1", - "title": "MERRAclim. 2_5m_min_80s", - "description": "MERRAclim Dataset. 19 global bioclimatic variables from the 1980s decade at 2.5 arcminutes resolution in GEOtiff format. The humidity version used is the min. The variables have been built using the same protocol as WorldClim with data from MERRA. Temperature layers (BIO1-BIO11) are in degree Celsius multiplied by 10, humidity layers (BIO12-BIO19) are in kg of water/kg of air multiplied by 100000.", - "datetime": "1985-07-01T00:00:00Z" - }, - "collection": "merraclim", - "links": [ - { - "rel": "self", - "href": "https://datadryad.org/resource/doi:10.5061/dryad.s2v81/v1/item.json" - }, - { - "rel": "collection", - "href": "https://datadryad.org/resource/doi:10.5061/dryad.s2v81/v1/collection.json" - }, - { - "rel": "parent", - "href": "https://datadryad.org/resource/doi:10.5061/dryad.s2v81/v1/collection.json" - }, - { - "rel": "root", - "href": "https://datadryad.org/resource/doi:10.5061/dryad.s2v81/catalog.json" - }, - { - "rel": "latest-version", - "href": "https://datadryad.org/resource/doi:10.5061/dryad.s2v81/v2/item.json" - } - ], - "assets": { - "primary": { - "href": "https://datadryad.org/stash/downloads/file_stream/100467", - "type": "application/zip", - "title": "MERRAclim. 2_5m_min_80s" - } - } -} diff --git a/extensions/version/json-schema/schema.json b/extensions/version/json-schema/schema.json deleted file mode 100644 index 59c246cb6..000000000 --- a/extensions/version/json-schema/schema.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/version/json-schema/schema.json#", - "title": "Versioning Indicators Extension", - "description": "STAC Versioning Indicators Extension for STAC Items or STAC Collections.", - "oneOf": [ - { - "allOf": [ - { - "$ref": "../../../item-spec/json-schema/item.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "type": "object", - "required": [ - "properties" - ], - "properties": { - "properties": { - "$ref": "#/definitions/version_extension" - } - } - } - ] - }, - { - "allOf": [ - { - "$ref": "../../../collection-spec/json-schema/collection.json" - }, - { - "$ref": "#/definitions/stac_extensions" - }, - { - "$ref": "#/definitions/version_extension" - } - ] - } - ], - "definitions": { - "stac_extensions": { - "type": "object", - "required": [ - "stac_extensions" - ], - "properties": { - "stac_extensions": { - "type": "array", - "contains": { - "enum": [ - "version", - "https://schemas.stacspec.org/v1.0.0-beta.2/extensions/version/json-schema/schema.json" - ] - } - } - } - }, - "version_extension": { - "type": "object", - "required": [ - "version" - ], - "properties": { - "version": { - "type": "string", - "title": "Version" - }, - "deprecated": { - "type": "boolean", - "title": "Deprecated", - "default": false - } - } - } - } -} \ No newline at end of file diff --git a/extensions/view/README.md b/extensions/view/README.md index d2b05681e..4b4c1c8a5 100644 --- a/extensions/view/README.md +++ b/extensions/view/README.md @@ -9,7 +9,7 @@ This document explains the fields of the View Geometry Extension to a STAC [Item](../../item-spec/item-spec.md). View Geometry adds metadata related to angles of sensors and other radiance angles that affect the view of resulting data. It will often be combined with other extensions that describe the actual data, such as the `eo`, `sat` or `sar` extensions. -- [Example (Landsat 8)](../eo/examples/example-landsat8.json) +- [Example](../../examples/extended-item.json) - [JSON Schema](json-schema/schema.json) ## Item Properties and Item Asset fields diff --git a/extensions/view/examples/example-landsat8.json b/extensions/view/examples/example-landsat8.json deleted file mode 100644 index 3897e86fd..000000000 --- a/extensions/view/examples/example-landsat8.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "stac_version": "1.0.0-beta.2", - "stac_extensions": [ - "sat", - "view" - ], - "id": "LC08_L1TP_107018_20181001", - "collection": "landsat-8-l1", - "type": "Feature", - "bbox": [ - 148.13933, - 59.51584, - 152.52758, - 60.63437 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 152.52758, - 60.63437 - ], - [ - 149.1755, - 61.19016 - ], - [ - 148.13933, - 59.51584 - ], - [ - 151.33786, - 58.97792 - ], - [ - 152.52758, - 60.63437 - ] - ] - ] - }, - "properties": { - "datetime": "2018-10-01T01:08:32.033Z", - "view:sun_azimuth": 168.8989761, - "view:sun_elevation": 26.32596431, - "view:off_nadir": 0, - "view:incidence_angle": 0, - "view:azimuth": 23.4, - "platform": "landsat-8", - "instruments": [ - "oli", - "tirs" - ], - "constellation": "landsat", - "sat:orbit_state": "ascending" - }, - "assets": { - "blue": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B2.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 2 (blue)" - }, - "green": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B3.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 3 (green)" - }, - "red": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B4.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 4 (red)" - }, - "thumbnail": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_thumb_large.jpg", - "title": "Thumbnail image", - "type": "image/jpeg" - }, - "index": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/index.html", - "type": "text/html", - "title": "HTML index page" - } - }, - "links": [ - { - "rel": "collection", - "href": "http://landsat-stac.s3.amazonaws.com/landsat-8-l1/catalog.json" - } - ] -} diff --git a/item-spec/common-metadata.md b/item-spec/common-metadata.md index bef3acc84..274e1b70a 100644 --- a/item-spec/common-metadata.md +++ b/item-spec/common-metadata.md @@ -52,7 +52,8 @@ All timestamps MUST be formatted according to [RFC 3339, section 5.6](https://to If those fields are available in the Item `properties`, it's referencing to the creation and update times of the metadata. Having those fields in the Item `assets` refers to the creation and update times of the actual data linked to in the Asset Object. -There are more date and time related fields available in the [Timestamps extension](../extensions/timestamps/README.md). +*NOTE: There are more date and time related fields available in the [Timestamps +extension](https://github.com/stac-extensions/timestamps), which is not an official extension*. ### Date and Time Range diff --git a/item-spec/item-spec.md b/item-spec/item-spec.md index 5b2d85474..f7bbf40ef 100644 --- a/item-spec/item-spec.md +++ b/item-spec/item-spec.md @@ -84,8 +84,13 @@ additional recommendations. #### stac_extensions -A list of extensions the Item implements. The list contains URLs to the JSON Schema files it can be validated against. For official [extensions](../extensions/README.md#list-of-stac-extensions), a "shortcut" can be used. This means you can specify the folder name of the extension, for example `pointcloud` for the Point Cloud extension. This does *not* apply for API extensions. If the versions of the extension and the Item diverge, you can specify the URL of the JSON schema file. -This list must only contain extensions that extend the Item itself, see the the 'Scope' column in the list of extensions. If an extension such as the `tiled-assets` extension has influence on multiple parts of the whole catalog structure, it must be listed in all affected parts (e.g. Catalog, Collection and Item for the `tiled-assets` extension). +A list of extensions the Item implements. The list contains URLs to the JSON Schema files it can be validated against. For +[official extensions](../extensions/README.md#core-stac-extensions), a "shortcut" can be used. This means you can specify the +folder name of the extension, for example `view` for the View extension. This does *not* apply for API extensions. If the +versions of the extension and the Item diverge, you can specify the URL of the JSON schema file. +This list must only contain extensions that extend the Item itself, see the the 'Scope' column in the list of extensions. +If an extension such as the `tiled-assets` extension has influence on multiple parts of the whole catalog structure, it +must be listed in all affected parts (e.g. Catalog, Collection and Item for the `tiled-assets` extension). #### assets @@ -141,8 +146,8 @@ to enable cross-catalog search on known fields. * [STAC Common Metadata](common-metadata.md#stac-common-metadata) - A list of fields commonly used throughout all domains. These optional fields are included for STAC Items by default. -* [Extensions](../extensions/README.md#list-of-stac-extensions) - Domain-specific fields -such as EO, SAR and point clouds. +* [Extensions](../extensions/README.md#core-stac-extensions) - Additional fields that are more specific, +such as [EO](../extensions/eo), [View](../extensions/view) and more. * [Custom Extensions](../extensions/README.md#extending-stac) - It is generally allowed to add custom fields but it is recommended to add multiple fields for related values instead of a nested object, e.g., two fields `view:azimuth` and `view:off_nadir` instead of a field `view` with an object