├── .github ├── remark.yaml └── workflows │ ├── publish.yaml │ ├── release.yaml │ └── test.yaml ├── .gitignore ├── LICENSE ├── contributing.md ├── examples ├── catalog.json └── items │ ├── Landsat8L1G.json │ ├── MOD09GA.json │ ├── MOD09GQ.json │ ├── MYD09GA.json │ ├── MYD09GQ.json │ ├── Sentinel1.json │ ├── Sentinel2L1C.json │ ├── psorthotile.json │ ├── psscene.json │ ├── reorthotile.json │ ├── rescene.json │ ├── skysatcollect.json │ └── skysatscene.json ├── mapping.md ├── package-lock.json ├── package.json ├── readme.md ├── schema.json └── scripts ├── build.js └── release.js /.github/remark.yaml: -------------------------------------------------------------------------------- 1 | plugins: 2 | - remark-gfm 3 | # Check links 4 | - validate-links 5 | # Apply some recommended defaults for consistency 6 | - remark-preset-lint-consistent 7 | - remark-preset-lint-recommended 8 | - lint-no-html 9 | # General formatting 10 | - - remark-lint-emphasis-marker 11 | - '*' 12 | - remark-lint-hard-break-spaces 13 | - remark-lint-blockquote-indentation 14 | - remark-lint-no-consecutive-blank-lines 15 | # Code 16 | - remark-lint-fenced-code-flag 17 | - remark-lint-fenced-code-marker 18 | - remark-lint-no-shell-dollars 19 | - - remark-lint-code-block-style 20 | - 'fenced' 21 | # Headings 22 | - remark-lint-heading-increment 23 | - remark-lint-no-multiple-toplevel-headings 24 | - remark-lint-no-heading-punctuation 25 | - - remark-lint-maximum-heading-length 26 | - 70 27 | - - remark-lint-heading-style 28 | - atx 29 | - - remark-lint-no-shortcut-reference-link 30 | - false 31 | # Lists 32 | - remark-lint-list-item-bullet-indent 33 | - remark-lint-ordered-list-marker-style 34 | - remark-lint-ordered-list-marker-value 35 | - remark-lint-checkbox-character-style 36 | - - remark-lint-unordered-list-marker-style 37 | - '-' 38 | - - remark-lint-list-item-indent 39 | - space 40 | # Tables 41 | - remark-lint-table-pipes 42 | - remark-lint-no-literal-urls 43 | -------------------------------------------------------------------------------- /.github/workflows/publish.yaml: -------------------------------------------------------------------------------- 1 | name: Publish JSON Schema 2 | 3 | on: 4 | release: 5 | types: 6 | - published 7 | push: 8 | branches: 9 | - main 10 | 11 | permissions: 12 | contents: read 13 | pages: write 14 | id-token: write 15 | 16 | jobs: 17 | build: 18 | runs-on: ubuntu-latest 19 | steps: 20 | - name: Checkout Website 21 | uses: actions/checkout@v3 22 | 23 | - name: Setup Node 24 | uses: actions/setup-node@v3 25 | with: 26 | node-version: '18' 27 | 28 | - name: Install Dependencies 29 | run: npm ci 30 | 31 | - name: Build Schema and Docs 32 | env: 33 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 34 | run: npm run build 35 | 36 | - name: Upload Artifact 37 | uses: actions/upload-pages-artifact@v1 38 | with: 39 | path: ./build 40 | 41 | deploy: 42 | environment: 43 | name: github-pages 44 | url: ${{ steps.deployment.outputs.page_url }} 45 | runs-on: ubuntu-latest 46 | needs: build 47 | steps: 48 | - name: Deploy to GitHub Pages 49 | id: deployment 50 | uses: actions/deploy-pages@v1 51 | -------------------------------------------------------------------------------- /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | name: Draft Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*.*.*' 7 | 8 | jobs: 9 | release: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v3 13 | - uses: actions/setup-node@v3 14 | with: 15 | node-version: '18' 16 | - name: Install dependencies 17 | run: npm ci 18 | - name: Draft Release 19 | run: node scripts/release.js --token ${{secrets.GITHUB_TOKEN}} --tag ${GITHUB_REF_NAME} 20 | -------------------------------------------------------------------------------- /.github/workflows/test.yaml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | test: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/setup-node@v2 16 | with: 17 | node-version: '18' 18 | - uses: actions/checkout@v2 19 | - run: | 20 | npm install 21 | npm test 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /build/ -------------------------------------------------------------------------------- /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 2023 Planet Labs PBC 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 | -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | All contributions are subject to the [STAC Specification Code of Conduct](https://github.com/radiantearth/stac-spec/blob/master/CODE_OF_CONDUCT.md). For contributions, please follow the [STAC specification contributing guide](https://github.com/radiantearth/stac-spec/blob/master/CONTRIBUTING.md) Instructions for running tests are copied here for convenience. 4 | 5 | If you spot a bug or have an idea for a feature, please [create an issue](https://github.com/planetlabs/stac-extension/issues). For simple fixes or features, you can [create a pull request](https://github.com/planetlabs/stac-extension/pulls), but it is a good idea to have discussion on an issue before sinking a lot of time into a pull request. 6 | 7 | ## Running tests 8 | 9 | Pull requests have to pass the tests before they can be merged. You can run the same tests locally with [Node](https://nodejs.org/). First you'll need to install everything with `npm`. Navigate to the root of the repository and on your command line run: 10 | 11 | ```bash 12 | npm install 13 | ``` 14 | 15 | Then to check markdown formatting and test the examples against the JSON schema, you can run: 16 | 17 | ```bash 18 | npm test 19 | ``` 20 | 21 | If the tests reveal formatting problems with the examples, you can fix them with: 22 | 23 | ```bash 24 | npm run format-examples 25 | ``` 26 | 27 | ## Publishing a new release 28 | 29 | Releases are published by creating a new tag. To tag a new release off the latest commit: 30 | 31 | ```bash 32 | # replace 1.2.3 with the release version 33 | # include the v before the version number 34 | TAG=v1.2.3 35 | git fetch origin 36 | git checkout main 37 | git reset --hard origin/main 38 | git tag ${TAG} 39 | git push origin ${TAG} 40 | ``` 41 | 42 | This will trigger a run of the [`release.yaml` workflow](./.github/workflows/release.yaml). When the release job finishes, visit the [releases page](https://github.com/planetlabs/stac-extension/releases) to find the new draft release. Review the release notes and publish the draft after making any edits. 43 | 44 | When a new release is published, the [`publish.yaml` workflow](./.github/workflows/publish.yaml) will update the GitHub pages deployment. After this workflow completes, the published schema should be available at `https://planetlabs.github.io/stac-extension/${TAG}/schema.json` (where `${TAG}` is the release version). 45 | -------------------------------------------------------------------------------- /examples/catalog.json: -------------------------------------------------------------------------------- 1 | { 2 | "stac_version": "1.0.0", 3 | "id": "planet-extension-examples", 4 | "type": "Catalog", 5 | "title": "Planet Extension Examples", 6 | "description": "Examples for the Planet Labs STAC Extension", 7 | "providers": [ 8 | { 9 | "name": "Planet Labs PBC", 10 | "url": "https://www.planet.com", 11 | "roles": [ 12 | "licensor", 13 | "producer" 14 | ] 15 | } 16 | ], 17 | "links": [ 18 | { 19 | "href": "https://raw.githubusercontent.com/planetlabs/stac-extension/main/examples/catalog.json", 20 | "rel": "self", 21 | "type": "application/json" 22 | }, 23 | { 24 | "href": "./items/psscene.json", 25 | "rel": "item", 26 | "type": "application/geo+json" 27 | }, 28 | { 29 | "href": "./items/psorthotile.json", 30 | "rel": "item", 31 | "type": "application/geo+json" 32 | }, 33 | { 34 | "href": "./items/reorthotile.json", 35 | "rel": "item", 36 | "type": "application/geo+json" 37 | }, 38 | { 39 | "href": "./items/rescene.json", 40 | "rel": "item", 41 | "type": "application/geo+json" 42 | }, 43 | { 44 | "href": "./items/skysatcollect.json", 45 | "rel": "item", 46 | "type": "application/geo+json" 47 | }, 48 | { 49 | "href": "./items/skysatscene.json", 50 | "rel": "item", 51 | "type": "application/geo+json" 52 | }, 53 | { 54 | "href": "./items/Landsat8L1G.json", 55 | "rel": "item", 56 | "type": "application/geo+json" 57 | }, 58 | { 59 | "href": "./items/MOD09GA.json", 60 | "rel": "item", 61 | "type": "application/geo+json" 62 | }, 63 | { 64 | "href": "./items/MOD09GQ.json", 65 | "rel": "item", 66 | "type": "application/geo+json" 67 | }, 68 | { 69 | "href": "./items/MYD09GA.json", 70 | "rel": "item", 71 | "type": "application/geo+json" 72 | }, 73 | { 74 | "href": "./items/MYD09GQ.json", 75 | "rel": "item", 76 | "type": "application/geo+json" 77 | }, 78 | { 79 | "href": "./items/Sentinel1.json", 80 | "rel": "item", 81 | "type": "application/geo+json" 82 | }, 83 | { 84 | "href": "./items/Sentinel2L1C.json", 85 | "rel": "item", 86 | "type": "application/geo+json" 87 | } 88 | ] 89 | } -------------------------------------------------------------------------------- /examples/items/Landsat8L1G.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "LC82190652018002LGN00", 5 | "properties": { 6 | "updated": "2022-04-13T20:39:05Z", 7 | "created": "2022-04-13T20:39:05Z", 8 | "gsd": 30, 9 | "constellation": "usgs", 10 | "platform": "Landsat8", 11 | "instruments": [ 12 | "OLI_TIRS" 13 | ], 14 | "eo:cloud_cover": 90.2, 15 | "view:off_nadir": 0, 16 | "view:sun_azimuth": 122.5, 17 | "view:sun_elevation": 58.1, 18 | "landsat:collection_number": "02", 19 | "pl:item_type": "Landsat8L1G", 20 | "pl:pixel_resolution": 30, 21 | "externalIds": [ 22 | "LC08_L1TP_219065_20180102_20200902_02_T1" 23 | ], 24 | "pl:quality_category": "standard", 25 | "landsat:wrs_path": 219, 26 | "landsat:wrs_row": 65, 27 | "published": "2022-04-13T20:39:05Z", 28 | "proj:epsg": null, 29 | "datetime": "2018-01-02T13:00:06.942405Z" 30 | }, 31 | "geometry": { 32 | "coordinates": [ 33 | [ 34 | [ 35 | -43.59795349975637, 36 | -6.187763200391768 37 | ], 38 | [ 39 | -41.953040210223655, 40 | -6.539147977116791 41 | ], 42 | [ 43 | -42.322274594050036, 44 | -8.275927456292084 45 | ], 46 | [ 47 | -43.97342783396222, 48 | -7.920828136404763 49 | ], 50 | [ 51 | -43.59795349975637, 52 | -6.187763200391768 53 | ] 54 | ] 55 | ], 56 | "type": "Polygon" 57 | }, 58 | "links": [ 59 | { 60 | "rel": "root", 61 | "href": "../catalog.json", 62 | "type": "application/json" 63 | }, 64 | { 65 | "rel": "collection", 66 | "href": "./Landsat8L1G_collection.json", 67 | "type": "application/json" 68 | }, 69 | { 70 | "rel": "parent", 71 | "href": "./Landsat8L1G_collection.json", 72 | "type": "application/json" 73 | } 74 | ], 75 | "assets": { 76 | "LC82190652018002LGN00_metadata_json": { 77 | "href": "./LC82190652018002LGN00_metadata.json", 78 | "type": "application/json", 79 | "roles": [ 80 | "metadata" 81 | ] 82 | }, 83 | "LC82190652018002LGN00_Visual_tif": { 84 | "href": "./LC82190652018002LGN00_Visual.tif", 85 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 86 | "pl:asset_type": "visual", 87 | "pl:bundle_type": "visual", 88 | "raster:bands": [ 89 | { 90 | "data_type": "uint8", 91 | "spatial_resolution": 30, 92 | "statistics": { 93 | "minimum": 0, 94 | "maximum": 255 95 | } 96 | }, 97 | { 98 | "data_type": "uint8", 99 | "spatial_resolution": 30, 100 | "statistics": { 101 | "minimum": 0, 102 | "maximum": 255 103 | } 104 | }, 105 | { 106 | "data_type": "uint8", 107 | "spatial_resolution": 30, 108 | "statistics": { 109 | "minimum": 0, 110 | "maximum": 255 111 | } 112 | }, 113 | { 114 | "data_type": "uint8", 115 | "spatial_resolution": 30, 116 | "statistics": { 117 | "minimum": 0, 118 | "maximum": 255 119 | } 120 | } 121 | ], 122 | "eo:bands": [ 123 | { 124 | "name": "Red", 125 | "common_name": "red", 126 | "center_wavelength": 0.655, 127 | "full_width_half_max": 0.037 128 | }, 129 | { 130 | "name": "Green", 131 | "common_name": "green", 132 | "center_wavelength": 0.561, 133 | "full_width_half_max": 0.057 134 | }, 135 | { 136 | "name": "Blue", 137 | "common_name": "blue", 138 | "center_wavelength": 0.482, 139 | "full_width_half_max": 0.06 140 | }, 141 | { 142 | "name": "Alpha", 143 | "description": "Pixel opacity (0: fully transparent; 255: fully opaque)" 144 | } 145 | ], 146 | "proj:epsg": 32623, 147 | "proj:bbox": [ 148 | 611985, 149 | -916815, 150 | 840615, 151 | -683685 152 | ], 153 | "proj:shape": [ 154 | 7771, 155 | 7621 156 | ], 157 | "proj:transform": [ 158 | 30, 159 | 0, 160 | 611985, 161 | 0, 162 | -30, 163 | -683685, 164 | 0, 165 | 0, 166 | 1 167 | ], 168 | "roles": [ 169 | "data", 170 | "visual" 171 | ] 172 | } 173 | }, 174 | "bbox": [ 175 | -43.97342783396222, 176 | -8.275927456292084, 177 | -41.953040210223655, 178 | -6.187763200391768 179 | ], 180 | "stac_extensions": [ 181 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 182 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 183 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 184 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json", 185 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json" 186 | ], 187 | "collection": "d8416b0d-8afd-44ef-b1ea-826134555ad0: Landsat8L1G" 188 | } -------------------------------------------------------------------------------- /examples/items/MOD09GA.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "MOD09GA.A2023006.h10v08.061.2023009221057", 5 | "properties": { 6 | "updated": "2023-01-20T03:10:31Z", 7 | "created": "2023-01-20T03:10:31Z", 8 | "gsd": 500, 9 | "constellation": "usgs", 10 | "platform": "Terra", 11 | "instruments": [ 12 | "MODIS" 13 | ], 14 | "eo:cloud_cover": 0, 15 | "view:off_nadir": 0, 16 | "view:sun_azimuth": 0, 17 | "view:sun_elevation": 0, 18 | "pl:black_fill": 0.07, 19 | "pl:item_type": "MOD09GA", 20 | "sat:orbit_state": "ascending", 21 | "pl:pixel_resolution": 500, 22 | "version": "6.0.9", 23 | "pl:quality_category": "standard", 24 | "published": "2023-01-20T03:10:31Z", 25 | "proj:epsg": null, 26 | "datetime": "2023-01-06T11:59:59Z" 27 | }, 28 | "geometry": { 29 | "coordinates": [ 30 | [ 31 | [ 32 | -81.1488419095665, 33 | 10.05511074506398 34 | ], 35 | [ 36 | -71.00523667086385, 37 | 10.05511074506398 38 | ], 39 | [ 40 | -69.92175029005186, 41 | 0 42 | ], 43 | [ 44 | -79.91057176006697, 45 | 0 46 | ], 47 | [ 48 | -81.1488419095665, 49 | 10.05511074506398 50 | ] 51 | ] 52 | ], 53 | "type": "Polygon" 54 | }, 55 | "links": [ 56 | { 57 | "rel": "root", 58 | "href": "../catalog.json", 59 | "type": "application/json" 60 | }, 61 | { 62 | "rel": "collection", 63 | "href": "./MOD09GA_collection.json", 64 | "type": "application/json" 65 | }, 66 | { 67 | "rel": "parent", 68 | "href": "./MOD09GA_collection.json", 69 | "type": "application/json" 70 | } 71 | ], 72 | "assets": { 73 | "MOD09GA_A2023006_h10v08_061_2023009221057_metadata_json": { 74 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057_metadata.json", 75 | "type": "application/json", 76 | "roles": [ 77 | "metadata" 78 | ] 79 | }, 80 | "MOD09GA_A2023006_h10v08_061_2023009221057_GFLAGS_tif": { 81 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.GFLAGS.tif", 82 | "type": "image/tiff", 83 | "pl:asset_type": "analytic_gflags", 84 | "pl:bundle_type": "analytic_sr", 85 | "raster:bands": [ 86 | { 87 | "nodata": 255, 88 | "data_type": "uint8", 89 | "spatial_resolution": 926.6254330558331, 90 | "statistics": { 91 | "minimum": 0, 92 | "maximum": 0 93 | } 94 | } 95 | ], 96 | "roles": [ 97 | "data" 98 | ] 99 | }, 100 | "MOD09GA_A2023006_h10v08_061_2023009221057_GRANULE_PNT_tif": { 101 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.GRANULE_PNT.tif", 102 | "type": "image/tiff", 103 | "pl:asset_type": "analytic_granule_pnt", 104 | "pl:bundle_type": "analytic_sr", 105 | "raster:bands": [ 106 | { 107 | "nodata": 0, 108 | "data_type": "uint8", 109 | "spatial_resolution": 926.6254330558331, 110 | "statistics": { 111 | "minimum": 1, 112 | "maximum": 255 113 | } 114 | } 115 | ], 116 | "roles": [ 117 | "data" 118 | ] 119 | }, 120 | "MOD09GA_A2023006_h10v08_061_2023009221057_IOBS_RES_tif": { 121 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.IOBS_RES.tif", 122 | "type": "image/tiff", 123 | "pl:asset_type": "analytic_iobs_res", 124 | "pl:bundle_type": "analytic_sr", 125 | "raster:bands": [ 126 | { 127 | "nodata": 255, 128 | "data_type": "uint8", 129 | "spatial_resolution": 463.31271652791656, 130 | "statistics": { 131 | "minimum": 0, 132 | "maximum": 6 133 | } 134 | } 135 | ], 136 | "roles": [ 137 | "data" 138 | ] 139 | }, 140 | "MOD09GA_A2023006_h10v08_061_2023009221057_NUM_OBSERVATIONS_1KM_tif": { 141 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.NUM_OBSERVATIONS_1KM.tif", 142 | "type": "image/tiff", 143 | "pl:asset_type": "analytic_num_observations_1km", 144 | "pl:bundle_type": "analytic_sr", 145 | "raster:bands": [ 146 | { 147 | "nodata": -1, 148 | "data_type": "int8", 149 | "spatial_resolution": 926.6254330558331, 150 | "statistics": { 151 | "minimum": 0, 152 | "maximum": 7 153 | } 154 | } 155 | ], 156 | "roles": [ 157 | "data" 158 | ] 159 | }, 160 | "MOD09GA_A2023006_h10v08_061_2023009221057_NUM_OBSERVATIONS_500M_tif": { 161 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.NUM_OBSERVATIONS_500M.tif", 162 | "type": "image/tiff", 163 | "pl:asset_type": "analytic_num_observations_500m", 164 | "pl:bundle_type": "analytic_sr", 165 | "raster:bands": [ 166 | { 167 | "nodata": -1, 168 | "data_type": "int8", 169 | "spatial_resolution": 463.31271652791656, 170 | "statistics": { 171 | "minimum": 0, 172 | "maximum": 1 173 | } 174 | } 175 | ], 176 | "roles": [ 177 | "data" 178 | ] 179 | }, 180 | "MOD09GA_A2023006_h10v08_061_2023009221057_OBSCOV_500M_tif": { 181 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.OBSCOV_500M.tif", 182 | "type": "image/tiff", 183 | "pl:asset_type": "analytic_obscov_500m", 184 | "pl:bundle_type": "analytic_sr", 185 | "raster:bands": [ 186 | { 187 | "nodata": -1, 188 | "data_type": "int8", 189 | "spatial_resolution": 463.31271652791656, 190 | "statistics": { 191 | "minimum": 0, 192 | "maximum": 85 193 | } 194 | } 195 | ], 196 | "roles": [ 197 | "data" 198 | ] 199 | }, 200 | "MOD09GA_A2023006_h10v08_061_2023009221057_ORBIT_PNT_tif": { 201 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.ORBIT_PNT.tif", 202 | "type": "image/tiff", 203 | "pl:asset_type": "analytic_orbit_pnt", 204 | "pl:bundle_type": "analytic_sr", 205 | "raster:bands": [ 206 | { 207 | "nodata": -1, 208 | "data_type": "int8", 209 | "spatial_resolution": 926.6254330558331, 210 | "statistics": { 211 | "minimum": 0, 212 | "maximum": 0 213 | } 214 | } 215 | ], 216 | "roles": [ 217 | "data" 218 | ] 219 | }, 220 | "MOD09GA_A2023006_h10v08_061_2023009221057_QC_500M_tif": { 221 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.QC_500M.tif", 222 | "type": "image/tiff", 223 | "pl:asset_type": "analytic_qc_500m", 224 | "pl:bundle_type": "analytic_sr", 225 | "raster:bands": [ 226 | { 227 | "nodata": 787410671, 228 | "data_type": "uint32", 229 | "spatial_resolution": 463.31271652791656, 230 | "statistics": { 231 | "minimum": 1073741824, 232 | "maximum": 2016900983 233 | } 234 | } 235 | ], 236 | "roles": [ 237 | "data" 238 | ] 239 | }, 240 | "MOD09GA_A2023006_h10v08_061_2023009221057_Q_SCAN_tif": { 241 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.Q_SCAN.tif", 242 | "type": "image/tiff", 243 | "pl:asset_type": "analytic_q_scan", 244 | "pl:bundle_type": "analytic_sr", 245 | "raster:bands": [ 246 | { 247 | "data_type": "uint8", 248 | "spatial_resolution": 463.31271652791656, 249 | "statistics": { 250 | "minimum": 0, 251 | "maximum": 255 252 | } 253 | } 254 | ], 255 | "roles": [ 256 | "data" 257 | ] 258 | }, 259 | "MOD09GA_A2023006_h10v08_061_2023009221057_RANGE_tif": { 260 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.RANGE.tif", 261 | "type": "image/tiff", 262 | "pl:asset_type": "analytic_range", 263 | "pl:bundle_type": "analytic_sr", 264 | "raster:bands": [ 265 | { 266 | "nodata": 65535, 267 | "data_type": "uint16", 268 | "spatial_resolution": 926.6254330558331, 269 | "statistics": { 270 | "minimum": 0, 271 | "maximum": 55737 272 | } 273 | } 274 | ], 275 | "roles": [ 276 | "data" 277 | ] 278 | }, 279 | "MOD09GA_A2023006_h10v08_061_2023009221057_SENSOR_AZIMUTH_tif": { 280 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SENSOR_AZIMUTH.tif", 281 | "type": "image/tiff", 282 | "pl:asset_type": "analytic_sensor_azimuth", 283 | "pl:bundle_type": "analytic_sr", 284 | "raster:bands": [ 285 | { 286 | "nodata": -32767, 287 | "data_type": "int16", 288 | "spatial_resolution": 926.6254330558331, 289 | "statistics": { 290 | "minimum": -17660, 291 | "maximum": 17855 292 | } 293 | } 294 | ], 295 | "roles": [ 296 | "data" 297 | ] 298 | }, 299 | "MOD09GA_A2023006_h10v08_061_2023009221057_SENSOR_ZENITH_tif": { 300 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SENSOR_ZENITH.tif", 301 | "type": "image/tiff", 302 | "pl:asset_type": "analytic_sensor_zenith", 303 | "pl:bundle_type": "analytic_sr", 304 | "raster:bands": [ 305 | { 306 | "nodata": -32767, 307 | "data_type": "int16", 308 | "spatial_resolution": 926.6254330558331, 309 | "statistics": { 310 | "minimum": 3, 311 | "maximum": 6522 312 | } 313 | } 314 | ], 315 | "roles": [ 316 | "data" 317 | ] 318 | }, 319 | "MOD09GA_A2023006_h10v08_061_2023009221057_SOLAR_AZIMUTH_tif": { 320 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SOLAR_AZIMUTH.tif", 321 | "type": "image/tiff", 322 | "pl:asset_type": "analytic_solar_azimuth", 323 | "pl:bundle_type": "analytic_sr", 324 | "raster:bands": [ 325 | { 326 | "nodata": -32767, 327 | "data_type": "int16", 328 | "spatial_resolution": 926.6254330558331, 329 | "statistics": { 330 | "minimum": 13324, 331 | "maximum": 15172 332 | } 333 | } 334 | ], 335 | "roles": [ 336 | "data" 337 | ] 338 | }, 339 | "MOD09GA_A2023006_h10v08_061_2023009221057_SOLAR_ZENITH_tif": { 340 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SOLAR_ZENITH.tif", 341 | "type": "image/tiff", 342 | "pl:asset_type": "analytic_solar_zenith", 343 | "pl:bundle_type": "analytic_sr", 344 | "raster:bands": [ 345 | { 346 | "nodata": -32767, 347 | "data_type": "int16", 348 | "spatial_resolution": 926.6254330558331, 349 | "statistics": { 350 | "minimum": 2856, 351 | "maximum": 4251 352 | } 353 | } 354 | ], 355 | "roles": [ 356 | "data" 357 | ] 358 | }, 359 | "MOD09GA_A2023006_h10v08_061_2023009221057_STATE_1KM_tif": { 360 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.STATE_1KM.tif", 361 | "type": "image/tiff", 362 | "pl:asset_type": "analytic_state_1km", 363 | "pl:bundle_type": "analytic_sr", 364 | "raster:bands": [ 365 | { 366 | "nodata": 65535, 367 | "data_type": "uint16", 368 | "spatial_resolution": 926.6254330558331, 369 | "statistics": { 370 | "minimum": 0, 371 | "maximum": 40982 372 | } 373 | } 374 | ], 375 | "roles": [ 376 | "data" 377 | ] 378 | }, 379 | "MOD09GA_A2023006_h10v08_061_2023009221057_SUR_REFL_B01_tif": { 380 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SUR_REFL_B01.tif", 381 | "type": "image/tiff", 382 | "pl:asset_type": "analytic_sur_refl_b01", 383 | "pl:bundle_type": "analytic_sr", 384 | "raster:bands": [ 385 | { 386 | "nodata": -28672, 387 | "data_type": "int16", 388 | "spatial_resolution": 463.31271652791656, 389 | "statistics": { 390 | "minimum": -100, 391 | "maximum": 13958 392 | } 393 | } 394 | ], 395 | "eo:bands": [ 396 | { 397 | "name": "Red", 398 | "common_name": "red", 399 | "center_wavelength": 0.645, 400 | "full_width_half_max": 50 401 | } 402 | ], 403 | "roles": [ 404 | "data", 405 | "reflectance" 406 | ] 407 | }, 408 | "MOD09GA_A2023006_h10v08_061_2023009221057_SUR_REFL_B02_tif": { 409 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SUR_REFL_B02.tif", 410 | "type": "image/tiff", 411 | "pl:asset_type": "analytic_sur_refl_b02", 412 | "pl:bundle_type": "analytic_sr", 413 | "raster:bands": [ 414 | { 415 | "nodata": -28672, 416 | "data_type": "int16", 417 | "spatial_resolution": 463.31271652791656, 418 | "statistics": { 419 | "minimum": -100, 420 | "maximum": 11687 421 | } 422 | } 423 | ], 424 | "eo:bands": [ 425 | { 426 | "name": "Near-Infrared 1", 427 | "common_name": "nir", 428 | "center_wavelength": 0.859, 429 | "full_width_half_max": 35 430 | } 431 | ], 432 | "roles": [ 433 | "data", 434 | "reflectance" 435 | ] 436 | }, 437 | "MOD09GA_A2023006_h10v08_061_2023009221057_SUR_REFL_B03_tif": { 438 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SUR_REFL_B03.tif", 439 | "type": "image/tiff", 440 | "pl:asset_type": "analytic_sur_refl_b03", 441 | "pl:bundle_type": "analytic_sr", 442 | "raster:bands": [ 443 | { 444 | "nodata": -28672, 445 | "data_type": "int16", 446 | "spatial_resolution": 463.31271652791656, 447 | "statistics": { 448 | "minimum": -100, 449 | "maximum": 16000 450 | } 451 | } 452 | ], 453 | "eo:bands": [ 454 | { 455 | "name": "Blue", 456 | "common_name": "blue", 457 | "center_wavelength": 0.469, 458 | "full_width_half_max": 20 459 | } 460 | ], 461 | "roles": [ 462 | "data", 463 | "reflectance" 464 | ] 465 | }, 466 | "MOD09GA_A2023006_h10v08_061_2023009221057_SUR_REFL_B04_tif": { 467 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SUR_REFL_B04.tif", 468 | "type": "image/tiff", 469 | "pl:asset_type": "analytic_sur_refl_b04", 470 | "pl:bundle_type": "analytic_sr", 471 | "raster:bands": [ 472 | { 473 | "nodata": -28672, 474 | "data_type": "int16", 475 | "spatial_resolution": 463.31271652791656, 476 | "statistics": { 477 | "minimum": -100, 478 | "maximum": 13526 479 | } 480 | } 481 | ], 482 | "eo:bands": [ 483 | { 484 | "name": "Green", 485 | "common_name": "green", 486 | "center_wavelength": 0.555, 487 | "full_width_half_max": 20 488 | } 489 | ], 490 | "roles": [ 491 | "data", 492 | "reflectance" 493 | ] 494 | }, 495 | "MOD09GA_A2023006_h10v08_061_2023009221057_SUR_REFL_B05_tif": { 496 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SUR_REFL_B05.tif", 497 | "type": "image/tiff", 498 | "pl:asset_type": "analytic_sur_refl_b05", 499 | "pl:bundle_type": "analytic_sr", 500 | "raster:bands": [ 501 | { 502 | "nodata": -28672, 503 | "data_type": "int16", 504 | "spatial_resolution": 463.31271652791656, 505 | "statistics": { 506 | "minimum": -100, 507 | "maximum": 9974 508 | } 509 | } 510 | ], 511 | "eo:bands": [ 512 | { 513 | "name": "Near-Infrared 2", 514 | "center_wavelength": 1.24, 515 | "full_width_half_max": 20 516 | } 517 | ], 518 | "roles": [ 519 | "data", 520 | "reflectance" 521 | ] 522 | }, 523 | "MOD09GA_A2023006_h10v08_061_2023009221057_SUR_REFL_B06_tif": { 524 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SUR_REFL_B06.tif", 525 | "type": "image/tiff", 526 | "pl:asset_type": "analytic_sur_refl_b06", 527 | "pl:bundle_type": "analytic_sr", 528 | "raster:bands": [ 529 | { 530 | "nodata": -28672, 531 | "data_type": "int16", 532 | "spatial_resolution": 463.31271652791656, 533 | "statistics": { 534 | "minimum": 6, 535 | "maximum": 7682 536 | } 537 | } 538 | ], 539 | "eo:bands": [ 540 | { 541 | "name": "SWIR 1", 542 | "common_name": "swir16", 543 | "center_wavelength": 1.64, 544 | "full_width_half_max": 24 545 | } 546 | ], 547 | "roles": [ 548 | "data", 549 | "reflectance" 550 | ] 551 | }, 552 | "MOD09GA_A2023006_h10v08_061_2023009221057_SUR_REFL_B07_tif": { 553 | "href": "./MOD09GA.A2023006.h10v08.061.2023009221057.SUR_REFL_B07.tif", 554 | "type": "image/tiff", 555 | "pl:asset_type": "analytic_sur_refl_b07", 556 | "pl:bundle_type": "analytic_sr", 557 | "raster:bands": [ 558 | { 559 | "nodata": -28672, 560 | "data_type": "int16", 561 | "spatial_resolution": 463.31271652791656, 562 | "statistics": { 563 | "minimum": -100, 564 | "maximum": 5758 565 | } 566 | } 567 | ], 568 | "eo:bands": [ 569 | { 570 | "name": "SWIR 2", 571 | "common_name": "swir22", 572 | "center_wavelength": 2.13, 573 | "full_width_half_max": 50 574 | } 575 | ], 576 | "roles": [ 577 | "data", 578 | "reflectance" 579 | ] 580 | } 581 | }, 582 | "bbox": [ 583 | -81.1488419095665, 584 | 0, 585 | -69.92175029005186, 586 | 10.05511074506398 587 | ], 588 | "stac_extensions": [ 589 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 590 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 591 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 592 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json", 593 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 594 | "https://stac-extensions.github.io/sat/v1.0.0/schema.json", 595 | "https://stac-extensions.github.io/version/v1.2.0/schema.json" 596 | ], 597 | "collection": "8d2ce872-0007-4a98-80f3-e9b2254d8005: MOD09GA" 598 | } -------------------------------------------------------------------------------- /examples/items/MOD09GQ.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "MOD09GQ.A2023006.h12v07.061.2023009221246", 5 | "properties": { 6 | "updated": "2023-01-20T03:11:33Z", 7 | "created": "2023-01-20T03:11:33Z", 8 | "gsd": 250, 9 | "constellation": "usgs", 10 | "platform": "Terra", 11 | "instruments": [ 12 | "MODIS" 13 | ], 14 | "eo:cloud_cover": 0, 15 | "view:off_nadir": 0, 16 | "view:sun_azimuth": 0, 17 | "view:sun_elevation": 0, 18 | "pl:black_fill": 0, 19 | "pl:item_type": "MOD09GQ", 20 | "sat:orbit_state": "ascending", 21 | "pl:pixel_resolution": 250, 22 | "version": "6.0.9", 23 | "pl:quality_category": "standard", 24 | "published": "2023-01-20T03:11:33Z", 25 | "proj:epsg": null, 26 | "datetime": "2023-01-06T11:59:59Z" 27 | }, 28 | "geometry": { 29 | "coordinates": [ 30 | [ 31 | [ 32 | -63.79639468961505, 33 | 20.10419395230241 34 | ], 35 | [ 36 | -53.16366224133632, 37 | 20.10419395230241 38 | ], 39 | [ 40 | -50.718026193458556, 41 | 10.055110745063985 42 | ], 43 | [ 44 | -60.861631432161204, 45 | 10.055110745063985 46 | ], 47 | [ 48 | -63.79639468961505, 49 | 20.10419395230241 50 | ] 51 | ] 52 | ], 53 | "type": "Polygon" 54 | }, 55 | "links": [ 56 | { 57 | "rel": "root", 58 | "href": "../catalog.json", 59 | "type": "application/json" 60 | }, 61 | { 62 | "rel": "collection", 63 | "href": "./MOD09GQ_collection.json", 64 | "type": "application/json" 65 | }, 66 | { 67 | "rel": "parent", 68 | "href": "./MOD09GQ_collection.json", 69 | "type": "application/json" 70 | } 71 | ], 72 | "assets": { 73 | "MOD09GQ_A2023006_h12v07_061_2023009221246_metadata_json": { 74 | "href": "./MOD09GQ.A2023006.h12v07.061.2023009221246_metadata.json", 75 | "type": "application/json", 76 | "roles": [ 77 | "metadata" 78 | ] 79 | }, 80 | "MOD09GQ_A2023006_h12v07_061_2023009221246_GRANULE_PNT_tif": { 81 | "href": "./MOD09GQ.A2023006.h12v07.061.2023009221246.GRANULE_PNT.tif", 82 | "type": "image/tiff", 83 | "pl:asset_type": "analytic_granule_pnt", 84 | "pl:bundle_type": "analytic_sr", 85 | "raster:bands": [ 86 | { 87 | "nodata": 0, 88 | "data_type": "uint8", 89 | "spatial_resolution": 231.65635826395828, 90 | "statistics": { 91 | "minimum": 1, 92 | "maximum": 255 93 | } 94 | } 95 | ], 96 | "roles": [ 97 | "data" 98 | ] 99 | }, 100 | "MOD09GQ_A2023006_h12v07_061_2023009221246_IOBS_RES_tif": { 101 | "href": "./MOD09GQ.A2023006.h12v07.061.2023009221246.IOBS_RES.tif", 102 | "type": "image/tiff", 103 | "pl:asset_type": "analytic_iobs_res", 104 | "pl:bundle_type": "analytic_sr", 105 | "raster:bands": [ 106 | { 107 | "nodata": 255, 108 | "data_type": "uint8", 109 | "spatial_resolution": 231.65635826395828, 110 | "statistics": { 111 | "minimum": 0, 112 | "maximum": 6 113 | } 114 | } 115 | ], 116 | "roles": [ 117 | "data" 118 | ] 119 | }, 120 | "MOD09GQ_A2023006_h12v07_061_2023009221246_NUM_OBSERVATIONS_tif": { 121 | "href": "./MOD09GQ.A2023006.h12v07.061.2023009221246.NUM_OBSERVATIONS.tif", 122 | "type": "image/tiff", 123 | "pl:asset_type": "analytic_num_observations", 124 | "pl:bundle_type": "analytic_sr", 125 | "raster:bands": [ 126 | { 127 | "nodata": -1, 128 | "data_type": "int8", 129 | "spatial_resolution": 231.65635826395828, 130 | "statistics": { 131 | "minimum": 0, 132 | "maximum": 1 133 | } 134 | } 135 | ], 136 | "roles": [ 137 | "data" 138 | ] 139 | }, 140 | "MOD09GQ_A2023006_h12v07_061_2023009221246_OBSCOV_tif": { 141 | "href": "./MOD09GQ.A2023006.h12v07.061.2023009221246.OBSCOV.tif", 142 | "type": "image/tiff", 143 | "pl:asset_type": "analytic_obscov", 144 | "pl:bundle_type": "analytic_sr", 145 | "raster:bands": [ 146 | { 147 | "nodata": -1, 148 | "data_type": "int8", 149 | "spatial_resolution": 231.65635826395828, 150 | "statistics": { 151 | "minimum": 0, 152 | "maximum": 66 153 | } 154 | } 155 | ], 156 | "roles": [ 157 | "data" 158 | ] 159 | }, 160 | "MOD09GQ_A2023006_h12v07_061_2023009221246_ORBIT_PNT_tif": { 161 | "href": "./MOD09GQ.A2023006.h12v07.061.2023009221246.ORBIT_PNT.tif", 162 | "type": "image/tiff", 163 | "pl:asset_type": "analytic_orbit_pnt", 164 | "pl:bundle_type": "analytic_sr", 165 | "raster:bands": [ 166 | { 167 | "nodata": 0, 168 | "data_type": "uint8", 169 | "spatial_resolution": 231.65635826395828, 170 | "statistics": { 171 | "minimum": 255, 172 | "maximum": 255 173 | } 174 | } 175 | ], 176 | "roles": [ 177 | "data" 178 | ] 179 | }, 180 | "MOD09GQ_A2023006_h12v07_061_2023009221246_QC_250M_tif": { 181 | "href": "./MOD09GQ.A2023006.h12v07.061.2023009221246.QC_250M.tif", 182 | "type": "image/tiff", 183 | "pl:asset_type": "analytic_qc_250m", 184 | "pl:bundle_type": "analytic_sr", 185 | "raster:bands": [ 186 | { 187 | "nodata": 2995, 188 | "data_type": "uint16", 189 | "spatial_resolution": 231.65635826395828, 190 | "statistics": { 191 | "minimum": 4096, 192 | "maximum": 7683 193 | } 194 | } 195 | ], 196 | "roles": [ 197 | "data" 198 | ] 199 | }, 200 | "MOD09GQ_A2023006_h12v07_061_2023009221246_SUR_REFL_B01_tif": { 201 | "href": "./MOD09GQ.A2023006.h12v07.061.2023009221246.SUR_REFL_B01.tif", 202 | "type": "image/tiff", 203 | "pl:asset_type": "analytic_sur_refl_b01", 204 | "pl:bundle_type": "analytic_sr", 205 | "raster:bands": [ 206 | { 207 | "nodata": -28672, 208 | "data_type": "int16", 209 | "spatial_resolution": 231.65635826395828, 210 | "statistics": { 211 | "minimum": -100, 212 | "maximum": 15429 213 | } 214 | } 215 | ], 216 | "eo:bands": [ 217 | { 218 | "name": "Red", 219 | "common_name": "red", 220 | "center_wavelength": 0.645, 221 | "full_width_half_max": 50 222 | } 223 | ], 224 | "roles": [ 225 | "data", 226 | "reflectance" 227 | ] 228 | }, 229 | "MOD09GQ_A2023006_h12v07_061_2023009221246_SUR_REFL_B02_tif": { 230 | "href": "./MOD09GQ.A2023006.h12v07.061.2023009221246.SUR_REFL_B02.tif", 231 | "type": "image/tiff", 232 | "pl:asset_type": "analytic_sur_refl_b02", 233 | "pl:bundle_type": "analytic_sr", 234 | "raster:bands": [ 235 | { 236 | "nodata": -28672, 237 | "data_type": "int16", 238 | "spatial_resolution": 231.65635826395828, 239 | "statistics": { 240 | "minimum": -100, 241 | "maximum": 14766 242 | } 243 | } 244 | ], 245 | "eo:bands": [ 246 | { 247 | "name": "Near-Infrared 1", 248 | "common_name": "nir", 249 | "center_wavelength": 0.859, 250 | "full_width_half_max": 35 251 | } 252 | ], 253 | "roles": [ 254 | "data", 255 | "reflectance" 256 | ] 257 | } 258 | }, 259 | "bbox": [ 260 | -63.79639468961505, 261 | 10.055110745063985, 262 | -50.718026193458556, 263 | 20.10419395230241 264 | ], 265 | "stac_extensions": [ 266 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 267 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 268 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 269 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json", 270 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 271 | "https://stac-extensions.github.io/sat/v1.0.0/schema.json", 272 | "https://stac-extensions.github.io/version/v1.2.0/schema.json" 273 | ], 274 | "collection": "bc2020bb-1333-4a98-9c32-02d9f2d377b3: MOD09GQ" 275 | } -------------------------------------------------------------------------------- /examples/items/MYD09GA.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "MYD09GA.A2023009.h23v11.061.2023011074641", 5 | "properties": { 6 | "updated": "2023-01-13T03:42:39Z", 7 | "created": "2023-01-13T03:42:39Z", 8 | "gsd": 500, 9 | "constellation": "usgs", 10 | "platform": "Aqua", 11 | "instruments": [ 12 | "MODIS" 13 | ], 14 | "eo:cloud_cover": 0, 15 | "view:off_nadir": 0, 16 | "view:sun_azimuth": 0, 17 | "view:sun_elevation": 0, 18 | "pl:black_fill": 0.07, 19 | "pl:item_type": "MYD09GA", 20 | "sat:orbit_state": "ascending", 21 | "pl:pixel_resolution": 500, 22 | "version": "6.0.9", 23 | "pl:quality_category": "standard", 24 | "published": "2023-01-13T03:42:39Z", 25 | "proj:epsg": null, 26 | "datetime": "2023-01-09T11:59:59Z" 27 | }, 28 | "geometry": { 29 | "coordinates": [ 30 | [ 31 | [ 32 | 53.16366224145094, 33 | -20.104193952302392 34 | ], 35 | [ 36 | 63.79639468972969, 37 | -20.104193952302392 38 | ], 39 | [ 40 | 69.24542806211541, 41 | -30.141972433756095 42 | ], 43 | [ 44 | 57.70452338510653, 45 | -30.141972433756095 46 | ], 47 | [ 48 | 53.16366224145094, 49 | -20.104193952302392 50 | ] 51 | ] 52 | ], 53 | "type": "Polygon" 54 | }, 55 | "links": [ 56 | { 57 | "rel": "root", 58 | "href": "../catalog.json", 59 | "type": "application/json" 60 | }, 61 | { 62 | "rel": "collection", 63 | "href": "./MYD09GA_collection.json", 64 | "type": "application/json" 65 | }, 66 | { 67 | "rel": "parent", 68 | "href": "./MYD09GA_collection.json", 69 | "type": "application/json" 70 | } 71 | ], 72 | "assets": { 73 | "MYD09GA_A2023009_h23v11_061_2023011074641_metadata_json": { 74 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641_metadata.json", 75 | "type": "application/json", 76 | "roles": [ 77 | "metadata" 78 | ] 79 | }, 80 | "MYD09GA_A2023009_h23v11_061_2023011074641_GFLAGS_tif": { 81 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.GFLAGS.tif", 82 | "type": "image/tiff", 83 | "pl:asset_type": "analytic_gflags", 84 | "pl:bundle_type": "analytic_sr", 85 | "raster:bands": [ 86 | { 87 | "nodata": 255, 88 | "data_type": "uint8", 89 | "spatial_resolution": 926.6254330558331, 90 | "statistics": { 91 | "minimum": 0, 92 | "maximum": 0 93 | } 94 | } 95 | ], 96 | "roles": [ 97 | "data" 98 | ] 99 | }, 100 | "MYD09GA_A2023009_h23v11_061_2023011074641_GRANULE_PNT_tif": { 101 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.GRANULE_PNT.tif", 102 | "type": "image/tiff", 103 | "pl:asset_type": "analytic_granule_pnt", 104 | "pl:bundle_type": "analytic_sr", 105 | "raster:bands": [ 106 | { 107 | "nodata": 0, 108 | "data_type": "uint8", 109 | "spatial_resolution": 926.6254330558331, 110 | "statistics": { 111 | "minimum": 1, 112 | "maximum": 255 113 | } 114 | } 115 | ], 116 | "roles": [ 117 | "data" 118 | ] 119 | }, 120 | "MYD09GA_A2023009_h23v11_061_2023011074641_IOBS_RES_tif": { 121 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.IOBS_RES.tif", 122 | "type": "image/tiff", 123 | "pl:asset_type": "analytic_iobs_res", 124 | "pl:bundle_type": "analytic_sr", 125 | "raster:bands": [ 126 | { 127 | "nodata": 255, 128 | "data_type": "uint8", 129 | "spatial_resolution": 463.31271652791656, 130 | "statistics": { 131 | "minimum": 0, 132 | "maximum": 6 133 | } 134 | } 135 | ], 136 | "roles": [ 137 | "data" 138 | ] 139 | }, 140 | "MYD09GA_A2023009_h23v11_061_2023011074641_NUM_OBSERVATIONS_1KM_tif": { 141 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.NUM_OBSERVATIONS_1KM.tif", 142 | "type": "image/tiff", 143 | "pl:asset_type": "analytic_num_observations_1km", 144 | "pl:bundle_type": "analytic_sr", 145 | "raster:bands": [ 146 | { 147 | "nodata": -1, 148 | "data_type": "int8", 149 | "spatial_resolution": 926.6254330558331, 150 | "statistics": { 151 | "minimum": 0, 152 | "maximum": 12 153 | } 154 | } 155 | ], 156 | "roles": [ 157 | "data" 158 | ] 159 | }, 160 | "MYD09GA_A2023009_h23v11_061_2023011074641_NUM_OBSERVATIONS_500M_tif": { 161 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.NUM_OBSERVATIONS_500M.tif", 162 | "type": "image/tiff", 163 | "pl:asset_type": "analytic_num_observations_500m", 164 | "pl:bundle_type": "analytic_sr", 165 | "raster:bands": [ 166 | { 167 | "nodata": -1, 168 | "data_type": "int8", 169 | "spatial_resolution": 463.31271652791656, 170 | "statistics": { 171 | "minimum": 0, 172 | "maximum": 2 173 | } 174 | } 175 | ], 176 | "roles": [ 177 | "data" 178 | ] 179 | }, 180 | "MYD09GA_A2023009_h23v11_061_2023011074641_OBSCOV_500M_tif": { 181 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.OBSCOV_500M.tif", 182 | "type": "image/tiff", 183 | "pl:asset_type": "analytic_obscov_500m", 184 | "pl:bundle_type": "analytic_sr", 185 | "raster:bands": [ 186 | { 187 | "nodata": -1, 188 | "data_type": "int8", 189 | "spatial_resolution": 463.31271652791656, 190 | "statistics": { 191 | "minimum": 0, 192 | "maximum": 44 193 | } 194 | } 195 | ], 196 | "roles": [ 197 | "data" 198 | ] 199 | }, 200 | "MYD09GA_A2023009_h23v11_061_2023011074641_ORBIT_PNT_tif": { 201 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.ORBIT_PNT.tif", 202 | "type": "image/tiff", 203 | "pl:asset_type": "analytic_orbit_pnt", 204 | "pl:bundle_type": "analytic_sr", 205 | "raster:bands": [ 206 | { 207 | "nodata": -1, 208 | "data_type": "int8", 209 | "spatial_resolution": 926.6254330558331, 210 | "statistics": { 211 | "minimum": 0, 212 | "maximum": 1 213 | } 214 | } 215 | ], 216 | "roles": [ 217 | "data" 218 | ] 219 | }, 220 | "MYD09GA_A2023009_h23v11_061_2023011074641_QC_500M_tif": { 221 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.QC_500M.tif", 222 | "type": "image/tiff", 223 | "pl:asset_type": "analytic_qc_500m", 224 | "pl:bundle_type": "analytic_sr", 225 | "raster:bands": [ 226 | { 227 | "nodata": 787410671, 228 | "data_type": "uint32", 229 | "spatial_resolution": 463.31271652791656, 230 | "statistics": { 231 | "minimum": 1073741824, 232 | "maximum": 1979712321 233 | } 234 | } 235 | ], 236 | "roles": [ 237 | "data" 238 | ] 239 | }, 240 | "MYD09GA_A2023009_h23v11_061_2023011074641_Q_SCAN_tif": { 241 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.Q_SCAN.tif", 242 | "type": "image/tiff", 243 | "pl:asset_type": "analytic_q_scan", 244 | "pl:bundle_type": "analytic_sr", 245 | "raster:bands": [ 246 | { 247 | "data_type": "uint8", 248 | "spatial_resolution": 463.31271652791656, 249 | "statistics": { 250 | "minimum": 0, 251 | "maximum": 255 252 | } 253 | } 254 | ], 255 | "roles": [ 256 | "data" 257 | ] 258 | }, 259 | "MYD09GA_A2023009_h23v11_061_2023011074641_RANGE_tif": { 260 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.RANGE.tif", 261 | "type": "image/tiff", 262 | "pl:asset_type": "analytic_range", 263 | "pl:bundle_type": "analytic_sr", 264 | "raster:bands": [ 265 | { 266 | "nodata": 65535, 267 | "data_type": "uint16", 268 | "spatial_resolution": 926.6254330558331, 269 | "statistics": { 270 | "minimum": 0, 271 | "maximum": 57200 272 | } 273 | } 274 | ], 275 | "roles": [ 276 | "data" 277 | ] 278 | }, 279 | "MYD09GA_A2023009_h23v11_061_2023011074641_SENSOR_AZIMUTH_tif": { 280 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SENSOR_AZIMUTH.tif", 281 | "type": "image/tiff", 282 | "pl:asset_type": "analytic_sensor_azimuth", 283 | "pl:bundle_type": "analytic_sr", 284 | "raster:bands": [ 285 | { 286 | "nodata": -32767, 287 | "data_type": "int16", 288 | "spatial_resolution": 926.6254330558331, 289 | "statistics": { 290 | "minimum": -10637, 291 | "maximum": 8681 292 | } 293 | } 294 | ], 295 | "roles": [ 296 | "data" 297 | ] 298 | }, 299 | "MYD09GA_A2023009_h23v11_061_2023011074641_SENSOR_ZENITH_tif": { 300 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SENSOR_ZENITH.tif", 301 | "type": "image/tiff", 302 | "pl:asset_type": "analytic_sensor_zenith", 303 | "pl:bundle_type": "analytic_sr", 304 | "raster:bands": [ 305 | { 306 | "nodata": -32767, 307 | "data_type": "int16", 308 | "spatial_resolution": 926.6254330558331, 309 | "statistics": { 310 | "minimum": 3235, 311 | "maximum": 6554 312 | } 313 | } 314 | ], 315 | "roles": [ 316 | "data" 317 | ] 318 | }, 319 | "MYD09GA_A2023009_h23v11_061_2023011074641_SOLAR_AZIMUTH_tif": { 320 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SOLAR_AZIMUTH.tif", 321 | "type": "image/tiff", 322 | "pl:asset_type": "analytic_solar_azimuth", 323 | "pl:bundle_type": "analytic_sr", 324 | "raster:bands": [ 325 | { 326 | "nodata": -32767, 327 | "data_type": "int16", 328 | "spatial_resolution": 926.6254330558331, 329 | "statistics": { 330 | "minimum": -10095, 331 | "maximum": -6618 332 | } 333 | } 334 | ], 335 | "roles": [ 336 | "data" 337 | ] 338 | }, 339 | "MYD09GA_A2023009_h23v11_061_2023011074641_SOLAR_ZENITH_tif": { 340 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SOLAR_ZENITH.tif", 341 | "type": "image/tiff", 342 | "pl:asset_type": "analytic_solar_zenith", 343 | "pl:bundle_type": "analytic_sr", 344 | "raster:bands": [ 345 | { 346 | "nodata": -32767, 347 | "data_type": "int16", 348 | "spatial_resolution": 926.6254330558331, 349 | "statistics": { 350 | "minimum": 1492, 351 | "maximum": 3788 352 | } 353 | } 354 | ], 355 | "roles": [ 356 | "data" 357 | ] 358 | }, 359 | "MYD09GA_A2023009_h23v11_061_2023011074641_STATE_1KM_tif": { 360 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.STATE_1KM.tif", 361 | "type": "image/tiff", 362 | "pl:asset_type": "analytic_state_1km", 363 | "pl:bundle_type": "analytic_sr", 364 | "raster:bands": [ 365 | { 366 | "nodata": 65535, 367 | "data_type": "uint16", 368 | "spatial_resolution": 926.6254330558331, 369 | "statistics": { 370 | "minimum": 49, 371 | "maximum": 40977 372 | } 373 | } 374 | ], 375 | "roles": [ 376 | "data" 377 | ] 378 | }, 379 | "MYD09GA_A2023009_h23v11_061_2023011074641_SUR_REFL_B01_tif": { 380 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SUR_REFL_B01.tif", 381 | "type": "image/tiff", 382 | "pl:asset_type": "analytic_sur_refl_b01", 383 | "pl:bundle_type": "analytic_sr", 384 | "raster:bands": [ 385 | { 386 | "nodata": -28672, 387 | "data_type": "int16", 388 | "spatial_resolution": 463.31271652791656, 389 | "statistics": { 390 | "minimum": -100, 391 | "maximum": 13579 392 | } 393 | } 394 | ], 395 | "eo:bands": [ 396 | { 397 | "name": "Red", 398 | "common_name": "red", 399 | "center_wavelength": 0.645, 400 | "full_width_half_max": 50 401 | } 402 | ], 403 | "roles": [ 404 | "data", 405 | "reflectance" 406 | ] 407 | }, 408 | "MYD09GA_A2023009_h23v11_061_2023011074641_SUR_REFL_B02_tif": { 409 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SUR_REFL_B02.tif", 410 | "type": "image/tiff", 411 | "pl:asset_type": "analytic_sur_refl_b02", 412 | "pl:bundle_type": "analytic_sr", 413 | "raster:bands": [ 414 | { 415 | "nodata": -28672, 416 | "data_type": "int16", 417 | "spatial_resolution": 463.31271652791656, 418 | "statistics": { 419 | "minimum": -100, 420 | "maximum": 8639 421 | } 422 | } 423 | ], 424 | "eo:bands": [ 425 | { 426 | "name": "Near-Infrared 1", 427 | "common_name": "nir", 428 | "center_wavelength": 0.859, 429 | "full_width_half_max": 35 430 | } 431 | ], 432 | "roles": [ 433 | "data", 434 | "reflectance" 435 | ] 436 | }, 437 | "MYD09GA_A2023009_h23v11_061_2023011074641_SUR_REFL_B03_tif": { 438 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SUR_REFL_B03.tif", 439 | "type": "image/tiff", 440 | "pl:asset_type": "analytic_sur_refl_b03", 441 | "pl:bundle_type": "analytic_sr", 442 | "raster:bands": [ 443 | { 444 | "nodata": -28672, 445 | "data_type": "int16", 446 | "spatial_resolution": 463.31271652791656, 447 | "statistics": { 448 | "minimum": -100, 449 | "maximum": 16000 450 | } 451 | } 452 | ], 453 | "eo:bands": [ 454 | { 455 | "name": "Blue", 456 | "common_name": "blue", 457 | "center_wavelength": 0.469, 458 | "full_width_half_max": 20 459 | } 460 | ], 461 | "roles": [ 462 | "data", 463 | "reflectance" 464 | ] 465 | }, 466 | "MYD09GA_A2023009_h23v11_061_2023011074641_SUR_REFL_B04_tif": { 467 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SUR_REFL_B04.tif", 468 | "type": "image/tiff", 469 | "pl:asset_type": "analytic_sur_refl_b04", 470 | "pl:bundle_type": "analytic_sr", 471 | "raster:bands": [ 472 | { 473 | "nodata": -28672, 474 | "data_type": "int16", 475 | "spatial_resolution": 463.31271652791656, 476 | "statistics": { 477 | "minimum": -100, 478 | "maximum": 13518 479 | } 480 | } 481 | ], 482 | "eo:bands": [ 483 | { 484 | "name": "Green", 485 | "common_name": "green", 486 | "center_wavelength": 0.555, 487 | "full_width_half_max": 20 488 | } 489 | ], 490 | "roles": [ 491 | "data", 492 | "reflectance" 493 | ] 494 | }, 495 | "MYD09GA_A2023009_h23v11_061_2023011074641_SUR_REFL_B05_tif": { 496 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SUR_REFL_B05.tif", 497 | "type": "image/tiff", 498 | "pl:asset_type": "analytic_sur_refl_b05", 499 | "pl:bundle_type": "analytic_sr", 500 | "raster:bands": [ 501 | { 502 | "nodata": -28672, 503 | "data_type": "int16", 504 | "spatial_resolution": 463.31271652791656, 505 | "statistics": { 506 | "minimum": -100, 507 | "maximum": 9675 508 | } 509 | } 510 | ], 511 | "eo:bands": [ 512 | { 513 | "name": "Near-Infrared 2", 514 | "center_wavelength": 1.24, 515 | "full_width_half_max": 20 516 | } 517 | ], 518 | "roles": [ 519 | "data", 520 | "reflectance" 521 | ] 522 | }, 523 | "MYD09GA_A2023009_h23v11_061_2023011074641_SUR_REFL_B06_tif": { 524 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SUR_REFL_B06.tif", 525 | "type": "image/tiff", 526 | "pl:asset_type": "analytic_sur_refl_b06", 527 | "pl:bundle_type": "analytic_sr", 528 | "raster:bands": [ 529 | { 530 | "nodata": -28672, 531 | "data_type": "int16", 532 | "spatial_resolution": 463.31271652791656, 533 | "statistics": { 534 | "minimum": 5, 535 | "maximum": 7264 536 | } 537 | } 538 | ], 539 | "eo:bands": [ 540 | { 541 | "name": "SWIR 1", 542 | "common_name": "swir16", 543 | "center_wavelength": 1.64, 544 | "full_width_half_max": 24 545 | } 546 | ], 547 | "roles": [ 548 | "data", 549 | "reflectance" 550 | ] 551 | }, 552 | "MYD09GA_A2023009_h23v11_061_2023011074641_SUR_REFL_B07_tif": { 553 | "href": "./MYD09GA.A2023009.h23v11.061.2023011074641.SUR_REFL_B07.tif", 554 | "type": "image/tiff", 555 | "pl:asset_type": "analytic_sur_refl_b07", 556 | "pl:bundle_type": "analytic_sr", 557 | "raster:bands": [ 558 | { 559 | "nodata": -28672, 560 | "data_type": "int16", 561 | "spatial_resolution": 463.31271652791656, 562 | "statistics": { 563 | "minimum": 0, 564 | "maximum": 5625 565 | } 566 | } 567 | ], 568 | "eo:bands": [ 569 | { 570 | "name": "SWIR 2", 571 | "common_name": "swir22", 572 | "center_wavelength": 2.13, 573 | "full_width_half_max": 50 574 | } 575 | ], 576 | "roles": [ 577 | "data", 578 | "reflectance" 579 | ] 580 | } 581 | }, 582 | "bbox": [ 583 | 53.16366224145094, 584 | -30.141972433756095, 585 | 69.24542806211541, 586 | -20.104193952302392 587 | ], 588 | "stac_extensions": [ 589 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 590 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 591 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 592 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json", 593 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 594 | "https://stac-extensions.github.io/sat/v1.0.0/schema.json", 595 | "https://stac-extensions.github.io/version/v1.2.0/schema.json" 596 | ], 597 | "collection": "45de5830-6551-4b0b-b8aa-0821374cf562: MYD09GA" 598 | } -------------------------------------------------------------------------------- /examples/items/MYD09GQ.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "MYD09GQ.A2023009.h29v12.061.2023011071140", 5 | "properties": { 6 | "updated": "2023-01-13T03:35:26Z", 7 | "created": "2023-01-13T03:35:26Z", 8 | "gsd": 250, 9 | "constellation": "usgs", 10 | "platform": "Aqua", 11 | "instruments": [ 12 | "MODIS" 13 | ], 14 | "eo:cloud_cover": 0, 15 | "view:off_nadir": 0, 16 | "view:sun_azimuth": 0, 17 | "view:sun_elevation": 0, 18 | "pl:black_fill": 0, 19 | "pl:item_type": "MYD09GQ", 20 | "sat:orbit_state": "ascending", 21 | "pl:pixel_resolution": 250, 22 | "version": "6.0.9", 23 | "pl:quality_category": "standard", 24 | "published": "2023-01-13T03:35:26Z", 25 | "proj:epsg": null, 26 | "datetime": "2023-01-09T11:59:59Z" 27 | }, 28 | "geometry": { 29 | "coordinates": [ 30 | [ 31 | [ 32 | 126.94995144715973, 33 | -30.141972433756095 34 | ], 35 | [ 36 | 138.4908561241686, 37 | -30.141972433756095 38 | ], 39 | [ 40 | 156.63388116255626, 41 | -40.16456836550465 42 | ], 43 | [ 44 | 143.58105773234908, 45 | -40.16456836550465 46 | ], 47 | [ 48 | 126.94995144715973, 49 | -30.141972433756095 50 | ] 51 | ] 52 | ], 53 | "type": "Polygon" 54 | }, 55 | "links": [ 56 | { 57 | "rel": "root", 58 | "href": "../catalog.json", 59 | "type": "application/json" 60 | }, 61 | { 62 | "rel": "collection", 63 | "href": "./MYD09GQ_collection.json", 64 | "type": "application/json" 65 | }, 66 | { 67 | "rel": "parent", 68 | "href": "./MYD09GQ_collection.json", 69 | "type": "application/json" 70 | } 71 | ], 72 | "assets": { 73 | "MYD09GQ_A2023009_h29v12_061_2023011071140_metadata_json": { 74 | "href": "./MYD09GQ.A2023009.h29v12.061.2023011071140_metadata.json", 75 | "type": "application/json", 76 | "roles": [ 77 | "metadata" 78 | ] 79 | }, 80 | "MYD09GQ_A2023009_h29v12_061_2023011071140_GRANULE_PNT_tif": { 81 | "href": "./MYD09GQ.A2023009.h29v12.061.2023011071140.GRANULE_PNT.tif", 82 | "type": "image/tiff", 83 | "pl:asset_type": "analytic_granule_pnt", 84 | "pl:bundle_type": "analytic_sr", 85 | "raster:bands": [ 86 | { 87 | "nodata": 0, 88 | "data_type": "uint8", 89 | "spatial_resolution": 231.65635826395828, 90 | "statistics": { 91 | "minimum": 1, 92 | "maximum": 255 93 | } 94 | } 95 | ], 96 | "roles": [ 97 | "data" 98 | ] 99 | }, 100 | "MYD09GQ_A2023009_h29v12_061_2023011071140_IOBS_RES_tif": { 101 | "href": "./MYD09GQ.A2023009.h29v12.061.2023011071140.IOBS_RES.tif", 102 | "type": "image/tiff", 103 | "pl:asset_type": "analytic_iobs_res", 104 | "pl:bundle_type": "analytic_sr", 105 | "raster:bands": [ 106 | { 107 | "nodata": 255, 108 | "data_type": "uint8", 109 | "spatial_resolution": 231.65635826395828, 110 | "statistics": { 111 | "minimum": 0, 112 | "maximum": 8 113 | } 114 | } 115 | ], 116 | "roles": [ 117 | "data" 118 | ] 119 | }, 120 | "MYD09GQ_A2023009_h29v12_061_2023011071140_NUM_OBSERVATIONS_tif": { 121 | "href": "./MYD09GQ.A2023009.h29v12.061.2023011071140.NUM_OBSERVATIONS.tif", 122 | "type": "image/tiff", 123 | "pl:asset_type": "analytic_num_observations", 124 | "pl:bundle_type": "analytic_sr", 125 | "raster:bands": [ 126 | { 127 | "nodata": -1, 128 | "data_type": "int8", 129 | "spatial_resolution": 231.65635826395828, 130 | "statistics": { 131 | "minimum": 0, 132 | "maximum": 2 133 | } 134 | } 135 | ], 136 | "roles": [ 137 | "data" 138 | ] 139 | }, 140 | "MYD09GQ_A2023009_h29v12_061_2023011071140_OBSCOV_tif": { 141 | "href": "./MYD09GQ.A2023009.h29v12.061.2023011071140.OBSCOV.tif", 142 | "type": "image/tiff", 143 | "pl:asset_type": "analytic_obscov", 144 | "pl:bundle_type": "analytic_sr", 145 | "raster:bands": [ 146 | { 147 | "nodata": -1, 148 | "data_type": "int8", 149 | "spatial_resolution": 231.65635826395828, 150 | "statistics": { 151 | "minimum": 0, 152 | "maximum": 56 153 | } 154 | } 155 | ], 156 | "roles": [ 157 | "data" 158 | ] 159 | }, 160 | "MYD09GQ_A2023009_h29v12_061_2023011071140_ORBIT_PNT_tif": { 161 | "href": "./MYD09GQ.A2023009.h29v12.061.2023011071140.ORBIT_PNT.tif", 162 | "type": "image/tiff", 163 | "pl:asset_type": "analytic_orbit_pnt", 164 | "pl:bundle_type": "analytic_sr", 165 | "raster:bands": [ 166 | { 167 | "nodata": 0, 168 | "data_type": "uint8", 169 | "spatial_resolution": 231.65635826395828, 170 | "statistics": { 171 | "minimum": 1, 172 | "maximum": 255 173 | } 174 | } 175 | ], 176 | "roles": [ 177 | "data" 178 | ] 179 | }, 180 | "MYD09GQ_A2023009_h29v12_061_2023011071140_QC_250M_tif": { 181 | "href": "./MYD09GQ.A2023009.h29v12.061.2023011071140.QC_250M.tif", 182 | "type": "image/tiff", 183 | "pl:asset_type": "analytic_qc_250m", 184 | "pl:bundle_type": "analytic_sr", 185 | "raster:bands": [ 186 | { 187 | "nodata": 2995, 188 | "data_type": "uint16", 189 | "spatial_resolution": 231.65635826395828, 190 | "statistics": { 191 | "minimum": 4096, 192 | "maximum": 7683 193 | } 194 | } 195 | ], 196 | "roles": [ 197 | "data" 198 | ] 199 | }, 200 | "MYD09GQ_A2023009_h29v12_061_2023011071140_SUR_REFL_B01_tif": { 201 | "href": "./MYD09GQ.A2023009.h29v12.061.2023011071140.SUR_REFL_B01.tif", 202 | "type": "image/tiff", 203 | "pl:asset_type": "analytic_sur_refl_b01", 204 | "pl:bundle_type": "analytic_sr", 205 | "raster:bands": [ 206 | { 207 | "nodata": -28672, 208 | "data_type": "int16", 209 | "spatial_resolution": 231.65635826395828, 210 | "statistics": { 211 | "minimum": -100, 212 | "maximum": 13499 213 | } 214 | } 215 | ], 216 | "eo:bands": [ 217 | { 218 | "name": "Red", 219 | "common_name": "red", 220 | "center_wavelength": 0.645, 221 | "full_width_half_max": 50 222 | } 223 | ], 224 | "roles": [ 225 | "data", 226 | "reflectance" 227 | ] 228 | }, 229 | "MYD09GQ_A2023009_h29v12_061_2023011071140_SUR_REFL_B02_tif": { 230 | "href": "./MYD09GQ.A2023009.h29v12.061.2023011071140.SUR_REFL_B02.tif", 231 | "type": "image/tiff", 232 | "pl:asset_type": "analytic_sur_refl_b02", 233 | "pl:bundle_type": "analytic_sr", 234 | "raster:bands": [ 235 | { 236 | "nodata": -28672, 237 | "data_type": "int16", 238 | "spatial_resolution": 231.65635826395828, 239 | "statistics": { 240 | "minimum": -100, 241 | "maximum": 8749 242 | } 243 | } 244 | ], 245 | "eo:bands": [ 246 | { 247 | "name": "Near-Infrared 1", 248 | "common_name": "nir", 249 | "center_wavelength": 0.859, 250 | "full_width_half_max": 35 251 | } 252 | ], 253 | "roles": [ 254 | "data", 255 | "reflectance" 256 | ] 257 | } 258 | }, 259 | "bbox": [ 260 | 126.94995144715973, 261 | -40.16456836550465, 262 | 156.63388116255626, 263 | -30.141972433756095 264 | ], 265 | "stac_extensions": [ 266 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 267 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 268 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 269 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json", 270 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 271 | "https://stac-extensions.github.io/sat/v1.0.0/schema.json", 272 | "https://stac-extensions.github.io/version/v1.2.0/schema.json" 273 | ], 274 | "collection": "f113299d-7128-4c37-b7a3-c6556d8f2e5c: MYD09GQ" 275 | } -------------------------------------------------------------------------------- /examples/items/Sentinel1.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "S1A_IW_GRDH_1SDV_20230108T015013_20230108T015042_046686_05988B_7011", 5 | "properties": { 6 | "updated": "2023-01-15T08:24:34Z", 7 | "created": "2023-01-15T08:24:34Z", 8 | "gsd": 10, 9 | "constellation": "esa", 10 | "platform": "Sentinel-1-A", 11 | "instruments": [ 12 | "SAR-C SAR" 13 | ], 14 | "sat:absolute_orbit": 46686, 15 | "pl:black_fill": 0, 16 | "pl:incidence_far": 46.1482, 17 | "pl:incidence_near": 30.7401, 18 | "pl:item_type": "Sentinel1", 19 | "sat:orbit_state": "ascending", 20 | "pl:pixel_resolution": 10, 21 | "pl:quality_category": "standard", 22 | "sat:relative_orbit": 64, 23 | "published": "2023-01-15T08:24:34Z", 24 | "proj:epsg": null, 25 | "sar:frequency_band": "C", 26 | "sar:instrument_mode": "IW", 27 | "sar:observation_direction": "right", 28 | "sar:polarizations": [ 29 | "VV", 30 | "VH" 31 | ], 32 | "sar:product_type": "GRD", 33 | "datetime": "2023-01-08T01:50:27.080000Z" 34 | }, 35 | "geometry": { 36 | "coordinates": [ 37 | [ 38 | [ 39 | [ 40 | -118.393974, 41 | 32.019535 42 | ], 43 | [ 44 | -115.714203, 45 | 32.427193 46 | ], 47 | [ 48 | -116.061676, 49 | 34.172523 50 | ], 51 | [ 52 | -118.795494, 53 | 33.767479 54 | ], 55 | [ 56 | -118.393974, 57 | 32.019535 58 | ] 59 | ] 60 | ] 61 | ], 62 | "type": "MultiPolygon" 63 | }, 64 | "links": [ 65 | { 66 | "rel": "root", 67 | "href": "../catalog.json", 68 | "type": "application/json" 69 | }, 70 | { 71 | "rel": "collection", 72 | "href": "./Sentinel1_collection.json", 73 | "type": "application/json" 74 | }, 75 | { 76 | "rel": "parent", 77 | "href": "./Sentinel1_collection.json", 78 | "type": "application/json" 79 | } 80 | ], 81 | "assets": { 82 | "S1A_IW_GRDH_1SDV_20230108T015013_20230108T015042_046686_05988B_7011_metadata_json": { 83 | "href": "./S1A_IW_GRDH_1SDV_20230108T015013_20230108T015042_046686_05988B_7011_metadata.json", 84 | "type": "application/json", 85 | "roles": [ 86 | "metadata" 87 | ] 88 | }, 89 | "S1A_IW_GRDH_1SDV_20230108T015013_20230108T015042_046686_05988B_7011_ortho_analytic_vh_tif": { 90 | "href": "./S1A_IW_GRDH_1SDV_20230108T015013_20230108T015042_046686_05988B_7011_ortho_analytic_vh.tif", 91 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 92 | "pl:asset_type": "ortho_analytic_vh", 93 | "pl:bundle_type": "analytic", 94 | "raster:bands": [ 95 | { 96 | "nodata": 0, 97 | "data_type": "uint16", 98 | "spatial_resolution": 10, 99 | "statistics": { 100 | "minimum": 2, 101 | "maximum": 65535 102 | } 103 | } 104 | ], 105 | "eo:bands": [ 106 | { 107 | "name": "VH Polarisation" 108 | } 109 | ], 110 | "proj:epsg": 32611, 111 | "proj:bbox": [ 112 | 333720, 113 | 3543450, 114 | 620890, 115 | 3781690 116 | ], 117 | "proj:shape": [ 118 | 23824, 119 | 28717 120 | ], 121 | "proj:transform": [ 122 | 10, 123 | 0, 124 | 333720, 125 | 0, 126 | -10, 127 | 3781690, 128 | 0, 129 | 0, 130 | 1 131 | ], 132 | "roles": [ 133 | "data" 134 | ] 135 | }, 136 | "S1A_IW_GRDH_1SDV_20230108T015013_20230108T015042_046686_05988B_7011_ortho_analytic_vv_tif": { 137 | "href": "./S1A_IW_GRDH_1SDV_20230108T015013_20230108T015042_046686_05988B_7011_ortho_analytic_vv.tif", 138 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 139 | "pl:asset_type": "ortho_analytic_vv", 140 | "pl:bundle_type": "analytic", 141 | "raster:bands": [ 142 | { 143 | "nodata": 0, 144 | "data_type": "uint16", 145 | "spatial_resolution": 10, 146 | "statistics": { 147 | "minimum": 3350, 148 | "maximum": 65535 149 | } 150 | } 151 | ], 152 | "eo:bands": [ 153 | { 154 | "name": "VV Polarisation" 155 | } 156 | ], 157 | "proj:epsg": 32611, 158 | "proj:bbox": [ 159 | 333720, 160 | 3543450, 161 | 620890, 162 | 3781690 163 | ], 164 | "proj:shape": [ 165 | 23824, 166 | 28717 167 | ], 168 | "proj:transform": [ 169 | 10, 170 | 0, 171 | 333720, 172 | 0, 173 | -10, 174 | 3781690, 175 | 0, 176 | 0, 177 | 1 178 | ], 179 | "roles": [ 180 | "data" 181 | ] 182 | } 183 | }, 184 | "bbox": [ 185 | -118.795494, 186 | 32.019535, 187 | -115.714203, 188 | 34.172523 189 | ], 190 | "stac_extensions": [ 191 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json", 192 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 193 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 194 | "https://stac-extensions.github.io/sar/v1.0.0/schema.json", 195 | "https://stac-extensions.github.io/sat/v1.0.0/schema.json" 196 | ], 197 | "collection": "2a42f7b8-7c70-445a-a20e-cb19628b8110: Sentinel1" 198 | } -------------------------------------------------------------------------------- /examples/items/Sentinel2L1C.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "S2A_MSIL1C_20180102T222751_N0206_R072_T01LAL_20180102T233109", 5 | "properties": { 6 | "updated": "2019-02-22T12:06:26Z", 7 | "created": "2019-02-22T12:06:26Z", 8 | "gsd": 10, 9 | "constellation": "esa", 10 | "platform": "Sentinel-2A", 11 | "instruments": [ 12 | "MSI" 13 | ], 14 | "eo:cloud_cover": 0, 15 | "view:off_nadir": 7.3, 16 | "view:sun_azimuth": 124.39, 17 | "view:sun_elevation": 62.85, 18 | "sat:absolute_orbit": 13225, 19 | "pl:black_fill": 0.89, 20 | "pl:item_type": "Sentinel2L1C", 21 | "grid:code": "MGRS-01LAL", 22 | "pl:pixel_resolution": 10, 23 | "pl:quality_category": "standard", 24 | "sat:relative_orbit": 72, 25 | "externalIds": [ 26 | "S2A_MSIL1C_20180102T222751_N0206_R072_T01LAL_20180102T233109", 27 | "L1C_T01LAL_A013225_20180102T222753", 28 | "GS2A_20180102T222751_013225_N02.06" 29 | ], 30 | "published": "2019-02-22T12:06:26Z", 31 | "proj:epsg": null, 32 | "datetime": "2018-01-02T22:27:53.459000Z" 33 | }, 34 | "geometry": { 35 | "coordinates": [ 36 | [ 37 | [ 38 | [ 39 | -179.63530123916556, 40 | -8.368483898145028 41 | ], 42 | [ 43 | -179.69320186181105, 44 | -8.352804922089712 45 | ], 46 | [ 47 | -179.69333462997616, 48 | -8.353406282715763 49 | ], 50 | [ 51 | -179.92508181823732, 52 | -8.294199731355903 53 | ], 54 | [ 55 | -179.92487737244602, 56 | -8.293276445981428 57 | ], 58 | [ 59 | -180, 60 | -8.27430580162188 61 | ], 62 | [ 63 | -180, 64 | -8.1306715070165 65 | ], 66 | [ 67 | -179.6337435289789, 68 | -8.133492626022388 69 | ], 70 | [ 71 | -179.63530123916556, 72 | -8.368483898145028 73 | ] 74 | ] 75 | ], 76 | [ 77 | [ 78 | [ 79 | 180, 80 | -8.27430580162188 81 | ], 82 | [ 83 | 179.87377848596122, 84 | -8.24243120496147 85 | ], 86 | [ 87 | 179.8736068712393, 88 | -8.243204087664292 89 | ], 90 | [ 91 | 179.6475149705035, 92 | -8.188909875858313 93 | ], 94 | [ 95 | 179.64777992004952, 96 | -8.18772003150757 97 | ], 98 | [ 99 | 179.4495813065681, 100 | -8.14120909201564 101 | ], 102 | [ 103 | 179.44935531778023, 104 | -8.142221387068076 105 | ], 106 | [ 107 | 179.3766557955715, 108 | -8.125870149712362 109 | ], 110 | [ 111 | 180, 112 | -8.1306715070165 113 | ], 114 | [ 115 | 180, 116 | -8.27430580162188 117 | ] 118 | ] 119 | ] 120 | ], 121 | "type": "MultiPolygon" 122 | }, 123 | "links": [ 124 | { 125 | "rel": "root", 126 | "href": "../catalog.json", 127 | "type": "application/json" 128 | }, 129 | { 130 | "rel": "collection", 131 | "href": "./Sentinel2L1C_collection.json", 132 | "type": "application/json" 133 | }, 134 | { 135 | "rel": "parent", 136 | "href": "./Sentinel2L1C_collection.json", 137 | "type": "application/json" 138 | } 139 | ], 140 | "assets": { 141 | "S2A_MSIL1C_20180102T222751_N0206_R072_T01LAL_20180102T233109_metadata_json": { 142 | "href": "./S2A_MSIL1C_20180102T222751_N0206_R072_T01LAL_20180102T233109_metadata.json", 143 | "type": "application/json", 144 | "roles": [ 145 | "metadata" 146 | ] 147 | }, 148 | "T01LAL_20180102T222751_B01_jp2": { 149 | "href": "./T01LAL_20180102T222751_B01.jp2", 150 | "type": "image/jp2", 151 | "pl:asset_type": "analytic_b1", 152 | "pl:bundle_type": "analytic", 153 | "raster:bands": [ 154 | { 155 | "data_type": "uint16", 156 | "spatial_resolution": 60, 157 | "statistics": { 158 | "minimum": 0, 159 | "maximum": 3386 160 | } 161 | } 162 | ], 163 | "eo:bands": [ 164 | { 165 | "name": "Ultra Blue", 166 | "common_name": "coastal", 167 | "center_wavelength": 0.443, 168 | "full_width_half_max": 0.02 169 | } 170 | ], 171 | "proj:epsg": 32701, 172 | "proj:bbox": [ 173 | 99960, 174 | 8990200, 175 | 209760, 176 | 9100000 177 | ], 178 | "proj:shape": [ 179 | 1830, 180 | 1830 181 | ], 182 | "proj:transform": [ 183 | 60, 184 | 0, 185 | 99960, 186 | 0, 187 | -60, 188 | 9100000, 189 | 0, 190 | 0, 191 | 1 192 | ], 193 | "roles": [ 194 | "data" 195 | ] 196 | }, 197 | "T01LAL_20180102T222751_B02_jp2": { 198 | "href": "./T01LAL_20180102T222751_B02.jp2", 199 | "type": "image/jp2", 200 | "pl:asset_type": "analytic_b2", 201 | "pl:bundle_type": "analytic", 202 | "raster:bands": [ 203 | { 204 | "data_type": "uint16", 205 | "spatial_resolution": 10, 206 | "statistics": { 207 | "minimum": 0, 208 | "maximum": 3387 209 | } 210 | } 211 | ], 212 | "eo:bands": [ 213 | { 214 | "name": "Blue", 215 | "common_name": "blue", 216 | "center_wavelength": 0.492, 217 | "full_width_half_max": 0.065 218 | } 219 | ], 220 | "proj:epsg": 32701, 221 | "proj:bbox": [ 222 | 99960, 223 | 8990200, 224 | 209760, 225 | 9100000 226 | ], 227 | "proj:shape": [ 228 | 10980, 229 | 10980 230 | ], 231 | "proj:transform": [ 232 | 10, 233 | 0, 234 | 99960, 235 | 0, 236 | -10, 237 | 9100000, 238 | 0, 239 | 0, 240 | 1 241 | ], 242 | "roles": [ 243 | "data" 244 | ] 245 | }, 246 | "T01LAL_20180102T222751_B03_jp2": { 247 | "href": "./T01LAL_20180102T222751_B03.jp2", 248 | "type": "image/jp2", 249 | "pl:asset_type": "analytic_b3", 250 | "pl:bundle_type": "analytic", 251 | "raster:bands": [ 252 | { 253 | "data_type": "uint16", 254 | "spatial_resolution": 10, 255 | "statistics": { 256 | "minimum": 0, 257 | "maximum": 3062 258 | } 259 | } 260 | ], 261 | "eo:bands": [ 262 | { 263 | "name": "Green", 264 | "common_name": "green", 265 | "center_wavelength": 0.559, 266 | "full_width_half_max": 0.035 267 | } 268 | ], 269 | "proj:epsg": 32701, 270 | "proj:bbox": [ 271 | 99960, 272 | 8990200, 273 | 209760, 274 | 9100000 275 | ], 276 | "proj:shape": [ 277 | 10980, 278 | 10980 279 | ], 280 | "proj:transform": [ 281 | 10, 282 | 0, 283 | 99960, 284 | 0, 285 | -10, 286 | 9100000, 287 | 0, 288 | 0, 289 | 1 290 | ], 291 | "roles": [ 292 | "data" 293 | ] 294 | }, 295 | "T01LAL_20180102T222751_B04_jp2": { 296 | "href": "./T01LAL_20180102T222751_B04.jp2", 297 | "type": "image/jp2", 298 | "pl:asset_type": "analytic_b4", 299 | "pl:bundle_type": "analytic", 300 | "raster:bands": [ 301 | { 302 | "data_type": "uint16", 303 | "spatial_resolution": 10, 304 | "statistics": { 305 | "minimum": 0, 306 | "maximum": 3106 307 | } 308 | } 309 | ], 310 | "eo:bands": [ 311 | { 312 | "name": "Red", 313 | "common_name": "red", 314 | "center_wavelength": 0.655, 315 | "full_width_half_max": 0.031 316 | } 317 | ], 318 | "proj:epsg": 32701, 319 | "proj:bbox": [ 320 | 99960, 321 | 8990200, 322 | 209760, 323 | 9100000 324 | ], 325 | "proj:shape": [ 326 | 10980, 327 | 10980 328 | ], 329 | "proj:transform": [ 330 | 10, 331 | 0, 332 | 99960, 333 | 0, 334 | -10, 335 | 9100000, 336 | 0, 337 | 0, 338 | 1 339 | ], 340 | "roles": [ 341 | "data" 342 | ] 343 | }, 344 | "T01LAL_20180102T222751_B05_jp2": { 345 | "href": "./T01LAL_20180102T222751_B05.jp2", 346 | "type": "image/jp2", 347 | "pl:asset_type": "analytic_b5", 348 | "pl:bundle_type": "analytic", 349 | "raster:bands": [ 350 | { 351 | "data_type": "uint16", 352 | "spatial_resolution": 20, 353 | "statistics": { 354 | "minimum": 0, 355 | "maximum": 2899 356 | } 357 | } 358 | ], 359 | "eo:bands": [ 360 | { 361 | "name": "Red Edge 1", 362 | "common_name": "rededge", 363 | "center_wavelength": 0.704, 364 | "full_width_half_max": 0.015 365 | } 366 | ], 367 | "proj:epsg": 32701, 368 | "proj:bbox": [ 369 | 99960, 370 | 8990200, 371 | 209760, 372 | 9100000 373 | ], 374 | "proj:shape": [ 375 | 5490, 376 | 5490 377 | ], 378 | "proj:transform": [ 379 | 20, 380 | 0, 381 | 99960, 382 | 0, 383 | -20, 384 | 9100000, 385 | 0, 386 | 0, 387 | 1 388 | ], 389 | "roles": [ 390 | "data" 391 | ] 392 | }, 393 | "T01LAL_20180102T222751_B06_jp2": { 394 | "href": "./T01LAL_20180102T222751_B06.jp2", 395 | "type": "image/jp2", 396 | "pl:asset_type": "analytic_b6", 397 | "pl:bundle_type": "analytic", 398 | "raster:bands": [ 399 | { 400 | "data_type": "uint16", 401 | "spatial_resolution": 20, 402 | "statistics": { 403 | "minimum": 0, 404 | "maximum": 3001 405 | } 406 | } 407 | ], 408 | "eo:bands": [ 409 | { 410 | "name": "Red Edge 2", 411 | "common_name": "rededge", 412 | "center_wavelength": 0.74, 413 | "full_width_half_max": 0.013 414 | } 415 | ], 416 | "proj:epsg": 32701, 417 | "proj:bbox": [ 418 | 99960, 419 | 8990200, 420 | 209760, 421 | 9100000 422 | ], 423 | "proj:shape": [ 424 | 5490, 425 | 5490 426 | ], 427 | "proj:transform": [ 428 | 20, 429 | 0, 430 | 99960, 431 | 0, 432 | -20, 433 | 9100000, 434 | 0, 435 | 0, 436 | 1 437 | ], 438 | "roles": [ 439 | "data" 440 | ] 441 | }, 442 | "T01LAL_20180102T222751_B07_jp2": { 443 | "href": "./T01LAL_20180102T222751_B07.jp2", 444 | "type": "image/jp2", 445 | "pl:asset_type": "analytic_b7", 446 | "pl:bundle_type": "analytic", 447 | "raster:bands": [ 448 | { 449 | "data_type": "uint16", 450 | "spatial_resolution": 20, 451 | "statistics": { 452 | "minimum": 0, 453 | "maximum": 3132 454 | } 455 | } 456 | ], 457 | "eo:bands": [ 458 | { 459 | "name": "Red Edge 3", 460 | "common_name": "rededge", 461 | "center_wavelength": 0.783, 462 | "full_width_half_max": 0.019 463 | } 464 | ], 465 | "proj:epsg": 32701, 466 | "proj:bbox": [ 467 | 99960, 468 | 8990200, 469 | 209760, 470 | 9100000 471 | ], 472 | "proj:shape": [ 473 | 5490, 474 | 5490 475 | ], 476 | "proj:transform": [ 477 | 20, 478 | 0, 479 | 99960, 480 | 0, 481 | -20, 482 | 9100000, 483 | 0, 484 | 0, 485 | 1 486 | ], 487 | "roles": [ 488 | "data" 489 | ] 490 | }, 491 | "T01LAL_20180102T222751_B08_jp2": { 492 | "href": "./T01LAL_20180102T222751_B08.jp2", 493 | "type": "image/jp2", 494 | "pl:asset_type": "analytic_b8", 495 | "pl:bundle_type": "analytic", 496 | "raster:bands": [ 497 | { 498 | "data_type": "uint16", 499 | "spatial_resolution": 10, 500 | "statistics": { 501 | "minimum": 0, 502 | "maximum": 2908 503 | } 504 | } 505 | ], 506 | "eo:bands": [ 507 | { 508 | "name": "Near-Infrared (10m)", 509 | "common_name": "nir", 510 | "center_wavelength": 0.833, 511 | "full_width_half_max": 0.104 512 | } 513 | ], 514 | "proj:epsg": 32701, 515 | "proj:bbox": [ 516 | 99960, 517 | 8990200, 518 | 209760, 519 | 9100000 520 | ], 521 | "proj:shape": [ 522 | 10980, 523 | 10980 524 | ], 525 | "proj:transform": [ 526 | 10, 527 | 0, 528 | 99960, 529 | 0, 530 | -10, 531 | 9100000, 532 | 0, 533 | 0, 534 | 1 535 | ], 536 | "roles": [ 537 | "data" 538 | ] 539 | }, 540 | "T01LAL_20180102T222751_B09_jp2": { 541 | "href": "./T01LAL_20180102T222751_B09.jp2", 542 | "type": "image/jp2", 543 | "pl:asset_type": "analytic_b9", 544 | "pl:bundle_type": "analytic", 545 | "raster:bands": [ 546 | { 547 | "data_type": "uint16", 548 | "spatial_resolution": 60, 549 | "statistics": { 550 | "minimum": 0, 551 | "maximum": 647 552 | } 553 | } 554 | ], 555 | "eo:bands": [ 556 | { 557 | "name": "Near-Infrared (60m)", 558 | "common_name": "nir09", 559 | "center_wavelength": 0.944, 560 | "full_width_half_max": 0.02 561 | } 562 | ], 563 | "proj:epsg": 32701, 564 | "proj:bbox": [ 565 | 99960, 566 | 8990200, 567 | 209760, 568 | 9100000 569 | ], 570 | "proj:shape": [ 571 | 1830, 572 | 1830 573 | ], 574 | "proj:transform": [ 575 | 60, 576 | 0, 577 | 99960, 578 | 0, 579 | -60, 580 | 9100000, 581 | 0, 582 | 0, 583 | 1 584 | ], 585 | "roles": [ 586 | "data" 587 | ] 588 | }, 589 | "T01LAL_20180102T222751_B10_jp2": { 590 | "href": "./T01LAL_20180102T222751_B10.jp2", 591 | "type": "image/jp2", 592 | "pl:asset_type": "analytic_b10", 593 | "pl:bundle_type": "analytic", 594 | "raster:bands": [ 595 | { 596 | "data_type": "uint16", 597 | "spatial_resolution": 60, 598 | "statistics": { 599 | "minimum": 0, 600 | "maximum": 77 601 | } 602 | } 603 | ], 604 | "eo:bands": [ 605 | { 606 | "name": "Cirrus", 607 | "common_name": "cirrus", 608 | "center_wavelength": 1.375, 609 | "full_width_half_max": 0.029 610 | } 611 | ], 612 | "proj:epsg": 32701, 613 | "proj:bbox": [ 614 | 99960, 615 | 8990200, 616 | 209760, 617 | 9100000 618 | ], 619 | "proj:shape": [ 620 | 1830, 621 | 1830 622 | ], 623 | "proj:transform": [ 624 | 60, 625 | 0, 626 | 99960, 627 | 0, 628 | -60, 629 | 9100000, 630 | 0, 631 | 0, 632 | 1 633 | ], 634 | "roles": [ 635 | "data" 636 | ] 637 | }, 638 | "T01LAL_20180102T222751_B11_jp2": { 639 | "href": "./T01LAL_20180102T222751_B11.jp2", 640 | "type": "image/jp2", 641 | "pl:asset_type": "analytic_b11", 642 | "pl:bundle_type": "analytic", 643 | "raster:bands": [ 644 | { 645 | "data_type": "uint16", 646 | "spatial_resolution": 20, 647 | "statistics": { 648 | "minimum": 0, 649 | "maximum": 3097 650 | } 651 | } 652 | ], 653 | "eo:bands": [ 654 | { 655 | "name": "Shortwave Infrared 1", 656 | "common_name": "swir16", 657 | "center_wavelength": 1.61, 658 | "full_width_half_max": 0.094 659 | } 660 | ], 661 | "proj:epsg": 32701, 662 | "proj:bbox": [ 663 | 99960, 664 | 8990200, 665 | 209760, 666 | 9100000 667 | ], 668 | "proj:shape": [ 669 | 5490, 670 | 5490 671 | ], 672 | "proj:transform": [ 673 | 20, 674 | 0, 675 | 99960, 676 | 0, 677 | -20, 678 | 9100000, 679 | 0, 680 | 0, 681 | 1 682 | ], 683 | "roles": [ 684 | "data" 685 | ] 686 | }, 687 | "T01LAL_20180102T222751_B12_jp2": { 688 | "href": "./T01LAL_20180102T222751_B12.jp2", 689 | "type": "image/jp2", 690 | "pl:asset_type": "analytic_b12", 691 | "pl:bundle_type": "analytic", 692 | "raster:bands": [ 693 | { 694 | "data_type": "uint16", 695 | "spatial_resolution": 20, 696 | "statistics": { 697 | "minimum": 0, 698 | "maximum": 2852 699 | } 700 | } 701 | ], 702 | "eo:bands": [ 703 | { 704 | "name": "Shortwave Infrared 2", 705 | "common_name": "swir22", 706 | "center_wavelength": 2.19, 707 | "full_width_half_max": 0.184 708 | } 709 | ], 710 | "proj:epsg": 32701, 711 | "proj:bbox": [ 712 | 99960, 713 | 8990200, 714 | 209760, 715 | 9100000 716 | ], 717 | "proj:shape": [ 718 | 5490, 719 | 5490 720 | ], 721 | "proj:transform": [ 722 | 20, 723 | 0, 724 | 99960, 725 | 0, 726 | -20, 727 | 9100000, 728 | 0, 729 | 0, 730 | 1 731 | ], 732 | "roles": [ 733 | "data" 734 | ] 735 | }, 736 | "T01LAL_20180102T222751_B8A_jp2": { 737 | "href": "./T01LAL_20180102T222751_B8A.jp2", 738 | "type": "image/jp2", 739 | "pl:asset_type": "analytic_b8a", 740 | "pl:bundle_type": "analytic", 741 | "raster:bands": [ 742 | { 743 | "data_type": "uint16", 744 | "spatial_resolution": 20, 745 | "statistics": { 746 | "minimum": 0, 747 | "maximum": 3241 748 | } 749 | } 750 | ], 751 | "eo:bands": [ 752 | { 753 | "name": "Near-Infrared (20m)", 754 | "common_name": "nir08", 755 | "center_wavelength": 0.865, 756 | "full_width_half_max": 0.021 757 | } 758 | ], 759 | "proj:epsg": 32701, 760 | "proj:bbox": [ 761 | 99960, 762 | 8990200, 763 | 209760, 764 | 9100000 765 | ], 766 | "proj:shape": [ 767 | 5490, 768 | 5490 769 | ], 770 | "proj:transform": [ 771 | 20, 772 | 0, 773 | 99960, 774 | 0, 775 | -20, 776 | 9100000, 777 | 0, 778 | 0, 779 | 1 780 | ], 781 | "roles": [ 782 | "data" 783 | ] 784 | } 785 | }, 786 | "bbox": [ 787 | -180, 788 | -8.368483898145028, 789 | 180, 790 | -8.125870149712362 791 | ], 792 | "stac_extensions": [ 793 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 794 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 795 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 796 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json", 797 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 798 | "https://stac-extensions.github.io/sat/v1.0.0/schema.json", 799 | "https://stac-extensions.github.io/grid/v1.1.0/schema.json" 800 | ], 801 | "collection": "90190d3b-d9b2-4107-bb7d-3c6078bfaaf8: Sentinel2L1C" 802 | } -------------------------------------------------------------------------------- /examples/items/psorthotile.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "6188707_5254519_2023-01-04_227c", 5 | "properties": { 6 | "updated": "2023-01-05T04:53:37Z", 7 | "created": "2023-01-04T09:10:44Z", 8 | "gsd": 4, 9 | "constellation": "planetscope", 10 | "platform": "227c", 11 | "instruments": [ 12 | "PSB.SD" 13 | ], 14 | "eo:cloud_cover": 4, 15 | "view:off_nadir": 5, 16 | "view:azimuth": 100.2, 17 | "view:sun_azimuth": 154.7, 18 | "view:sun_elevation": 29.5, 19 | "proj:epsg": 32652, 20 | "pl:black_fill": 0.04, 21 | "pl:clear_percent": 96, 22 | "pl:grid_cell": "5254519", 23 | "pl:ground_control": true, 24 | "pl:item_type": "PSOrthoTile", 25 | "pl:pixel_resolution": 3.125, 26 | "pl:publishing_stage": "standard", 27 | "pl:quality_category": "standard", 28 | "pl:strip_id": "6188707", 29 | "published": "2023-01-04T09:10:44Z", 30 | "datetime": "2023-01-04T01:46:56.665051Z" 31 | }, 32 | "geometry": { 33 | "coordinates": [ 34 | [ 35 | [ 36 | 130.18019161665885, 37 | 33.6200114123297 38 | ], 39 | [ 40 | 130.29901001213372, 41 | 33.59921780734454 42 | ], 43 | [ 44 | 130.29901001213372, 45 | 33.392031782604406 46 | ], 47 | [ 48 | 130.02688381435658, 49 | 33.392031782604406 50 | ], 51 | [ 52 | 130.02688381435658, 53 | 33.6200114123297 54 | ], 55 | [ 56 | 130.18019161665885, 57 | 33.6200114123297 58 | ] 59 | ] 60 | ], 61 | "type": "Polygon" 62 | }, 63 | "links": [ 64 | { 65 | "rel": "root", 66 | "href": "../catalog.json", 67 | "type": "application/json" 68 | }, 69 | { 70 | "rel": "parent", 71 | "href": "../catalog.json", 72 | "type": "application/json" 73 | } 74 | ], 75 | "assets": { 76 | "6188707_5254519_2023-01-04_227c_metadata_json": { 77 | "href": "./6188707_5254519_2023-01-04_227c_metadata.json", 78 | "type": "application/json", 79 | "roles": [ 80 | "metadata" 81 | ] 82 | }, 83 | "6188707_5254519_2023-01-04_227c_RGB_Visual_tif": { 84 | "href": "./6188707_5254519_2023-01-04_227c_RGB_Visual.tif", 85 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 86 | "pl:asset_type": "visual", 87 | "pl:bundle_type": "visual", 88 | "proj:shape": [ 89 | 8000, 90 | 8000 91 | ], 92 | "proj:transform": [ 93 | 3.125, 94 | 0, 95 | 595500, 96 | 0, 97 | -3.125, 98 | 3720500, 99 | 0, 100 | 0, 101 | 1 102 | ], 103 | "raster:bands": [ 104 | { 105 | "data_type": "uint8", 106 | "spatial_resolution": 3.125, 107 | "statistics": { 108 | "minimum": 1, 109 | "maximum": 255 110 | } 111 | }, 112 | { 113 | "data_type": "uint8", 114 | "spatial_resolution": 3.125, 115 | "statistics": { 116 | "minimum": 1, 117 | "maximum": 255 118 | } 119 | }, 120 | { 121 | "data_type": "uint8", 122 | "spatial_resolution": 3.125, 123 | "statistics": { 124 | "minimum": 1, 125 | "maximum": 255 126 | } 127 | }, 128 | { 129 | "data_type": "uint8", 130 | "spatial_resolution": 3.125, 131 | "statistics": { 132 | "minimum": 0, 133 | "maximum": 255 134 | } 135 | } 136 | ], 137 | "eo:bands": [ 138 | { 139 | "name": "Red", 140 | "common_name": "red", 141 | "center_wavelength": 665, 142 | "full_width_half_max": 31 143 | }, 144 | { 145 | "name": "Green II", 146 | "common_name": "green", 147 | "center_wavelength": 565, 148 | "full_width_half_max": 46 149 | }, 150 | { 151 | "name": "Blue", 152 | "common_name": "blue", 153 | "center_wavelength": 490, 154 | "full_width_half_max": 50 155 | } 156 | ], 157 | "roles": [ 158 | "data", 159 | "visual" 160 | ] 161 | }, 162 | "6188707_5254519_2023-01-04_227c_RGB_Visual_metadata_xml": { 163 | "href": "./6188707_5254519_2023-01-04_227c_RGB_Visual_metadata.xml", 164 | "type": "text/xml", 165 | "pl:asset_type": "visual_xml", 166 | "pl:bundle_type": "visual", 167 | "roles": [ 168 | "metadata", 169 | "visual" 170 | ] 171 | } 172 | }, 173 | "bbox": [ 174 | 130.02688381435658, 175 | 33.392031782604406, 176 | 130.29901001213372, 177 | 33.6200114123297 178 | ], 179 | "stac_extensions": [ 180 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 181 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 182 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 183 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 184 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json" 185 | ] 186 | } -------------------------------------------------------------------------------- /examples/items/psscene.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "20210129_075502_95_2223", 5 | "properties": { 6 | "updated": "2021-01-30T05:14:36Z", 7 | "created": "2021-01-30T02:00:58Z", 8 | "gsd": 3.8, 9 | "constellation": "planetscope", 10 | "platform": "2223", 11 | "instruments": [ 12 | "PSB.SD" 13 | ], 14 | "eo:cloud_cover": 30, 15 | "eo:snow_cover": 0, 16 | "view:off_nadir": 2, 17 | "view:azimuth": 94.3, 18 | "view:sun_azimuth": 94.4, 19 | "view:sun_elevation": 50.7, 20 | "proj:epsg": 32734, 21 | "proj:bbox": [ 22 | 686532, 23 | 7829016, 24 | 686679, 25 | 7829301 26 | ], 27 | "proj:shape": [ 28 | 95, 29 | 49 30 | ], 31 | "proj:transform": [ 32 | 3, 33 | 0, 34 | 686532, 35 | 0, 36 | -3, 37 | 7829301, 38 | 0, 39 | 0, 40 | 1 41 | ], 42 | "pl:item_type": "PSScene", 43 | "pl:strip_id": "4111711", 44 | "pl:clear_percent": 12.34, 45 | "pl:ground_control": true, 46 | "pl:publishing_stage": "finalized", 47 | "pl:quality_category": "test", 48 | "pl:pixel_resolution": 3, 49 | "published": "2021-01-30T02:00:58Z", 50 | "datetime": "2021-01-29T07:55:02.953725Z" 51 | }, 52 | "geometry": { 53 | "coordinates": [ 54 | [ 55 | [ 56 | 22.64947031682945, 57 | -19.573081872726625 58 | ], 59 | [ 60 | 22.610797919599992, 61 | -19.753049882240187 62 | ], 63 | [ 64 | 22.92860886856357, 65 | -19.813524238713256 66 | ], 67 | [ 68 | 22.966700517051756, 69 | -19.634371785363914 70 | ], 71 | [ 72 | 22.64947031682945, 73 | -19.573081872726625 74 | ] 75 | ] 76 | ], 77 | "type": "Polygon" 78 | }, 79 | "links": [ 80 | { 81 | "rel": "root", 82 | "href": "../catalog.json", 83 | "type": "application/json" 84 | }, 85 | { 86 | "rel": "parent", 87 | "href": "../catalog.json", 88 | "type": "application/json" 89 | } 90 | ], 91 | "assets": { 92 | "20210129_075502_95_2223_3B_AnalyticMS_clip_tif": { 93 | "href": "./20210129_075502_95_2223_3B_AnalyticMS_clip.tif", 94 | "type": "image/tiff", 95 | "pl:asset_type": "analytic", 96 | "pl:bundle_type": "analytic", 97 | "raster:bands": [ 98 | { 99 | "nodata": 0, 100 | "data_type": "uint16", 101 | "spatial_resolution": 3, 102 | "statistics": { 103 | "minimum": 3690, 104 | "maximum": 4774 105 | }, 106 | "scale": 0.0000200015317019 107 | }, 108 | { 109 | "nodata": 0, 110 | "data_type": "uint16", 111 | "spatial_resolution": 3, 112 | "statistics": { 113 | "minimum": 2509, 114 | "maximum": 3957 115 | }, 116 | "scale": 0.0000216932146323 117 | }, 118 | { 119 | "nodata": 0, 120 | "data_type": "uint16", 121 | "spatial_resolution": 3, 122 | "statistics": { 123 | "minimum": 1522, 124 | "maximum": 2629 125 | }, 126 | "scale": 0.0000261107788024 127 | }, 128 | { 129 | "nodata": 0, 130 | "data_type": "uint16", 131 | "spatial_resolution": 3, 132 | "statistics": { 133 | "minimum": 1472, 134 | "maximum": 5035 135 | }, 136 | "scale": 0.0000413267975929 137 | } 138 | ], 139 | "eo:bands": [ 140 | { 141 | "name": "Blue", 142 | "common_name": "blue", 143 | "center_wavelength": 490, 144 | "full_width_half_max": 50 145 | }, 146 | { 147 | "name": "Green II", 148 | "common_name": "green", 149 | "center_wavelength": 565, 150 | "full_width_half_max": 46 151 | }, 152 | { 153 | "name": "Red", 154 | "common_name": "red", 155 | "center_wavelength": 665, 156 | "full_width_half_max": 31 157 | }, 158 | { 159 | "name": "NIR", 160 | "common_name": "nir", 161 | "center_wavelength": 865, 162 | "full_width_half_max": 40 163 | } 164 | ], 165 | "roles": [ 166 | "data" 167 | ] 168 | }, 169 | "20210129_075502_95_2223_metadata_json": { 170 | "href": "./20210129_075502_95_2223_metadata.json", 171 | "type": "application/json", 172 | "roles": [ 173 | "metadata" 174 | ] 175 | }, 176 | "20210129_075502_95_2223_3B_udm2_clip_tif": { 177 | "href": "./20210129_075502_95_2223_3B_udm2_clip.tif", 178 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 179 | "pl:asset_type": "udm", 180 | "pl:bundle_type": "analytic", 181 | "raster:bands": [ 182 | { 183 | "data_type": "uint8", 184 | "spatial_resolution": 3, 185 | "statistics": { 186 | "minimum": 0, 187 | "maximum": 1 188 | } 189 | }, 190 | { 191 | "data_type": "uint8", 192 | "spatial_resolution": 3, 193 | "statistics": { 194 | "minimum": 0, 195 | "maximum": 0 196 | } 197 | }, 198 | { 199 | "data_type": "uint8", 200 | "spatial_resolution": 3, 201 | "statistics": { 202 | "minimum": 0, 203 | "maximum": 0 204 | } 205 | }, 206 | { 207 | "data_type": "uint8", 208 | "spatial_resolution": 3, 209 | "statistics": { 210 | "minimum": 0, 211 | "maximum": 0 212 | } 213 | }, 214 | { 215 | "data_type": "uint8", 216 | "spatial_resolution": 3, 217 | "statistics": { 218 | "minimum": 0, 219 | "maximum": 0 220 | } 221 | }, 222 | { 223 | "data_type": "uint8", 224 | "spatial_resolution": 3, 225 | "statistics": { 226 | "minimum": 0, 227 | "maximum": 0 228 | } 229 | }, 230 | { 231 | "data_type": "uint8", 232 | "spatial_resolution": 3, 233 | "statistics": { 234 | "minimum": 0, 235 | "maximum": 65 236 | } 237 | }, 238 | { 239 | "data_type": "uint8", 240 | "spatial_resolution": 3, 241 | "statistics": { 242 | "minimum": 0, 243 | "maximum": 1 244 | } 245 | } 246 | ], 247 | "eo:bands": [ 248 | { 249 | "name": "B1", 250 | "description": "Clear map (0: not clear, 1: clear)" 251 | }, 252 | { 253 | "name": "B2", 254 | "description": "Snow map (0: no snow or ice, 1: snow or ice)" 255 | }, 256 | { 257 | "name": "B3", 258 | "description": "Shadow map (0: no shadow, 1: shadow)" 259 | }, 260 | { 261 | "name": "B4", 262 | "description": "Light haze map (0: no light haze, 1: light haze)" 263 | }, 264 | { 265 | "name": "B5", 266 | "description": "Heavy haze map (0: no heavy haze, 1: heavy haze)" 267 | }, 268 | { 269 | "name": "B6", 270 | "description": "Cloud map (0: no cloud, 1: cloud)" 271 | }, 272 | { 273 | "name": "B7", 274 | "description": "Confidence map (percentage value: per-pixel algorithmic confidence in classification)" 275 | }, 276 | { 277 | "name": "B8", 278 | "description": "Unusable pixels" 279 | } 280 | ], 281 | "roles": [ 282 | "data", 283 | "snow-ice", 284 | "cloud", 285 | "cloud-shadow" 286 | ] 287 | }, 288 | "20210129_075502_95_2223_3B_AnalyticMS_metadata_clip_xml": { 289 | "href": "./20210129_075502_95_2223_3B_AnalyticMS_metadata_clip.xml", 290 | "type": "text/xml", 291 | "pl:asset_type": "analytic_xml", 292 | "pl:bundle_type": "analytic", 293 | "roles": [ 294 | "metadata" 295 | ] 296 | } 297 | }, 298 | "bbox": [ 299 | 22.610797919599992, 300 | -19.813524238713256, 301 | 22.966700517051756, 302 | -19.573081872726625 303 | ], 304 | "stac_extensions": [ 305 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 306 | "https://stac-extensions.github.io/eo/v1.1.0/schema.json", 307 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 308 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 309 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json" 310 | ] 311 | } -------------------------------------------------------------------------------- /examples/items/reorthotile.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "20190813_013745_5254519_RapidEye-3", 5 | "properties": { 6 | "updated": "2019-08-14T06:16:26Z", 7 | "created": "2019-08-14T06:16:26Z", 8 | "gsd": 6.5, 9 | "constellation": "rapideye", 10 | "platform": "RapidEye-3", 11 | "eo:cloud_cover": 9, 12 | "view:off_nadir": 3.4487, 13 | "view:sun_azimuth": 121.08267, 14 | "view:sun_elevation": 59.57737, 15 | "proj:epsg": 32652, 16 | "pl:black_fill": 0, 17 | "pl:grid_cell": "5254519", 18 | "pl:ground_control": true, 19 | "pl:item_type": "REOrthoTile", 20 | "pl:pixel_resolution": 5, 21 | "pl:strip_id": "40352462", 22 | "published": "2019-08-14T06:16:26Z", 23 | "datetime": "2019-08-13T01:37:45Z" 24 | }, 25 | "geometry": { 26 | "coordinates": [ 27 | [ 28 | [ 29 | 130.0295504, 30 | 33.620011 31 | ], 32 | [ 33 | 130.2990123, 34 | 33.6174751 35 | ], 36 | [ 37 | 130.2956483, 38 | 33.3920412 39 | ], 40 | [ 41 | 130.0268841, 42 | 33.3945564 43 | ], 44 | [ 45 | 130.0295504, 46 | 33.620011 47 | ] 48 | ] 49 | ], 50 | "type": "Polygon" 51 | }, 52 | "links": [ 53 | { 54 | "rel": "root", 55 | "href": "../catalog.json", 56 | "type": "application/json" 57 | }, 58 | { 59 | "rel": "parent", 60 | "href": "../catalog.json", 61 | "type": "application/json" 62 | } 63 | ], 64 | "assets": { 65 | "20190813_013745_5254519_RapidEye-3_metadata_json": { 66 | "href": "./20190813_013745_5254519_RapidEye-3_metadata.json", 67 | "type": "application/json", 68 | "roles": [ 69 | "metadata" 70 | ] 71 | }, 72 | "5254519_2019-08-13_RE3_3A_Visual_tif": { 73 | "href": "./5254519_2019-08-13_RE3_3A_Visual.tif", 74 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 75 | "pl:asset_type": "visual", 76 | "pl:bundle_type": "visual", 77 | "proj:shape": [ 78 | 5000, 79 | 5000 80 | ], 81 | "proj:transform": [ 82 | 5, 83 | 0, 84 | 595500, 85 | 0, 86 | -5, 87 | 3720500, 88 | 0, 89 | 0, 90 | 1 91 | ], 92 | "raster:bands": [ 93 | { 94 | "data_type": "uint8", 95 | "spatial_resolution": 5, 96 | "statistics": { 97 | "minimum": 0, 98 | "maximum": 255 99 | } 100 | }, 101 | { 102 | "data_type": "uint8", 103 | "spatial_resolution": 5, 104 | "statistics": { 105 | "minimum": 0, 106 | "maximum": 255 107 | } 108 | }, 109 | { 110 | "data_type": "uint8", 111 | "spatial_resolution": 5, 112 | "statistics": { 113 | "minimum": 0, 114 | "maximum": 255 115 | } 116 | }, 117 | { 118 | "data_type": "uint8", 119 | "spatial_resolution": 5, 120 | "statistics": { 121 | "minimum": 255, 122 | "maximum": 255 123 | } 124 | } 125 | ], 126 | "roles": [ 127 | "data", 128 | "visual" 129 | ] 130 | }, 131 | "5254519_2019-08-13_RE3_3A_Visual_metadata_xml": { 132 | "href": "./5254519_2019-08-13_RE3_3A_Visual_metadata.xml", 133 | "type": "text/xml", 134 | "pl:asset_type": "visual_xml", 135 | "pl:bundle_type": "visual", 136 | "roles": [ 137 | "metadata", 138 | "visual" 139 | ] 140 | } 141 | }, 142 | "bbox": [ 143 | 130.0268841, 144 | 33.3920412, 145 | 130.2990123, 146 | 33.620011 147 | ], 148 | "stac_extensions": [ 149 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 150 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 151 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 152 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 153 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json" 154 | ] 155 | } -------------------------------------------------------------------------------- /examples/items/rescene.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "2019-04-04T015035_RE2", 5 | "properties": { 6 | "updated": "2019-04-04T07:20:30Z", 7 | "created": "2019-04-04T07:20:30Z", 8 | "gsd": 6.5, 9 | "constellation": "rapideye", 10 | "platform": "RapidEye-2", 11 | "eo:cloud_cover": 1.51, 12 | "view:off_nadir": 6.8046, 13 | "view:sun_azimuth": 136.7220454054, 14 | "view:sun_elevation": 54.9498191892, 15 | "proj:epsg": 4326, 16 | "pl:black_fill": 0, 17 | "pl:item_type": "REScene", 18 | "pl:strip_id": "39196892", 19 | "published": "2019-04-04T07:20:30Z", 20 | "datetime": "2019-04-04T01:50:35.246377Z" 21 | }, 22 | "geometry": { 23 | "coordinates": [ 24 | [ 25 | [ 26 | 129.5909850476811, 27 | 34.10129815805231 28 | ], 29 | [ 30 | 129.43452116887462, 31 | 33.47311536506405 32 | ], 33 | [ 34 | 130.25694267464985, 35 | 33.36622403271104 36 | ], 37 | [ 38 | 130.41935708731222, 39 | 33.99373268894638 40 | ], 41 | [ 42 | 129.5909850476811, 43 | 34.10129815805231 44 | ] 45 | ] 46 | ], 47 | "type": "Polygon" 48 | }, 49 | "links": [ 50 | { 51 | "rel": "root", 52 | "href": "../catalog.json", 53 | "type": "application/json" 54 | }, 55 | { 56 | "rel": "parent", 57 | "href": "../catalog.json", 58 | "type": "application/json" 59 | } 60 | ], 61 | "assets": { 62 | "2019-04-04T015035_RE2_metadata_json": { 63 | "href": "./2019-04-04T015035_RE2_metadata.json", 64 | "type": "application/json", 65 | "roles": [ 66 | "metadata" 67 | ] 68 | }, 69 | "2019-04-04T015035_RE2_1B_Quicklook_tif": { 70 | "href": "./2019-04-04T015035_RE2_1B_Quicklook.tif", 71 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 72 | "pl:asset_type": "browse", 73 | "pl:bundle_type": "basic_analytic", 74 | "raster:bands": [ 75 | { 76 | "data_type": "uint8", 77 | "spatial_resolution": 0.000431189, 78 | "statistics": { 79 | "minimum": 0, 80 | "maximum": 255 81 | } 82 | }, 83 | { 84 | "data_type": "uint8", 85 | "spatial_resolution": 0.000431189, 86 | "statistics": { 87 | "minimum": 0, 88 | "maximum": 255 89 | } 90 | }, 91 | { 92 | "data_type": "uint8", 93 | "spatial_resolution": 0.000431189, 94 | "statistics": { 95 | "minimum": 0, 96 | "maximum": 241 97 | } 98 | } 99 | ], 100 | "roles": [ 101 | "data" 102 | ] 103 | }, 104 | "2019-04-04T015035_RE2_1B_band1_tif": { 105 | "href": "./2019-04-04T015035_RE2_1B_band1.tif", 106 | "type": "image/tiff", 107 | "pl:asset_type": "basic_analytic_b1", 108 | "pl:bundle_type": "basic_analytic", 109 | "proj:shape": [ 110 | 1705, 111 | 2284 112 | ], 113 | "proj:transform": [ 114 | 0.000431189, 115 | 0, 116 | 129.43452116887462, 117 | 0, 118 | -0.000431189, 119 | 34.10129815805231, 120 | 0, 121 | 0, 122 | 1 123 | ], 124 | "raster:bands": [ 125 | { 126 | "data_type": "uint16", 127 | "spatial_resolution": 1, 128 | "statistics": { 129 | "minimum": 964, 130 | "maximum": 65535 131 | } 132 | } 133 | ], 134 | "roles": [ 135 | "data" 136 | ] 137 | }, 138 | "2019-04-04T015035_RE2_1B_band2_tif": { 139 | "href": "./2019-04-04T015035_RE2_1B_band2.tif", 140 | "type": "image/tiff", 141 | "pl:asset_type": "basic_analytic_b2", 142 | "pl:bundle_type": "basic_analytic", 143 | "proj:shape": [ 144 | 1705, 145 | 2284 146 | ], 147 | "proj:transform": [ 148 | 0.000431189, 149 | 0, 150 | 129.43452116887462, 151 | 0, 152 | -0.000431189, 153 | 34.10129815805231, 154 | 0, 155 | 0, 156 | 1 157 | ], 158 | "raster:bands": [ 159 | { 160 | "data_type": "uint16", 161 | "spatial_resolution": 1, 162 | "statistics": { 163 | "minimum": 1, 164 | "maximum": 65535 165 | } 166 | } 167 | ], 168 | "roles": [ 169 | "data" 170 | ] 171 | }, 172 | "2019-04-04T015035_RE2_1B_band3_tif": { 173 | "href": "./2019-04-04T015035_RE2_1B_band3.tif", 174 | "type": "image/tiff", 175 | "pl:asset_type": "basic_analytic_b3", 176 | "pl:bundle_type": "basic_analytic", 177 | "proj:shape": [ 178 | 1705, 179 | 2284 180 | ], 181 | "proj:transform": [ 182 | 0.000431189, 183 | 0, 184 | 129.43452116887462, 185 | 0, 186 | -0.000431189, 187 | 34.10129815805231, 188 | 0, 189 | 0, 190 | 1 191 | ], 192 | "raster:bands": [ 193 | { 194 | "data_type": "uint16", 195 | "spatial_resolution": 1, 196 | "statistics": { 197 | "minimum": 1, 198 | "maximum": 65535 199 | } 200 | } 201 | ], 202 | "roles": [ 203 | "data" 204 | ] 205 | }, 206 | "2019-04-04T015035_RE2_1B_band4_tif": { 207 | "href": "./2019-04-04T015035_RE2_1B_band4.tif", 208 | "type": "image/tiff", 209 | "pl:asset_type": "basic_analytic_b4", 210 | "pl:bundle_type": "basic_analytic", 211 | "proj:shape": [ 212 | 1705, 213 | 2284 214 | ], 215 | "proj:transform": [ 216 | 0.000431189, 217 | 0, 218 | 129.43452116887462, 219 | 0, 220 | -0.000431189, 221 | 34.10129815805231, 222 | 0, 223 | 0, 224 | 1 225 | ], 226 | "raster:bands": [ 227 | { 228 | "data_type": "uint16", 229 | "spatial_resolution": 1, 230 | "statistics": { 231 | "minimum": 1, 232 | "maximum": 65491 233 | } 234 | } 235 | ], 236 | "roles": [ 237 | "data" 238 | ] 239 | }, 240 | "2019-04-04T015035_RE2_1B_band5_tif": { 241 | "href": "./2019-04-04T015035_RE2_1B_band5.tif", 242 | "type": "image/tiff", 243 | "pl:asset_type": "basic_analytic_b5", 244 | "pl:bundle_type": "basic_analytic", 245 | "proj:shape": [ 246 | 1705, 247 | 2284 248 | ], 249 | "proj:transform": [ 250 | 0.000431189, 251 | 0, 252 | 129.43452116887462, 253 | 0, 254 | -0.000431189, 255 | 34.10129815805231, 256 | 0, 257 | 0, 258 | 1 259 | ], 260 | "raster:bands": [ 261 | { 262 | "data_type": "uint16", 263 | "spatial_resolution": 1, 264 | "statistics": { 265 | "minimum": 393, 266 | "maximum": 49526 267 | } 268 | } 269 | ], 270 | "roles": [ 271 | "data" 272 | ] 273 | }, 274 | "2019-04-04T015035_RE2_1B_metadata_xml": { 275 | "href": "./2019-04-04T015035_RE2_1B_metadata.xml", 276 | "type": "text/xml", 277 | "pl:asset_type": "basic_analytic_xml", 278 | "pl:bundle_type": "basic_analytic", 279 | "roles": [ 280 | "metadata" 281 | ] 282 | }, 283 | "2019-04-04T015035_RE2_1B_rpc_xml": { 284 | "href": "./2019-04-04T015035_RE2_1B_rpc.xml", 285 | "type": "text/xml", 286 | "pl:asset_type": "basic_analytic_rpc", 287 | "pl:bundle_type": "basic_analytic", 288 | "roles": [ 289 | "metadata" 290 | ] 291 | }, 292 | "2019-04-04T015035_RE2_1B_sci_xml": { 293 | "href": "./2019-04-04T015035_RE2_1B_sci.xml", 294 | "type": "text/plain", 295 | "pl:asset_type": "basic_analytic_sci", 296 | "pl:bundle_type": "basic_analytic", 297 | "roles": [] 298 | }, 299 | "2019-04-04T015035_RE2_1B_udm_tif": { 300 | "href": "./2019-04-04T015035_RE2_1B_udm.tif", 301 | "type": "image/tiff", 302 | "pl:asset_type": "basic_udm", 303 | "pl:bundle_type": "basic_analytic", 304 | "proj:shape": [ 305 | 1705, 306 | 2284 307 | ], 308 | "proj:transform": [ 309 | 0.000431189, 310 | 0, 311 | 129.43452116887462, 312 | 0, 313 | -0.000431189, 314 | 34.10129815805231, 315 | 0, 316 | 0, 317 | 1 318 | ], 319 | "raster:bands": [ 320 | { 321 | "data_type": "uint8", 322 | "spatial_resolution": 1, 323 | "statistics": { 324 | "minimum": 0, 325 | "maximum": 2 326 | } 327 | } 328 | ], 329 | "roles": [ 330 | "data", 331 | "snow-ice", 332 | "cloud", 333 | "cloud-shadow" 334 | ] 335 | } 336 | }, 337 | "bbox": [ 338 | 129.43452116887462, 339 | 33.36622403271104, 340 | 130.41935708731222, 341 | 34.10129815805231 342 | ], 343 | "stac_extensions": [ 344 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 345 | "https://stac-extensions.github.io/eo/v1.0.0/schema.json", 346 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 347 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 348 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json" 349 | ] 350 | } -------------------------------------------------------------------------------- /examples/items/skysatcollect.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "20221003_011846_ssc2_u0001", 5 | "properties": { 6 | "updated": "2022-10-04T05:19:37Z", 7 | "created": "2022-10-03T03:16:44Z", 8 | "gsd": 0.79, 9 | "constellation": "skysat", 10 | "platform": "SSC2", 11 | "eo:cloud_cover": 0, 12 | "eo:snow_cover": 0, 13 | "view:off_nadir": 27.2, 14 | "view:azimuth": 150.3, 15 | "view:sun_azimuth": 140, 16 | "view:sun_elevation": 44.5, 17 | "proj:epsg": 32652, 18 | "pl:clear_percent": 100, 19 | "pl:ground_control_ratio": 0.99, 20 | "pl:item_type": "SkySatCollect", 21 | "pl:pixel_resolution": 0.5, 22 | "pl:publishing_stage": "finalized", 23 | "pl:quality_category": "standard", 24 | "pl:strip_id": "s4_20221003T011846Z", 25 | "published": "2022-10-03T03:16:44Z", 26 | "datetime": "2022-10-03T01:18:46.562000Z" 27 | }, 28 | "links": [ 29 | { 30 | "rel": "root", 31 | "href": "../catalog.json", 32 | "type": "application/json" 33 | }, 34 | { 35 | "rel": "parent", 36 | "href": "../catalog.json", 37 | "type": "application/json" 38 | } 39 | ], 40 | "assets": { 41 | "20221003_011846_ssc2_u0001_metadata_json": { 42 | "href": "./20221003_011846_ssc2_u0001_metadata.json", 43 | "type": "text/plain", 44 | "roles": [ 45 | "metadata" 46 | ] 47 | }, 48 | "20221003_011846_ssc2_u0001_pansharpened_udm_clip_tif": { 49 | "href": "./20221003_011846_ssc2_u0001_pansharpened_udm_clip.tif", 50 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 51 | "pl:asset_type": "ortho_pansharpened_udm", 52 | "pl:bundle_type": "pansharpened_udm2", 53 | "raster:bands": [ 54 | { 55 | "nodata": 1, 56 | "data_type": "uint8", 57 | "spatial_resolution": 0.5, 58 | "statistics": { 59 | "minimum": 0, 60 | "maximum": 2 61 | } 62 | } 63 | ], 64 | "roles": [ 65 | "data", 66 | "snow-ice", 67 | "cloud", 68 | "cloud-shadow" 69 | ] 70 | }, 71 | "20221003_011846_ssc2_u0001_pansharpened_udm2_clip_tif": { 72 | "href": "./20221003_011846_ssc2_u0001_pansharpened_udm2_clip.tif", 73 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 74 | "pl:asset_type": "ortho_pansharpened_udm2", 75 | "pl:bundle_type": "pansharpened_udm2", 76 | "proj:shape": [ 77 | 35970, 78 | 14181 79 | ], 80 | "proj:transform": [ 81 | 0.5, 82 | 0, 83 | 607733.5, 84 | 0, 85 | -0.5, 86 | 3725485.5, 87 | 0, 88 | 0, 89 | 1 90 | ], 91 | "raster:bands": [ 92 | { 93 | "data_type": "uint8", 94 | "spatial_resolution": 0.5, 95 | "statistics": { 96 | "minimum": 0, 97 | "maximum": 1 98 | } 99 | }, 100 | { 101 | "data_type": "uint8", 102 | "spatial_resolution": 0.5, 103 | "statistics": { 104 | "minimum": 0, 105 | "maximum": 1 106 | } 107 | }, 108 | { 109 | "data_type": "uint8", 110 | "spatial_resolution": 0.5, 111 | "statistics": { 112 | "minimum": 0, 113 | "maximum": 1 114 | } 115 | }, 116 | { 117 | "data_type": "uint8", 118 | "spatial_resolution": 0.5, 119 | "statistics": { 120 | "minimum": 0, 121 | "maximum": 1 122 | } 123 | }, 124 | { 125 | "data_type": "uint8", 126 | "spatial_resolution": 0.5, 127 | "statistics": { 128 | "minimum": 0, 129 | "maximum": 1 130 | } 131 | }, 132 | { 133 | "data_type": "uint8", 134 | "spatial_resolution": 0.5, 135 | "statistics": { 136 | "minimum": 0, 137 | "maximum": 0 138 | } 139 | }, 140 | { 141 | "data_type": "uint8", 142 | "spatial_resolution": 0.5, 143 | "statistics": { 144 | "minimum": 0, 145 | "maximum": 100 146 | } 147 | }, 148 | { 149 | "data_type": "uint8", 150 | "spatial_resolution": 0.5, 151 | "statistics": { 152 | "minimum": 0, 153 | "maximum": 2 154 | } 155 | } 156 | ], 157 | "eo:bands": [ 158 | { 159 | "name": "B1", 160 | "description": "Clear map (0: not clear, 1: clear)" 161 | }, 162 | { 163 | "name": "B2", 164 | "description": "Snow map (0: no snow or ice, 1: snow or ice)" 165 | }, 166 | { 167 | "name": "B3", 168 | "description": "Shadow map (0: no shadow, 1: shadow)" 169 | }, 170 | { 171 | "name": "B4", 172 | "description": "Light haze map (0: no light haze, 1: light haze)" 173 | }, 174 | { 175 | "name": "B5", 176 | "description": "Heavy haze map (0: no heavy haze, 1: heavy haze)" 177 | }, 178 | { 179 | "name": "B6", 180 | "description": "Cloud map (0: no cloud, 1: cloud)" 181 | }, 182 | { 183 | "name": "B7", 184 | "description": "Confidence map (percentage value: per-pixel algorithmic confidence in classification)" 185 | }, 186 | { 187 | "name": "B8", 188 | "description": "Unusable pixels" 189 | } 190 | ], 191 | "roles": [ 192 | "data", 193 | "snow-ice", 194 | "cloud", 195 | "cloud-shadow" 196 | ] 197 | }, 198 | "20221003_011846_ssc2_u0001_pansharpened_clip_tif": { 199 | "href": "./20221003_011846_ssc2_u0001_pansharpened_clip.tif", 200 | "type": "image/tiff", 201 | "pl:asset_type": "ortho_pansharpened", 202 | "pl:bundle_type": "pansharpened_udm2", 203 | "proj:shape": [ 204 | 35970, 205 | 14181 206 | ], 207 | "proj:transform": [ 208 | 0.5, 209 | 0, 210 | 607733.5, 211 | 0, 212 | -0.5, 213 | 3725485.5, 214 | 0, 215 | 0, 216 | 1 217 | ], 218 | "raster:bands": [ 219 | { 220 | "nodata": 0, 221 | "data_type": "uint16", 222 | "spatial_resolution": 0.5, 223 | "statistics": { 224 | "minimum": 1, 225 | "maximum": 4866 226 | } 227 | }, 228 | { 229 | "nodata": 0, 230 | "data_type": "uint16", 231 | "spatial_resolution": 0.5, 232 | "statistics": { 233 | "minimum": 1, 234 | "maximum": 5462 235 | } 236 | }, 237 | { 238 | "nodata": 0, 239 | "data_type": "uint16", 240 | "spatial_resolution": 0.5, 241 | "statistics": { 242 | "minimum": 1, 243 | "maximum": 6303 244 | } 245 | }, 246 | { 247 | "nodata": 0, 248 | "data_type": "uint16", 249 | "spatial_resolution": 0.5, 250 | "statistics": { 251 | "minimum": 1, 252 | "maximum": 6200 253 | } 254 | } 255 | ], 256 | "roles": [ 257 | "data" 258 | ] 259 | } 260 | }, 261 | "geometry": { 262 | "coordinates": [ 263 | [ 264 | [ 265 | 130.2356892320578, 266 | 33.50973278283077 267 | ], 268 | [ 269 | 130.2361641319951, 270 | 33.50088307265459 271 | ], 272 | [ 273 | 130.2088314303476, 274 | 33.50490266673611 275 | ], 276 | [ 277 | 130.2086472205617, 278 | 33.51507847414758 279 | ], 280 | [ 281 | 130.2087159319, 282 | 33.51506981573728 283 | ], 284 | [ 285 | 130.2087334319567, 286 | 33.52145448123408 287 | ], 288 | [ 289 | 130.2087174986152, 290 | 33.52145612394497 291 | ], 292 | [ 293 | 130.2086941128866, 294 | 33.53134943863547 295 | ], 296 | [ 297 | 130.2087920630126, 298 | 33.53134005430083 299 | ], 300 | [ 301 | 130.2086492593334, 302 | 33.53710745076344 303 | ], 304 | [ 305 | 130.1882575290431, 306 | 33.5389451730932 307 | ], 308 | [ 309 | 130.1883349424874, 310 | 33.53275319365478 311 | ], 312 | [ 313 | 130.1881798623694, 314 | 33.53276811552659 315 | ], 316 | [ 317 | 130.1883011641313, 318 | 33.52460751663693 319 | ], 320 | [ 321 | 130.1881697802453, 322 | 33.52462005724453 323 | ], 324 | [ 325 | 130.1883053786813, 326 | 33.51641973010764 327 | ], 328 | [ 329 | 130.1881910697577, 330 | 33.51643059876186 331 | ], 332 | [ 333 | 130.1884012754283, 334 | 33.50808310266657 335 | ], 336 | [ 337 | 130.1618157219883, 338 | 33.51056796811403 339 | ], 340 | [ 341 | 130.1614700107584, 342 | 33.52086189400595 343 | ], 344 | [ 345 | 130.161645244492, 346 | 33.5208449382275 347 | ], 348 | [ 349 | 130.1614672041151, 350 | 33.52905183235539 351 | ], 352 | [ 353 | 130.1616362516507, 354 | 33.5290354498627 355 | ], 356 | [ 357 | 130.1614817901811, 358 | 33.53720132804064 359 | ], 360 | [ 361 | 130.161651443519, 362 | 33.53718501958107 363 | ], 364 | [ 365 | 130.1615057695687, 366 | 33.54534753819416 367 | ], 368 | [ 369 | 130.1617934175341, 370 | 33.54531927039626 371 | ], 372 | [ 373 | 130.1614998917147, 374 | 33.55352607334847 375 | ], 376 | [ 377 | 130.1616762405959, 378 | 33.55350918045149 379 | ], 380 | [ 381 | 130.1615405634544, 382 | 33.56165096413422 383 | ], 384 | [ 385 | 130.1618091432254, 386 | 33.56162603510785 387 | ], 388 | [ 389 | 130.1621707534083, 390 | 33.56875412540343 391 | ], 392 | [ 393 | 130.1619543419213, 394 | 33.57742117275143 395 | ], 396 | [ 397 | 130.1622780685784, 398 | 33.57739762069604 399 | ], 400 | [ 401 | 130.1615953129257, 402 | 33.58613521464709 403 | ], 404 | [ 405 | 130.1618514031168, 406 | 33.58611110861187 407 | ], 408 | [ 409 | 130.1619417964312, 410 | 33.59381721122654 411 | ], 412 | [ 413 | 130.1620271399538, 414 | 33.59381056303178 415 | ], 416 | [ 417 | 130.1619274623705, 418 | 33.60202062267211 419 | ], 420 | [ 421 | 130.1622207031537, 422 | 33.60199738237798 423 | ], 424 | [ 425 | 130.1616080753018, 426 | 33.61066850375364 427 | ], 428 | [ 429 | 130.1618400630888, 430 | 33.61064616445836 431 | ], 432 | [ 433 | 130.1619252690556, 434 | 33.61841835775149 435 | ], 436 | [ 437 | 130.1619610418828, 438 | 33.61841538738605 439 | ], 440 | [ 441 | 130.1620883099707, 442 | 33.62638932366188 443 | ], 444 | [ 445 | 130.1623320136935, 446 | 33.62637024999027 447 | ], 448 | [ 449 | 130.1616361373977, 450 | 33.63519477833476 451 | ], 452 | [ 453 | 130.1847059178229, 454 | 33.63288599936075 455 | ], 456 | [ 457 | 130.1845898006529, 458 | 33.63918193642149 459 | ], 460 | [ 461 | 130.1847345133682, 462 | 33.63916717301736 463 | ], 464 | [ 465 | 130.1846041476776, 466 | 33.64733533906717 467 | ], 468 | [ 469 | 130.1847603903673, 470 | 33.64732020690201 471 | ], 472 | [ 473 | 130.1846359445519, 474 | 33.65549103009405 475 | ], 476 | [ 477 | 130.1848367435464, 478 | 33.65547160755564 479 | ], 480 | [ 481 | 130.1847033017612, 482 | 33.66358447529123 483 | ], 484 | [ 485 | 130.2115140006616, 486 | 33.66065467701212 487 | ], 488 | [ 489 | 130.2113884444725, 490 | 33.65114611459651 491 | ], 492 | [ 493 | 130.2112933148671, 494 | 33.651155075862 495 | ], 496 | [ 497 | 130.2115584526562, 498 | 33.64271779888164 499 | ], 500 | [ 501 | 130.2112581999989, 502 | 33.64274915701995 503 | ], 504 | [ 505 | 130.2114048301147, 506 | 33.63475053116745 507 | ], 508 | [ 509 | 130.2113331614528, 510 | 33.63475752223209 511 | ], 512 | [ 513 | 130.2114226714259, 514 | 33.62918708200475 515 | ], 516 | [ 517 | 130.2350440553155, 518 | 33.6271883284976 519 | ], 520 | [ 521 | 130.2351025057944, 522 | 33.61727849959165 523 | ], 524 | [ 525 | 130.2350460521255, 526 | 33.61728312363067 527 | ], 528 | [ 529 | 130.2351052537425, 530 | 33.6090741947436 531 | ], 532 | [ 533 | 130.2350422732729, 534 | 33.60907956331749 535 | ], 536 | [ 537 | 130.2350919502864, 538 | 33.60089328096861 539 | ], 540 | [ 541 | 130.2350288267069, 542 | 33.60089883056565 543 | ], 544 | [ 545 | 130.2350729022924, 546 | 33.59272149910326 547 | ], 548 | [ 549 | 130.235010648938, 550 | 33.59272680465784 551 | ], 552 | [ 553 | 130.2350696503164, 554 | 33.58452717437972 555 | ], 556 | [ 557 | 130.2349953156628, 558 | 33.58453404437221 559 | ], 560 | [ 561 | 130.2350593885546, 562 | 33.57634594185515 563 | ], 564 | [ 565 | 130.2349888354848, 566 | 33.57635263753237 567 | ], 568 | [ 569 | 130.23506723253, 570 | 33.56813903918675 571 | ], 572 | [ 573 | 130.2350017827589, 574 | 33.56814547497279 575 | ], 576 | [ 577 | 130.2350697498047, 578 | 33.5599427345873 579 | ], 580 | [ 581 | 130.2349957176978, 582 | 33.55995008246143 583 | ], 584 | [ 585 | 130.2350714198236, 586 | 33.55174118638092 587 | ], 588 | [ 589 | 130.235001831853, 590 | 33.55174798999125 591 | ], 592 | [ 593 | 130.2350849269124, 594 | 33.54352078992719 595 | ], 596 | [ 597 | 130.2350116384082, 598 | 33.54352802792209 599 | ], 600 | [ 601 | 130.2351080399208, 602 | 33.5352821215121 603 | ], 604 | [ 605 | 130.2350448398158, 606 | 33.53528822445695 607 | ], 608 | [ 609 | 130.235182579613, 610 | 33.52698128008122 611 | ], 612 | [ 613 | 130.2351129948848, 614 | 33.52698780398325 615 | ], 616 | [ 617 | 130.2352271708617, 618 | 33.51872300439512 619 | ], 620 | [ 621 | 130.2352192645586, 622 | 33.51872381952672 623 | ], 624 | [ 625 | 130.2357548762223, 626 | 33.50972412841602 627 | ], 628 | [ 629 | 130.2356892320578, 630 | 33.50973278283077 631 | ] 632 | ] 633 | ], 634 | "type": "Polygon" 635 | }, 636 | "bbox": [ 637 | 130.1614672041151, 638 | 33.50088307265459, 639 | 130.2361641319951, 640 | 33.66358447529123 641 | ], 642 | "stac_extensions": [ 643 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 644 | "https://stac-extensions.github.io/eo/v1.1.0/schema.json", 645 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 646 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 647 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json" 648 | ] 649 | } -------------------------------------------------------------------------------- /examples/items/skysatscene.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "stac_version": "1.0.0", 4 | "id": "20221003_011846_ssc2d3_0010", 5 | "properties": { 6 | "updated": "2022-10-04T05:51:24Z", 7 | "created": "2022-10-03T01:55:34Z", 8 | "gsd": 0.79, 9 | "constellation": "skysat", 10 | "platform": "SSC2", 11 | "eo:cloud_cover": 0, 12 | "eo:snow_cover": 0, 13 | "view:off_nadir": 27.3, 14 | "view:azimuth": 150, 15 | "view:sun_azimuth": 139.9, 16 | "view:sun_elevation": 44.5, 17 | "proj:epsg": 32652, 18 | "pl:clear_percent": 100, 19 | "pl:ground_control": true, 20 | "pl:item_type": "SkySatScene", 21 | "pl:pixel_resolution": 0.5, 22 | "pl:publishing_stage": "finalized", 23 | "pl:quality_category": "standard", 24 | "pl:strip_id": "s4_20221003T011846Z", 25 | "published": "2022-10-03T01:55:34Z", 26 | "datetime": "2022-10-03T01:18:46.562000Z" 27 | }, 28 | "geometry": { 29 | "coordinates": [ 30 | [ 31 | [ 32 | 130.1615405634544, 33 | 33.561650964134216 34 | ], 35 | [ 36 | 130.16170705400583, 37 | 33.55166011349766 38 | ], 39 | [ 40 | 130.1883942956736, 41 | 33.54904166464046 42 | ], 43 | [ 44 | 130.18814910997446, 45 | 33.5591812131352 46 | ], 47 | [ 48 | 130.1615405634544, 49 | 33.561650964134216 50 | ] 51 | ] 52 | ], 53 | "type": "Polygon" 54 | }, 55 | "links": [ 56 | { 57 | "rel": "root", 58 | "href": "../catalog.json", 59 | "type": "application/json" 60 | }, 61 | { 62 | "rel": "parent", 63 | "href": "../catalog.json", 64 | "type": "application/json" 65 | } 66 | ], 67 | "assets": { 68 | "20221003_011846_ssc2d3_0010_metadata_json": { 69 | "href": "./20221003_011846_ssc2d3_0010_metadata.json", 70 | "type": "application/json", 71 | "roles": [ 72 | "metadata" 73 | ] 74 | }, 75 | "20221003_011846_ssc2d3_0010_visual_tif": { 76 | "href": "./20221003_011846_ssc2d3_0010_visual.tif", 77 | "type": "image/tiff; application=geotiff; profile=cloud-optimized", 78 | "pl:asset_type": "ortho_visual", 79 | "pl:bundle_type": "visual", 80 | "proj:shape": [ 81 | 2741, 82 | 5019 83 | ], 84 | "proj:transform": [ 85 | 0.5, 86 | 0, 87 | 607816, 88 | 0, 89 | -0.5, 90 | 3714159, 91 | 0, 92 | 0, 93 | 1 94 | ], 95 | "raster:bands": [ 96 | { 97 | "data_type": "uint8", 98 | "spatial_resolution": 0.5, 99 | "statistics": { 100 | "minimum": 23, 101 | "maximum": 255 102 | } 103 | }, 104 | { 105 | "data_type": "uint8", 106 | "spatial_resolution": 0.5, 107 | "statistics": { 108 | "minimum": 1, 109 | "maximum": 255 110 | } 111 | }, 112 | { 113 | "data_type": "uint8", 114 | "spatial_resolution": 0.5, 115 | "statistics": { 116 | "minimum": 0, 117 | "maximum": 255 118 | } 119 | }, 120 | { 121 | "data_type": "uint8", 122 | "spatial_resolution": 0.5, 123 | "statistics": { 124 | "minimum": 0, 125 | "maximum": 255 126 | } 127 | } 128 | ], 129 | "eo:bands": [ 130 | { 131 | "name": "RED", 132 | "common_name": "red", 133 | "center_wavelength": 645, 134 | "full_width_half_max": 90 135 | }, 136 | { 137 | "name": "GREEN", 138 | "common_name": "green", 139 | "center_wavelength": 560, 140 | "full_width_half_max": 80 141 | }, 142 | { 143 | "name": "BLUE", 144 | "common_name": "blue", 145 | "center_wavelength": 470, 146 | "full_width_half_max": 70 147 | } 148 | ], 149 | "roles": [ 150 | "data", 151 | "visual" 152 | ] 153 | } 154 | }, 155 | "bbox": [ 156 | 130.1615405634544, 157 | 33.54904166464046, 158 | 130.1883942956736, 159 | 33.561650964134216 160 | ], 161 | "stac_extensions": [ 162 | "https://planetlabs.github.io/stac-extension/{{version}}/schema.json", 163 | "https://stac-extensions.github.io/eo/v1.1.0/schema.json", 164 | "https://stac-extensions.github.io/view/v1.0.0/schema.json", 165 | "https://stac-extensions.github.io/projection/v1.0.0/schema.json", 166 | "https://stac-extensions.github.io/raster/v1.1.0/schema.json" 167 | ] 168 | } -------------------------------------------------------------------------------- /mapping.md: -------------------------------------------------------------------------------- 1 | # Field mapping and scope 2 | 3 | The following table maps the Planet Item Properties as defined for their individual products to the 4 | STAC Item properties (if not stated otherwise) and lists for which `pl:item_type` they apply: 5 | 6 | | STAC | Planet | PSOrthoThile | PSScene | REOrthoTile | REScene | SkySatCollect | SkySatScene | SkySatVideo | Landsat8L1G | MOD09GA | MOD09GQ | MYD09GA | MYD09GQ | Sentinel1 | Sentinel2L1C | 7 | | ---- | ------ | ------------ | ------- | ----------- | ------- | ------------- | ----------- | ----------- | ----------- | ------- | ------- | ------- | ------- | --------- | ------------ | 8 | | assets (top-level, different structure) | **_permissions** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 9 | | geometry (top-level) | **geometry** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 10 | | id (top-level) | **id** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 11 | | datetime | **acquired** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 12 | | - | anomalous_pixels | ✓ | ✓ | ✓ | ✓ | | | | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | 13 | | *pl:black_fill* | black_fill | ✓ | | ✓ | ✓ | | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 14 | | - | camera_id | | | | | | ✓ | ✓ | | | | | | | | 15 | | collection (top-level) | catalog_id | | | ✓ | ✓ | | | | | | | | | | | 16 | | - | clear_confidence_percent | ✓ | ✓ | | | ✓ | ✓ | | | | | | | | | 17 | | *pl:clear_percent* | clear_percent | ✓ | ✓ | | | ✓ | ✓ | | | | | | | | | 18 | | eo:cloud_cover | cloud_cover | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | 19 | | - | cloud_percent | ✓ | ✓ | | | ✓ | ✓ | | | | | | | | | 20 | | proj.shape\[1] (assets) | columns | ✓ | | ✓ | ✓ | | | | ✓ | | | | | ✓ | ✓ | 21 | | proj:epsg (assets) | epsg_code | ✓ | | ✓ | | | | | ✓ | | | | | ✓ | ✓ | 22 | | *pl:grid_cell* | grid_cell | ✓ | | ✓ | | | | | | | | | | | | 23 | | *pl:ground_control* | ground_control | ✓ | ✓ | ✓ | | | ✓ | | | | | | | | | 24 | | *pl:ground_control_ratio* | ground_control_ratio | | | | | ✓ | | | | | | | | | | 25 | | gsd | **gsd** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 26 | | - | heavy_haze_percent | ✓ | ✓ | | | ✓ | ✓ | | | | | | | | | 27 | | instruments\[0] | instrument | ✓ | ✓ | | | | | | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | 28 | | *pl:item_type* | **item_type** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 29 | | - | light_haze_percent | ✓ | ✓ | | | ✓ | ✓ | | | | | | | | | 30 | | - | origin_x | ✓ | | ✓ | | | | | ✓ | | | | | | ✓ | 31 | | - | origin_y | ✓ | | ✓ | | | | | ✓ | | | | | | ✓ | 32 | | pl:pixel_resolution (spatial_resolution) | pixel_resolution | ✓ | ✓ | ✓ | | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | 33 | | constellation | **provider** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 34 | | published (assets) | **published** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 35 | | *pl:publishing_stage* | publishing_stage | ✓ | ✓ | | | ✓ | ✓ | ✓ | | | | | | | | 36 | | *pl:quality_category* | quality_category | ✓ | ✓ | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 37 | | proj.shape\[0] (assets) | rows | ✓ | ✓ | ✓ | ✓ | | | | ✓ | | | | | ✓ | ✓ | 38 | | view:azimuth | satellite_azimuth | ✓ | ✓ | | | ✓ | ✓ | ✓ | | | | | | | | 39 | | platform | **satellite_id** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 40 | | - | shadow_percent | | ✓ | | | ✓ | ✓ | | | | | | | | | 41 | | eo:snow_cover | snow_ice_percent | | ✓ | | | ✓ | ✓ | | | | | | | | | 42 | | *pl:strip_id* | strip_id | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | | | | 43 | | view:sun_azimuth | **sun_azimuth** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 44 | | view:sun_elevation | **sun_elevation** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 45 | | updated (assets) | **updated** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 46 | | - | usable_data | ✓ | | ✓ | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 47 | | view:off_nadir (absolute value) | **view_angle** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | 48 | | - | visible_confidence_percent | ✓ | ✓ | | | ✓ | ✓ | | | | | | | | | 49 | | - | visible_percent | ✓ | ✓ | | | ✓ | ✓ | | | | | | | | | 50 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stac-extensions", 3 | "version": "development", 4 | "private": "true", 5 | "type": "module", 6 | "scripts": { 7 | "lint": "eslint scripts", 8 | "pretest": "npm run lint", 9 | "test": "npm run check-markdown && npm run check-examples", 10 | "check-markdown": "remark . --frail --rc-path .github/remark.yaml", 11 | "check-examples": "stac-node-validator . --lint --verbose --schemaMap https://planetlabs.github.io/stac-extension/{{version}}/schema.json=./schema.json", 12 | "format-examples": "stac-node-validator . --format --schemaMap https://planetlabs.github.io/stac-extension/{{version}}/schema.json=./schema.json", 13 | "build": "node scripts/build.js" 14 | }, 15 | "devDependencies": { 16 | "@octokit/plugin-retry": "^4.1.3", 17 | "@octokit/rest": "^19.0.7", 18 | "es-main": "^1.2.0", 19 | "eslint": "^8.37.0", 20 | "eslint-config-planet": "^20.0.3", 21 | "fs-extra": "^11.1.1", 22 | "mustache": "^4.2.0", 23 | "remark-cli": "^11.0.0", 24 | "remark-gfm": "^3.0.1", 25 | "remark-lint": "^9.1.1", 26 | "remark-lint-no-html": "^3.1.1", 27 | "remark-preset-lint-consistent": "^5.1.1", 28 | "remark-preset-lint-markdown-style-guide": "^5.1.2", 29 | "remark-preset-lint-recommended": "^6.1.2", 30 | "remark-validate-links": "^12.1.0", 31 | "stac-node-validator": "^1.2.2", 32 | "yargs": "^17.7.1" 33 | }, 34 | "eslintConfig": { 35 | "extends": "planet", 36 | "parserOptions": { 37 | "sourceType": "module", 38 | "ecmaVersion": "latest" 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Planet STAC Extension 2 | 3 | - **Title:** Planet Labs 4 | - **Identifier:** `https://planetlabs.github.io/stac-extension/{{version}}/schema.json` (see the [releases page](https://planetlabs.github.io/stac-extension/) for a list of published versions) 5 | - **Field Name Prefix:** pl 6 | - **Scope:** Item 7 | - **Extension [Maturity Classification](https://github.com/radiantearth/stac-spec/tree/master/extensions/README.md#extension-maturity):** Proposal 8 | - **Owner**: @cholmes @tschaub @m-mohr 9 | 10 | This document describes the Planet Labs Extension to the [SpatioTemporal Asset Catalog](https://github.com/radiantearth/stac-spec) (STAC) specification. The extension defines fields specific to the products offered by Planet Labs. 11 | 12 | The fields defined here are mostly mapped directly from the Item Properties defined in the [Planet API](https://developers.planet.com/docs/apis/data/items-assets/). If possible the fields are mapped to commonly used fields in STAC, including a variety of extensions (e.g. eo, view). See [Field mapping and scope](mapping.md) for a table that maps between Planet Item Properties and STAC fields. Sometimes fields don't map 1:1 and need a slight conversion, which will be mentioned in the description for each field here. It also gives an overview over the fields that are available for the individual item types. 13 | 14 | **The following item types are covered by this extension:** 15 | 16 | - PlanetScope: 17 | - [`PSOrthoTile`](https://developers.planet.com/docs/data/psorthotile/) 18 | - [`PSScene`](https://developers.planet.com/docs/data/psscene/) 19 | - RapidEye: 20 | - [`REOrthoTile`](https://developers.planet.com/docs/data/reorthotile/) 21 | - [`REScene`](https://developers.planet.com/docs/data/rescene/) 22 | - SkySat: 23 | - [`SkySatCollect`](https://developers.planet.com/docs/data/skysatcollect/) 24 | - [`SkySatScene`](https://developers.planet.com/docs/data/skysatscene/) 25 | - [`SkySatVideo`](https://developers.planet.com/docs/data/skysatvideo/) 26 | - Landsat 27 | - [`Landsat8L1G`](https://developers.planet.com/docs/data/landsat-8/) 28 | - MODIS 29 | - [`MOD09GA`, `MYD09GA`, `MOD09GQ`, `MYD09GQ`](https://developers.planet.com/apis/orders/product-bundles-reference/) 30 | - Sentinel 31 | - [`Sentinel1`](https://developers.planet.com/apis/orders/product-bundles-reference/) 32 | - [`Sentinel2L1C`](https://developers.planet.com/docs/data/sentinel2l1c/) 33 | 34 | The deprecated item types `PSScene3Band` and `PSScene4Band` are not supported and will not be validated. 35 | 36 | **Important links for this extension:** 37 | 38 | - Examples: 39 | - [Browse in STAC Browser](https://radiantearth.github.io/stac-browser/#/external/raw.githubusercontent.com/planetlabs/stac-extension/main/examples/catalog.json) 40 | - PlanetScope: 41 | - [PSScene Item](examples/items/psscene.json) 42 | - [PSOrthoTile Item](examples/items/psorthotile.json) 43 | - RapidEye: 44 | - [REOrthoTile Item](examples/items/psorthotile.json) 45 | - [REScene Item](examples/items/rescene.json) 46 | - SkySat: 47 | - [SkySatCollect Item](examples/items/skysatcollect.json) 48 | - [SkySatScene Item](examples/items/skysatscene.json) 49 | - Others: 50 | - [Landsat8L1G Item](examples/items/Landsat8L1G.json) 51 | - [MOD09GA Item](examples/items/MOD09GA.json) 52 | - [MOD09GQ Item](examples/items/MOD09GQ.json) 53 | - [MYD09GA Item](examples/items/MYD09GA.json) 54 | - [MYD09GQ Item](examples/items/MYD09GQ.json) 55 | - [Sentinel1 Item](examples/items/Sentinel1.json) 56 | - [Sentinel2L1C Item](examples/items/Sentinel2L1C.json) 57 | - [JSON Schema](./schema.json) 58 | 59 | ## Item Properties Fields 60 | 61 | The fields in the tables below can be used in these parts of STAC documents: 62 | - [ ] Catalogs 63 | - [ ] Collections 64 | - [x] Item Properties (including Summaries in Collections) 65 | - [ ] Assets (for both Collections and Items, including Item Asset Definitions in Collections) 66 | - [ ] Links 67 | 68 | ### Planet-specific 69 | 70 | | Field Name | Type | Description | 71 | | ----------------------- | ------- | ----------- | 72 | | pl:black_fill | number | The percentage of the item containing black fill in the range 0 - 100 (inclusive). | 73 | | pl:clear_percent | number | Percent of clear values in dataset. Percentages must be provided in the range 0 - 100 (inclusive). | 74 | | pl:grid_cell | string | The grid cell identifier of the gridded item. | 75 | | pl:ground_control | boolean | Positional accuracy of the item. If the item has uncertain positional accuracy, this value will be `false`. | 76 | | pl:ground_control_ratio | number | Ratio of individual scenes that are successfully rectified, in the range 0 - 1 (inclusive). Only applies to `SkySatCollect`. | 77 | | pl:item_type | string | **REQUIRED**. Name of the item type. Allowed values: see below | 78 | | pl:pixel_resolution | number | The spatial resolution, in meters. (This is meant to be deprecated in favor of [`spatial_resolution`](https://github.com/radiantearth/stac-spec/issues/1196).) | 79 | | pl:publishing_stage | string | Stage of [publishing for an item](https://developers.planet.com/docs/apis/data/items-assets/#item-publishing-lifecycle). Allowed values: `preview`, `standard`, `finalized`. | 80 | | pl:quality_category | string | Metric for image quality. Allowed values: `standard`, `test`. | 81 | | pl:strip_id | string | The unique identifier of the image stripe that the item came from. | 82 | 83 | **Additional REQUIRED fields per `pl:item_type`:** 84 | 85 | | Field Name | PSOrthoTile | PSScene | REOrthoTile | REScene | SkySatCollect | SkySatScene | SkySatVideo | Landsat8L1G | M(O/Y)D09G(A/Q) | Sentinel1 | Sentinel2L1C | 86 | | ----------------------- | ----------- | ------- | ----------- | ------- | ------------- | ----------- | ----------- | ----------- | --------------- | --------- | ------------ | 87 | | pl:black_fill | ✓ | | ✓ | ✓ | | | | | ✓ | ✓ | ✓ | 88 | | pl:clear_percent | ✓ | ✓ | | | ✓ | ✓ | | | | | | 89 | | pl:grid_cell | ✓ | | ✓ | | | | | | | | | 90 | | pl:ground_control | ✓ | ✓ | ✓ | | | ✓ | | | | | | 91 | | pl:ground_control_ratio | | | | | ✓ | | | | | | | 92 | | pl:pixel_resolution | ✓ | ✓ | ✓ | | ✓ | ✓ | | ✓ | ✓ | | ✓ | 93 | | pl:publishing_stage | ✓ | ✓ | | | ✓ | ✓ | ✓ | | | | | 94 | | pl:quality_category | ✓ | ✓ | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 95 | | pl:strip_id | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | 96 | 97 | #### pl:item_type 98 | 99 | The following values exist for the Planet Labs satellites: 100 | 101 | - PlanetScope: 102 | - [`PSOrthoTile`](https://developers.planet.com/docs/data/psorthotile/) 103 | - [`PSScene`](https://developers.planet.com/docs/data/psscene/) 104 | - RapidEye: 105 | - [`REOrthoTile`](https://developers.planet.com/docs/data/reorthotile/) 106 | - [`REScene`](https://developers.planet.com/docs/data/rescene/) 107 | - SkySat: 108 | - [`SkySatCollect`](https://developers.planet.com/docs/data/skysatcollect/) 109 | - [`SkySatScene`](https://developers.planet.com/docs/data/skysatscene/) 110 | - [`SkySatVideo`](https://developers.planet.com/docs/data/skysatvideo/) 111 | 112 | The following item types don't come from Planet satellites, but have some support in Planet APIs: 113 | 114 | - [`Landsat8L1G`](https://developers.planet.com/docs/data/landsat-8/) 115 | - [`MOD09GA`, `MYD09GA`, `MOD09GQ`, `MYD09GQ`](https://developers.planet.com/apis/orders/product-bundles-reference/) 116 | - [`Sentinel1`](https://developers.planet.com/apis/orders/product-bundles-reference/) 117 | - [`Sentinel2L1C`](https://developers.planet.com/docs/data/sentinel2l1c/) 118 | 119 | ### Other Extensions and Specifications 120 | 121 | This extension uses and requires additional fields from other specifications/extensions. 122 | 123 | The following specifications are relevant here: 124 | - [STAC Common Metadata](https://github.com/radiantearth/stac-spec/blob/master/item-spec/common-metadata.md) 125 | - [STAC EO Extension](https://github.com/stac-extensions/eo) (v1.1.0 or later) 126 | - [STAC Viewing Angles Extension](https://github.com/stac-extensions/view) (v1.0.0 or later) 127 | 128 | | Field Name | Type | Description | 129 | | ------------------ | ---------- | ----------- | 130 | | constellation | string | **REQUIRED**. As defined in common metadata, but restricted to one of the constellations below. | 131 | | platform | string | **REQUIRED.** Globally unique satellite identifier as defined in common metadata, but restricted to the patterns listed below. | 132 | | instruments | \[string\] | The instrument identifier as defined in common metadata, but restricted to those listed below. | 133 | | datetime | string | **REQUIRED**. The acquisition time As defined in common metadata and STAC. | 134 | | gsd | number | Ground sample distance as defined in common metadata. | 135 | | eo:cloud_cover | number | Cloud cover as defined in the EO extension. | 136 | | eo:snow_cover | number | Snow/ice cover as defined in the EO extension. | 137 | | view:azimuth | number | Viewing azimuth angle (0 - 360) as defined in the Viewing Angles extension. | 138 | | view:off_nadir | number | **REQUIRED**. The satellite's across-track, off-nadir viewing angle (0 - 90). | 139 | | view:sun_azimuth | number | **REQUIRED**. Sun azimuth angle as defined in the Viewing Angles extension (0 - 360). | 140 | | view:sun_elevation | number | **REQUIRED**. Sun elevation angle as defined in the Viewing Angles extension (-90 - 90). | 141 | 142 | **Additional REQUIRED fields per `pl:item_type`:** 143 | 144 | | Field Name | PSOrthoTile | PSScene | REOrthoTile | REScene | SkySatCollect | SkySatScene | SkySatVideo | Landsat8L1G | M(O/Y)D09G(A/Q) | Sentinel1 | Sentinel2L1C | 145 | | -------------- | ----------- | ------- | ----------- | ------- | ------------- | ----------- | ----------- | ----------- | --------------- | --------- | ------------ | 146 | | instruments | ✓ | ✓ | | | | | | ✓ | ✓ | | ✓ | 147 | | gsd | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | 148 | | eo:cloud_cover | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | | ✓ | 149 | | eo:snow_cover | | ✓ | | | ✓ | ✓ | | | | | | 150 | | view:azimuth | ✓ | ✓ | | | ✓ | ✓ | ✓ | | | | | 151 | | view:sun_azimuth | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 152 | | view:sun_elevation | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 153 | | sar:frequency_band | | | | | | | | | | ✓ | | 154 | | sar:instrument_mode | | | | | | | | | | ✓ | | 155 | | sar:observation_direction | | | | | | | | | | ✓ | | 156 | | sar:polarizations | | | | | | | | | | ✓ | | 157 | | sar:product_type | | | | | | | | | | ✓ | | 158 | 159 | #### constellation 160 | 161 | The following values exist for the Planet Labs satellites: 162 | 163 | - PlanetScope: `planetscope` 164 | - RapidEye: `rapideye` 165 | - SkySat: `skysat` 166 | 167 | For non Planet Satellites: 168 | 169 | - Landsat8/MODIS: `usgs` 170 | - Sentinel: `esa` 171 | 172 | #### platform 173 | 174 | The following patterns are allowed for the Planet Labs satellites: 175 | 176 | - PlanetScope: `[0-9a-f]{2,}` (e.g. `0c08`, `227c`, etc.) 177 | - RapidEye: `RapidEye-\d+` (e.g. `RapidEye-1`, `RapidEye-2`, etc.) 178 | - SkySat: `SS(C\\d+|01|02)` (e.g. `SS01`, `SSC1`, `SSC19`, etc.) 179 | 180 | For non Planet Satellites: 181 | 182 | - Landsat8: `Landsat8` 183 | - MODIS: `Terra` or `Aqua` 184 | - Sentinel: `Sentinel\w+` 185 | 186 | #### instruments 187 | 188 | The following values exist for the Planet Labs satellites: 189 | 190 | - PlanetScope: `PS2` (Dove Classic), `PS2.SD` (Dove-R), `PSB.SD` (SuperDove) 191 | - RapidEye: n/a 192 | - SkySat: n/a 193 | 194 | For non Planet Satellites: 195 | 196 | - Landsat8: `OLI_TIRS` 197 | - MODIS: `MODIS` 198 | - Sentinel1: n/a 199 | - Sentinel2: `MSI` 200 | 201 | Please note that the `instruments` field is always specified as an array. 202 | 203 | #### view:off_nadir 204 | 205 | This field is basically the `view_angle` field in the Planet API. The values are equal for SkySat and Planetscope, but for RapidEye they can also be negative (positive numbers denote east, negative numbers denote west). So the `view_angle` as defined by the Planet API maps 1:1 to `view:off_nadir`, but **for RapidEye you have to use the absolute value of `view_angle`**. 206 | 207 | ## Asset Fields 208 | 209 | ### Planet-specific 210 | 211 | The fields in the tables below can be used in these parts of STAC documents: 212 | - [ ] Catalogs 213 | - [ ] Collections 214 | - [ ] Item Properties (incl. Summaries in Collections) 215 | - [x] Assets (for both Collections and Items, incl. Item Asset Definitions in Collections) 216 | - [ ] Links 217 | 218 | | Field Name | Type | Description | 219 | | -------------- | ------ | ----------- | 220 | | pl:asset_type | string | The type of asset. | 221 | | pl:bundle_type | string | The type of bundle the asset belongs to. | 222 | 223 | ### pl:asset_type 224 | 225 | These asset types are specific to Planet and may lead to additional requirements in the future. 226 | 227 | The allowed asset types can be found here per item type: 228 | 229 | - PlanetScope: 230 | - [`PSOrthoTile`](https://developers.planet.com/docs/data/psorthotile/#available-asset-types) 231 | - [`PSScene`](https://developers.planet.com/docs/data/psscene/#available-asset-types) 232 | - RapidEye: 233 | - [`REOrthoTile`](https://developers.planet.com/docs/data/reorthotile/#available-asset-types) 234 | - [`REScene`](https://developers.planet.com/docs/data/rescene/#available-asset-types) 235 | - SkySat: 236 | - [`SkySatCollect`](https://developers.planet.com/docs/data/skysatcollect/#available-asset-types) 237 | - [`SkySatScene`](https://developers.planet.com/docs/data/skysatscene/#available-asset-types) 238 | - [`SkySatVideo`](https://developers.planet.com/docs/data/skysatvideo/#available-asset-types) 239 | - Landsat, Sentinel, MODIS 240 | - These asset types aren't documented as much on the Planet side, but can be explored [here](https://developers.planet.com/apis/orders/product-bundles-reference/) or in the schema 241 | 242 | The [JSON Schema](./schema.json) also provides a full list of all allowed values. 243 | 244 | ### Other Extensions and Specifications 245 | 246 | Additionally, this extension uses and partially requires additional fields from other specifications/ extensions. The following specifications are relevant here: 247 | - [STAC Common Metadata](https://github.com/radiantearth/stac-spec/blob/master/item-spec/common-metadata.md) 248 | - [STAC Projection Extension](https://github.com/stac-extensions/projection) (v1.1.0 or later) 249 | - [STAC Raster Extension](https://github.com/stac-extensions/raster) (v1.0.0 or later) 250 | - [STAC Timestamps Extension](https://github.com/stac-extensions/timestamps) (v1.1.0 or later) 251 | 252 | For Sentinel1 253 | - [STAC SAR Extension](https://github.com/stac-extensions/sar) (v1.0.0 or later) 254 | 255 | | Field Name | Type | Description | 256 | | ------------ | ----------- | ----------- | 257 | | published | string | **REQUIRED**. Time of data publication as defined in the STAC Timestamps Extension. | 258 | | updated | string | **REQUIRED**. Time of most recent data update as defined in STAC Common Metadata. | 259 | | proj:espg | integer | The EPSG code as defined in the Projection extension. | 260 | | proj:shape | \[integer\] | The number of rows and cols in the image as defined in the Projection extension. | 261 | | raster:bands | \[[Raster Band Object](https://github.com/stac-extensions/raster#raster-band-object)] | The bands of the file with a `spatial_resolution`. | 262 | 263 | These fields should only be provided for actual data files (e.g. COG), not for metadata (e.g. XML). Currently, the JSON Schema does not fully validate these fields. 264 | 265 | The fields defined in the [Projection extension](https://github.com/stac-extensions/projection#fields) can either be used at the Asset-level or go into the Item Properties. To avoid ambiguities it is recommended to have them at the Asset-level, but both is allowed. 266 | 267 | **Additional REQUIRED fields per `pl:item_type`:** 268 | 269 | | Field Name | PSOrthoTile | PSScene | REOrthoTile | REScene | SkySatCollect | SkySatScene | SkySatVideo | Landsat8L1G | M(O/Y)D09G(A/Q) | Sentinel1 | Sentinel2L1C | 270 | | ------------------------------------ | ----------- | ------- | ----------- | ------- | ------------- | ----------- | ----------- | ----------- | --------------- | --------- | ------------ | 271 | | proj:epsg | ✓ | | ✓ | | | | | ✓ | | ✓ | ✓ | 272 | | proj.shape | ✓ | ✓ | ✓ | ✓ | | | | ✓ | | ✓ | ✓ | 273 | | raster:bands\[\*].spatial_resolution | ✓ | ✓ | ✓ | | ✓ | ✓ | | ✓ | | | ✓ | 274 | 275 | *Note: These requirements are not enforced in the JSON Schema yet.* 276 | 277 | ## Providers 278 | 279 | For the `providers` field in a STAC Collection (or in the STAC Item Properties), it is recommended to provide the following details for Planet: 280 | 281 | - Name: `Planet Labs PBC` 282 | - Roles: at least `producer` and `licensor` 283 | -------------------------------------------------------------------------------- /schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id": "https://planetlabs.github.io/stac-extension/{{version}}/schema.json#", 4 | "title": "Planet Labs Extension", 5 | "description": "STAC Planet Labs Extension for STAC Items and STAC Collections. Validates the fields, doesn't require specific assets to be present.", 6 | "type": "object", 7 | "required": [ 8 | "stac_extensions", 9 | "type" 10 | ], 11 | "properties": { 12 | "stac_extensions": { 13 | "type": "array", 14 | "contains": { 15 | "const": "https://planetlabs.github.io/stac-extension/{{version}}/schema.json" 16 | } 17 | } 18 | }, 19 | "allOf": [ 20 | { 21 | "$comment": "This is the schema for STAC Items.", 22 | "if": { 23 | "$ref": "#/definitions/is_stac_item" 24 | }, 25 | "then": { 26 | "required": [ 27 | "properties", 28 | "assets" 29 | ], 30 | "properties": { 31 | "properties": { 32 | "type": "object", 33 | "required": [ 34 | "pl:item_type", 35 | "constellation", 36 | "platform", 37 | "datetime", 38 | "view:off_nadir", 39 | "view:sun_azimuth", 40 | "view:sun_elevation" 41 | ], 42 | "allOf": [ 43 | { 44 | "title": "Landsat8L1G", 45 | "if": { 46 | "$ref": "#/definitions/types/Landsat8L1G" 47 | }, 48 | "then": { 49 | "required": [ 50 | "pl:pixel_resolution", 51 | "pl:quality_category", 52 | "gsd" 53 | ], 54 | "properties": { 55 | "pl:item_type": { 56 | "$ref": "#/definitions/fields/pl:item_type" 57 | }, 58 | "pl:quality_category": { 59 | "$ref": "#/definitions/fields/pl:quality_category" 60 | }, 61 | "pl:pixel_resolution": { 62 | "$ref": "#/definitions/fields/pl:pixel_resolution" 63 | } 64 | }, 65 | "patternProperties": { 66 | "^(?!pl:)": {} 67 | }, 68 | "additionalProperties": false, 69 | "allOf": [ 70 | { 71 | "$ref": "#/definitions/properties/common_metadata/landsat" 72 | } 73 | ] 74 | }, 75 | "else": { 76 | "not": { 77 | "$ref": "#/definitions/types/Landsat8L1G" 78 | } 79 | } 80 | }, 81 | { 82 | "title": "MOD09GA", 83 | "if": { 84 | "$ref": "#/definitions/types/MOD09GA" 85 | }, 86 | "then": { 87 | "required": [ 88 | "pl:black_fill", 89 | "pl:pixel_resolution", 90 | "pl:quality_category", 91 | "eo:cloud_cover", 92 | "gsd" 93 | ], 94 | "properties": { 95 | "pl:item_type": { 96 | "$ref": "#/definitions/fields/pl:item_type" 97 | }, 98 | "pl:black_fill": { 99 | "$ref": "#/definitions/fields/pl:black_fill" 100 | }, 101 | "pl:quality_category": { 102 | "$ref": "#/definitions/fields/pl:quality_category" 103 | }, 104 | "pl:pixel_resolution": { 105 | "$ref": "#/definitions/fields/pl:pixel_resolution" 106 | } 107 | }, 108 | "patternProperties": { 109 | "^(?!pl:)": {} 110 | }, 111 | "additionalProperties": false, 112 | "allOf": [ 113 | { 114 | "$ref": "#/definitions/properties/common_metadata/modis" 115 | } 116 | ] 117 | }, 118 | "else": { 119 | "not": { 120 | "$ref": "#/definitions/types/MOD09GA" 121 | } 122 | } 123 | }, 124 | { 125 | "title": "MOD09GQ", 126 | "if": { 127 | "$ref": "#/definitions/types/MOD09GQ" 128 | }, 129 | "then": { 130 | "required": [ 131 | "pl:black_fill", 132 | "pl:pixel_resolution", 133 | "pl:quality_category", 134 | "eo:cloud_cover", 135 | "gsd" 136 | ], 137 | "properties": { 138 | "pl:item_type": { 139 | "$ref": "#/definitions/fields/pl:item_type" 140 | }, 141 | "pl:black_fill": { 142 | "$ref": "#/definitions/fields/pl:black_fill" 143 | }, 144 | "pl:quality_category": { 145 | "$ref": "#/definitions/fields/pl:quality_category" 146 | }, 147 | "pl:pixel_resolution": { 148 | "$ref": "#/definitions/fields/pl:pixel_resolution" 149 | } 150 | }, 151 | "patternProperties": { 152 | "^(?!pl:)": {} 153 | }, 154 | "additionalProperties": false, 155 | "allOf": [ 156 | { 157 | "$ref": "#/definitions/properties/common_metadata/modis" 158 | } 159 | ] 160 | }, 161 | "else": { 162 | "not": { 163 | "$ref": "#/definitions/types/MOD09GQ" 164 | } 165 | } 166 | }, 167 | { 168 | "title": "MYD09GA", 169 | "if": { 170 | "$ref": "#/definitions/types/MYD09GA" 171 | }, 172 | "then": { 173 | "required": [ 174 | "pl:black_fill", 175 | "pl:pixel_resolution", 176 | "pl:quality_category", 177 | "eo:cloud_cover", 178 | "gsd" 179 | ], 180 | "properties": { 181 | "pl:item_type": { 182 | "$ref": "#/definitions/fields/pl:item_type" 183 | }, 184 | "pl:black_fill": { 185 | "$ref": "#/definitions/fields/pl:black_fill" 186 | }, 187 | "pl:quality_category": { 188 | "$ref": "#/definitions/fields/pl:quality_category" 189 | }, 190 | "pl:pixel_resolution": { 191 | "$ref": "#/definitions/fields/pl:pixel_resolution" 192 | } 193 | }, 194 | "patternProperties": { 195 | "^(?!pl:)": {} 196 | }, 197 | "additionalProperties": false, 198 | "allOf": [ 199 | { 200 | "$ref": "#/definitions/properties/common_metadata/modis" 201 | } 202 | ] 203 | }, 204 | "else": { 205 | "not": { 206 | "$ref": "#/definitions/types/MYD09GA" 207 | } 208 | } 209 | }, 210 | { 211 | "title": "MYD09GQ", 212 | "if": { 213 | "$ref": "#/definitions/types/MYD09GQ" 214 | }, 215 | "then": { 216 | "required": [ 217 | "pl:black_fill", 218 | "pl:pixel_resolution", 219 | "pl:quality_category", 220 | "eo:cloud_cover", 221 | "gsd" 222 | ], 223 | "properties": { 224 | "pl:item_type": { 225 | "$ref": "#/definitions/fields/pl:item_type" 226 | }, 227 | "pl:black_fill": { 228 | "$ref": "#/definitions/fields/pl:black_fill" 229 | }, 230 | "pl:quality_category": { 231 | "$ref": "#/definitions/fields/pl:quality_category" 232 | }, 233 | "pl:pixel_resolution": { 234 | "$ref": "#/definitions/fields/pl:pixel_resolution" 235 | } 236 | }, 237 | "patternProperties": { 238 | "^(?!pl:)": {} 239 | }, 240 | "additionalProperties": false, 241 | "allOf": [ 242 | { 243 | "$ref": "#/definitions/properties/common_metadata/modis" 244 | } 245 | ] 246 | }, 247 | "else": { 248 | "not": { 249 | "$ref": "#/definitions/types/MYD09GQ" 250 | } 251 | } 252 | }, 253 | { 254 | "title": "PSOrthoTile", 255 | "if": { 256 | "$ref": "#/definitions/types/PSOrthoTile" 257 | }, 258 | "then": { 259 | "required": [ 260 | "pl:black_fill", 261 | "pl:clear_percent", 262 | "pl:grid_cell", 263 | "pl:ground_control", 264 | "pl:pixel_resolution", 265 | "pl:publishing_stage", 266 | "pl:quality_category", 267 | "pl:strip_id", 268 | "instruments", 269 | "gsd", 270 | "eo:cloud_cover", 271 | "view:azimuth" 272 | ], 273 | "properties": { 274 | "pl:item_type": { 275 | "$ref": "#/definitions/fields/pl:item_type" 276 | }, 277 | "pl:strip_id": { 278 | "$ref": "#/definitions/fields/pl:strip_id" 279 | }, 280 | "pl:black_fill": { 281 | "$ref": "#/definitions/fields/pl:black_fill" 282 | }, 283 | "pl:clear_percent": { 284 | "$ref": "#/definitions/fields/pl:clear_percent" 285 | }, 286 | "pl:grid_cell": { 287 | "$ref": "#/definitions/fields/pl:grid_cell" 288 | }, 289 | "pl:ground_control": { 290 | "$ref": "#/definitions/fields/pl:ground_control" 291 | }, 292 | "pl:pixel_resolution": { 293 | "$ref": "#/definitions/fields/pl:pixel_resolution" 294 | }, 295 | "pl:publishing_stage": { 296 | "$ref": "#/definitions/fields/pl:publishing_stage" 297 | }, 298 | "pl:quality_category": { 299 | "$ref": "#/definitions/fields/pl:quality_category" 300 | } 301 | }, 302 | "patternProperties": { 303 | "^(?!pl:)": {} 304 | }, 305 | "additionalProperties": false, 306 | "allOf": [ 307 | { 308 | "$ref": "#/definitions/properties/common_metadata/ps" 309 | } 310 | ] 311 | }, 312 | "else": { 313 | "not": { 314 | "$ref": "#/definitions/types/PSOrthoTile" 315 | } 316 | } 317 | }, 318 | { 319 | "title": "PSScene", 320 | "if": { 321 | "$ref": "#/definitions/types/PSScene" 322 | }, 323 | "then": { 324 | "required": [ 325 | "pl:clear_percent", 326 | "pl:ground_control", 327 | "pl:pixel_resolution", 328 | "pl:publishing_stage", 329 | "pl:quality_category", 330 | "pl:strip_id", 331 | "instruments", 332 | "gsd", 333 | "eo:cloud_cover", 334 | "eo:snow_cover", 335 | "view:azimuth" 336 | ], 337 | "properties": { 338 | "pl:item_type": { 339 | "$ref": "#/definitions/fields/pl:item_type" 340 | }, 341 | "pl:strip_id": { 342 | "$ref": "#/definitions/fields/pl:strip_id" 343 | }, 344 | "pl:clear_percent": { 345 | "$ref": "#/definitions/fields/pl:clear_percent" 346 | }, 347 | "pl:ground_control": { 348 | "$ref": "#/definitions/fields/pl:ground_control" 349 | }, 350 | "pl:pixel_resolution": { 351 | "$ref": "#/definitions/fields/pl:pixel_resolution" 352 | }, 353 | "pl:publishing_stage": { 354 | "$ref": "#/definitions/fields/pl:publishing_stage" 355 | }, 356 | "pl:quality_category": { 357 | "$ref": "#/definitions/fields/pl:quality_category" 358 | } 359 | }, 360 | "patternProperties": { 361 | "^(?!pl:)": {} 362 | }, 363 | "additionalProperties": false, 364 | "allOf": [ 365 | { 366 | "$ref": "#/definitions/properties/common_metadata/ps" 367 | } 368 | ] 369 | }, 370 | "else": { 371 | "not": { 372 | "$ref": "#/definitions/types/PSScene" 373 | } 374 | } 375 | }, 376 | { 377 | "title": "REOrthoTile", 378 | "if": { 379 | "$ref": "#/definitions/types/REOrthoTile" 380 | }, 381 | "then": { 382 | "required": [ 383 | "pl:black_fill", 384 | "pl:grid_cell", 385 | "pl:ground_control", 386 | "pl:pixel_resolution", 387 | "pl:strip_id", 388 | "gsd", 389 | "eo:cloud_cover" 390 | ], 391 | "properties": { 392 | "pl:item_type": { 393 | "$ref": "#/definitions/fields/pl:item_type" 394 | }, 395 | "pl:strip_id": { 396 | "$ref": "#/definitions/fields/pl:strip_id" 397 | }, 398 | "pl:black_fill": { 399 | "$ref": "#/definitions/fields/pl:black_fill" 400 | }, 401 | "pl:grid_cell": { 402 | "$ref": "#/definitions/fields/pl:grid_cell" 403 | }, 404 | "pl:ground_control": { 405 | "$ref": "#/definitions/fields/pl:ground_control" 406 | }, 407 | "pl:pixel_resolution": { 408 | "$ref": "#/definitions/fields/pl:pixel_resolution" 409 | } 410 | }, 411 | "patternProperties": { 412 | "^(?!pl:)": {} 413 | }, 414 | "additionalProperties": false, 415 | "allOf": [ 416 | { 417 | "$ref": "#/definitions/properties/common_metadata/re" 418 | } 419 | ] 420 | }, 421 | "else": { 422 | "not": { 423 | "$ref": "#/definitions/types/REOrthoTile" 424 | } 425 | } 426 | }, 427 | { 428 | "title": "REScene", 429 | "if": { 430 | "$ref": "#/definitions/types/REScene" 431 | }, 432 | "then": { 433 | "required": [ 434 | "pl:black_fill", 435 | "pl:strip_id", 436 | "gsd", 437 | "eo:cloud_cover" 438 | ], 439 | "properties": { 440 | "pl:item_type": { 441 | "$ref": "#/definitions/fields/pl:item_type" 442 | }, 443 | "pl:strip_id": { 444 | "$ref": "#/definitions/fields/pl:strip_id" 445 | }, 446 | "pl:black_fill": { 447 | "$ref": "#/definitions/fields/pl:black_fill" 448 | } 449 | }, 450 | "patternProperties": { 451 | "^(?!pl:)": {} 452 | }, 453 | "additionalProperties": false, 454 | "allOf": [ 455 | { 456 | "$ref": "#/definitions/properties/common_metadata/re" 457 | } 458 | ] 459 | }, 460 | "else": { 461 | "not": { 462 | "$ref": "#/definitions/types/REScene" 463 | } 464 | } 465 | }, 466 | { 467 | "title": "Sentinel1", 468 | "if": { 469 | "$ref": "#/definitions/types/Sentinel1" 470 | }, 471 | "then": { 472 | "required": [ 473 | "pl:black_fill", 474 | "pl:pixel_resolution", 475 | "pl:quality_category", 476 | "sar:frequency_band", 477 | "sar:instrument_mode", 478 | "sar:observation_direction", 479 | "sar:polarizations", 480 | "sar:product_type", 481 | "gsd" 482 | ], 483 | "properties": { 484 | "pl:item_type": { 485 | "$ref": "#/definitions/fields/pl:item_type" 486 | }, 487 | "pl:black_fill": { 488 | "$ref": "#/definitions/fields/pl:black_fill" 489 | }, 490 | "pl:quality_category": { 491 | "$ref": "#/definitions/fields/pl:quality_category" 492 | }, 493 | "pl:pixel_resolution": { 494 | "$ref": "#/definitions/fields/pl:pixel_resolution" 495 | } 496 | }, 497 | "patternProperties": { 498 | "^(?!pl:)": {} 499 | }, 500 | "additionalProperties": false, 501 | "allOf": [ 502 | { 503 | "$ref": "#/definitions/properties/common_metadata/sentinel" 504 | } 505 | ] 506 | }, 507 | "else": { 508 | "not": { 509 | "$ref": "#/definitions/types/Sentinel1" 510 | } 511 | } 512 | }, 513 | { 514 | "title": "Sentinel2L1C", 515 | "if": { 516 | "$ref": "#/definitions/types/Sentinel2L1C" 517 | }, 518 | "then": { 519 | "required": [ 520 | "pl:black_fill", 521 | "pl:pixel_resolution", 522 | "pl:quality_category", 523 | "eo:cloud_cover", 524 | "gsd" 525 | ], 526 | "properties": { 527 | "pl:item_type": { 528 | "$ref": "#/definitions/fields/pl:item_type" 529 | }, 530 | "pl:black_fill": { 531 | "$ref": "#/definitions/fields/pl:black_fill" 532 | }, 533 | "pl:quality_category": { 534 | "$ref": "#/definitions/fields/pl:quality_category" 535 | }, 536 | "pl:pixel_resolution": { 537 | "$ref": "#/definitions/fields/pl:pixel_resolution" 538 | } 539 | }, 540 | "patternProperties": { 541 | "^(?!pl:)": {} 542 | }, 543 | "additionalProperties": false, 544 | "allOf": [ 545 | { 546 | "$ref": "#/definitions/properties/common_metadata/sentinel" 547 | } 548 | ] 549 | }, 550 | "else": { 551 | "not": { 552 | "$ref": "#/definitions/types/Sentinel2L1C" 553 | } 554 | } 555 | }, 556 | { 557 | "title": "SkySatCollect", 558 | "if": { 559 | "$ref": "#/definitions/types/SkySatCollect" 560 | }, 561 | "then": { 562 | "required": [ 563 | "pl:clear_percent", 564 | "pl:ground_control_ratio", 565 | "pl:pixel_resolution", 566 | "pl:publishing_stage", 567 | "pl:quality_category", 568 | "pl:strip_id", 569 | "gsd", 570 | "eo:cloud_cover", 571 | "eo:snow_cover", 572 | "view:azimuth" 573 | ], 574 | "properties": { 575 | "pl:item_type": { 576 | "$ref": "#/definitions/fields/pl:item_type" 577 | }, 578 | "pl:strip_id": { 579 | "$ref": "#/definitions/fields/pl:strip_id" 580 | }, 581 | "pl:clear_percent": { 582 | "$ref": "#/definitions/fields/pl:clear_percent" 583 | }, 584 | "pl:ground_control_ratio": { 585 | "$ref": "#/definitions/fields/pl:ground_control_ratio" 586 | }, 587 | "pl:publishing_stage": { 588 | "$ref": "#/definitions/fields/pl:publishing_stage" 589 | }, 590 | "pl:quality_category": { 591 | "$ref": "#/definitions/fields/pl:quality_category" 592 | }, 593 | "pl:pixel_resolution": { 594 | "$ref": "#/definitions/fields/pl:pixel_resolution" 595 | } 596 | }, 597 | "patternProperties": { 598 | "^(?!pl:)": {} 599 | }, 600 | "additionalProperties": false, 601 | "allOf": [ 602 | { 603 | "$ref": "#/definitions/properties/common_metadata/ss" 604 | } 605 | ] 606 | }, 607 | "else": { 608 | "not": { 609 | "$ref": "#/definitions/types/SkySatCollect" 610 | } 611 | } 612 | }, 613 | { 614 | "title": "SkySatScene", 615 | "if": { 616 | "$ref": "#/definitions/types/SkySatScene" 617 | }, 618 | "then": { 619 | "required": [ 620 | "pl:clear_percent", 621 | "pl:ground_control", 622 | "pl:pixel_resolution", 623 | "pl:publishing_stage", 624 | "pl:quality_category", 625 | "pl:strip_id", 626 | "gsd", 627 | "eo:cloud_cover", 628 | "eo:snow_cover", 629 | "view:azimuth" 630 | ], 631 | "properties": { 632 | "pl:item_type": { 633 | "$ref": "#/definitions/fields/pl:item_type" 634 | }, 635 | "pl:strip_id": { 636 | "$ref": "#/definitions/fields/pl:strip_id" 637 | }, 638 | "pl:clear_percent": { 639 | "$ref": "#/definitions/fields/pl:clear_percent" 640 | }, 641 | "pl:ground_control": { 642 | "$ref": "#/definitions/fields/pl:ground_control" 643 | }, 644 | "pl:publishing_stage": { 645 | "$ref": "#/definitions/fields/pl:publishing_stage" 646 | }, 647 | "pl:quality_category": { 648 | "$ref": "#/definitions/fields/pl:quality_category" 649 | }, 650 | "pl:pixel_resolution": { 651 | "$ref": "#/definitions/fields/pl:pixel_resolution" 652 | } 653 | }, 654 | "patternProperties": { 655 | "^(?!pl:)": {} 656 | }, 657 | "additionalProperties": false, 658 | "allOf": [ 659 | { 660 | "$ref": "#/definitions/properties/common_metadata/ss" 661 | } 662 | ] 663 | }, 664 | "else": { 665 | "not": { 666 | "$ref": "#/definitions/types/SkySatScene" 667 | } 668 | } 669 | }, 670 | { 671 | "title": "SkySatVideo", 672 | "if": { 673 | "$ref": "#/definitions/types/SkySatVideo" 674 | }, 675 | "then": { 676 | "required": [ 677 | "pl:publishing_stage", 678 | "pl:quality_category", 679 | "pl:strip_id", 680 | "view:azimuth" 681 | ], 682 | "properties": { 683 | "pl:item_type": { 684 | "$ref": "#/definitions/fields/pl:item_type" 685 | }, 686 | "pl:strip_id": { 687 | "$ref": "#/definitions/fields/pl:strip_id" 688 | }, 689 | "pl:publishing_stage": { 690 | "$ref": "#/definitions/fields/pl:publishing_stage" 691 | }, 692 | "pl:quality_category": { 693 | "$ref": "#/definitions/fields/pl:quality_category" 694 | } 695 | }, 696 | "patternProperties": { 697 | "^(?!pl:)": {} 698 | }, 699 | "additionalProperties": false, 700 | "allOf": [ 701 | { 702 | "$ref": "#/definitions/properties/common_metadata/ss" 703 | } 704 | ] 705 | }, 706 | "else": { 707 | "not": { 708 | "$ref": "#/definitions/types/SkySatVideo" 709 | } 710 | } 711 | } 712 | ] 713 | }, 714 | "assets": { 715 | "$ref": "#/definitions/assets" 716 | } 717 | } 718 | }, 719 | "else": { 720 | "$ref": "#/definitions/is_stac_collection" 721 | } 722 | }, 723 | { 724 | "$comment": "This is the schema for STAC Collections.", 725 | "type": "object", 726 | "if": { 727 | "$ref": "#/definitions/is_stac_collection" 728 | }, 729 | "then": { 730 | "anyOf": [ 731 | { 732 | "$comment": "This validates the fields in Collection Assets.", 733 | "required": [ 734 | "assets" 735 | ], 736 | "properties": { 737 | "assets": { 738 | "$ref": "#/definitions/assets" 739 | } 740 | } 741 | }, 742 | { 743 | "$comment": "This is the schema for the fields in Item Asset Definitions.", 744 | "required": [ 745 | "item_assets" 746 | ], 747 | "properties": { 748 | "item_assets": { 749 | "$ref": "#/definitions/assets" 750 | } 751 | } 752 | }, 753 | { 754 | "$comment": "This is the schema for the fields in Summaries. By default, only checks the existence of the properties, but not the schema of the summaries.", 755 | "required": [ 756 | "summaries" 757 | ], 758 | "properties": { 759 | "summaries": { 760 | "$ref": "#/definitions/require_any_field" 761 | } 762 | } 763 | } 764 | ] 765 | }, 766 | "else": { 767 | "$ref": "#/definitions/is_stac_item" 768 | } 769 | } 770 | ], 771 | "definitions": { 772 | "is_stac_item": { 773 | "properties": { 774 | "type": { 775 | "const": "Feature" 776 | } 777 | } 778 | }, 779 | "is_stac_collection": { 780 | "properties": { 781 | "type": { 782 | "const": "Collection" 783 | } 784 | } 785 | }, 786 | "require_any_field": { 787 | "$comment": "Please list all fields here so that we can force the existence of one of them in other parts of the schemas.", 788 | "anyOf": [ 789 | { 790 | "required": [ 791 | "pl:black_fill" 792 | ] 793 | }, 794 | { 795 | "required": [ 796 | "pl:clear_percent" 797 | ] 798 | }, 799 | { 800 | "required": [ 801 | "pl:grid_cell" 802 | ] 803 | }, 804 | { 805 | "required": [ 806 | "pl:ground_control" 807 | ] 808 | }, 809 | { 810 | "required": [ 811 | "pl:ground_control_ratio" 812 | ] 813 | }, 814 | { 815 | "required": [ 816 | "pl:item_type" 817 | ] 818 | }, 819 | { 820 | "required": [ 821 | "pl:pixel_resolution" 822 | ] 823 | }, 824 | { 825 | "required": [ 826 | "pl:publishing_stage" 827 | ] 828 | }, 829 | { 830 | "required": [ 831 | "pl:quality_category" 832 | ] 833 | }, 834 | { 835 | "required": [ 836 | "pl:strip_id" 837 | ] 838 | } 839 | ] 840 | }, 841 | "assets": { 842 | "$comment": "Only validates whether the pl: fields in the assets are generally valid, but doesn't check specific asset types or so.", 843 | "additionalProperties": { 844 | "type": "object", 845 | "properties": { 846 | "pl:asset_type": { 847 | "type": "string", 848 | "enum": [ 849 | "analytic", 850 | "analytic_5b", 851 | "analytic_5b_xml", 852 | "analytic_8b", 853 | "analytic_8b_sr", 854 | "analytic_8b_xml", 855 | "analytic_b1", 856 | "analytic_b10", 857 | "analytic_b11", 858 | "analytic_b12", 859 | "analytic_b2", 860 | "analytic_b3", 861 | "analytic_b4", 862 | "analytic_b5", 863 | "analytic_b6", 864 | "analytic_b7", 865 | "analytic_b8", 866 | "analytic_b8a", 867 | "analytic_b9", 868 | "analytic_bqa", 869 | "analytic_dn", 870 | "analytic_dn_xml", 871 | "analytic_gflags", 872 | "analytic_granule_pnt", 873 | "analytic_iobs_res", 874 | "analytic_ms", 875 | "analytic_num_observations", 876 | "analytic_num_observations_1km", 877 | "analytic_num_observations_500m", 878 | "analytic_obscov", 879 | "analytic_obscov_500m", 880 | "analytic_orbit_pnt", 881 | "analytic_q_scan", 882 | "analytic_qc_250m", 883 | "analytic_qc_500m", 884 | "analytic_range", 885 | "analytic_sensor_azimuth", 886 | "analytic_sensor_zenith", 887 | "analytic_solar_azimuth", 888 | "analytic_solar_zenith", 889 | "analytic_sr", 890 | "analytic_state_1km", 891 | "analytic_sur_refl_b01", 892 | "analytic_sur_refl_b02", 893 | "analytic_sur_refl_b03", 894 | "analytic_sur_refl_b04", 895 | "analytic_sur_refl_b05", 896 | "analytic_sur_refl_b06", 897 | "analytic_sur_refl_b07", 898 | "analytic_xml", 899 | "basic_analytic", 900 | "basic_analytic_4b_rpc", 901 | "basic_analytic_4b", 902 | "basic_analytic_4b_xml", 903 | "basic_analytic_8b", 904 | "basic_analytic_8b_xml", 905 | "basic_analytic_b1", 906 | "basic_analytic_b1_nitf", 907 | "basic_analytic_b2", 908 | "basic_analytic_b2_nitf", 909 | "basic_analytic_b3", 910 | "basic_analytic_b3_nitf", 911 | "basic_analytic_b4", 912 | "basic_analytic_b4_nitf", 913 | "basic_analytic_b5", 914 | "basic_analytic_b5_nitf", 915 | "basic_analytic_dn", 916 | "basic_analytic_dn_nitf", 917 | "basic_analytic_dn_rpc", 918 | "basic_analytic_dn_rpc_nitf", 919 | "basic_analytic_dn_xml", 920 | "basic_analytic_dn_xml_nitf", 921 | "basic_analytic_nitf", 922 | "basic_analytic_rpc", 923 | "basic_analytic_rpc_nitf", 924 | "basic_analytic_sci", 925 | "basic_analytic_udm", 926 | "basic_analytic_udm2", 927 | "basic_analytic_xml", 928 | "basic_analytic_xml_nitf", 929 | "basic_l1a_all_frames", 930 | "basic_l1a_panchromatic_dn", 931 | "basic_l1a_panchromatic_dn_rpc", 932 | "basic_panchromatic", 933 | "basic_panchromatic_dn", 934 | "basic_panchromatic_dn_rpc", 935 | "basic_panchromatic_rpc", 936 | "basic_panchromatic_udm2", 937 | "basic_udm", 938 | "basic_udm2", 939 | "browse", 940 | "metadata_aux", 941 | "metadata_txt", 942 | "ortho_analytic", 943 | "ortho_analytic_3b", 944 | "ortho_analytic_3b_xml", 945 | "ortho_analytic_4b", 946 | "ortho_analytic_4b_sr", 947 | "ortho_analytic_4b_xml", 948 | "ortho_analytic_8b", 949 | "ortho_analytic_8b_sr", 950 | "ortho_analytic_8b_xml", 951 | "ortho_analytic_dn", 952 | "ortho_analytic_hh", 953 | "ortho_analytic_hv", 954 | "ortho_analytic_sr", 955 | "ortho_analytic_udm", 956 | "ortho_analytic_udm2", 957 | "ortho_analytic_vh", 958 | "ortho_analytic_vv", 959 | "ortho_panchromatic", 960 | "ortho_panchromatic_dn", 961 | "ortho_panchromatic_udm", 962 | "ortho_panchromatic_udm2", 963 | "ortho_pansharpened", 964 | "ortho_pansharpened_udm", 965 | "ortho_pansharpened_udm2", 966 | "ortho_udm2", 967 | "ortho_visual", 968 | "udm", 969 | "udm2", 970 | "video_file", 971 | "video_frames", 972 | "video_metadata", 973 | "visual", 974 | "visual_xml" 975 | ] 976 | }, 977 | "pl:bundle_type": { 978 | "type": "string", 979 | "minLength": 1 980 | } 981 | } 982 | } 983 | }, 984 | "types": { 985 | "Landsat8L1G": { 986 | "properties": { 987 | "pl:item_type": { 988 | "const": "Landsat8L1G" 989 | } 990 | } 991 | }, 992 | "MOD09GA": { 993 | "properties": { 994 | "pl:item_type": { 995 | "const": "MOD09GA" 996 | } 997 | } 998 | }, 999 | "MOD09GQ": { 1000 | "properties": { 1001 | "pl:item_type": { 1002 | "const": "MOD09GQ" 1003 | } 1004 | } 1005 | }, 1006 | "MYD09GA": { 1007 | "properties": { 1008 | "pl:item_type": { 1009 | "const": "MYD09GA" 1010 | } 1011 | } 1012 | }, 1013 | "MYD09GQ": { 1014 | "properties": { 1015 | "pl:item_type": { 1016 | "const": "MYD09GQ" 1017 | } 1018 | } 1019 | }, 1020 | "PSOrthoTile": { 1021 | "properties": { 1022 | "pl:item_type": { 1023 | "const": "PSOrthoTile" 1024 | } 1025 | } 1026 | }, 1027 | "PSScene": { 1028 | "properties": { 1029 | "pl:item_type": { 1030 | "const": "PSScene" 1031 | } 1032 | } 1033 | }, 1034 | "REOrthoTile": { 1035 | "properties": { 1036 | "pl:item_type": { 1037 | "const": "REOrthoTile" 1038 | } 1039 | } 1040 | }, 1041 | "REScene": { 1042 | "properties": { 1043 | "pl:item_type": { 1044 | "const": "REScene" 1045 | } 1046 | } 1047 | }, 1048 | "Sentinel1": { 1049 | "properties": { 1050 | "pl:item_type": { 1051 | "const": "Sentinel1" 1052 | } 1053 | } 1054 | }, 1055 | "Sentinel2L1C": { 1056 | "properties": { 1057 | "pl:item_type": { 1058 | "const": "Sentinel2L1C" 1059 | } 1060 | } 1061 | }, 1062 | "SkySatCollect": { 1063 | "properties": { 1064 | "pl:item_type": { 1065 | "const": "SkySatCollect" 1066 | } 1067 | } 1068 | }, 1069 | "SkySatScene": { 1070 | "properties": { 1071 | "pl:item_type": { 1072 | "const": "SkySatScene" 1073 | } 1074 | } 1075 | }, 1076 | "SkySatVideo": { 1077 | "properties": { 1078 | "pl:item_type": { 1079 | "const": "SkySatVideo" 1080 | } 1081 | } 1082 | } 1083 | }, 1084 | "properties": { 1085 | "common_metadata": { 1086 | "landsat": { 1087 | "properties": { 1088 | "constellation": { 1089 | "const": "usgs" 1090 | }, 1091 | "platform": { 1092 | "const": "Landsat8" 1093 | } 1094 | } 1095 | }, 1096 | "modis": { 1097 | "properties": { 1098 | "constellation": { 1099 | "const": "usgs" 1100 | }, 1101 | "platform": { 1102 | "pattern": "^Terra|Aqua$" 1103 | } 1104 | } 1105 | }, 1106 | "ps": { 1107 | "properties": { 1108 | "constellation": { 1109 | "const": "planetscope" 1110 | }, 1111 | "platform": { 1112 | "pattern": "^[0-9a-f]{4,}$" 1113 | }, 1114 | "instruments": { 1115 | "minItems": 1, 1116 | "items": { 1117 | "enum": [ 1118 | "PS2", 1119 | "PS2.SD", 1120 | "PSB.SD" 1121 | ] 1122 | } 1123 | } 1124 | } 1125 | }, 1126 | "re": { 1127 | "properties": { 1128 | "constellation": { 1129 | "const": "rapideye" 1130 | }, 1131 | "platform": { 1132 | "pattern": "^RapidEye-\\d+$" 1133 | } 1134 | } 1135 | }, 1136 | "sentinel": { 1137 | "properties": { 1138 | "constellation": { 1139 | "const": "esa" 1140 | }, 1141 | "platform": { 1142 | "pattern": "^Sentinel\\S+$" 1143 | } 1144 | } 1145 | }, 1146 | "ss": { 1147 | "properties": { 1148 | "constellation": { 1149 | "const": "skysat" 1150 | }, 1151 | "platform": { 1152 | "pattern": "^SS(C\\d+|01|02)$" 1153 | } 1154 | } 1155 | } 1156 | } 1157 | }, 1158 | "fields": { 1159 | "pl:black_fill": { 1160 | "type": "number", 1161 | "minimum": 0, 1162 | "maximum": 100 1163 | }, 1164 | "pl:clear_percent": { 1165 | "type": "number", 1166 | "minimum": 0, 1167 | "maximum": 100 1168 | }, 1169 | "pl:grid_cell": { 1170 | "type": "string" 1171 | }, 1172 | "pl:ground_control": { 1173 | "type": "boolean" 1174 | }, 1175 | "pl:ground_control_ratio": { 1176 | "type": "number", 1177 | "minimum": 0, 1178 | "maximum": 1 1179 | }, 1180 | "pl:item_type": { 1181 | "type": "string", 1182 | "enum": [ 1183 | "Landsat8L1G", 1184 | "PSOrthoTile", 1185 | "PSScene", 1186 | "PSScene3Band", 1187 | "PSScene4Band", 1188 | "MOD09GA", 1189 | "MOD09GQ", 1190 | "MYD09GA", 1191 | "MYD09GQ", 1192 | "REOrthoTile", 1193 | "REScene", 1194 | "Sentinel1", 1195 | "Sentinel2L1C", 1196 | "SkySatCollect", 1197 | "SkySatScene", 1198 | "SkySatVideo" 1199 | ] 1200 | }, 1201 | "pl:pixel_resolution": { 1202 | "type": "number", 1203 | "minimumExclusive": 0 1204 | }, 1205 | "pl:publishing_stage": { 1206 | "type": "string", 1207 | "enum": [ 1208 | "preview", 1209 | "standard", 1210 | "finalized" 1211 | ] 1212 | }, 1213 | "pl:quality_category": { 1214 | "type": "string", 1215 | "enum": [ 1216 | "standard", 1217 | "test" 1218 | ] 1219 | }, 1220 | "pl:strip_id": { 1221 | "type": "string", 1222 | "minLength": 1 1223 | } 1224 | } 1225 | } 1226 | } -------------------------------------------------------------------------------- /scripts/build.js: -------------------------------------------------------------------------------- 1 | import Mustache from 'mustache'; 2 | import esMain from 'es-main'; 3 | import fse from 'fs-extra'; 4 | import path from 'node:path'; 5 | import semver from 'semver'; 6 | import {Octokit} from '@octokit/rest'; 7 | import {fileURLToPath} from 'node:url'; 8 | import {retry} from '@octokit/plugin-retry'; 9 | 10 | const owner = 'planetlabs'; 11 | const repo = 'stac-extension'; 12 | const earliestRelease = 'v0.0.0'; 13 | 14 | const defaultContentUrl = `https://raw.githubusercontent.com/${owner}/${repo}`; 15 | const OctokitClient = Octokit.plugin(retry); 16 | 17 | /** 18 | * @return {Promise>} Release tags sorted latest first. 19 | */ 20 | async function getReleaseTags() { 21 | process.removeAllListeners('warning'); 22 | const client = new OctokitClient({ 23 | auth: process.env.GITHUB_TOKEN, 24 | }); 25 | 26 | const tags = await client.paginate( 27 | client.rest.repos.listReleases, 28 | {owner, repo}, 29 | response => response.data.map(release => release['tag_name']) 30 | ); 31 | 32 | return tags 33 | .filter(tag => semver.valid(tag) && semver.gte(tag, earliestRelease)) 34 | .sort((a, b) => (semver.gt(a, b) ? -1 : 1)); 35 | } 36 | 37 | async function getSchema(tag) { 38 | const url = `${defaultContentUrl}/${tag}/schema.json`; 39 | const response = await fetch(url); 40 | if (!response.ok) { 41 | throw new Error(`Unexpected response: ${response.status}`); 42 | } 43 | return response.text(); 44 | } 45 | 46 | /** 47 | * @typedef {Object} Release 48 | * @property {string} tag 49 | * @property {string} schema 50 | */ 51 | 52 | /** 53 | * @param {string} tag The release tag (e.g. 'v1.2.3'). 54 | * @return {Promise} Release info. 55 | */ 56 | async function getReleaseInfo(tag) { 57 | const schema = await getSchema(tag); 58 | return {tag, schema}; 59 | } 60 | 61 | /** 62 | * Release info sorted latest first. 63 | */ 64 | async function* eachRelease() { 65 | const tags = await getReleaseTags(); 66 | for (const tag of tags) { 67 | yield await getReleaseInfo(tag); 68 | } 69 | } 70 | 71 | const indexTemplate = ` 72 | 73 | 74 | Planet STAC Extension 75 | 76 | 86 | 87 | 88 |

Planet STAC Extension

89 |

90 | Find the JSON Schema and specification documents for the most recent releases below. 91 |

92 | 100 | 103 | 104 | 105 | `; 106 | 107 | async function build({destDir}) { 108 | const releases = []; 109 | for await (const release of eachRelease()) { 110 | releases.push(release); 111 | const context = {version: release.tag}; 112 | const schema = Mustache.render(release.schema, context); 113 | const destPath = path.join(destDir, release.tag, 'schema.json'); 114 | await fse.ensureDir(path.dirname(destPath)); 115 | await fse.writeFile(destPath, schema); 116 | } 117 | const index = Mustache.render(indexTemplate, {releases}); 118 | fse.writeFile(path.join(destDir, 'index.html'), index); 119 | } 120 | 121 | if (esMain(import.meta)) { 122 | const destDir = fileURLToPath(new URL('../build', import.meta.url)); 123 | 124 | build({destDir}).catch(err => 125 | process.stderr.write(err.stack + '\n', () => process.exit(1)) 126 | ); 127 | } 128 | -------------------------------------------------------------------------------- /scripts/release.js: -------------------------------------------------------------------------------- 1 | import Mustache from 'mustache'; 2 | import esMain from 'es-main'; 3 | import fse from 'fs-extra'; 4 | import yargs from 'yargs'; 5 | import {Octokit} from '@octokit/rest'; 6 | import {fileURLToPath} from 'node:url'; 7 | import {hideBin} from 'yargs/helpers'; 8 | 9 | /** 10 | * @typedef {Object} Options 11 | * @property {string} token The bearer token. 12 | * @property {string} tag The tag. 13 | */ 14 | 15 | const owner = 'planetlabs'; 16 | const repo = 'stac-extension'; 17 | 18 | /** 19 | * Create a release. 20 | * @param {Options} options The release options. 21 | */ 22 | async function createRelease(options) { 23 | const client = new Octokit({auth: options.token}); 24 | 25 | const response = await client.rest.repos.createRelease({ 26 | owner, 27 | repo, 28 | tag_name: options.tag, 29 | generate_release_notes: true, 30 | draft: true, 31 | }); 32 | 33 | const schemaPath = fileURLToPath(new URL('../schema.json', import.meta.url)); 34 | const content = await fse.readFile(schemaPath, {encoding: 'utf-8'}); 35 | const context = {version: options.tag}; 36 | const schemaData = Buffer.from(Mustache.render(content, context), 'utf-8'); 37 | 38 | await client.rest.repos.uploadReleaseAsset({ 39 | url: response.data.upload_url, 40 | name: 'schema.json', 41 | label: 'JSON Schema', 42 | headers: { 43 | 'content-type': 'application/json', 44 | 'content-length': schemaData.length, 45 | }, 46 | data: schemaData, 47 | }); 48 | } 49 | 50 | if (esMain(import.meta)) { 51 | const options = yargs(hideBin(process.argv)) 52 | .option('token', { 53 | describe: 'The token for auth', 54 | type: 'string', 55 | }) 56 | .demandOption('token') 57 | .option('tag', { 58 | describe: 'The release tag (e.g. v1.2.3)', 59 | type: 'string', 60 | }) 61 | .demandOption('tag') 62 | .parse(); 63 | 64 | createRelease(options).catch(err => { 65 | process.stderr.write(err.stack + '\n', () => process.exit(1)); 66 | }); 67 | } 68 | --------------------------------------------------------------------------------