├── .github ├── remark.yaml └── workflows │ ├── publish.yaml │ └── test.yaml ├── .gitignore ├── LICENSE ├── README.md ├── optical ├── README.md ├── examples │ ├── eodc-landsat8.json │ └── eodc-sentinel2.json └── json-schema │ └── schema.json ├── package.json └── sar ├── README.md ├── examples ├── S18E047_2021_01_08_04392F.json ├── S18E047_2021_01_08_04392F.xml ├── S1A_IW_GRDH_1SDV_20210108T021904_20210108T021929_036040_04392F_3709.json └── S1A_IW_GRDH_1SDV_20210108T021929_20210108T021954_036040_04392F_EF8A.json └── json-schema ├── common.json ├── product.json └── source.json /.github/remark.yaml: -------------------------------------------------------------------------------- 1 | plugins: 2 | # Check links 3 | - validate-links 4 | # Apply some recommended defaults for consistency 5 | - remark-preset-lint-consistent 6 | - remark-preset-lint-recommended 7 | - lint-no-html 8 | # General formatting 9 | - - remark-lint-emphasis-marker 10 | - '*' 11 | - remark-lint-hard-break-spaces 12 | - remark-lint-blockquote-indentation 13 | - remark-lint-no-consecutive-blank-lines 14 | - - remark-lint-maximum-line-length 15 | - 150 16 | # Code 17 | - remark-lint-fenced-code-flag 18 | - remark-lint-fenced-code-marker 19 | - remark-lint-no-shell-dollars 20 | - - remark-lint-code-block-style 21 | - 'fenced' 22 | # Headings 23 | - remark-lint-heading-increment 24 | - remark-lint-no-duplicate-headings 25 | - remark-lint-no-multiple-toplevel-headings 26 | - remark-lint-no-heading-punctuation 27 | - - remark-lint-maximum-heading-length 28 | - 70 29 | - - remark-lint-heading-style 30 | - atx 31 | - - remark-lint-no-shortcut-reference-link 32 | - false 33 | # Lists 34 | - remark-lint-list-item-bullet-indent 35 | - remark-lint-ordered-list-marker-style 36 | - remark-lint-ordered-list-marker-value 37 | - remark-lint-checkbox-character-style 38 | - - remark-lint-unordered-list-marker-style 39 | - '-' 40 | - - remark-lint-list-item-indent 41 | - space 42 | # Tables 43 | - remark-lint-table-pipes 44 | - remark-lint-no-literal-urls -------------------------------------------------------------------------------- /.github/workflows/publish.yaml: -------------------------------------------------------------------------------- 1 | name: Publish JSON Schema 2 | on: 3 | release: 4 | types: [published] 5 | jobs: 6 | deploy: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Inject env variables 10 | uses: rlespinasse/github-slug-action@v3.x 11 | - uses: actions/checkout@v2 12 | - name: collect files 13 | run: | 14 | mkdir deploy 15 | mkdir deploy/optical 16 | mkdir deploy/sar 17 | cp optical/json-schema/schema.json deploy/optical 18 | cp sar/json-schema/* deploy/sar 19 | - name: deploy JSON Schema for version ${{ env.GITHUB_REF_SLUG }} 20 | uses: peaceiris/actions-gh-pages@v3 21 | with: 22 | github_token: ${{ secrets.GITHUB_TOKEN }} 23 | publish_dir: deploy 24 | destination_dir: ${{ env.GITHUB_REF_SLUG }} -------------------------------------------------------------------------------- /.github/workflows/test.yaml: -------------------------------------------------------------------------------- 1 | name: Check Markdown and Examples 2 | on: [push, pull_request] 3 | jobs: 4 | deploy: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - uses: actions/setup-node@v2 8 | with: 9 | node-version: 'lts/*' 10 | - uses: actions/checkout@v2 11 | - run: | 12 | npm install 13 | npm test 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /package-lock.json 2 | /node_modules 3 | /deploy -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # STAC CARD4L Extensions 2 | 3 | - **Title:** CARD4L (Optical and SAR) 4 | - **Field Name Prefix:** card4l 5 | - **Scope:** Item 6 | - **Extension [Maturity Classification](https://github.com/radiantearth/stac-spec/tree/master/extensions/README.md#extension-maturity):** Pilot 7 | - **Owner**: @m-mohr 8 | 9 | This repository contains two STAC extensions that specifies how to create STAC Items (and Collections) 10 | that comply to the [CEOS CARD4L](http://ceos.org/ard/) product family specifications for either: 11 | - Optical - Surface Reflectance 12 | - Optical - Surface Temperature 13 | - SAR - Normalized Radar Backscatter 14 | - SAR - Polarimetric Radar 15 | 16 | There are two STAC extensions, one for Optical and one for SAR: 17 | - [Optical](optical/README.md) 18 | - [SAR](sar/README.md) 19 | 20 | ## Disclaimer 21 | 22 | **WE ARE WORKING ON A SUCCESSOR: ** 23 | **IT IS PLANNED TO DEPRECATE THIS EXTENSION ONCE THE NEW EXTENSION IS PUBLISHED.** 24 | 25 | The extensions are not officially approved by CEOS, but there's a desire to get CEOS approval. 26 | Nevertheless, the extensions have been discussed with CEOS. 27 | The STAC extensions don't allow to fulfill 100% target compliance (but most of it), 28 | but they surely allow to be 100% threshold compliant. 29 | 30 | The extensions were written as part of the project [openEO Platform](https://openeo.cloud) 31 | with funding from [ESA](https://www.esa.int). 32 | Contact [Matthias Mohr](https://github.com/m-mohr) for details. 33 | 34 | ## Contributing 35 | 36 | All contributions are subject to the 37 | [STAC Specification Code of Conduct](https://github.com/radiantearth/stac-spec/blob/master/CODE_OF_CONDUCT.md). 38 | For contributions, please follow the 39 | [STAC specification contributing guide](https://github.com/radiantearth/stac-spec/blob/master/CONTRIBUTING.md) Instructions 40 | for running tests are copied here for convenience. 41 | 42 | ### Running tests 43 | 44 | The same checks that run as checks on PR's are part of the repository and can be run locally to verify that changes are valid. 45 | To run tests locally, you'll need `npm`, which is a standard part of any [node.js installation](https://nodejs.org/en/download/). 46 | 47 | First you'll need to install everything with npm once. Just navigate to the root of this repository and on 48 | your command line run: 49 | ```bash 50 | npm install 51 | ``` 52 | 53 | Then to check markdown formatting and test the examples against the JSON schema, you can run: 54 | ```bash 55 | npm test 56 | ``` 57 | -------------------------------------------------------------------------------- /optical/README.md: -------------------------------------------------------------------------------- 1 | # STAC CARD4L Optical Extension Specification 2 | 3 | - **Title:** CARD4L Optical 4 | - **Identifier:** 5 | - **Field Name Prefix:** card4l (shared with the CARD4L SAR Extension) 6 | - **Scope:** Item 7 | - **Extension [Maturity Classification](https://github.com/radiantearth/stac-spec/tree/master/extensions/README.md#extension-maturity):** Proposal 8 | - **Owner**: @m-mohr 9 | 10 | This extension specifies how to create [STAC](https://github.com/radiantearth/stac-spec) Items that 11 | comply to the [CEOS CARD4L](http://ceos.org/ard/) product family specification for either 12 | - *Optical Surface Reflectance* (SR) products in version 5.0 13 | ([PDF](https://ceos.org/ard/files/PFS/SR/v5.0/CARD4L_Product_Family_Specification_Surface_Reflectance-v5.0.pdf), 14 | [Word](https://ceos.org/ard/files/PFS/SR/v5.0/CARD4L_Product_Family_Specification_Surface_Reflectance-v5.0.docx)) 15 | *or* 16 | - *Optical Surface Temperature* (ST) products in version 5.0 17 | ([PDF](https://ceos.org/ard/files/PFS/ST/v5.0/CARD4L_Product_Family_Specification_Surface_Temperature-v5.0.pdf), 18 | [Word](https://ceos.org/ard/files/PFS/ST/v5.0/CARD4L_Product_Family_Specification_Surface_Temperature-v5.0.docx)). 19 | 20 | **Document structure:** In general, the fields required in this extension are required to either meet 21 | the *threshold (minimum) requirements* by the CEOS CARD4L specification *or* are required fields in STAC. 22 | Any additional optional field provided may lead to a higher percentage for the CARD4L *target (desired) requirements*. 23 | 24 | The column *Field Name* refers to the STAC field names. The column *Req.* refers to the requirement number in the CARD4L specification. 25 | 26 | **STAC Extensions:** This extension makes use of a number of existing STAC extensions: 27 | 28 | - [EO](https://github.com/stac-extensions/eo) 29 | - [File](https://github.com/stac-extensions/file) (optional) 30 | - [Processing](https://github.com/stac-extensions/processing) (optional) 31 | - [Projection](https://github.com/stac-extensions/projection) 32 | - [Raster](https://github.com/stac-extensions/raster) 33 | - [View](https://github.com/stac-extensions/view) 34 | 35 | You have to read the STAC extensions in combination with this extension as this extension just provides 36 | the mapping between the STAC fields and the CARD4L requirements, but this extension doesn't give information 37 | on the data type or an actual detailed description about the fields. 38 | 39 | **Additional resources:** 40 | 41 | - [Examples](examples/) 42 | - [JSON Schema](json-schema/) 43 | 44 | *Please note that the schema gives only a first indication on whether your metadata is correctly formatted 45 | as we can't provide a full schema for validation at the moment.* 46 | *For example, the assets are not fully validated yet. Passing the schema also does not imply that you are CARD4L compliant!* 47 | 48 | ## STAC Collections 49 | 50 | CARD4L lists a lot of requirements (and fields) that have common values across all generated STAC Items and assets. 51 | Thus, it is **recommended** to provide a STAC Collection for the Items and put common fields (in the STAC Item `properties`) 52 | into [Collection `summaries`](https://github.com/radiantearth/stac-spec/tree/v1.0.0/collection-spec/collection-spec.md#collection-fields). 53 | While the STAC Item fields still need to be in the Item, too, you can de-duplicate links and assets by putting common 54 | links once into the STAC Collection links. Also, common assets can be just put once into the STAC Collection using the 55 | STAC extension [Collection Assets](https://github.com/radiantearth/stac-spec/tree/v1.0.0/collection-spec/collection-spec.md#assets). 56 | All this is still CARD4L compliant as CARD4L doesn't require all information to be in a single file. 57 | 58 | ## STAC Items 59 | 60 | STAC Items must always be valid, but not all STAC Item requirements are covered here, 61 | only additional requirements and mappings to fulfill the CARD4L requirements are listed here: 62 | 63 | | Field Name | Req. | Description | 64 | | --------------- | ----- | ------------------------------------------------------------ | 65 | | stac_extensions | *n/a* | **REQUIRED.** Must contain all extensions used. See below for details \[1]. | 66 | | geometry | 1.4 | **REQUIRED.** The geometry of the acquisition. | 67 | | bbox | 1.4 | **REQUIRED.** The bounding box of the acquisition. | 68 | 69 | \[1] The following values for `stac_extensions` apply: 70 | 71 | | Value | Required | 72 | | --------------------------------------------------------------------- | -------- | 73 | | `https://stac-extensions.github.io/card4l/v0.1.0/optical/schema.json` | ✓ | 74 | | `https://stac-extensions.github.io/eo/v1.0.0/schema.json` | ✓ | 75 | | `https://stac-extensions.github.io/file/v2.0.0/schema.json` | ✗ | 76 | | `https://stac-extensions.github.io/processing/v1.1.0/schema.json` | ✗ | 77 | | `https://stac-extensions.github.io/projection/v1.0.0/schema.json` | ✓ | 78 | | `https://stac-extensions.github.io/raster/v1.1.0/schema.json` | ✓ | 79 | | `https://stac-extensions.github.io/view/v1.0.0/schema.json` | ✓ | 80 | 81 | ### STAC Item Properties 82 | 83 | #### CARD4L 84 | 85 | | Field Name | Data Type | Req. | Description | 86 | | ------------------------------------- | --------- | ----- | ------------------------------------------------------------ | 87 | | card4l:specification | string | *n/a* | **REQUIRED.** The CARD4L specification implemented, either `SR` (Optical, Surface Reflectance) or `ST` (Optical, Surface Temperature). | 88 | | card4l:specification_version | string | *n/a* | **REQUIRED.** The CARD4L specification version. Currently always `5.0`. | 89 | | card4l:northern_geometric_accuracy | [Geometric Accuracy Object](#geometric-accuracy-object) | 1.8 | An estimate of the northern geometric accuracy. | 90 | | card4l:eastern_geometric_accuracy | [Geometric Accuracy Object](#geometric-accuracy-object) | 1.8 | An estimate of the eastern geometric accuracy. | 91 | | card4l:geometric_accuracy_radial_rmse | number | 1.8 | Radial root mean square error (rRMSE) for sub-sample accuracy, in meters. | 92 | 93 | Note that all these fields here are aligned with the STAC CARD4L SAR extension. 94 | 95 | ##### Geometric Accuracy Object 96 | 97 | | Field Name | Data Type | Description | 98 | | ---------- | --------- | ------------------------ | 99 | | bias | number | **REQUIRED.** Bias, in meters. | 100 | | stddev | number | **REQUIRED.** Standard deviation, in meters. | 101 | 102 | #### Common Metadata 103 | 104 | | Field Name | Req. | Description | 105 | | -------------- | ----- | ------------------------------------------------------------ | 106 | | license | *n/a* | Recommended to be specified in a STAC Collection. | 107 | | datetime | 1.3 | **REQUIRED.** The time of the acquisition, usually the central timestamp between `start_datetime` and `end_datetime`. | 108 | | start_datetime | 1.3 | Start time of the acquisition. | 109 | | end_datetime | 1.3 | End time of the acquisition. | 110 | | instruments | 1.9 | **REQUIRED.** | 111 | | constellation | (1.9) | Constellation name in lower-case. Only if part of a constellation, e.g. `sentinel-2` for Sentinel 2A and 2B. Can often be derived from `platform`. | 112 | | platform | (1.9) | Platform name in lower-case. Use a specific name such as `sentinel-2a` if part of constellation. MUST NOT duplicate `constellation`. | 113 | 114 | #### EO (Electro-Optical) 115 | 116 | | Field Name | Req. | Description | 117 | | -------------- | ------ | ------------------------------------------------------------ | 118 | | eo:cloud_cover | 1.17 | Cloud cover as one of the quality flags. | 119 | | eo:bands | (1.10) | You may include all bands specified in the assets again as an overview. | 120 | 121 | 1.17: More data quality flags should be set. Just providing eo:cloud_cover is not enough, 122 | but other quality flags such as [snow cover](https://github.com/stac-extensions/eo/pull/9) 123 | are not tandardized in STAC yet. 124 | 125 | #### Processing 126 | 127 | | Field Name | Req. | Description | 128 | | --------------------- | ----------- | ------------------------------------------------------------ | 129 | | processing:facility | 1.15 | | 130 | | processing:software | 1.13 / 1.15 | String likely needs to be split into software name and version number. | 131 | | processing:lineage | 1.15 | Additional processing information and parameters, e.g. a human-readable description of the processing chain. | 132 | | processing:expression | 1.15 | A more machine-readable processing chain description such as a Dask graph, an openEO process or a SNAP graph. Alternatively, you can also link to a processing chain with the relation type `processing-expression` (see below). | 133 | 134 | See also the [note](#notes) regarding the requirement 1.13 for a better understanding of how to use the fields best. 135 | 136 | #### Projection 137 | 138 | The metadata MUST specify the coordinate reference system (1.5) and MAY specify the map projection (1.6) through 139 | either `proj:epsg` or one of the alternatives. 140 | 141 | | Field Name | Req. | Description | 142 | | ------------------------- | --------- | ------------------------------------------------------------ | 143 | | proj:epsg | 1.5 / 1.6 | **REQUIRED.** This is required by STAC. If there's no suitable EPSG code, set this to `null` and add either `proj:wkt2` or `proj:projjson`. | 144 | | proj:wkt2 / proj:projjson | 1.5 / 1.6 | One of `proj:wkt2` or `proj:projjson` is **required** if `proj:epsg` is set to `null`. | 145 | 146 | #### View 147 | 148 | | Field Name | Req. | Description | 149 | | -------------------- | ----- | ------------------------------------------------------------ | 150 | | view:off_nadir | *n/a* | The average off-nadir angle, for per-pixel angles. In degrees. | 151 | | view:incidence_angle | \[2] | **REQUIRED.** The average incidence angle, for per-pixel angles, refer to the asset with the key `incidence-angle`. In degrees. | 152 | | view:azimuth | \[2] | **REQUIRED.** The average azimuth angle, for per-pixel angles, refer to the asset with the key `azimuth`. In degrees. | 153 | | view:sun_azimuth | \[2] | **REQUIRED.** The average sun azimuth angle, for per-pixel angles, refer to the asset with the key `sun-azimuth`. In degrees. | 154 | | view:sun_elevation | \[2] | **REQUIRED.** The average sub elevation angle, for per-pixel angles, refer to the asset with the key `sun-elevation`. In degrees. | 155 | 156 | \[2] Requirement 2.8 for Surface Temperature (ST) / 2.11 for Surface Reflectance (SR) 157 | 158 | ### STAC Item Links 159 | 160 | | Relation Type | Req. | Description | 161 | | ------------------------- | ------------------- | ------------------------------------------------------------ | 162 | | card4l-document | *n/a* | **REQUIRED.** Provides at least one link to the CARD4L specification document. Word (media type: `application/vnd.openxmlformats-officedocument.wordprocessingml.document`) and/or PDF (media type: `application/pdf`). | 163 | | derived_from | 1.15 | Points back to the source's STAC Item. May be multiple items, if the product is derived from multiple acquisitions. | 164 | | about | 1.13 | URL to algorithms used in the generation process. See also the [notes](#notes) regarding req. 1.13. | 165 | | related | 1.14 | URL to the sources of auxiliary data used in the generation process. This is **required** if auxiliary data used in the generation process. Excludes DEMs, which use the relation `elevation-model` instead. | 166 | | access | 1.16 | STRONGLY RECOMMENDED. URL to data access information. | 167 | | sensor-calibration | 1.11 | URL to the sensor calibration parameters. | 168 | | radiometric-accuracy | 1.12 | URL describing the assessed absolute radiometric uncertainty of the version of the data or product. | 169 | | geometric-correction | 1.7 | URL to the Geometric Correction algorithm details. | 170 | | elevation-model | 1.14 | URLs to the Digital Elevation Model (DEM). Preferably URLs to a STAC Item with additional metadata for the DEM. | 171 | | surface-model | 1.14 | URL to the Digital Surface Model (DSM). Preferably URLs to a STAC Item with additional metadata for the DSM. | 172 | | geometric-accuracy | 1.8 | URL to documentation of estimate of absolute localization error. | 173 | | cloud | 2.5 | URL to documentation about the cloud detection. | 174 | | cloud-shadow | 2.6 | URL to documentation about the cloud shadow detection. | 175 | | snow-ice | 2.7 (ST) / 2.8 (SR) | URL to documentation about the snow and ice mask. | 176 | | land-water | 2.7 (SR) | URL to documentation about the land and water mask (SR only). | 177 | | atmosphere-emissivity | 3.2 (ST) | **REQUIRED.** URL to documentation about corrections for atmosphere and emissivity (ST only). | 178 | | measurement-normalization | 3.3 (SR) | URL to documentation about measurement normalization (SR only). | 179 | | atmospheric-scattering | 3.4 (SR) | **REQUIRED.** URL to documentation about the directional atmospheric scattering algorithms (SR only). | 180 | | water-vapor | 3.5 (SR) | **REQUIRED.** URL to documentation about the water vapour corrections (SR only). | 181 | | ozone | 3.6 (SR) | URL to documentation about the ozone corrections (SR only). | 182 | | processing-expression | 1.15 | A processing chain (or script) that describes how the data has been processed. | 183 | 184 | Note: CARD4L XML files also allow DOIs to be given instead of URLs. DOIs must be converted to URLs for STAC! 185 | 186 | ### STAC Item Assets 187 | 188 | Whether the metadata are provided in a single record relevant to all pixels, or separately for each pixel, 189 | is at the discretion of the data provider. 190 | 191 | The role names specify the values to be used in the Asset's `roles`. 192 | Each of the assets can either be exposed individually or grouped together in any form. 193 | In the latter case the role names can simply be merged to a set of unique role names. 194 | Roles can also be combined for a single file. 195 | For example, a cloud mask which is also including cloud shadows 196 | can use the roles `cloud` and `cloud-shadow` for a single file. 197 | The `values` in `raster:bands` property can the specify which value(s) correspond to clouds and 198 | which value(s) correspond to cloud shadows respectively. 199 | The *italic* role names could be used as the asset's key. 200 | 201 | The **bold** additional properties are required. 202 | 203 | | Role Name(s) | Req. | Additional properties | Description | 204 | | -------------------------------------- | -------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | 205 | | (*reflectance* or *temperature*), data | 3.1 / 2.2 | `type`, `created`, **`eo:bands`**, **`raster:bands`** (with `data_type`, `bits_per_sample` and **`nodata`**), `file:byte_order` | **REQUIRED.** Points to the actual measurements. The value(s) for pixels that do not correspond to an observation must be provided in the property `nodata` in `raster:bands`. | 206 | | *date*, metadata | 1.3 | `type`, `raster:bands` (with `data_type` and `bits_per_sample`), `file:byte_order` | Points to a file with per-pixel acquisition timestamps. | 207 | | *incomplete-testing*, metadata | 2.3 | `type`, **`raster:bands`** (with **`values`**) | **REQUIRED.** Points to a file that identifies pixels for which the per-pixel tests have not all been successfully completed. See CARD4L req. 2.3 for details. | 208 | | *saturation*, metadata | 2.4 | `type`, `eo:bands`, **`raster:bands`** (with **`values`**) | **REQUIRED.** Points to a file that indicates where pixels in the input spectral bands are saturated. If the saturation is given per band, either `eo:bands` or `values` in `raster:bands` is **required** to indicate which pixels are saturated for each spectral band. | 209 | | *cloud*, metadata | 2.5 | `type`, **`raster:bands`** (with **`values`**) | **REQUIRED.** Points to a file that indicates whether a pixel is assessed as being cloud. | 210 | | *cloud-shadow*, metadata | 2.6 | `type`, **`raster:bands`** (with **`values`**) | **REQUIRED.** Points to a file that indicates whether a pixel is assessed as being cloud shadow. | 211 | | *snow-ice*, metadata | 2.7 (ST) / 2.8 (SR) | `type`, **`raster:bands`** (with **`values`**) | Points to a file that indicates whether a pixel is assessed as being snow/ice or not. | 212 | | *land-water*, metadata | 2.7 (SR) | `type`, **`raster:bands`** (with **`values`**) | Points to a file that indicates whether a pixel is assessed as being land or water. | 213 | | *incidence-angle*, metadata | 2.8 (ST) / 2.11 (SR) | `type`, **`raster:bands`** (with `data_type`, `bits_per_sample` and **`unit`**), `file:byte_order` | Points to a file with per-pixel incidence angles. `unit` is usually `degree`. | 214 | | *azimuth*, metadata | 2.8 (ST) / 2.11 (SR) | `type`, **`raster:bands`** (with `data_type`, `bits_per_sample` and **`unit`**), `file:byte_order` | Points to a file with per-pixel azimuth angles. `unit` is usually `degree`. | 215 | | *sun-azimuth*, metadata | 2.8 (ST) / 2.11 (SR) | `type`, **`raster:bands`** (with `data_type`, `bits_per_sample` and **`unit`**), `file:byte_order` | Points to a file with per-pixel sun azimuth angles. `unit` is usually `degree`. | 216 | | *sun-elevation*, metadata | 2.8 (ST) / 2.11 (SR) | `type`, **`raster:bands`** (with `data_type`, `bits_per_sample` and **`unit`**), `file:byte_order` | Points to a file with per-pixel sun elevation angles. `unit` is usually `degree`. | 217 | | *terrain-shadow*, metadata | 2.9 (SR) | `type`, **`raster:bands`** (with **`values`**) | Points to a file that indicates whether a pixel is not directly illuminated due to terrain shadowing. | 218 | | *terrain-occlusion*, metadata | 2.10 (SR) | `type`, **`raster:bands`** (with **`values`**) | Points to a file that indicates whether a pixel is not visible to the sensor due to terrain occlusion during off-nadir viewing. | 219 | | *terrain-illumination*, metadata | 2.12 (SR) | `type`, `raster:bands` (with `data_type`, `bits_per_sample`), `file:byte_order` | Points to a file with coefficients used for terrain illumination correction are provided for each pixel. | 220 | 221 | Note: `raster:bands[*].values` is not standardized yet in STAC, this could change to 222 | `file:values` or something different with a similar structure in the future. 223 | 224 | #### Additional Asset Properties 225 | 226 | The following table lists properties that may occur in the assets. 227 | The list doesn't specify which fields apply to which asset and it also doesn't specify which fields are required. 228 | For those details please refer to the ["Additional properties" column in the table above](#stac-item-assets). 229 | 230 | | Field Name | Req. | Data Type | Description | 231 | | --------------- | --------- | ------------------------------------------------------------ | ------------------------------------------------------------ | 232 | | type | *n/a* | string | STRONGLY RECOMMENDED. The [media type](https://github.com/radiantearth/stac-spec/blob/master/item-spec/item-spec.md#asset-media-type) of the file format. | 233 | | created | *n/a* | string | The time of the processing is specified via the `created` property of the asset as specified in the [STAC Common metadata](https://github.com/radiantearth/stac-spec/tree/v1.0.0/item-spec/common-metadata.md#date-and-time). | 234 | | eo:bands | 1.10 | \[[Band Object](https://github.com/stac-extensions/eo/blob/v1.0.0/README.md#band-object)\] | Bands with at least the following fields included: `name` and `center_wavelength`. Add additional fields such as `full_width_half_max` to better meet the *target (desired) requirements*. See the CARD4L requirement 1.10 for further details. | 235 | | raster:bands | see below | \[[Raster Band Object](https://github.com/stac-extensions/raster/blob/v1.1.0/README.md#raster-band-object)\] | Bands with at least the required fields for the corresponding asset role (see above and below). | 236 | | file:byte_order | *n/a* | string | One of `big-endian` or `little-endian`. | 237 | 238 | ##### raster:bands 239 | 240 | | Field Name | Req. | Data Type | Description | 241 | | --------------- | ----- | ------------------------------------------------------------ | ------------------------------------------------------------ | 242 | | data_type | *n/a* | string | One of the [Data Types](https://github.com/stac-extensions/raster/blob/v1.1.0/README.md#data-types). | 243 | | unit | *n/a* | string | The unit of the values in the asset, preferably compliant to [UDUNITS-2](https://ncics.org/portfolio/other-resources/udunits2/) units (singular). | 244 | | bits_per_sample | *n/a* | integer | Actual number of bits per sample (e.g., 8, 16, 32, ...) | 245 | | values | *n/a* | \[[Mapping Object](https://github.com/stac-extensions/file/blob/v2.1.0/README.md#mapping-object)\] | Lists the value that are in the file and describes their meaning. | 246 | | nodata | 2.2 | \[any] | Value(s) for no-data. | 247 | 248 | ## Notes 249 | 250 | - 1.13: The algorithms can be given either in `processing:software` or as link with relation type `about`. 251 | One of them is **required** by CARD4L. 252 | - 2.13 (SR): CARD4L lists no specific requirements thus it's missing in this document. 253 | - 3.2 (SR) / 3.3 (ST): Measurement Uncertainty is not required and it was not clear in which form this should be provided. 254 | Also the CARD4L specification states for SR that 255 | 256 | > "\[i]n current practice, users determine fitness for purpose based on knowledge of the lineage of the data, 257 | > rather than on a specific estimate of measurement uncertainty." 258 | 259 | Thus this requirement is not captured in this document. 260 | - 3.3 (SR): Measurement Normalisation is not required and it was not clear in which form this should be provided. 261 | Thus this requirement is not captured in this document, but we have added the link relation type 262 | `measurement-normalization` to link to information on measurement normalisation. 263 | - 4.1 (SR): CARD4L lists no specific requirements thus it's missing in this document. 264 | -------------------------------------------------------------------------------- /optical/examples/eodc-landsat8.json: -------------------------------------------------------------------------------- 1 | { 2 | "stac_version": "1.0.0", 3 | "stac_extensions": [ 4 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 5 | "https://stac-extensions.github.io/card4l/v0.1.0/optical/schema.json", 6 | "https://stac-extensions.github.io/processing/v1.1.0/schema.json", 7 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 8 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json", 9 | "https://stac-extensions.github.io/view/v1.0.0/schema.json" 10 | ], 11 | "id": "51e1f769-f6b1-4f4a-91be-55451b6990e3", 12 | "type": "Feature", 13 | "bbox": [ 14 | 6.022720992309466, 15 | 45.120187268680816, 16 | 10.65453202974471, 17 | 48.31266918320008 18 | ], 19 | "geometry": { 20 | "type": "Polygon", 21 | "coordinates": [ 22 | [ 23 | [ 24 | 6.022720992309466, 25 | 45.120187268680816 26 | ], 27 | [ 28 | 6.022720992309466, 29 | 48.31266918320008 30 | ], 31 | [ 32 | 10.65453202974471, 33 | 48.31266918320008 34 | ], 35 | [ 36 | 10.65453202974471, 37 | 45.120187268680816 38 | ], 39 | [ 40 | 6.022720992309466, 41 | 45.120187268680816 42 | ] 43 | ] 44 | ] 45 | }, 46 | "properties": { 47 | "card4l:specification": "SR", 48 | "card4l:specification_version": "5.0", 49 | "datetime": "2016-12-08T12:00:00+00:00", 50 | "instruments": [ 51 | "oli" 52 | ], 53 | "platform": "landsat-8", 54 | "processing:lineage": "FORCE Level 2 Processing System", 55 | "processing:software": { 56 | "FORCE": "3.6.2" 57 | }, 58 | "processing:level": "L2", 59 | "proj:epsg": null, 60 | "proj:wkt2": "PROJCS[\"Azimuthal_Equidistant\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Azimuthal_Equidistant\"],PARAMETER[\"latitude_of_center\",53],PARAMETER[\"longitude_of_center\",24],PARAMETER[\"false_easting\",5837287.81977],PARAMETER[\"false_northing\",2121415.69617],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]]]", 61 | "view:incidence_angle": 45.6789, 62 | "view:azimuth": 45.6789, 63 | "view:sun_azimuth": 45.6789, 64 | "view:sun_elevation": 45.6789 65 | }, 66 | "links": [ 67 | { 68 | "rel": "about", 69 | "href": "http://doi.org/10.3390/rs11091124" 70 | }, 71 | { 72 | "rel": "cloud", 73 | "href": "http://doi.org/10.1109/lgrs.2015.2390673" 74 | }, 75 | { 76 | "rel": "related", 77 | "href": "https://doi.pangaea.de/10.1594/PANGAEA.893109" 78 | }, 79 | { 80 | "rel": "water-vapor", 81 | "href": "http://doi.org/10.1594/PANGAEA.893109" 82 | }, 83 | { 84 | "rel": "cloud-shadow", 85 | "href": "http://doi.org/10.1109/lgrs.2015.2390673" 86 | }, 87 | { 88 | "rel": "card4l-document", 89 | "href": "https://ceos.org/ard/files/PFS/SR/v5.0/CARD4L_Product_Family_Specification_Surface_Reflectance-v5.0.pdf", 90 | "type": "application/pdf" 91 | }, 92 | { 93 | "rel": "elevation-model", 94 | "href": "https://spacedata.copernicus.eu/web/cscda/dataset-details?articleId=394198", 95 | "title": "Copernicus DEM 30m" 96 | }, 97 | { 98 | "rel": "atmospheric-scattering", 99 | "href": "http://doi.org/10.3390/rs11030257" 100 | } 101 | ], 102 | "assets": { 103 | "cloud": { 104 | "href": "https://example.com/EU010M/E053N015T1/20161208_LEVEL2_LND08_QAI.tif", 105 | "roles": [ 106 | "cloud", 107 | "cloud-shadow", 108 | "saturation", 109 | "metadata" 110 | ], 111 | "raster:bands": [ 112 | { 113 | "description": "Clouds", 114 | "values": [ 115 | { 116 | "values": [ 117 | 0 118 | ], 119 | "summary": "clear" 120 | }, 121 | { 122 | "values": [ 123 | 1 124 | ], 125 | "summary": "less confident cloud (i.e., buffered cloud)" 126 | }, 127 | { 128 | "values": [ 129 | 2 130 | ], 131 | "summary": "confident, opaque cloud" 132 | }, 133 | { 134 | "values": [ 135 | 3 136 | ], 137 | "summary": "cirrus" 138 | } 139 | ] 140 | }, 141 | { 142 | "description": "Cloud Shadows", 143 | "values": [ 144 | { 145 | "values": [ 146 | 0 147 | ], 148 | "summary": "no - no cloud-shadow on pixel" 149 | }, 150 | { 151 | "values": [ 152 | 1 153 | ], 154 | "summary": "yes - cloud-shadow on pixel" 155 | } 156 | ] 157 | }, 158 | { 159 | "description": "Saturation", 160 | "values": [ 161 | { 162 | "values": [ 163 | 0 164 | ], 165 | "summary": "no - pixel is NOT saturated" 166 | }, 167 | { 168 | "values": [ 169 | 1 170 | ], 171 | "summary": "yes - pixel is saturated" 172 | } 173 | ] 174 | } 175 | ], 176 | "type": "image/tiff; application=geotiff" 177 | }, 178 | "incomplete_testing": { 179 | "href": "https://example.com/EU010M/E053N015T1/20180616_LEVEL2_SEN2B_QAI_it.tif", 180 | "roles": [ 181 | "incomplete-testing", 182 | "metadata" 183 | ], 184 | "raster:bands": [ 185 | { 186 | "values": [ 187 | { 188 | "values": [ 189 | 0 190 | ], 191 | "summary": "tests have NOT been successfully completed" 192 | }, 193 | { 194 | "values": [ 195 | 1 196 | ], 197 | "summary": "tests have been successfully completed" 198 | } 199 | ] 200 | } 201 | ], 202 | "type": "image/tiff; application=geotiff" 203 | }, 204 | "data": { 205 | "href": "https://example.com/EU010M/E053N015T1/20161208_LEVEL2_LND08_BOA.tif", 206 | "eo:bands": [ 207 | { 208 | "name": "band_1", 209 | "center_wavelength": 0, 210 | "common_name": "blue" 211 | }, 212 | { 213 | "name": "band_2", 214 | "center_wavelength": 0, 215 | "common_name": "green" 216 | }, 217 | { 218 | "name": "band_3", 219 | "center_wavelength": 0, 220 | "common_name": "red" 221 | }, 222 | { 223 | "name": "band_4", 224 | "center_wavelength": 0, 225 | "common_name": "nir08" 226 | }, 227 | { 228 | "name": "band_5", 229 | "center_wavelength": 1, 230 | "common_name": "swir16" 231 | }, 232 | { 233 | "name": "band_6", 234 | "center_wavelength": 2, 235 | "common_name": "swir22" 236 | } 237 | ], 238 | "raster:bands": [ 239 | { 240 | "data_type": "int16", 241 | "nodata": -9999, 242 | "unit": "fraction" 243 | }, 244 | { 245 | "data_type": "int16", 246 | "nodata": -9999, 247 | "unit": "fraction" 248 | }, 249 | { 250 | "data_type": "int16", 251 | "nodata": -9999, 252 | "unit": "fraction" 253 | }, 254 | { 255 | "data_type": "int16", 256 | "nodata": -9999, 257 | "unit": "fraction" 258 | }, 259 | { 260 | "data_type": "int16", 261 | "nodata": -9999, 262 | "unit": "fraction" 263 | }, 264 | { 265 | "data_type": "int16", 266 | "nodata": -9999, 267 | "unit": "fraction" 268 | } 269 | ], 270 | "roles": [ 271 | "data", 272 | "reflectance" 273 | ], 274 | "created": "2021-02-09T12:46:11Z", 275 | "type": "image/tiff; application=geotiff" 276 | } 277 | } 278 | } -------------------------------------------------------------------------------- /optical/examples/eodc-sentinel2.json: -------------------------------------------------------------------------------- 1 | { 2 | "stac_version": "1.0.0", 3 | "stac_extensions": [ 4 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 5 | "https://stac-extensions.github.io/card4l/v0.1.0/optical/schema.json", 6 | "https://stac-extensions.github.io/processing/v1.1.0/schema.json", 7 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 8 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json", 9 | "https://stac-extensions.github.io/view/v1.0.0/schema.json" 10 | ], 11 | "id": "33815fdb-8b43-441a-9926-758a73072dcd", 12 | "type": "Feature", 13 | "bbox": [ 14 | 8.896022536230403, 15 | 46.37974744891577, 16 | 10.428304773879523, 17 | 47.43268391106645 18 | ], 19 | "geometry": { 20 | "type": "Polygon", 21 | "coordinates": [ 22 | [ 23 | [ 24 | 8.896022536230403, 25 | 46.37974744891577 26 | ], 27 | [ 28 | 8.896022536230403, 29 | 47.43268391106645 30 | ], 31 | [ 32 | 10.428304773879523, 33 | 47.43268391106645 34 | ], 35 | [ 36 | 10.428304773879523, 37 | 46.37974744891577 38 | ], 39 | [ 40 | 8.896022536230403, 41 | 46.37974744891577 42 | ] 43 | ] 44 | ] 45 | }, 46 | "properties": { 47 | "processing:lineage": "FORCE Level 2 Processing System", 48 | "processing:software": { 49 | "FORCE": "3.6.2" 50 | }, 51 | "datetime": "2018-06-16T12:00:00+00:00", 52 | "card4l:specification_version": "5.0", 53 | "processing:level": "L2", 54 | "platform": "sentinel-2b", 55 | "card4l:specification": "SR", 56 | "constellation": "sentinel-2", 57 | "instruments": [ 58 | "msi" 59 | ], 60 | "proj:epsg": null, 61 | "proj:wkt2": "PROJCS[\"Azimuthal_Equidistant\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Azimuthal_Equidistant\"],PARAMETER[\"latitude_of_center\",53],PARAMETER[\"longitude_of_center\",24],PARAMETER[\"false_easting\",5837287.81977],PARAMETER[\"false_northing\",2121415.69617],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]]]", 62 | "view:incidence_angle": 45.6789, 63 | "view:azimuth": 45.6789, 64 | "view:sun_azimuth": 45.6789, 65 | "view:sun_elevation": 45.6789 66 | }, 67 | "links": [ 68 | { 69 | "rel": "about", 70 | "href": "http://doi.org/10.3390/rs11091124" 71 | }, 72 | { 73 | "rel": "cloud", 74 | "href": "http://doi.org/10.1016/j.rse.2018.04.046" 75 | }, 76 | { 77 | "rel": "snow-ice", 78 | "href": "https://doi.org/10.3390/rs13010137" 79 | }, 80 | { 81 | "rel": "land-water", 82 | "href": "https://doi.org/10.3390/rs13010137" 83 | }, 84 | { 85 | "rel": "water-vapor", 86 | "href": "http://doi.org/10.3390/rs10020352" 87 | }, 88 | { 89 | "rel": "cloud-shadow", 90 | "href": "https://doi.org/10.3390/rs13010137" 91 | }, 92 | { 93 | "rel": "card4l-document", 94 | "href": "https://ceos.org/ard/files/PFS/SR/v5.0/CARD4L_Product_Family_Specification_Surface_Reflectance-v5.0.pdf", 95 | "type": "application/pdf" 96 | }, 97 | { 98 | "rel": "elevation-model", 99 | "href": "https://spacedata.copernicus.eu/web/cscda/dataset-details?articleId=394198", 100 | "title": "Copernicus DEM 30m" 101 | }, 102 | { 103 | "rel": "atmospheric-scattering", 104 | "href": "http://doi.org/10.3390/rs10020352" 105 | } 106 | ], 107 | "assets": { 108 | "cloud": { 109 | "href": "https://example.com/EU010M/E053N015T1/20180616_LEVEL2_SEN2B_QAI_c.tif", 110 | "roles": [ 111 | "cloud", 112 | "cloud-shadow", 113 | "saturation", 114 | "metadata" 115 | ], 116 | "raster:bands": [ 117 | { 118 | "description": "Clouds", 119 | "values": [ 120 | { 121 | "values": [ 122 | 0 123 | ], 124 | "summary": "clear" 125 | }, 126 | { 127 | "values": [ 128 | 1 129 | ], 130 | "summary": "less confident cloud (i.e., buffered cloud)" 131 | }, 132 | { 133 | "values": [ 134 | 2 135 | ], 136 | "summary": "confident, opaque cloud" 137 | }, 138 | { 139 | "values": [ 140 | 3 141 | ], 142 | "summary": "cirrus" 143 | } 144 | ] 145 | }, 146 | { 147 | "description": "Cloud Shadows", 148 | "values": [ 149 | { 150 | "values": [ 151 | 0 152 | ], 153 | "summary": "no - no cloud-shadow on pixel" 154 | }, 155 | { 156 | "values": [ 157 | 1 158 | ], 159 | "summary": "yes - cloud-shadow on pixel" 160 | } 161 | ] 162 | }, 163 | { 164 | "description": "Saturation", 165 | "values": [ 166 | { 167 | "values": [ 168 | 0 169 | ], 170 | "summary": "no - pixel is NOT saturated" 171 | }, 172 | { 173 | "values": [ 174 | 1 175 | ], 176 | "summary": "yes - pixel is saturated" 177 | } 178 | ] 179 | } 180 | ], 181 | "type": "image/tiff; application=geotiff" 182 | }, 183 | "incomplete_testing": { 184 | "href": "https://example.com/EU010M/E053N015T1/20180616_LEVEL2_SEN2B_QAI_it.tif", 185 | "roles": [ 186 | "incomplete-testing", 187 | "metadata" 188 | ], 189 | "raster:bands": [ 190 | { 191 | "values": [ 192 | { 193 | "values": [ 194 | 0 195 | ], 196 | "summary": "tests have NOT been successfully completed" 197 | }, 198 | { 199 | "values": [ 200 | 1 201 | ], 202 | "summary": "tests have been successfully completed" 203 | } 204 | ] 205 | } 206 | ], 207 | "type": "image/tiff; application=geotiff" 208 | }, 209 | "data": { 210 | "href": "https://example.com/EU010M/E053N015T1/20180616_LEVEL2_SEN2B_BOA.tif", 211 | "eo:bands": [ 212 | { 213 | "name": "band_1", 214 | "center_wavelength": 0, 215 | "common_name": "blue" 216 | }, 217 | { 218 | "name": "band_2", 219 | "center_wavelength": 0, 220 | "common_name": "green" 221 | }, 222 | { 223 | "name": "band_3", 224 | "center_wavelength": 0, 225 | "common_name": "red" 226 | }, 227 | { 228 | "name": "band_4", 229 | "center_wavelength": 0, 230 | "common_name": "rededge" 231 | }, 232 | { 233 | "name": "band_5", 234 | "center_wavelength": 0, 235 | "common_name": "rededge" 236 | }, 237 | { 238 | "name": "band_6", 239 | "center_wavelength": 0, 240 | "common_name": "rededge" 241 | }, 242 | { 243 | "name": "band_7", 244 | "center_wavelength": 0, 245 | "common_name": "nir" 246 | }, 247 | { 248 | "name": "band_8", 249 | "center_wavelength": 0, 250 | "common_name": "nir08" 251 | }, 252 | { 253 | "name": "band_9", 254 | "center_wavelength": 1, 255 | "common_name": "swir16" 256 | }, 257 | { 258 | "name": "band_10", 259 | "center_wavelength": 2, 260 | "common_name": "swir22" 261 | } 262 | ], 263 | "raster:bands": [ 264 | { 265 | "nodata": 0, 266 | "data_type": "int16", 267 | "unit": "fraction" 268 | }, 269 | { 270 | "nodata": 0, 271 | "data_type": "int16", 272 | "unit": "fraction" 273 | }, 274 | { 275 | "nodata": 0, 276 | "data_type": "int16", 277 | "unit": "fraction" 278 | }, 279 | { 280 | "nodata": 0, 281 | "data_type": "int16", 282 | "unit": "fraction" 283 | }, 284 | { 285 | "nodata": 0, 286 | "data_type": "int16", 287 | "unit": "fraction" 288 | }, 289 | { 290 | "nodata": 0, 291 | "data_type": "int16", 292 | "unit": "fraction" 293 | }, 294 | { 295 | "nodata": 0, 296 | "data_type": "int16", 297 | "unit": "fraction" 298 | }, 299 | { 300 | "nodata": 0, 301 | "data_type": "int16", 302 | "unit": "fraction" 303 | }, 304 | { 305 | "nodata": 0, 306 | "data_type": "int16", 307 | "unit": "fraction" 308 | }, 309 | { 310 | "nodata": 0, 311 | "data_type": "int16", 312 | "unit": "fraction" 313 | } 314 | ], 315 | "roles": [ 316 | "data", 317 | "reflectance" 318 | ], 319 | "created": "2021-03-08T14:24:30Z", 320 | "type": "image/tiff; application=geotiff" 321 | } 322 | } 323 | } -------------------------------------------------------------------------------- /optical/json-schema/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id": "https://stac-extensions.github.io/card4l/v0.1.0/optical/schema.json#", 4 | "title": "CARD4L Optical Extension", 5 | "description": "STAC CARD4L Optical Extension for STAC Items.", 6 | "type": "object", 7 | "required": [ 8 | "stac_extensions", 9 | "geometry", 10 | "bbox", 11 | "type", 12 | "properties", 13 | "links", 14 | "assets" 15 | ], 16 | "properties": { 17 | "stac_extensions": { 18 | "type": "array", 19 | "allOf": [ 20 | { 21 | "contains": { 22 | "const": "https://stac-extensions.github.io/card4l/v0.1.0/optical/schema.json" 23 | } 24 | }, 25 | { 26 | "contains": { 27 | "const": "https://stac-extensions.github.io/eo/v1.0.0/schema.json" 28 | } 29 | }, 30 | { 31 | "contains": { 32 | "const": "https://stac-extensions.github.io/projection/v1.0.0/schema.json" 33 | } 34 | }, 35 | { 36 | "contains": { 37 | "const": "https://stac-extensions.github.io/raster/v1.1.0/schema.json" 38 | } 39 | }, 40 | { 41 | "contains": { 42 | "const": "https://stac-extensions.github.io/view/v1.0.0/schema.json" 43 | } 44 | } 45 | ] 46 | }, 47 | "type": { 48 | "const": "Feature" 49 | }, 50 | "properties": { 51 | "type": "object", 52 | "required": [ 53 | "datetime", 54 | "instruments", 55 | "proj:epsg", 56 | "view:incidence_angle", 57 | "view:azimuth", 58 | "view:sun_azimuth", 59 | "view:sun_elevation" 60 | ], 61 | "oneOf": [ 62 | { 63 | "properties": { 64 | "proj:epsg": { 65 | "type": "integer" 66 | } 67 | } 68 | }, 69 | { 70 | "properties": { 71 | "proj:epsg": { 72 | "type": "null" 73 | } 74 | }, 75 | "anyOf": [ 76 | { 77 | "required": [ 78 | "proj:wkt2" 79 | ] 80 | }, 81 | { 82 | "required": [ 83 | "proj:projjson" 84 | ] 85 | } 86 | ] 87 | } 88 | ], 89 | "properties": { 90 | "card4l:northern_geometric_accuracy": { 91 | "$ref": "#/definitions/geometric_accuracy" 92 | }, 93 | "card4l:eastern_geometric_accuracy": { 94 | "$ref": "#/definitions/geometric_accuracy" 95 | }, 96 | "card4l:geometric_accuracy_radial_rmse": { 97 | "type": "number" 98 | } 99 | } 100 | }, 101 | "links": { 102 | "type": "array", 103 | "items": { 104 | "type": "object", 105 | "required": [ 106 | "href", 107 | "rel" 108 | ] 109 | }, 110 | "contains": { 111 | "required": [ 112 | "type" 113 | ], 114 | "properties": { 115 | "rel": { 116 | "const": "card4l-document" 117 | }, 118 | "type": { 119 | "enum": [ 120 | "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 121 | "application/pdf" 122 | ] 123 | } 124 | } 125 | } 126 | }, 127 | "assets": { 128 | "type": "object", 129 | "additionalProperties": { 130 | "allOf": [ 131 | { 132 | "$comment": "TODO" 133 | } 134 | ] 135 | } 136 | } 137 | }, 138 | "oneOf": [ 139 | { 140 | "$comment": "SR-only requirements", 141 | "type": "object", 142 | "properties": { 143 | "properties": { 144 | "type": "object", 145 | "required": [ 146 | "card4l:specification", 147 | "card4l:specification_version" 148 | ], 149 | "properties": { 150 | "card4l:specification": { 151 | "const": "SR" 152 | }, 153 | "card4l:specification_version": { 154 | "const": "5.0" 155 | } 156 | } 157 | }, 158 | "links": { 159 | "allOf": [ 160 | { 161 | "contains": { 162 | "properties": { 163 | "rel": { 164 | "const": "atmospheric-scattering" 165 | } 166 | } 167 | } 168 | }, 169 | { 170 | "contains": { 171 | "properties": { 172 | "rel": { 173 | "const": "water-vapor" 174 | } 175 | } 176 | } 177 | } 178 | ] 179 | } 180 | } 181 | }, 182 | { 183 | "$comment": "ST-only requirements", 184 | "type": "object", 185 | "properties": { 186 | "properties": { 187 | "type": "object", 188 | "required": [ 189 | "card4l:specification", 190 | "card4l:specification_version" 191 | ], 192 | "properties": { 193 | "card4l:specification": { 194 | "type": "string", 195 | "const": "ST" 196 | }, 197 | "card4l:specification_version": { 198 | "type": "string", 199 | "const": "5.0" 200 | } 201 | } 202 | }, 203 | "links": { 204 | "contains": { 205 | "properties": { 206 | "rel": { 207 | "const": "atmosphere-emissivity" 208 | } 209 | } 210 | } 211 | } 212 | } 213 | } 214 | ], 215 | "definitions": { 216 | "geometric_accuracy": { 217 | "type": "object", 218 | "required": [ 219 | "bias", 220 | "stddev" 221 | ], 222 | "properties": { 223 | "bias": { 224 | "type": "number" 225 | }, 226 | "stddev": { 227 | "type": "number" 228 | } 229 | } 230 | } 231 | } 232 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stac-card4l", 3 | "version": "0.1.0", 4 | "scripts": { 5 | "test": "npm run check-markdown && npm run check-examples", 6 | "check-markdown": "remark . -f -r .github/remark.yaml", 7 | "check-examples": "stac-node-validator . --format --lint --verbose --schemaMap https://stac-extensions.github.io/card4l/v0.1.0/optical/schema.json=./optical/json-schema/schema.json --schemaMap https://stac-extensions.github.io/card4l/v0.1.0/sar/source.json=./sar/json-schema/source.json --schemaMap https://stac-extensions.github.io/card4l/v0.1.0/sar/product.json=./sar/json-schema/product.json --schemaMap https://stac-extensions.github.io/card4l/v0.1.0/sar/common.json=./sar/json-schema/common.json" 8 | }, 9 | "dependencies": { 10 | "remark-cli": "^8.0.0", 11 | "remark-lint": "^7.0.0", 12 | "remark-lint-no-html": "^2.0.0", 13 | "remark-preset-lint-consistent": "^3.0.0", 14 | "remark-preset-lint-markdown-style-guide": "^3.0.0", 15 | "remark-preset-lint-recommended": "^4.0.0", 16 | "remark-validate-links": "^10.0.0", 17 | "stac-node-validator": "^1.0.0" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /sar/README.md: -------------------------------------------------------------------------------- 1 | # STAC CARD4L SAR Extension Specification 2 | 3 | - **Title:** CARD4L SAR 4 | - **Identifier:** 5 | - **Field Name Prefix:** card4l (shared with the CARD4L Optical Extension) 6 | - **Scope:** Item 7 | - **Extension [Maturity Classification](https://github.com/radiantearth/stac-spec/tree/master/extensions/README.md#extension-maturity):** Proposal 8 | - **Owner**: @m-mohr 9 | 10 | This extension specifies how to create [STAC](https://github.com/radiantearth/stac-spec) Items that 11 | comply to the [CEOS CARD4L](http://ceos.org/ard/) product family specification for either 12 | - *SAR Normalized Radar Backscatter* (NRB) products in version 5.5 13 | ([PDF](https://ceos.org/ard/files/PFS/NRB/v5.5/CARD4L-PFS_NRB_v5.5.pdf), 14 | [Word](https://ceos.org/ard/files/PFS/NRB/v5.5/CARD4L-PFS_NRB_v5.5.docx)) 15 | *or* 16 | - *SAR Polarimetric Radar* (POL) products in version 3.5 17 | ([PDF](https://ceos.org/ard/files/PFS/POL/v3.5/CARD4L-PFS_Polarimetric_Radar-v3.5.pdf), 18 | [Word](https://ceos.org/ard/files/PFS/POL/v3.5/CARD4L-PFS_Polarimetric_Radar-v3.5.docx)). 19 | 20 | The following CARD4L metadata specifications lists requirements and maps them to a proposal of XML tags. 21 | We will refer to the included XML Tags throughout this document: 22 | 23 | - *SAR Normalized Radar Backscatter* (NRB) metadata specification 24 | ([XLSX](https://ceos.org/ard/files/PFS/NRB/v5.5/CARD4L_METADATA-spec_NRB-v5.5.5.xlsx)) 25 | - *SAR Polarimetric Radar* (POL) metadata specification 26 | ([XLSX](https://ceos.org/ard/files/PFS/POL/v3.5/CARD4L_METADATA-spec_POL-v3.5.5.xlsx)). 27 | 28 | **Document structure:** In general, the fields required in this extension are required to either meet 29 | the *threshold (minimum) requirements* by the CEOS CARD4L metadata specification *or* are required fields in STAC. 30 | Any additional optional field provided may lead to a higher percentage for the CARD4L *target (desired) requirements*. 31 | 32 | The column *Field Name* refers to the STAC field names. 33 | The column *XML Tag* refers to the XML tag proposed in the CARD4L metadata specification documents. 34 | *Src* and *Prod* define whether they apply for the STAC Item of the Source and Product respectively 35 | and give the requirement number in the CARD4L documents. 36 | 37 | - ✓ = Applies 38 | - (✓) = Not mentioned in CEOS CARD4L requirements, but recommended to be added, for example for better data discovery through STAC. 39 | - ✗ = Does not apply 40 | 41 | **STAC Extensions:** This extension makes use of a number of existing STAC extensions: 42 | 43 | - [File](https://github.com/stac-extensions/file) 44 | - [Processing](https://github.com/stac-extensions/processing) 45 | - [Projection](https://github.com/stac-extensions/projection) 46 | - [Raster](https://github.com/stac-extensions/raster) 47 | - [SAR](https://github.com/stac-extensions/sar) 48 | - [Satellite](https://github.com/stac-extensions/sat) 49 | - [View](https://github.com/stac-extensions/view) (optional) 50 | 51 | You have to read the STAC extensions in combination with this extension as this extension just provides 52 | the mapping between the STAC fields and the CARD4L requirements, but this extension doesn't give information 53 | on the data type or an actual detailed description about the fields. 54 | 55 | **Additional resources:** 56 | 57 | - [Examples](examples/) 58 | 59 | *Please note that the examples are made-up and as such are not real-world examples.* 60 | - JSON Schemas: 61 | - [Source](json-schema/source.json) 62 | - [Product](json-schema/product.json) 63 | 64 | *Please note that the schema gives only a first indication on whether your metadata is correctly formatted 65 | as we can't provide a full schema for validation at the moment.* 66 | *For example, the assets are not fully validated yet. Passing the schema also does not imply that you are CARD4L compliant!* 67 | 68 | ## STAC Collections 69 | 70 | CARD4L lists a lot of requirements (and fields) that have common values across all generated STAC Items and assets. 71 | Thus, it is **recommended** to provide a STAC Collection for the Items and put common fields (in the STAC Item `properties`) 72 | into [Collection `summaries`](https://github.com/radiantearth/stac-spec/tree/v1.0.0/collection-spec/collection-spec.md#collection-fields). 73 | While the STAC Item fields still need to be in the Item, too, you can de-duplicate links and assets by putting common 74 | links once into the STAC Collection links. Also, common assets can be just put once into the STAC Collection using the 75 | STAC extension [Collection Assets](https://github.com/radiantearth/stac-spec/tree/v1.0.0/collection-spec/collection-spec.md#assets). 76 | All this is still CARD4L compliant as CARD4L doesn't require all information to be in a single file. 77 | 78 | ## STAC Items 79 | 80 | CARD4L requires metadata for both source data (*Src*) and the product (*Prod*) which STAC can better deliver in two (or more) separate files. 81 | This extension assumes that at least one STAC Item for the source is available and follows this extension or 82 | at least one new STAC Item for the source data will be created following this extension. 83 | The number of source files (i.e. the number in `NumberOfAcquisitions` / the number of `SourceAttributes` tags in XML) 84 | indicate the number of source STAC Items required. See also the [`derived_from` link relation type](#stac-item-links) below. 85 | In principle, all metadata for the source data could also be provided in a (proprietary) format like XML and linked to from the product STAC Item, 86 | but this case will not be explained in-depth in this extension. 87 | 88 | STAC Items must always be valid, but not all STAC Item requirements are covered here, 89 | only additional requirements and mappings to fulfill the CARD4L requirements are listed here: 90 | 91 | | Field Name | Src | Prod | XML Tag | Description | 92 | | --------------- | ------- | ------- | ------------------------------------------------------------ | ------------------------------------------------------------ | 93 | | stac_extensions | ✓ | ✓ | *n/a* | **REQUIRED.** Must contain all extensions used. See below for details \[0]. | 94 | | id | ✓ 1.6.6 | ✓ | `ProductID` | **REQUIRED.** | 95 | | geometry | ✓ 1.6.7 | ✓ 1.7.6 | `SourceGeographicalExtent` (Src), `ProductGeographicalExtent` (Prod) | **REQUIRED.** | 96 | | bbox | ✓ 1.6.7 | ✓ 1.7.5 | derived from `geometry` (Src), `ProductBoundingBox` (Prod) | **REQUIRED.** This is the WGS84 variant of the bbox. If the product is provided in another CRS, `proj:bbox` must provide the bounding box in the native CRS (see [below](#projection)). | 97 | 98 | \[0] The following values for `stac_extensions` apply: 99 | 100 | | Value | Src | Prod | 101 | | ------------------------------------------------------------------ | ---- | ---- | 102 | | `https://stac-extensions.github.io/card4l/v0.1.0/sar/source.json` | ✓ | ✗ | 103 | | `https://stac-extensions.github.io/card4l/v0.1.0/sar/product.json` | ✗ | ✓ | 104 | | `https://stac-extensions.github.io/file/v2.0.0/schema.json` | ✗ | ✓ | 105 | | `https://stac-extensions.github.io/processing/v1.1.0/schema.json` | ✓ | ✓ | 106 | | `https://stac-extensions.github.io/projection/v1.0.0/schema.json` | (✓) | ✓ | 107 | | `https://stac-extensions.github.io/raster/v1.1.0/schema.json` | ✗ | ✓ | 108 | | `https://stac-extensions.github.io/sar/v1.0.0/schema.json` | ✓ | ✓ | 109 | | `https://stac-extensions.github.io/sat/v1.0.0/schema.json` | ✓ | (✓) | 110 | | `https://stac-extensions.github.io/view/v1.0.0/schema.json` | ✓ | ✗ | 111 | 112 | ### STAC Item Properties 113 | 114 | #### CARD4L 115 | 116 | | Field Name | Src | Prod | XML Tag | Data Type | Description | 117 | | -------------------------------------- | ----------- | ----------- | ------------------------------------------------------------ | ------------------------------------------------------- | ------------------------------------------------------------ | 118 | | card4l:specification | ✓ 1.4 / 1.3 | ✓ 1.4 / 1.3 | `DocumentIdentifier` / `Product`, attribute `type` (Prod) | string | **REQUIRED.** The CARD4L specification implemented, either `NRB` (SAR, Normalized Radar Backscatter) or `POL` (SAR, Polarimetric Radar). | 119 | | card4l:specification_version | ✓ 1.4 | ✓ 1.4 | `DocumentIdentifier` | string | **REQUIRED.** The CARD4L specification version. Currently always `5.5` for `NRB` and `3.5` for `POL`. | 120 | | card4l:beam_id | ✓ 1.6.4 | ✗ | `BeamID` | string | **REQUIRED.** | 121 | | card4l:orbit_data_source | ✓ 1.6.5 | (✓) | `OrbitDataSource` | string | **REQUIRED for *Src*.** For example `predicted`, `definitive`, `precise` or `downlinked`. Applies to *Prod*, if additional orbit correction has been applied. | 122 | | card4l:orbit_mean_altitude | ✓ 1.6.5 | ✗ | `OrbitMeanAltitude` | number | Platform (mean) altitude in meters (m). | 123 | | card4l:source_processing_parameters | ✓ 1.6.6 | ✗ | *various, see below* | [Source Processing Object](#source-processing-object) | Additional relevant processing parameters, e.g., Range- and Azimuth Look Bandwidth and LUT applied. If not available in machine-readable form, can also be specified in `processing:lineage`. | 124 | | card4l:source_geometry | ✓ 1.6.7 | ✗ | `SourceDataGeometry` | string | **REQUIRED.** One of `slant-range` or `ground-range`. | 125 | | card4l:incidence_angle_near_range | ✓ 1.6.7 | ✗ | `IncAngleNearRange` | number | **REQUIRED.** In degrees. | 126 | | card4l:incidence_angle_far_range | ✓ 1.6.7 | ✗ | `IncAngleFarRange` | number | **REQUIRED.** In degrees. | 127 | | card4l:resolution_azimuth | ✓ 1.6.7 | ✗ | `AzimuthResolution` | Map\ | **REQUIRED.** The azimuth resolution per beam, in meters (m). The beam ID is the object key and the value is the resolution. See also `sar:resolution_azimuth`. | 128 | | card4l:resolution_range | ✓ 1.6.7 | ✗ | `RangeResolution` | Map\ | **REQUIRED.** The range resolution per beam, in meters (m). The beam ID is the object key and the value is the resolution. See also `sar:resolution_range`. | 129 | | card4l:noise_equivalent_intensity | ✓ 1.6.9 | ✗ | `Estimates` in `NoiseEquivalentIntensity` | [Statistics Object](#statistics-object) | **REQUIRED.** Fill the object with statistics that are available for the source data, e.g. min, max and mean. Convert each to decibel, if required. | 130 | | card4l:noise_equivalent_intensity_type | ✓ 1.6.9 | ✗ | `NoiseEquivalentIntensity`, attribute `type` | string | **REQUIRED.** One of `beta0`, `sigma0`, or `gamma0`. | 131 | | card4l:peak_sidelobe_ratio | ✓ 1.6.9 | ✗ | `PeakSideLobeRatio` | number | Peak sidelobe ratio (PSLR) in decibel. | 132 | | card4l:integrated_sidelobe_ratio | ✓ 1.6.9 | ✗ | `IntegratedSideLobeRatio` | number | Integrated sidelobe ratio (ISLR) in decibel. | 133 | | card4l:noise_removal_applied | (✓) | ✓ 3.3 | `NoiseRemovalApplied` | boolean | **REQUIRED for *Prod*.** Specifies whether noise removal has been applied (`true`) or not (`false`). If set to `true`, a [link with relation type](#stac-item-links) `noise-removal` is **required**, too. | 134 | | card4l:mean_faraday_rotation_angle | ✓ 1.6.11 | ✗ | `MeanFaradayRotationAngle` | number | In degrees. | 135 | | card4l:ionosphere_indicator | ✓ 1.6.12 | ✗ | `IonosphereIndicator` | boolean | Flag indicating whether the imagery is “significantly impacted” by the ionosphere (`false` - no, `true` – yes). | 136 | | card4l:speckle_filtering | ✗ | ✓ 1.7.4 | `Filtering`, `FilterApplied` | [Speckle Filter Object](#speckle-filter-object) \| null | **REQUIRED.** Set to `null` if `FilterApplied` would be set to `false`. Otherwise, provide a [Speckle Filter Object](#speckle-filter-object). | 137 | | card4l:pixel_coordinate_convention | ✗ | ✓ 1.7.8 | `PixelCoordinateConvention` | string | **REQUIRED.** One of `center` (pixel center), `upper-left` (pixel ULC) or `lower-left` (pixel LLC) | 138 | | card4l:measurement_type | ✗ | ✓ 3.1 | `BackscatterMeasurement` (NRB) | string | **REQUIRED.** Must be set to `gamma0`. | 139 | | card4l:measurement_convention | ✗ | ✓ 3.1 | `BackscatterConvention` (NRB) | string | **REQUIRED.** Must be set to `linear amplitude`, `linear power` (both NRB + POL) or `angle` (POL only). | 140 | | card4l:conversion_eq | ✗ | ✓ 3.2 / 3.1 | `BackscatterConversionEq` (NRB), `ScalingConversionEq` (POL) | string | **REQUIRED.** Indicate equation to convert from digital numbers (`DN`) to logarithmic decibel scale, see the CARD4L specification (3.1/3.2) for details. | 141 | | card4l:relative_radiometric_accuracy | ✗ | ✓ 3.5 | `Relative` in `RadiometricAccuracy` | number | Relative accuracy of the Radiometric Terrain Correction in decibel. | 142 | | card4l:absolute_radiometric_accuracy | ✗ | ✓ 3.5 | `Absolute` in `RadiometricAccuracy` | number | Absolute accuracy of the Radiometric Terrain Correction in decibel. | 143 | | card4l:resampling_method | ✗ | ✓ 4.1 | `ResamplingMethod` | string | The resampling method used, e.g. `near`, `bilinear`, `cubic`, etc. (see [GDAL](https://gdal.org/programs/gdalwarp.html#cmdoption-gdalwarp-r) for more) | 144 | | card4l:dem_resampling_method | ✗ | ✓ 4.2 | `DEMResamplingMethod` | string | The resampling method used for the DEM, see above for example values. | 145 | | card4l:egm_resampling_method | ✗ | ✓ 4.2 | `EGMResamplingMethod` | string | The resampling method used for the EGM, see above for example values. | 146 | | card4l:geometric_accuracy_type | ✗ | ✓ 4.3 | `type` in `GeoCorrAccuracy` | string | **REQUIRED.** Either `slant-range` or `gtc` (Geocoded Terrain Corrected). | 147 | | card4l:northern_geometric_accuracy | ✗ | ✓ 4.3 | `GeoCorrAccuracy` | [Geometric Accuracy Object](#geometric-accuracy-object) | **REQUIRED.** An estimate of the northern or line geometric accuracy. | 148 | | card4l:eastern_geometric_accuracy | ✗ | ✓ 4.3 | `GeoCorrAccuracy` | [Geometric Accuracy Object](#geometric-accuracy-object) | **REQUIRED.** An estimate of the eastern or sample geometric accuracy. | 149 | | card4l:geometric_accuracy_radial_rmse | ✗ | ✓ 4.3 | `rRMSE` in `GeoCorrAccuracy` | number | Radial root mean square error (rRMSE) for output product sub-sample accuracy, in meters. | 150 | | card4l:gridding_convention | ✗ | ✓ 4.4 | `GriddingConvention` | string | **REQUIRED.** A brief free text description of the gridding convention used, see also the [link relation type](#stac-item-links) `gridding-convention`. | 151 | 152 | Note that the following fields are aligned with the CARD4L Optical extension: 153 | - `card4l:specification` 154 | - `card4l:specification_version` 155 | - `card4l:northern_geometric_accuracy` 156 | - `card4l:eastern_geometric_accuracy` 157 | - `card4l:geometric_accuracy_radial_rmse` 158 | 159 | ##### Statistics Object 160 | 161 | | Field Name | Type | Description | 162 | | ------------- | ------ | -------------------------------------------------- | 163 | | mean | number | mean value of all the pixels in the band | 164 | | minimum | number | minimum value of the pixels in the band | 165 | | maximum | number | maximum value of the pixels in the band | 166 | | ... | number | Additional statistics (see below) | 167 | 168 | The three properties above are the fields for mean, min and max. values. 169 | You can choose to provide other fields depending on what is available for your source data. 170 | Nevertheless, you have to provide at least one property in the Statistics Object. 171 | 172 | ##### Speckle Filter Object 173 | 174 | The following fields are all specified in CARD4L requirement 1.7.4. 175 | It is **required** to add all speckle filter parameters to this object. 176 | 177 | | Field Name | Data Type | XML Tag | Description | 178 | | ---------------- | --------- | ----------------- | ---------------------------------- | 179 | | type | string | `FilterType` | **REQUIRED.** | 180 | | window_size_col | integer | `WindowSizeCol` | | 181 | | window_size_line | integer | `WindowSizeLine` | | 182 | | ... | ... | `OtherParameters` | Add all speckle filter parameters. | 183 | 184 | ##### Source Processing Object 185 | 186 | Additional relevant processing parameters, 187 | e.g., Range- and Azimuth Look Bandwidth and LUT applied. 188 | If not available in machine-readable form, can also be specified in `processing:lineage`. 189 | The following fields are all suggested in CARD4L requirement 1.6.6. 190 | None of the fields is required. 191 | 192 | | Field Name | Data Type | XML Tag | Description | 193 | | ---------------------- | -------------------- | ---------------------- | ------------------------------------------------------------ | 194 | | lut_applied | string | `lutApplied` | | 195 | | range_look_bandwidth | Map\ | `RangeLookBandwidth` | Range Look Bandwidth per beam, in Gigahertz (GHz). The beam ID is the object key and the value is the bandwidth. | 196 | | azimuth_look_bandwidth | Map\ | `AzimuthLookBandwidth` | Azimuth Look Bandwidth per beam, in Gigahertz (GHz). The beam ID is the object key and the value is the bandwidth. | 197 | | ... | ... | *n/a* | Add all source data processing parameters. | 198 | 199 | ##### Geometric Accuracy Object 200 | 201 | | Field Name | Data Type | XML Tag | Description | 202 | | ---------- | --------- | ------------------------------------------------------------------ | ------------------------ | 203 | | bias | number | `NothernBias` / `LineBias` / `EasternBias` / `SampleBias` \[1] | **REQUIRED.** Bias, in meters. | 204 | | stddev | number | `NothernSTDev` / `LineSTDev` / `EasternSTDev` / `SampleSTDev` \[1] | **REQUIRED.** Standard deviation, in meters. | 205 | 206 | \[1] Depending on the type given in `card4l:geometric_accuracy_type` different specifications are referred to: 207 | 208 | - `gtc`: Mirrors `Northern...` and `Eastern...` XML tags 209 | - `slant-range`: Mirrors `Line...` and `Sample...` XML tags 210 | 211 | #### Common Metadata 212 | 213 | | Field Name | Src | Prod | XML Tag | Description | 214 | | -------------- | ------- | ------- | ----------------------------------------------- | ------------------------------------------------------------ | 215 | | license | ✓ 1.3 | ✓ 1.3 | `Product`, attribute `Copyright` | Recommended to be specified in a STAC Collection. | 216 | | datetime | ✓ | ✓ | *n/a* | **REQUIRED.** Recommended to set to the central timestamp between `start_datetime` and `end_datetime`. | 217 | | start_datetime | ✓ 1.6.3 | ✓ 1.5 | `FirstAcquistionDate` (Prod), `StartTime` (Src) | **REQUIRED.** Start time of the first acquisition. | 218 | | end_datetime | ✓ 1.6.3 | ✓ 1.5 | `LastAcquistitionDate` (Prod), `EndTime` (Src) | **REQUIRED.** End time of the last acquisition. | 219 | | instruments | ✓ 1.6.2 | (✓) | `Instrument` | **REQUIRED for *Src*.** Check STAC for potential values, example: `c-sar` for Sentinel-1 | 220 | | constellation | ✓ 1.6.2 | (✓) | *n/a* | Constellation name in lower-case. Only if part of a constellation, e.g. `sentinel-1` for Sentinel 1A and 1B. Can often be derived from `platform`. | 221 | | platform | ✓ 1.6.2 | (✓) | `Satellite` | **REQUIRED for *Src*.** Platform name in lower-case. Use a specific name such as `sentinel-1a` if part of constellation. MUST NOT duplicate `constellation`. | 222 | | gsd | ✗ | ✓ 1.7.3 | `ProductColumnSpacing` / `ProductRowSpacing` | **REQUIRED.** Convert to meters, if required. Currently, there's no way to express separate ground sample distances for x and y. | 223 | 224 | #### Processing 225 | 226 | | Field Name | Src | Prod | XML Tag | Description | 227 | | --------------------- | ------- | ------- | -------------------- | ------------------------------------------------------------ | 228 | | processing:facility | ✓ 1.6.6 | ✓ 1.7.1 | `ProcessingFacility` | **REQUIRED.** The name of the facility that produced the data. | 229 | | processing:level | ✓ 1.6.6 | ✓ 1.7.1 | *n/a* | **REQUIRED.** See [here](https://github.com/stac-extensions/processing#suggested-processing-levels) for suggested processing levels. | 230 | | processing:software | ✓ 1.6.6 | ✓ 1.7.1 | `SoftwareVersion` | **REQUIRED.** A dictionary with software name/version number for key/value describing one or more softwares that produced the data. | 231 | | processing:lineage | ✓ | ✓ | *n/a* | A human-readable description of the full processing workflow and parameters, e.g. algorithms and corrections applied. | 232 | | processing:expression | ✓ | ✓ | *n/a* | A machine-readable description of the full processing workflow and parameters, e.g. a Dask graph, an openEO process or a SNAP graph. Alternatively, you can also link to a processing chain with the relation type `processing-expression` (see below). | 233 | 234 | #### Projection 235 | 236 | | Field Name | Src | Prod | XML Tag | Description | 237 | | ------------------------- | ---- | ------- | --------------------------- | -------------------------------------------- | 238 | | proj:epsg | (✓) | ✓ 1.7.9 | `CoordinateReferenceSystem` | **REQUIRED for *Prod*.** EPSG code as integer or `null` if there is no suitable EPSG code. | 239 | | proj:wkt2 / proj:projjson | (✓) | ✓ 1.7.9 | `CoordinateReferenceSystem` | **REQUIRED for *Prod*.** Either WKT2 or PROJJSON needs to be given in addition to the EPSG code. It is also allowed to give both. | 240 | | proj:bbox | (✓) | ✓ 1.7.5 | `ProductBoundingBox` | **REQUIRED for *Prod* if the native CRS is not WGS84.** This is the bounding box in the native CRS of the product. Can be omitted if the native CRS is WGS84. | 241 | | proj:shape | ✗ | ✓ 1.7.7 | `NumberLines`, `NumberPixelsPerLine` | **REQUIRED for *Prod*.** Number of pixels in Y and X directions for the default grid. See comment below**. | 242 | | proj:transform | ✗ | (✓) | *n/a* | Recommended to include the affine transformation coefficients for the default grid. See comment below \[2]. | 243 | 244 | \[2] Values are assumed to apply to all Assets of an Item. If this is not the case, these fields should be specified at the [Item Asset level](#stac-item-assets) instead. 245 | 246 | #### SAR 247 | 248 | | Field Name | Src | Prod | XML Tag | Description | 249 | | --------------------------- | ------- | ----- | ------------------------------------------------------------ | ------------------------------------------------------------ | 250 | | sar:instrument_mode | ✓ 1.6.4 | (✓) | `ObservationMode` | **REQUIRED for *Src*.** | 251 | | sar:frequency_band | ✓ 1.6.4 | (✓) | `RadarBand` | **REQUIRED for *Src*.** | 252 | | sar:center_frequency | ✓ 1.6.4 | ✗ | `RadarCenterFrequency` | **REQUIRED.** In Gigahertz (GHz). | 253 | | sar:polarizations | ✓ 1.6.4 | (✓) | `Polarizations` | **REQUIRED for *Src*.** | 254 | | sar:product_type | ✓ 1.6.6 | ✓ 3.1 | `ProductLevel` (Src), `Measurements`, attribute `type` (Prod, POL only) | **REQUIRED.** *Src*: Find suitable [product type in the SAR extension](https://github.com/stac-extensions/sar/blob/v1.0.0/README.md#item-properties). *Prod*: `NRB` for Normalized Radar Backscatter products, `COVMAT` for Normalized Radar Covariance Matrix products or `PRD` for Polarimetric Radar Decomposition products. | 255 | | sar:observation_direction | ✓ 1.6.4 | ✗ | `AntennaPointing` | **REQUIRED.** Lower-case | 256 | | sar:looks_azimuth | ✓ 1.6.6 | ✗ | `AzimuthNumberOfLooks` | **REQUIRED.** | 257 | | sar:looks_range | ✓ 1.6.6 | ✗ | `RangeNumberOfLooks` | **REQUIRED.** | 258 | | sar:pixel_spacing_azimuth | ✓ 1.6.7 | ✗ | `AzimuthPixelSpacing` | **REQUIRED.** In meters (m). | 259 | | sar:pixel_spacing_range | ✓ 1.6.7 | ✗ | `RangePixelSpacing` | **REQUIRED.** In meters (m). | 260 | | sar:resolution_azimuth | ✓ 1.6.7 | ✗ | `AzimuthResolution` | **REQUIRED.** The maximum ability to distinguish two adjacent targets parallel to the flight path, which is the lowest value of `card4l:resolution_azimuth`, in meters (m). | 261 | | sar:resolution_range | ✓ 1.6.7 | ✗ | `RangeResolution` | **REQUIRED.** The maximum ability to distinguish two adjacent targets perpendicular to the flight path, which is the lowest value of `card4l:resolution_range`, in meters (m). | 262 | | sar:looks_equivalent_number | ✓ 1.6.9 | ✗ | `EquivalentNumberOfLooks` | | 263 | 264 | #### Satellite 265 | 266 | | Field Name | Src | Prod | XML Tag | Description | 267 | | ------------------ | ------- | ---- | --------------- | ---------------------------------- | 268 | | sat:orbit_state | ✓ 1.6.5 | (✓) | `PassDirection` | **REQUIRED for *Src*.** Lower-case | 269 | | sat:relative_orbit | ✓ | (✓) | *n/a* | | 270 | | sat:absolute_orbit | ✓ | (✓) | *n/a* | | 271 | 272 | #### View 273 | 274 | | Field Name | Src | Prod | XML Tag | Description | 275 | | -------------------- | ------- | ---- | ----------------- | ------------------------------------------------------------ | 276 | | view:azimuth | ✓ 1.6.5 | ✗ | `PlatformHeading` | In degrees. STAC uses the range 0 to 360°, so if you use the range -180 - 180, you need to add +180 for conversion. | 277 | | view:incidence_angle | ✓ 1.6.5 | ✗ | *n/a* | In degrees. Center between `card4l:incidence_angle_near_range` and `card4l:incidence_angle_far_range`. This is the sensor incidence angle. For per-pixel incidence angles, refer to the asset with the role `local-incidence-angle`. | 278 | 279 | ### STAC Item Links 280 | 281 | All CARD4L compliant STAC Catalog are **required** to make intensive use of STAC link relation types such as 282 | `root`, `parent`, `child`, `item` and `collection`, 283 | which then covers explicit requirements such as 1.6.1 and 1.7.1 (e.g. `SourceDataRepository` and `RepositoryURL`) through STAC links. 284 | 285 | | Relation Type | Src | Prod | XML Tag | Description | 286 | | ------------------------------ | -------- | ------------------- | -------------------------- | ------------------------------------------------------------ | 287 | | card4l-document | ✓ | ✓ 1.4 | `DocumentIdentifier` | **REQUIRED.** Instead of the document identifier, provide URLs to the Word (media type: `application/vnd.openxmlformats-officedocument.wordprocessingml.document`) and PDF (media type: `application/pdf`) document. | 288 | | derived_from | ✗ | ✓ 1.6 | *n/a* | **REQUIRED.** Points back to the source's STAC Item, which must comply to the *Src* requirements. May be multiple items, if the product is derived from multiple acquisitions. The number of acquisitions (`NumberOfAcquisitions`) is the number of links with this relation type. | 289 | | about | (✓) | (✓) | *n/a* | URL to other documentation, e.g. algorithms used in the generation process. | 290 | | related | ✗ | ✓ 1.7.2 | `AncillaryData` | URL to the sources of ancillary or auxiliary data used in the generation process. Excludes DEMs, which use the relation `elevation-model` instead. | 291 | | access | ✓ 1.6.1 | ✓ 1.7.1 | *n/a* | URL to data access information. | 292 | | satellite | ✓ 1.6.2 | ✗ | `SatelliteReference` | URL to the relevant CEOS Missions, Instruments and Measurements Database record. | 293 | | state-vectors | ✓ 1.6.5 | ✗ | `StateVector` | URL to an orbit data file containing at least 5 state vectors. | 294 | | sensor-calibration | ✓ 1.6.8 | ✗ | `SensorCalibration` | URL to the sensor calibration parameters. | 295 | | pol-cal-matrices | ✓ 1.6.10 | ✗ | `PolCalMatrices` | URL to the complex-valued polarimetric distortion matrices with the channel imbalance and the cross-talk applied for the polarimetric calibration. | 296 | | referenced-faraday-rotation | ✓ 1.6.11 | ✗ | `ReferenceFaradayRotation` | URL to the method or paper used to derive the estimate for the mean Faraday rotation angle. | 297 | | noise-removal | ✗ | ✓ 3.3 | `NRAlgorithm` | **REQUIRED if noise removal has been applied.** URL to the noise removal algorithm details. | 298 | | radiometric-terrain-correction | ✗ | ✓ 3.4 | `RTCAlgorithm` | **REQUIRED.** URL to the Radiometric Terrain Correction algorithm details. | 299 | | radiometric-accuracy | ✗ | ✓ 3.5 | `RadAccuracyReference` | URL describing the radiometric uncertainty of the product. | 300 | | geometric-correction | ✗ | ✓ 4.1 | `GeoCorrAlgorithm` | URL to the Geometric Correction algorithm details. | 301 | | elevation-model *or* surface-model | ✗ | ✓ 4.2 | `DEMReference` | **REQUIRED.** URL to the Digital Elevation Model (DEM) or Digital Surface Model (DSM) used for Geometric Terrain Correction. Preferably URLs to a STAC Item with additional metadata such as the line-spacing, column-spacing, horizontal and vertical accuracy. | 302 | | earth-gravitational-model | ✗ | ✓ 4.2 | `EGMReference` | **REQUIRED.** URL to the Earth Gravitational Model (EGM) used for Geometric Correction. Preferably URLs to a STAC Item with additional metadata for the EGM (see above). | 303 | | geometric-accuracy | ✗ | ✓ 4.3 | `GeometricCorrAccuracy` | URL to documentation of estimate of absolute localization error. | 304 | | gridding-convention | ✗ | ✓ 4.4 | `GriddingConvention` | URL that describes the gridding convention used. | 305 | | processing-expression | ✓ 1.6.6 | ✓ 1.7.1 / 4.1 / ... | *n/a* | A processing chain (or script) that describes how the data has been processed. | 306 | 307 | Note: CARD4L XML files also allow DOIs to be given instead of URLs. DOIs must be converted to URLs for STAC! 308 | 309 | ### STAC Item Assets 310 | 311 | Whether the metadata are provided in a single record relevant to all pixels, or separately for each pixel, is at the discretion of the data provider. 312 | 313 | The role names specify the values to be used in the Asset's `roles`. 314 | Each of the assets can either be exposed individually or grouped together in any form. 315 | In the latter case the role names can simply be merged to a set of unique role names. 316 | Roles can also be combined for a single file. 317 | The *italic* role names could be used as the asset's key. 318 | 319 | **All additional properties are required, except the properties in *italic*.** 320 | 321 | | Role Name(s) | Src | Prod | XML Tag | Additional properties | Description | 322 | | ------------------------------------- | ---- | ----------- | ---------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | 323 | | *card4l*, metadata | ✗ | ✓ 2.1 | *n/a* | `type` | Points to a metadata XML file that follows the CARD4L metadata specification. Media type: `application/xml` | 324 | | *data-mask*, metadata | ✗ | ✓ 2.2 | `DataMask` | `type`, `raster:bands` (with `values` \[see notes\], `nodata`, `data_type` and `bits_per_sample`), `file:byte_order`, *`file:header_size`*, *`proj:transform`*, *`proj:shape`* | **REQUIRED.** Points to the data mask file. | 325 | | *contributing-area*, metadata | ✗ | ✓ 2.3 | `LocalContributingArea` | `type`, `raster:bands` (with `unit`, `data_type` and `bits_per_sample`), `file:byte_order`, *`file:header_size`*, *`proj:transform`*, *`proj:shape`* | Points to the normalized scattering area file. | 326 | | *local-incidence-angle*, metadata | ✗ | ✓ 2.4 | `LocalIncAngle` | `type`, `raster:bands` (with `unit`, `data_type` and `bits_per_sample`), `file:byte_order`, *`file:header_size`*, *`proj:transform`*, *`proj:shape`* | **REQUIRED.** Points to the DEM-based local incidence angle file. `unit` is usually `degree`. | 327 | | *ellipsoid-incidence-angle*, metadata | ✗ | ✓ 2.5 | `EllipsoidIncAngle` | `type`, `raster:bands` (with `unit`, `data_type` and `bits_per_sample`), `file:byte_order`, *`file:header_size`*, *`proj:transform`*, *`proj:shape`*, *`card4l:ellipsoidal_height`* | `unit` is usually `degree`. | 328 | | *noise-power*, card4l, metadata | ✗ | ✓ 2.6 | `NoisePower` | `type`, `raster:bands` (with `unit`, `data_type` and `bits_per_sample`), `file:byte_order`, *`file:header_size`*, *`proj:transform`*, *`proj:shape`* | **REQUIRED if noise removal was applied.** `unit` is usually NESZ or NEBZ. | 329 | | *gamma-sigma-ratio*, metadata | ✗ | ✓ 2.7 | `GammaToSigmaRatio` | `type`, `raster:bands` (with `data_type` and `bits_per_sample`), `file:byte_order`, *`file:header_size`*, *`proj:transform`*, *`proj:shape`* | | 330 | | (*acquisition-id* or *date-offset*), metadata | ✗ | ✓ 2.8 | `AcquisitionIDImage` | `type`, `raster:bands` (with `data_type` and `bits_per_sample`), `file:byte_order`, *`file:header_size`*, *`proj:transform`*, *`proj:shape`* | **REQUIRED for multi-source products only.** Acquisition ID or acquisition date for each pixel is identified (see 2.8 for details). | 331 | | (*elevation-model* or *surface-model* or *earth-gravitational-model*), metadata | ✗ | ✓ 2.9 | `PerPixelDEM` | `type`, `raster:bands` (with `data_type` and `bits_per_sample`), `file:byte_order`, *`file:header_size`*, *`proj:transform`*, *`proj:shape`* | Per-pixel DEM/DSM/EGM as used in product generation. | 332 | | *backscatter*, data | ✗ | ✓ 3.1 (NRB) | `BackscatterMeasurementData` | `type`, `created`, `sar:polarizations`, `raster:bands` (with `data_type` and `bits_per_sample`), `file:byte_order`, *`file:header_size`*, *`proj:transform`*, *`proj:shape`*, *`card4l:border_pixels`* | **REQUIRED for *NRB*.** Points to the backscatter measurements for the polarizations specified in `sar:polarizations`. | 333 | | (*covmat* and/or *prd*), data | ✗ | ✓ 3.1 (POL) | `Measurements` | `type`, `created`, `sar:polarizations` (CovMat only), `raster:bands` (with `data_type` and `bits_per_sample`), `file:byte_order`, *`file:header_size`*, *`proj:transform`*, *`proj:shape`*, *`card4l:border_pixels`* | **REQUIRED for *POL*.** Points to the Normalized Polarimetric Radar Covariance Matrix (CovMat) *or* the Polarimetric Radar Decomposition (PRD) | 334 | 335 | #### Additional Asset Properties 336 | 337 | The following table lists properties that may occur in the assets. 338 | The list doesn't specify which fields apply to which asset and it also doesn't specify which fields are required. 339 | For those details please refer to the ["Additional properties" column in the table above](#stac-item-assets). 340 | 341 | | Field Name | Src | Prod | XML Tag | Data Type | Description | 342 | | ------------------------- | ------- | ------- | ----------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | 343 | | type | (✓) | ✓ | `DataFormat` | string | The [media type](https://github.com/radiantearth/stac-spec/blob/master/item-spec/item-spec.md#asset-media-type) of the file format. | 344 | | created | ✓ 1.6.6 | ✓ 1.7.1 | `ProcessingDate` (Src), `ProcessingTime` (Prod) | string | The time of the processing is specified via the `created` property of the asset as specified in the [STAC Common metadata](https://github.com/radiantearth/stac-spec/tree/v1.0.0/item-spec/common-metadata.md#date-and-time). | 345 | | sar:polarizations | (✓) | ✓ | *n/a* | \[string\] | The polarization(s) of the asset. | 346 | | file:header_size | ✗ | ✓ 1.7.7 | `HeaderSize` | integer | File header size in bytes (**required** if applicable to the file format). | 347 | | file:byte_order | ✗ | ✓ | `ByteOrder` | string | One of `big-endian` or `little-endian` | 348 | | raster:bands | ✗ | ✓ | see below | \[[Raster Band Object](https://github.com/stac-extensions/raster/blob/v1.1.0/README.md#raster-band-object)\] | Bands with at least the required fields for the corresponding asset role (see above and below). | 349 | | card4l:ellipsoidal_height | ✗ | ✓ | `EllipsoidalHeight` | number | Indicate which ellipsoidal (mean) height was used, in meters. | 350 | | card4l:border_pixels | ✗ | ✓ 1.7.7 | `NumBorderPixels` | integer | Number of border pixels (**required** only if applicable). | 351 | | proj:shape | ✗ | ✓ 1.7.7 | `NumberLines`, `NumberPixelsPerLine` | \[integer] | The shape of the asset. See comment below \[3]. | 352 | | proj:transform | ✗ | (✓) | *n/a* | \[number] | The affine transformation coefficients for the default grid. See comment below*. | 353 | 354 | \[3] `proj:shape` and `proj:transform` only need to be specified at the Item Asset level if the values vary between 355 | Assets. Specify in Item properties otherwise. See also comment in [Projection](#Projection). 356 | 357 | ##### raster:bands 358 | 359 | | Field Name | Src | Prod | XML Tag | Data Type | Description | 360 | | --------------- | ---- | ----- | -------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | 361 | | data_type | ✗ | ✓ | `DataType` | string | One of the [Data Types](https://github.com/stac-extensions/raster/blob/v1.1.0/README.md#data-types). | 362 | | unit | ✗ | ✓ | `SampleType` | string | The unit of the values in the asset, preferably compliant to [UDUNITS-2](https://ncics.org/portfolio/other-resources/udunits2/) units (singular). | 363 | | bits_per_sample | ✗ | ✓ | `BitsPerSample` | integer | Actual number of bits per sample (e.g., 8, 16, 32, ...) | 364 | | values | ✗ | ✓ 2.2 | `ValidData` and `InvalidData` in `BitValues` | \[[Mapping Object](https://github.com/stac-extensions/file/blob/v2.1.0/README.md#mapping-object)\] | Specify value(s) for valid and invalid data separately. \[4] | 365 | | nodata | ✗ | ✓ 2.2 | `NoData` in `BitValues` | \[any] | Value(s) for no-data. | 366 | 367 | \[4] `raster:bands[*].values` is not standardized yet in STAC, this could change to `file:values` 368 | or something different with a similar structure in the future. 369 | -------------------------------------------------------------------------------- /sar/examples/S18E047_2021_01_08_04392F.json: -------------------------------------------------------------------------------- 1 | { 2 | "stac_version": "1.0.0", 3 | "stac_extensions": [ 4 | "https://stac-extensions.github.io/card4l/v0.1.0/sar/product.json", 5 | "https://stac-extensions.github.io/file/v2.0.0/schema.json", 6 | "https://stac-extensions.github.io/processing/v1.1.0/schema.json", 7 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 8 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json", 9 | "https://stac-extensions.github.io/sar/v1.0.0/schema.json", 10 | "https://stac-extensions.github.io/sat/v1.0.0/schema.json" 11 | ], 12 | "id": "S18E047_2021_01_08_04392F", 13 | "type": "Feature", 14 | "geometry": { 15 | "type": "Polygon", 16 | "coordinates": [ 17 | [ 18 | [ 19 | 47, 20 | -17.39862772348652 21 | ], 22 | [ 23 | 47, 24 | -18 25 | ], 26 | [ 27 | 48, 28 | -18 29 | ], 30 | [ 31 | 48, 32 | -17 33 | ], 34 | [ 35 | 47.10548760203437, 36 | -17 37 | ], 38 | [ 39 | 47.09466626697524, 40 | -17.0422161421279 41 | ], 42 | [ 43 | 47.04739331074532, 44 | -17.221804597249964 45 | ], 46 | [ 47 | 47, 48 | -17.39862772348652 49 | ] 50 | ] 51 | ] 52 | }, 53 | "bbox": [ 54 | 47, 55 | -18, 56 | 48, 57 | -17 58 | ], 59 | "properties": { 60 | "card4l:specification": "NRB", 61 | "card4l:specification_version": "5.5", 62 | "card4l:noise_removal_applied": true, 63 | "card4l:speckle_filtering": { 64 | "type": "block average", 65 | "window_size_col": 2, 66 | "window_size_line": 2 67 | }, 68 | "card4l:pixel_coordinate_convention": "center", 69 | "card4l:measurement_type": "gamma0", 70 | "card4l:measurement_convention": "linear power", 71 | "card4l:conversion_eq": "10*log10(DN)", 72 | "card4l:resampling_method": "bilinear", 73 | "card4l:geometric_accuracy_type": "gtc", 74 | "card4l:northern_geometric_accuracy": { 75 | "stddev": 0.5, 76 | "bias": -0.2 77 | }, 78 | "card4l:eastern_geometric_accuracy": { 79 | "stddev": 0.5, 80 | "bias": -4.4 81 | }, 82 | "card4l:geometric_accuracy_radial_rmse": 4.4, 83 | "card4l:gridding_convention": "WGS84 1 degree grid, see https://docs.sentinel-hub.com/api/latest/api/batch/#tiling-grids for details.", 84 | "datetime": "2021-01-08T02:19:04.286944Z", 85 | "start_datetime": "2021-01-08T02:19:04.286944Z", 86 | "end_datetime": "2021-01-08T02:19:54.285659Z", 87 | "constellation": "sentinel-1", 88 | "gsd": 22.24, 89 | "instruments": [ 90 | "c-sar" 91 | ], 92 | "platform": "sentinel-1a", 93 | "processing:facility": "Sentinel Hub, Sinergise", 94 | "processing:level": "L2", 95 | "processing:software": { 96 | "Batch API": "v4.34.0" 97 | }, 98 | "proj:epsg": 4326, 99 | "proj:wkt2": "GEOGCRS[\"WGS 84\",DATUM[\"World Geodetic System 1984\",ELLIPSOID[\"WGS 84\",6378137,298.257223563,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],CS[ellipsoidal,2],AXIS[\"geodetic latitude (Lat)\",north,ORDER[1],ANGLEUNIT[\"degree\",0.0174532925199433]],AXIS[\"geodetic longitude (Lon)\",east,ORDER[2],ANGLEUNIT[\"degree\",0.0174532925199433]],ID[\"EPSG\",4326]]", 100 | "proj:shape": [ 101 | 5000, 102 | 5000 103 | ], 104 | "proj:transform": [ 105 | 47, 106 | 0.0002, 107 | 0, 108 | -17, 109 | 0, 110 | -0.0002 111 | ], 112 | "sar:frequency_band": "C", 113 | "sar:instrument_mode": "IW", 114 | "sar:polarizations": [ 115 | "VV", 116 | "VH" 117 | ], 118 | "sar:product_type": "NRB", 119 | "sat:orbit_state": "descending", 120 | "sat:relative_orbit": 93, 121 | "sat:absolute_orbit": 36040 122 | }, 123 | "links": [ 124 | { 125 | "href": "s3://deafrica-sentinel-1/s1_rtc/S18E047/2021/01/08/04392F/s1_rtc_04392F_S18E047_2021_01_08_metadata.json", 126 | "rel": "self", 127 | "type": "application/json" 128 | }, 129 | { 130 | "rel": "card4l-document", 131 | "href": "https://ceos.org/ard/files/PFS/NRB/v5.0/CARD4L-PFS_Normalised_Radar_Backscatter-v5.0.pdf", 132 | "type": "application/pdf" 133 | }, 134 | { 135 | "href": "./source-S1A_IW_GRDH_1SDV_20210108T021904_20210108T021929_036040_04392F_3709.json", 136 | "rel": "derived_from", 137 | "type": "application/json" 138 | }, 139 | { 140 | "href": "./source-S1A_IW_GRDH_1SDV_20210108T021929_20210108T021954_036040_04392F_EF8A.json", 141 | "rel": "derived_from", 142 | "type": "application/json" 143 | }, 144 | { 145 | "href": "https://docs.sentinel-hub.com/api/latest/api/batch/#tiling-grids", 146 | "rel": "gridding-convention", 147 | "type": "text/html" 148 | }, 149 | { 150 | "href": "https://sentinel.esa.int/web/sentinel/radiometric-calibration-of-level-1-products", 151 | "rel": "noise-removal", 152 | "type": "text/html" 153 | }, 154 | { 155 | "href": "https://www.geo.uzh.ch/microsite/rsl-documents/research/publications/peer-reviewed-articles/201108-TGRS-Small-tcGamma-3809999360/201108-TGRS-Small-tcGamma.pdf", 156 | "rel": "radiometric-terrain-correction", 157 | "type": "application/pdf" 158 | }, 159 | { 160 | "href": "https://spacedata.copernicus.eu/web/cscda/dataset-details?articleId=394198", 161 | "rel": "elevation-model", 162 | "type": "text/html" 163 | }, 164 | { 165 | "href": "https://spacedata.copernicus.eu/web/cscda/dataset-details?articleId=394198", 166 | "rel": "surface-model", 167 | "type": "text/html" 168 | }, 169 | { 170 | "href": "https://spacedata.copernicus.eu/web/cscda/dataset-details?articleId=394198", 171 | "rel": "earth-gravitational-model", 172 | "type": "text/html" 173 | }, 174 | { 175 | "href": "https://sentinel.esa.int/documents/247904/1653442/Guide-to-Sentinel-1-Geocoding.pdf", 176 | "rel": "geometric-correction", 177 | "type": "application/pdf" 178 | }, 179 | { 180 | "href": "https://www.mdpi.com/2072-4292/9/6/607", 181 | "rel": "geometric-accuracy", 182 | "type": "text/html" 183 | } 184 | ], 185 | "assets": { 186 | "card4l": { 187 | "title": "CARD4L XML Metadata File", 188 | "href": "./S18E047_2021_01_08_04392F.xml", 189 | "type": "application/xml", 190 | "roles": [ 191 | "metadata", 192 | "card4l" 193 | ] 194 | }, 195 | "vv": { 196 | "title": "Polarization VV", 197 | "href": "s3://deafrica-sentinel-1/s1_rtc/S18E047/2021/01/08/04392F/s1_rtc_04392F_S18E047_2021_01_08_VV.tif", 198 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 199 | "roles": [ 200 | "data", 201 | "backscatter" 202 | ], 203 | "created": "2021-06-16T14:50:38.958065Z", 204 | "card4l:border_pixels": 0, 205 | "file:header_size": 0, 206 | "file:byte_order": "little-endian", 207 | "raster:bands": [ 208 | { 209 | "data_type": "float32", 210 | "bits_per_sample": 32 211 | } 212 | ], 213 | "sar:polarizations": [ 214 | "VV" 215 | ] 216 | }, 217 | "vh": { 218 | "title": "Polarization VH", 219 | "href": "s3://deafrica-sentinel-1/s1_rtc/S18E047/2021/01/08/04392F/s1_rtc_04392F_S18E047_2021_01_08_VH.tif", 220 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 221 | "roles": [ 222 | "data", 223 | "backscatter" 224 | ], 225 | "created": "2021-06-16T14:50:38.958065Z", 226 | "card4l:border_pixels": 0, 227 | "file:header_size": 0, 228 | "file:byte_order": "little-endian", 229 | "raster:bands": [ 230 | { 231 | "data_type": "float32", 232 | "bits_per_sample": 32 233 | } 234 | ], 235 | "sar:polarizations": [ 236 | "VH" 237 | ] 238 | }, 239 | "local-incidence-angle": { 240 | "title": "Local Incidence Angle", 241 | "href": "s3://deafrica-sentinel-1/s1_rtc/S18E047/2021/01/08/04392F/s1_rtc_04392F_S18E047_2021_01_08_ANGLE.tif", 242 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 243 | "roles": [ 244 | "metadata", 245 | "local-incidence-angle" 246 | ], 247 | "file:byte_order": "little-endian", 248 | "raster:bands": [ 249 | { 250 | "unit": "degree", 251 | "nodata": 255, 252 | "data_type": "uint8", 253 | "bits_per_sample": 8 254 | } 255 | ] 256 | }, 257 | "contributing-area": { 258 | "title": "Normalized Scattering Area", 259 | "href": "s3://deafrica-sentinel-1/s1_rtc/S18E047/2021/01/08/04392F/s1_rtc_04392F_S18E047_2021_01_08_AREA.tif", 260 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 261 | "roles": [ 262 | "metadata", 263 | "contributing-area" 264 | ], 265 | "file:byte_order": "little-endian", 266 | "raster:bands": [ 267 | { 268 | "nodata": "nan", 269 | "data_type": "float32", 270 | "bits_per_sample": 32 271 | } 272 | ] 273 | }, 274 | "data-mask": { 275 | "title": "Data Mask", 276 | "href": "s3://deafrica-sentinel-1/s1_rtc/S18E047/2021/01/08/04392F/s1_rtc_04392F_S18E047_2021_01_08_MASK.tif", 277 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 278 | "roles": [ 279 | "metadata", 280 | "data-mask" 281 | ], 282 | "file:byte_order": "little-endian", 283 | "raster:bands": [ 284 | { 285 | "values": [ 286 | { 287 | "value": [ 288 | 0 289 | ], 290 | "summary": "No data" 291 | }, 292 | { 293 | "value": [ 294 | 1 295 | ], 296 | "summary": "Valid Data" 297 | }, 298 | { 299 | "value": [ 300 | 2 301 | ], 302 | "summary": "Invalid Data" 303 | } 304 | ], 305 | "nodata": 0, 306 | "data_type": "uint8", 307 | "bits_per_sample": 8 308 | } 309 | ] 310 | } 311 | } 312 | } -------------------------------------------------------------------------------- /sar/examples/S18E047_2021_01_08_04392F.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | CARD4L_Metadata-specification_Normalised_Radar_Backscatter-v5.5 4 | 5 | 2 6 | 2021-01-08T02:19:04.286944Z 7 | 2021-01-08T02:19:54.285659Z 8 | 9 | 10 | s3://sentinel-s1-l1c/GRD/2021/1/8/IW/DV/S1A_IW_GRDH_1SDV_20210108T021929_20210108T021954_036040_04392F_EF8A 11 | Sentinel-1A 12 | http://database.eohandbook.com/database/missionsummary.aspx?missionID=575 13 | https://sentinel.esa.int/documents/247904/1877131/Sentinel-1-Product-Definition 14 | Synthetic Aperture Radar 15 | https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-1-sar/sar-instrument/calibration 16 | 17 | 2021-01-08T02:19:29.286300Z 18 | 2021-01-08T02:19:54.285659Z 19 | 20 | 21 | C 22 | 5.40500045433435E9 23 | IW 24 | VV VH 25 | Right 26 | TOPS 27 | 28 | 29 | DESCENDING 30 | RESORB 31 | S1A_OPER_AUX_RESORB_OPOD_20210108T062130_V20210108T012450_20210108T044220.EOF 32 | 192.2517570713102 33 | 693000 34 | 35 | 36 | Copernicus S1 Core Ground Segment - DPA 37 | 2021-01-08T14:09:39.897128Z 38 | Sentinel-1 IPF, 003.31 39 | S1A_IW_GRDH_1SDV_20210108T021929_20210108T021954_036040_04392F_EF8A 40 | GRD 41 | 1 42 | 5 43 | 44 | 327.0 45 | 313.0 46 | 314.0 47 | 48 | 49 | 1.41E7 50 | 1.21E7 51 | 1.07E7 52 | 53 | 54 | 55 | 56 | POLYGON((49.18894400563279 -18.357652541097448,48.60848112751883 -18.224847409103347,48.01595127635437 -18.087292453982247,47.425926618163665 -17.94831561432319,46.88260114567561 -17.81855507416788,46.83741050456818 -17.99860251987904,46.74133173981372 -18.35753881006248,46.696203746408116 -18.537736952199467,46.64958970378999 -18.717586466069953,46.603862489700916 -18.897664266394585,46.55603118656839 -19.077242883772183,46.51075796739768 -19.257458283857126,46.49507241866186 -19.31697840889315,47.03299082583407 -19.44614277610205,47.63104253331579 -19.587672768280584,48.23966956858395 -19.729455109823398,48.82035004090649 -19.862571669070668,48.92471260675816 -19.441665761918628,48.96858717983322 -19.26092176540803,49.01363221299536 -19.080454981984907,49.145762967436156 -18.538417575985388,49.18894400563279 -18.357652541097448)) 57 | 58 | Ground range 59 | 10.0 60 | 10.0 61 | 62 | 22.5 63 | 22.6 64 | 22.6 65 | 66 | 67 | 20.4 68 | 20.3 69 | 20.5 70 | 71 | 30.22052269653568 72 | 45.9873797960658 73 | 74 | 75 | https://sentinel.esa.int/documents/247904/2142675/Thermal-Denoising-of-Products-Generated-by-Sentinel-1-IPF 76 | 77 | -30 78 | -22 79 | 80 | 4.4 81 | -21.2 82 | -21.2 83 | -16.1 84 | -16.1 85 | 86 | 87 | https://sentinel.esa.int/documents/247904/2142675/Thermal-Denoising-of-Products-Generated-by-Sentinel-1-IPF 88 | 89 | -30 90 | -22 91 | 92 | 4.4 93 | -21.2 94 | -21.2 95 | -16.1 96 | -16.1 97 | 98 | 99 | 100 | s3://sentinel-s1-l1c/GRD/2021/1/8/IW/DV/S1A_IW_GRDH_1SDV_20210108T021904_20210108T021929_036040_04392F_3709 101 | Sentinel-1A 102 | http://database.eohandbook.com/database/missionsummary.aspx?missionID=575 103 | https://sentinel.esa.int/documents/247904/1877131/Sentinel-1-Product-Definition 104 | Synthetic Aperture Radar 105 | https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-1-sar/sar-instrument/calibration 106 | 107 | 2021-01-08T02:19:04.286944Z 108 | 2021-01-08T02:19:29.284821Z 109 | 110 | 111 | C 112 | 5.40500045433435E9 113 | IW 114 | VV VH 115 | Right 116 | TOPS 117 | 118 | 119 | DESCENDING 120 | RESORB 121 | S1A_OPER_AUX_RESORB_OPOD_20210108T062130_V20210108T012450_20210108T044220.EOF 122 | 192.206046063329 123 | 693000 124 | 125 | 126 | Copernicus S1 Core Ground Segment - DPA 127 | 2021-01-08T15:34:02.969755Z 128 | Sentinel-1 IPF, 003.31 129 | S1A_IW_GRDH_1SDV_20210108T021904_20210108T021929_036040_04392F_3709 130 | GRD 131 | 1 132 | 5 133 | 134 | 327.0 135 | 313.0 136 | 314.0 137 | 138 | 139 | 1.41E7 140 | 1.21E7 141 | 1.07E7 142 | 143 | 144 | 145 | 146 | POLYGON((49.55613452162 -16.85279153333464,48.97621730575923 -16.72045712554219,48.390691278586445 -16.585040891129804,47.805204546031604 -16.447810023336675,47.27686445271197 -16.32241688979828,47.18686990171636 -16.68251175004789,47.09466626697524 -17.0422161421279,47.04739331074532 -17.221804597249964,46.99930877417249 -17.401206667853003,46.95300114210994 -17.581050507335018,46.90464308394179 -17.76040927023121,46.88260114567561 -17.81855507416788,47.425926618163665 -17.94831561432319,48.01595127635437 -18.087292453982247,48.60848112751883 -18.224847409103347,49.18894400563279 -18.357652541097448,49.29596387671178 -17.937322895385613,49.340636788285416 -17.756831985220742,49.38378317295577 -17.57599993508431,49.429551264646946 -17.395774739396703,49.514901489593136 -17.033934684661237,49.55613452162 -16.85279153333464)) 147 | 148 | Ground range 149 | 10.0 150 | 10.0 151 | 152 | 22.5 153 | 22.6 154 | 22.6 155 | 156 | 157 | 20.4 158 | 20.3 159 | 20.5 160 | 161 | 30.3152831649154 162 | 45.97317397183082 163 | 164 | 165 | https://sentinel.esa.int/documents/247904/2142675/Thermal-Denoising-of-Products-Generated-by-Sentinel-1-IPF 166 | 167 | -30 168 | -22 169 | 170 | 4.4 171 | -21.2 172 | -21.2 173 | -16.1 174 | -16.1 175 | 176 | 177 | https://sentinel.esa.int/documents/247904/2142675/Thermal-Denoising-of-Products-Generated-by-Sentinel-1-IPF 178 | 179 | -30 180 | -22 181 | 182 | 4.4 183 | -21.2 184 | -21.2 185 | -16.1 186 | -16.1 187 | 188 | 189 | 190 | 191 | Sentinel Hub, Sinergise 192 | 2021-12-25T23:06:32.957893Z 193 | Batch API, v4.34.0 194 | s3://deafrica-sentinel-1/s1_rtc/S18E047/2021/01/08/04392F 195 | 196 | 197 | 198 | 2.0E-4 199 | 2.0E-4 200 | 201 | 202 | true 203 | block average 204 | 2 205 | 2 206 | 207 | 208 | -17.0 209 | 47.0 210 | 211 | 212 | -18.0 213 | 48.0 214 | 215 | 216 | POLYGON((47.0 -17.39862772348775,47.10548760203375 -17.0,48.0 -17.0,48.0 -18.0,47.0 -18.0,47.0 -17.39862772348775)) 217 | 218 | 219 | 5000 220 | 5000 221 | 222 | pixel centre 223 | 4326 224 | 225 | GEOGCRS["WGS 84", 226 | DATUM["World Geodetic System 1984", 227 | ELLIPSOID["WGS 84",6378137,298.257223563, 228 | LENGTHUNIT["metre",1]]], 229 | PRIMEM["Greenwich",0, 230 | ANGLEUNIT["degree",0.0174532925199433]], 231 | CS[ellipsoidal,2], 232 | AXIS["geodetic latitude (Lat)",north, 233 | ORDER[1], 234 | ANGLEUNIT["degree",0.0174532925199433]], 235 | AXIS["geodetic longitude (Lon)",east, 236 | ORDER[2], 237 | ANGLEUNIT["degree",0.0174532925199433]], 238 | ID["EPSG",4326]] 239 | 240 | 241 | 242 | s1_rtc_04392F_S18E047_2021_01_08_MASK.tif 243 | Mask 244 | geotiff 245 | 0 246 | UINT 247 | 8 248 | Little Endian 249 | 250 | 0 251 | 1 252 | 2 253 | 254 | 255 | 256 | s1_rtc_04392F_S18E047_2021_01_08_AREA.tif 257 | Normalized Scattering Area 258 | geotiff 259 | nan 260 | FLOAT 261 | 32 262 | Little Endian 263 | 264 | 265 | s1_rtc_04392F_S18E047_2021_01_08_ANGLE.tif 266 | Angle 267 | geotiff 268 | 255 269 | UINT 270 | 8 271 | Little Endian 272 | 273 | 274 | 275 | Gamma-0 276 | linear power 277 | 10*log10(DN) 278 | VV 279 | s1_rtc_04392F_S18E047_2021_01_08_VV.tif 280 | geotiff 281 | FLOAT 282 | 32 283 | Little Endian 284 | 285 | 286 | Gamma-0 287 | linear power 288 | 10*log10(DN) 289 | VH 290 | s1_rtc_04392F_S18E047_2021_01_08_VH.tif 291 | geotiff 292 | FLOAT 293 | 32 294 | Little Endian 295 | 296 | 297 | true 298 | https://sentinel.esa.int/web/sentinel/radiometric-calibration-of-level-1-products 299 | 300 | 301 | https://www.geo.uzh.ch/microsite/rsl-documents/research/publications/peer-reviewed-articles/201108-TGRS-Small-tcGamma-3809999360/201108-TGRS-Small-tcGamma.pdf 302 | 2.0 303 | 304 | 305 | https://sentinel.esa.int/documents/247904/1877131/Sentinel-1-Product-Definition 306 | 1 307 | 0.1 308 | 309 | 310 | 311 | https://spacedata.copernicus.eu/web/cscda/dataset-details?articleId=394198 312 | GLO-30, release 2019 313 | BILINEAR 314 | https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84#egm2008 315 | EGM2008, 1x1 minute grid in WGS84 316 | BILINEAR 317 | 318 | Range Doppler Terrain Correction 319 | https://sentinel.esa.int/documents/247904/1653442/Guide-to-Sentinel-1-Geocoding.pdf 320 | 321 | 4.4 322 | 0.2 323 | -0.2 324 | 0.5 325 | -4.4 326 | 0.5 327 | https://ieeexplore.ieee.org/document/9554039 328 | 329 | BILINEAR 330 | 331 | https://docs.sentinel-hub.com/api/latest/api/batch/#tiling-grids 332 | WGS84 1 degree grid 333 | 334 | -------------------------------------------------------------------------------- /sar/examples/S1A_IW_GRDH_1SDV_20210108T021904_20210108T021929_036040_04392F_3709.json: -------------------------------------------------------------------------------- 1 | { 2 | "stac_version": "1.0.0", 3 | "stac_extensions": [ 4 | "https://stac-extensions.github.io/card4l/v0.1.0/sar/source.json", 5 | "https://stac-extensions.github.io/processing/v1.1.0/schema.json", 6 | "https://stac-extensions.github.io/sar/v1.0.0/schema.json", 7 | "https://stac-extensions.github.io/sat/v1.0.0/schema.json", 8 | "https://stac-extensions.github.io/view/v1.0.0/schema.json" 9 | ], 10 | "id": "S1A_IW_GRDH_1SDV_20210108T021904_20210108T021929_036040_04392F_3709", 11 | "type": "Feature", 12 | "geometry": { 13 | "type": "Polygon", 14 | "coordinates": [ 15 | [ 16 | [ 17 | 49.55613452162, 18 | -16.85279153333464 19 | ], 20 | [ 21 | 48.97621730575923, 22 | -16.72045712554219 23 | ], 24 | [ 25 | 48.390691278586445, 26 | -16.585040891129804 27 | ], 28 | [ 29 | 47.805204546031604, 30 | -16.447810023336675 31 | ], 32 | [ 33 | 47.27686445271197, 34 | -16.32241688979828 35 | ], 36 | [ 37 | 47.18686990171636, 38 | -16.68251175004789 39 | ], 40 | [ 41 | 47.09466626697524, 42 | -17.0422161421279 43 | ], 44 | [ 45 | 47.04739331074532, 46 | -17.221804597249964 47 | ], 48 | [ 49 | 46.99930877417249, 50 | -17.401206667853003 51 | ], 52 | [ 53 | 46.95300114210994, 54 | -17.581050507335018 55 | ], 56 | [ 57 | 46.90464308394179, 58 | -17.76040927023121 59 | ], 60 | [ 61 | 46.88260114567561, 62 | -17.81855507416788 63 | ], 64 | [ 65 | 47.425926618163665, 66 | -17.94831561432319 67 | ], 68 | [ 69 | 48.01595127635437, 70 | -18.087292453982247 71 | ], 72 | [ 73 | 48.60848112751883, 74 | -18.224847409103347 75 | ], 76 | [ 77 | 49.18894400563279, 78 | -18.357652541097448 79 | ], 80 | [ 81 | 49.29596387671178, 82 | -17.937322895385613 83 | ], 84 | [ 85 | 49.340636788285416, 86 | -17.756831985220742 87 | ], 88 | [ 89 | 49.38378317295577, 90 | -17.57599993508431 91 | ], 92 | [ 93 | 49.429551264646946, 94 | -17.395774739396703 95 | ], 96 | [ 97 | 49.514901489593136, 98 | -17.033934684661237 99 | ], 100 | [ 101 | 49.55613452162, 102 | -16.85279153333464 103 | ] 104 | ] 105 | ] 106 | }, 107 | "bbox": [ 108 | 46.88260114567561, 109 | -18.357652541097448, 110 | 49.55613452162, 111 | -16.32241688979828 112 | ], 113 | "properties": { 114 | "card4l:specification": "NRB", 115 | "card4l:specification_version": "5.5", 116 | "card4l:source_geometry": "ground-range", 117 | "card4l:beam_id": "TOPS", 118 | "card4l:orbit_data_source": "resorb", 119 | "card4l:orbit_mean_altitude": 693000, 120 | "card4l:source_processing_parameters": { 121 | "range_look_bandwidth": { 122 | "iw1": 0.0141, 123 | "iw2": 0.0121, 124 | "iw3": 0.0107 125 | }, 126 | "azimuth_look_bandwidth": { 127 | "iw1": 3.27e-7, 128 | "iw2": 3.13e-7, 129 | "iw3": 3.14e-7 130 | } 131 | }, 132 | "card4l:resolution_azimuth": { 133 | "iw1": 22.5, 134 | "iw2": 22.6, 135 | "iw3": 22.6 136 | }, 137 | "card4l:resolution_range": { 138 | "iw1": 20.4, 139 | "iw2": 20.3, 140 | "iw3": 20.5 141 | }, 142 | "card4l:incidence_angle_near_range": 30.3152831649154, 143 | "card4l:incidence_angle_far_range": 45.97317397183082, 144 | "card4l:noise_equivalent_intensity": { 145 | "minimum": -30, 146 | "maximum": -22 147 | }, 148 | "card4l:noise_equivalent_intensity_type": "sigma0", 149 | "datetime": "2021-01-08T02:19:04.286944Z", 150 | "start_datetime": "2021-01-08T02:19:04.286944Z", 151 | "end_datetime": "2021-01-08T02:19:29.284821Z", 152 | "constellation": "sentinel-1", 153 | "instruments": [ 154 | "c-sar" 155 | ], 156 | "platform": "sentinel-1a", 157 | "sar:frequency_band": "C", 158 | "sar:center_frequency": 5.405, 159 | "sar:instrument_mode": "IW", 160 | "sar:polarizations": [ 161 | "VV", 162 | "VH" 163 | ], 164 | "sar:observation_direction": "right", 165 | "sar:product_type": "GRD", 166 | "sar:looks_azimuth": 1, 167 | "sar:looks_range": 5, 168 | "sar:pixel_spacing_azimuth": 10, 169 | "sar:pixel_spacing_range": 10, 170 | "sar:resolution_azimuth": 22.6, 171 | "sar:resolution_range": 20.4, 172 | "sat:orbit_state": "descending", 173 | "sat:relative_orbit": 93, 174 | "sat:absolute_orbit": 36040, 175 | "view:azimuth": 12.206046063329012, 176 | "processing:facility": "Copernicus S1 Core Ground Segment - DPA", 177 | "processing:level": "L1", 178 | "processing:software": { 179 | "Sentinel-1 IPF": "003.31" 180 | } 181 | }, 182 | "links": [ 183 | { 184 | "href": "https://.../source-S1A_IW_GRDH_1SDV_20210108T021904_20210108T021929_036040_04392F_3709.json", 185 | "rel": "self", 186 | "type": "application/json" 187 | }, 188 | { 189 | "rel": "card4l-document", 190 | "href": "https://ceos.org/ard/files/PFS/NRB/v5.0/CARD4L-PFS_Normalised_Radar_Backscatter-v5.0.pdf", 191 | "type": "application/pdf" 192 | }, 193 | { 194 | "href": "s3://sentinel-s1-l1c/GRD/2021/1/8/IW/DV/S1A_OPER_AUX_RESORB_OPOD_20210108T062130_V20210108T012450_20210108T044220.EOF", 195 | "rel": "orbit-data-file", 196 | "title": "Orbit Data File with state vectors" 197 | }, 198 | { 199 | "href": "http://database.eohandbook.com/database/missionsummary.aspx?missionID=575", 200 | "rel": "about", 201 | "type": "text/html", 202 | "title": "Satellite Reference" 203 | }, 204 | { 205 | "href": "https://sentinel.esa.int/documents/247904/1877131/Sentinel-1-Product-Definition", 206 | "rel": "about", 207 | "type": "text/html", 208 | "title": "Product Defintion Reference" 209 | }, 210 | { 211 | "href": "https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-1-sar/sar-instrument/calibration", 212 | "rel": "sensor-calibration", 213 | "type": "text/html", 214 | "title": "Sensor Calibration Parameters" 215 | }, 216 | { 217 | "href": "https://sentinel.esa.int/documents/247904/2142675/Thermal-Denoising-of-Products-Generated-by-Sentinel-1-IPF", 218 | "rel": "performance-indicators", 219 | "type": "text/html", 220 | "title": "Thermal Denoising Details" 221 | } 222 | ], 223 | "assets": { 224 | "vv": { 225 | "href": "s3://sentinel-s1-l1c/GRD/2021/1/8/IW/DV/S1A_IW_GRDH_1SDV_20210108T021904_20210108T021929_036040_04392F_3709_vv.tif", 226 | "type": "image/tiff; application=geotiff", 227 | "title": "Polarization VV", 228 | "created": "2021-01-08T15:34:02.969755Z", 229 | "roles": [ 230 | "data" 231 | ], 232 | "sar:polarizations": [ 233 | "VV" 234 | ] 235 | }, 236 | "vh": { 237 | "href": "s3://sentinel-s1-l1c/GRD/2021/1/8/IW/DV/S1A_IW_GRDH_1SDV_20210108T021904_20210108T021929_036040_04392F_3709_vh.tif", 238 | "type": "image/tiff; application=geotiff", 239 | "title": "Polarization VH", 240 | "created": "2021-01-08T15:34:02.969755Z", 241 | "roles": [ 242 | "data" 243 | ], 244 | "sar:polarizations": [ 245 | "VH" 246 | ] 247 | } 248 | } 249 | } -------------------------------------------------------------------------------- /sar/examples/S1A_IW_GRDH_1SDV_20210108T021929_20210108T021954_036040_04392F_EF8A.json: -------------------------------------------------------------------------------- 1 | { 2 | "stac_version": "1.0.0", 3 | "stac_extensions": [ 4 | "https://stac-extensions.github.io/card4l/v0.1.0/sar/source.json", 5 | "https://stac-extensions.github.io/processing/v1.1.0/schema.json", 6 | "https://stac-extensions.github.io/sar/v1.0.0/schema.json", 7 | "https://stac-extensions.github.io/sat/v1.0.0/schema.json", 8 | "https://stac-extensions.github.io/view/v1.0.0/schema.json" 9 | ], 10 | "id": "S1A_IW_GRDH_1SDV_20210108T021929_20210108T021954_036040_04392F_EF8A", 11 | "type": "Feature", 12 | "geometry": { 13 | "type": "Polygon", 14 | "coordinates": [ 15 | [ 16 | [ 17 | 49.18894400563279, 18 | -18.357652541097448 19 | ], 20 | [ 21 | 48.60848112751883, 22 | -18.224847409103347 23 | ], 24 | [ 25 | 48.01595127635437, 26 | -18.087292453982247 27 | ], 28 | [ 29 | 47.425926618163665, 30 | -17.94831561432319 31 | ], 32 | [ 33 | 46.88260114567561, 34 | -17.81855507416788 35 | ], 36 | [ 37 | 46.83741050456818, 38 | -17.99860251987904 39 | ], 40 | [ 41 | 46.74133173981372, 42 | -18.35753881006248 43 | ], 44 | [ 45 | 46.696203746408116, 46 | -18.537736952199467 47 | ], 48 | [ 49 | 46.64958970378999, 50 | -18.717586466069953 51 | ], 52 | [ 53 | 46.603862489700916, 54 | -18.897664266394585 55 | ], 56 | [ 57 | 46.55603118656839, 58 | -19.077242883772183 59 | ], 60 | [ 61 | 46.51075796739768, 62 | -19.257458283857126 63 | ], 64 | [ 65 | 46.49507241866186, 66 | -19.31697840889315 67 | ], 68 | [ 69 | 47.03299082583407, 70 | -19.44614277610205 71 | ], 72 | [ 73 | 47.63104253331579, 74 | -19.587672768280584 75 | ], 76 | [ 77 | 48.23966956858395, 78 | -19.729455109823398 79 | ], 80 | [ 81 | 48.82035004090649, 82 | -19.862571669070668 83 | ], 84 | [ 85 | 48.92471260675816, 86 | -19.441665761918628 87 | ], 88 | [ 89 | 48.96858717983322, 90 | -19.26092176540803 91 | ], 92 | [ 93 | 49.01363221299536, 94 | -19.080454981984907 95 | ], 96 | [ 97 | 49.145762967436156, 98 | -18.538417575985388 99 | ], 100 | [ 101 | 49.18894400563279, 102 | -18.357652541097448 103 | ] 104 | ] 105 | ] 106 | }, 107 | "bbox": [ 108 | 46.49507241866186, 109 | -19.862571669070668, 110 | 49.18894400563279, 111 | -17.81855507416788 112 | ], 113 | "properties": { 114 | "card4l:specification": "NRB", 115 | "card4l:specification_version": "5.5", 116 | "card4l:source_geometry": "ground-range", 117 | "card4l:beam_id": "TOPS", 118 | "card4l:orbit_data_source": "resorb", 119 | "card4l:orbit_mean_altitude": 693000, 120 | "card4l:source_processing_parameters": { 121 | "range_look_bandwidth": { 122 | "iw1": 0.0141, 123 | "iw2": 0.0121, 124 | "iw3": 0.0107 125 | }, 126 | "azimuth_look_bandwidth": { 127 | "iw1": 3.27e-7, 128 | "iw2": 3.13e-7, 129 | "iw3": 3.14e-7 130 | } 131 | }, 132 | "card4l:resolution_azimuth": { 133 | "iw1": 22.5, 134 | "iw2": 22.6, 135 | "iw3": 22.6 136 | }, 137 | "card4l:resolution_range": { 138 | "iw1": 20.4, 139 | "iw2": 20.3, 140 | "iw3": 20.5 141 | }, 142 | "card4l:incidence_angle_near_range": 30.22052269653568, 143 | "card4l:incidence_angle_far_range": 45.9873797960658, 144 | "card4l:noise_equivalent_intensity": { 145 | "minimum": -30, 146 | "maximum": -22 147 | }, 148 | "card4l:noise_equivalent_intensity_type": "sigma0", 149 | "datetime": "2021-01-08T02:19:29.286300Z", 150 | "start_datetime": "2021-01-08T02:19:29.286300Z", 151 | "end_datetime": "2021-01-08T02:19:54.285659Z", 152 | "constellation": "sentinel-1", 153 | "instruments": [ 154 | "c-sar" 155 | ], 156 | "platform": "sentinel-1a", 157 | "sar:frequency_band": "C", 158 | "sar:center_frequency": 5.405, 159 | "sar:instrument_mode": "IW", 160 | "sar:polarizations": [ 161 | "VV", 162 | "VH" 163 | ], 164 | "sar:observation_direction": "right", 165 | "sar:product_type": "GRD", 166 | "sar:looks_azimuth": 1, 167 | "sar:looks_range": 5, 168 | "sar:pixel_spacing_azimuth": 10, 169 | "sar:pixel_spacing_range": 10, 170 | "sar:resolution_azimuth": 22.6, 171 | "sar:resolution_range": 20.4, 172 | "sat:orbit_state": "descending", 173 | "sat:relative_orbit": 93, 174 | "sat:absolute_orbit": 36040, 175 | "view:azimuth": 12.206046063329012, 176 | "processing:facility": "Copernicus S1 Core Ground Segment - DPA", 177 | "processing:level": "L2", 178 | "processing:software": { 179 | "Sentinel-1 IPF": "003.31" 180 | } 181 | }, 182 | "links": [ 183 | { 184 | "href": "https://.../source-S1A_IW_GRDH_1SDV_20210108T021929_20210108T021954_036040_04392F_EF8A.json", 185 | "rel": "self", 186 | "type": "application/json" 187 | }, 188 | { 189 | "rel": "card4l-document", 190 | "href": "https://ceos.org/ard/files/PFS/NRB/v5.0/CARD4L-PFS_Normalised_Radar_Backscatter-v5.0.pdf", 191 | "type": "application/pdf" 192 | }, 193 | { 194 | "href": "s3://sentinel-s1-l1c/GRD/2021/1/8/IW/DV/S1A_OPER_AUX_RESORB_OPOD_20210108T062130_V20210108T012450_20210108T044220.EOF", 195 | "rel": "orbit-data-file", 196 | "title": "Orbit Data File with state vectors" 197 | }, 198 | { 199 | "href": "http://database.eohandbook.com/database/missionsummary.aspx?missionID=575", 200 | "rel": "about", 201 | "title": "Satellite Reference" 202 | }, 203 | { 204 | "href": "https://sentinel.esa.int/documents/247904/1877131/Sentinel-1-Product-Definition", 205 | "rel": "about", 206 | "title": "Product Defintion Reference" 207 | }, 208 | { 209 | "href": "https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-1-sar/sar-instrument/calibration", 210 | "rel": "sensor-calibration", 211 | "title": "Sensor Calibration Parameters" 212 | }, 213 | { 214 | "href": "https://sentinel.esa.int/documents/247904/2142675/Thermal-Denoising-of-Products-Generated-by-Sentinel-1-IPF", 215 | "rel": "performance-indicators", 216 | "title": "Thermal Denoising Details" 217 | } 218 | ], 219 | "assets": { 220 | "vv": { 221 | "href": "s3://sentinel-s1-l1c/GRD/2021/1/8/IW/DV/S1A_IW_GRDH_1SDV_20210108T021929_20210108T021954_036040_04392F_EF8A_vv.tif", 222 | "type": "image/tiff; application=geotiff", 223 | "title": "Polarization VV", 224 | "created": "2021-01-08T14:09:39.897128Z", 225 | "roles": [ 226 | "data" 227 | ], 228 | "sar:polarizations": [ 229 | "VV" 230 | ] 231 | }, 232 | "vh": { 233 | "href": "s3://sentinel-s1-l1c/GRD/2021/1/8/IW/DV/S1A_IW_GRDH_1SDV_20210108T021929_20210108T021954_036040_04392F_EF8A_vh.tif", 234 | "type": "image/tiff; application=geotiff", 235 | "title": "Polarization VH", 236 | "created": "2021-01-08T14:09:39.897128Z", 237 | "roles": [ 238 | "data" 239 | ], 240 | "sar:polarizations": [ 241 | "VH" 242 | ] 243 | } 244 | } 245 | } -------------------------------------------------------------------------------- /sar/json-schema/common.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id": "https://stac-extensions.github.io/card4l/v0.1.0/sar/commons.json#", 4 | "title": "CARD4L SAR Commons", 5 | "description": "STAC CARD4L SAR Commons for STAC Items.", 6 | "type": "object", 7 | "required": [ 8 | "stac_extensions", 9 | "id", 10 | "geometry", 11 | "bbox", 12 | "type", 13 | "properties", 14 | "links", 15 | "assets" 16 | ], 17 | "properties": { 18 | "stac_extensions": { 19 | "type": "array", 20 | "allOf": [ 21 | { 22 | "contains": { 23 | "const": "https://stac-extensions.github.io/processing/v1.1.0/schema.json" 24 | } 25 | }, 26 | { 27 | "contains": { 28 | "const": "https://stac-extensions.github.io/sar/v1.0.0/schema.json" 29 | } 30 | } 31 | ] 32 | }, 33 | "type": { 34 | "const": "Feature" 35 | }, 36 | "properties": { 37 | "type": "object", 38 | "required": [ 39 | "datetime", 40 | "start_datetime", 41 | "end_datetime", 42 | "processing:facility", 43 | "processing:level", 44 | "processing:software", 45 | "sar:product_type" 46 | ], 47 | "properties": { 48 | "card4l:orbit_data_source": { 49 | "type": "string" 50 | }, 51 | "card4l:noise_removal_applied": { 52 | "type": "boolean", 53 | "$comment": "The requirement to add a link with rel type `noise-removal` if this value is `true` is not part of the schema yet." 54 | } 55 | } 56 | }, 57 | "links": { 58 | "type": "array", 59 | "items": { 60 | "type": "object", 61 | "required": [ 62 | "href", 63 | "rel" 64 | ] 65 | }, 66 | "contains": { 67 | "required": [ 68 | "type" 69 | ], 70 | "properties": { 71 | "rel": { 72 | "const": "card4l-document" 73 | }, 74 | "type": { 75 | "enum": [ 76 | "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 77 | "application/pdf" 78 | ] 79 | } 80 | } 81 | } 82 | }, 83 | "assets": { 84 | "type": "object", 85 | "additionalProperties": { 86 | "allOf": [ 87 | { 88 | "$comment": "TODO" 89 | } 90 | ] 91 | } 92 | } 93 | }, 94 | "oneOf": [ 95 | { 96 | "$comment": "NRB-only requirements", 97 | "type": "object", 98 | "properties": { 99 | "properties": { 100 | "type": "object", 101 | "required": [ 102 | "card4l:specification", 103 | "card4l:specification_version" 104 | ], 105 | "properties": { 106 | "card4l:specification": { 107 | "const": "NRB" 108 | }, 109 | "card4l:specification_version": { 110 | "const": "5.5" 111 | } 112 | } 113 | } 114 | } 115 | }, 116 | { 117 | "$comment": "POL-only requirements", 118 | "type": "object", 119 | "properties": { 120 | "properties": { 121 | "type": "object", 122 | "required": [ 123 | "card4l:specification", 124 | "card4l:specification_version" 125 | ], 126 | "properties": { 127 | "card4l:specification": { 128 | "type": "string", 129 | "const": "POL" 130 | }, 131 | "card4l:specification_version": { 132 | "type": "string", 133 | "const": "3.5" 134 | } 135 | } 136 | } 137 | } 138 | } 139 | ] 140 | } -------------------------------------------------------------------------------- /sar/json-schema/product.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id": "https://stac-extensions.github.io/card4l/v0.1.0/sar/product.json#", 4 | "title": "CARD4L SAR Extension", 5 | "description": "STAC CARD4L SAR Extension for STAC Items.", 6 | "type": "object", 7 | "properties": { 8 | "stac_extensions": { 9 | "type": "array", 10 | "allOf": [ 11 | { 12 | "contains": { 13 | "const": "https://stac-extensions.github.io/card4l/v0.1.0/sar/product.json" 14 | } 15 | }, 16 | { 17 | "contains": { 18 | "const": "https://stac-extensions.github.io/file/v2.0.0/schema.json" 19 | } 20 | }, 21 | { 22 | "contains": { 23 | "const": "https://stac-extensions.github.io/projection/v1.0.0/schema.json" 24 | } 25 | }, 26 | { 27 | "contains": { 28 | "const": "https://stac-extensions.github.io/raster/v1.1.0/schema.json" 29 | } 30 | } 31 | ] 32 | }, 33 | "properties": { 34 | "type": "object", 35 | "required": [ 36 | "gsd", 37 | "card4l:noise_removal_applied", 38 | "card4l:speckle_filtering", 39 | "card4l:pixel_coordinate_convention", 40 | "card4l:measurement_type", 41 | "card4l:measurement_convention", 42 | "card4l:conversion_eq", 43 | "card4l:northern_geometric_accuracy", 44 | "card4l:eastern_geometric_accuracy", 45 | "card4l:gridding_convention" 46 | ], 47 | "$comment": "`proj:shape` is required either on the item level or on the asset level for the asset with role `data`. This requirement is not checked by this schema yet.", 48 | "anyOf": [ 49 | { 50 | "required": [ 51 | "proj:wkt2" 52 | ] 53 | }, 54 | { 55 | "required": [ 56 | "proj:projjson" 57 | ] 58 | } 59 | ], 60 | "properties": { 61 | "card4l:speckle_filtering": { 62 | "type": [ 63 | "object", 64 | "null" 65 | ], 66 | "required": [ 67 | "type" 68 | ], 69 | "properties": { 70 | "type": { 71 | "type": "string" 72 | }, 73 | "window_size_col": { 74 | "type": "integer" 75 | }, 76 | "window_size_line": { 77 | "type": "integer" 78 | } 79 | } 80 | }, 81 | "card4l:pixel_coordinate_convention": { 82 | "type": "string", 83 | "enum": [ 84 | "center", 85 | "upper-left", 86 | "lower-left" 87 | ] 88 | }, 89 | "card4l:measurement_type": { 90 | "type": "string", 91 | "const": "gamma0" 92 | }, 93 | "card4l:conversion_eq": { 94 | "type": "string" 95 | }, 96 | "card4l:relative_radiometric_accuracy": { 97 | "type": "number" 98 | }, 99 | "card4l:absolute_radiometric_accuracy": { 100 | "type": "number" 101 | }, 102 | "card4l:geometric_accuracy_type": { 103 | "type": "string", 104 | "enum": [ 105 | "gtc", 106 | "slant-range" 107 | ] 108 | }, 109 | "card4l:northern_geometric_accuracy": { 110 | "$ref": "#/definitions/geometric_accuracy" 111 | }, 112 | "card4l:eastern_geometric_accuracy": { 113 | "$ref": "#/definitions/geometric_accuracy" 114 | }, 115 | "card4l:geometric_accuracy_radial_rmse": { 116 | "type": "number" 117 | }, 118 | "card4l:resampling_method": { 119 | "type": "string" 120 | }, 121 | "card4l:dem_resampling_method": { 122 | "type": "string" 123 | }, 124 | "card4l:egm_resampling_method": { 125 | "type": "string" 126 | }, 127 | "card4l:gridding_convention": { 128 | "type": "string" 129 | } 130 | } 131 | }, 132 | "links": { 133 | "allOf": [ 134 | { 135 | "contains": { 136 | "properties": { 137 | "rel": { 138 | "const": "derived_from" 139 | } 140 | } 141 | } 142 | }, 143 | { 144 | "contains": { 145 | "properties": { 146 | "rel": { 147 | "const": "noise-removal" 148 | } 149 | } 150 | } 151 | }, 152 | { 153 | "contains": { 154 | "properties": { 155 | "rel": { 156 | "const": "radiometric-terrain-correction" 157 | } 158 | } 159 | } 160 | }, 161 | { 162 | "contains": { 163 | "properties": { 164 | "rel": { 165 | "const": "elevation-model" 166 | } 167 | } 168 | } 169 | }, 170 | { 171 | "contains": { 172 | "properties": { 173 | "rel": { 174 | "const": "surface-model" 175 | } 176 | } 177 | } 178 | }, 179 | { 180 | "contains": { 181 | "properties": { 182 | "rel": { 183 | "const": "earth-gravitational-model" 184 | } 185 | } 186 | } 187 | } 188 | ] 189 | }, 190 | "assets": { 191 | "type": "object", 192 | "additionalProperties": { 193 | "allOf": [ 194 | { 195 | "$comment": "TODO" 196 | } 197 | ] 198 | } 199 | } 200 | }, 201 | "allOf": [ 202 | { 203 | "$ref": "common.json" 204 | } 205 | ], 206 | "oneOf": [ 207 | { 208 | "$comment": "NRB-only requirements", 209 | "type": "object", 210 | "properties": { 211 | "properties": { 212 | "type": "object", 213 | "required": [ 214 | "card4l:measurement_convention" 215 | ], 216 | "properties": { 217 | "card4l:specification": { 218 | "const": "NRB" 219 | }, 220 | "card4l:measurement_convention": { 221 | "type": "string", 222 | "enum": [ 223 | "linear amplitude", 224 | "linear power" 225 | ] 226 | } 227 | } 228 | } 229 | } 230 | }, 231 | { 232 | "$comment": "POL-only requirements", 233 | "type": "object", 234 | "properties": { 235 | "properties": { 236 | "type": "object", 237 | "required": [ 238 | "card4l:measurement_convention" 239 | ], 240 | "properties": { 241 | "card4l:specification": { 242 | "const": "POL" 243 | }, 244 | "card4l:measurement_convention": { 245 | "type": "string", 246 | "enum": [ 247 | "linear amplitude", 248 | "linear power", 249 | "angle" 250 | ] 251 | } 252 | } 253 | } 254 | } 255 | } 256 | ], 257 | "anyOf": [ 258 | { 259 | "type": "object", 260 | "properties": { 261 | "properties": { 262 | "type": "object", 263 | "required": [ 264 | "card4l:gridding_convention" 265 | ] 266 | } 267 | } 268 | }, 269 | { 270 | "type": "object", 271 | "properties": { 272 | "links": { 273 | "type": "array", 274 | "contains": { 275 | "properties": { 276 | "rel": { 277 | "const": "gridding-convention" 278 | } 279 | } 280 | } 281 | } 282 | } 283 | } 284 | ], 285 | "definitions": { 286 | "geometric_accuracy": { 287 | "type": "object", 288 | "required": [ 289 | "bias", 290 | "stddev" 291 | ], 292 | "properties": { 293 | "bias": { 294 | "type": "number" 295 | }, 296 | "stddev": { 297 | "type": "number" 298 | } 299 | } 300 | } 301 | } 302 | } -------------------------------------------------------------------------------- /sar/json-schema/source.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id": "https://stac-extensions.github.io/card4l/v0.1.0/sar/source.json#", 4 | "title": "CARD4L SAR Extension", 5 | "description": "STAC CARD4L SAR Extension for STAC Items.", 6 | "type": "object", 7 | "properties": { 8 | "stac_extensions": { 9 | "type": "array", 10 | "allOf": [ 11 | { 12 | "contains": { 13 | "const": "https://stac-extensions.github.io/card4l/v0.1.0/sar/source.json" 14 | } 15 | }, 16 | { 17 | "contains": { 18 | "const": "https://stac-extensions.github.io/sat/v1.0.0/schema.json" 19 | } 20 | }, 21 | { 22 | "contains": { 23 | "const": "https://stac-extensions.github.io/view/v1.0.0/schema.json" 24 | } 25 | } 26 | ] 27 | }, 28 | "properties": { 29 | "type": "object", 30 | "required": [ 31 | "instruments", 32 | "platform", 33 | "card4l:source_geometry", 34 | "card4l:beam_id", 35 | "card4l:orbit_data_source", 36 | "card4l:incidence_angle_near_range", 37 | "card4l:incidence_angle_far_range", 38 | "card4l:resolution_azimuth", 39 | "card4l:resolution_range", 40 | "card4l:noise_equivalent_intensity", 41 | "card4l:noise_equivalent_intensity_type", 42 | "sar:instrument_mode", 43 | "sar:frequency_band", 44 | "sar:center_frequency", 45 | "sar:polarizations", 46 | "sar:observation_direction", 47 | "sar:looks_azimuth", 48 | "sar:looks_range", 49 | "sar:pixel_spacing_azimuth", 50 | "sar:pixel_spacing_range", 51 | "sar:resolution_azimuth", 52 | "sar:resolution_range", 53 | "sat:orbit_state" 54 | ], 55 | "properties": { 56 | "card4l:source_geometry": { 57 | "type": "string", 58 | "enum": [ 59 | "slant-range", 60 | "ground-range" 61 | ] 62 | }, 63 | "card4l:beam_id": { 64 | "type": "string" 65 | }, 66 | "card4l:orbit_mean_altitude": { 67 | "type": "number", 68 | "minimum": 0 69 | }, 70 | "card4l:incidence_angle_near_range": { 71 | "type": "number", 72 | "minimum": 0 73 | }, 74 | "card4l:incidence_angle_far_range": { 75 | "type": "number", 76 | "minimum": 0 77 | }, 78 | "card4l:resolution_azimuth": { 79 | "type": "object", 80 | "additionalProperties": { 81 | "type": "number", 82 | "minimum": 0 83 | } 84 | }, 85 | "card4l:resolution_range": { 86 | "type": "object", 87 | "additionalProperties": { 88 | "type": "number", 89 | "minimum": 0 90 | } 91 | }, 92 | "card4l:noise_equivalent_intensity": { 93 | "type": "object", 94 | "minProperties": 1, 95 | "properties": { 96 | "mean": { 97 | "title": "Mean value of all the pixels in the band", 98 | "type": "number" 99 | }, 100 | "minimum": { 101 | "title": "Minimum value of all the pixels in the band", 102 | "type": "number" 103 | }, 104 | "maximum": { 105 | "title": "Maximum value of all the pixels in the band", 106 | "type": "number" 107 | } 108 | } 109 | }, 110 | "card4l:noise_equivalent_intensity_type": { 111 | "type": "string", 112 | "enum": [ 113 | "beta0", 114 | "sigma0", 115 | "gamma0" 116 | ] 117 | }, 118 | "card4l:mean_faraday_rotation_angle": { 119 | "type": "number", 120 | "minimum": 0 121 | }, 122 | "card4l:ionosphere_indicator": { 123 | "type": "boolean" 124 | }, 125 | "card4l:source_processing_parameters": { 126 | "type": "object", 127 | "properties": { 128 | "lut_applied": { 129 | "type": "string" 130 | }, 131 | "range_look_bandwidth": { 132 | "type": "object", 133 | "additionalProperties": { 134 | "type": "number", 135 | "minimum": 0 136 | } 137 | }, 138 | "azimuth_look_bandwidth": { 139 | "type": "object", 140 | "additionalProperties": { 141 | "type": "number", 142 | "minimum": 0 143 | } 144 | } 145 | } 146 | }, 147 | "card4l:peak_sidelobe_ratio": { 148 | "type": "number", 149 | "minimum": 0 150 | }, 151 | "card4l:integrated_sidelobe_ratio": { 152 | "type": "number", 153 | "minimum": 0 154 | } 155 | } 156 | }, 157 | "assets": { 158 | "type": "object", 159 | "additionalProperties": { 160 | "allOf": [ 161 | { 162 | "$comment": "TODO" 163 | } 164 | ] 165 | } 166 | } 167 | }, 168 | "allOf": [ 169 | { 170 | "$ref": "common.json" 171 | } 172 | ] 173 | } --------------------------------------------------------------------------------