├── .github └── workflows │ ├── build-openapi-bundle.yml │ └── test-build-openapi-bundle.yml ├── CIS+WCS-standards ├── 09-110r4_WCS_Core_2.0.1.pdf ├── 09-146r6_Coverage_Implementation_Schema_CIS_1.1.pdf ├── 14-121_Web-Query-Service_2016-06-19.pdf ├── 2019-02-27_TC-Singapore_Cov+OpenAPI.pptx └── links-to-resources.txt ├── CONTRIBUTORS.md ├── DEVELOPMENT.md ├── LICENSE ├── OGC-Coverages-SWG-Charter.html ├── OGC-Coverages-SWG-Charter.pdf ├── README.md ├── api_modules ├── Notes.adoc ├── bbox │ ├── ATS │ │ ├── ATS_rc-bbox-definition.adoc │ │ ├── ATS_rc-bbox-response.adoc │ │ └── ATS_rc-op-bbox.adoc │ └── requirements_module_bbox.adoc ├── datetime │ ├── ATS │ │ ├── ATS_rc-datetime-definition.adoc │ │ ├── ATS_rc-datetime-response.adoc │ │ └── ATS_rc-op-datetime.adoc │ └── requirements_module_datetime.adoc ├── extent-uad │ ├── requirements_module_extent-uad.adoc │ └── schemas │ │ ├── extent-uad.json │ │ └── extent-uad.yaml ├── limit │ ├── ATS │ │ ├── ATS_rc-limit-definition.adoc │ │ ├── ATS_rc-limit-response.adoc │ │ ├── ATS_rc-op-limit.adoc │ │ └── ATS_rc-paged-response.adoc │ ├── recommendations │ │ ├── PER_rc-prev.adoc │ │ ├── PER_rc-server-limit.adoc │ │ ├── REC_rc-next-1.adoc │ │ ├── REC_rc-next-2.adoc │ │ ├── REC_rc-next-3.adoc │ │ └── REC_rc-server-limit.adoc │ ├── requirements │ │ ├── REQ_rc-limit-definition.adoc │ │ └── REQ_rc-limit-response.adoc │ └── requirements_module_limit.adoc ├── subset-old │ ├── examples │ │ ├── JSON │ │ │ ├── collection_example.json │ │ │ ├── collection_info_example.json │ │ │ ├── collections_example.json │ │ │ ├── conformance_example.json │ │ │ ├── coverage_domainset_example.json │ │ │ ├── coverage_example.json │ │ │ ├── coverage_metadata_example.json │ │ │ ├── coverage_rangeset_example.json │ │ │ ├── coverage_rangetype_example.json │ │ │ ├── examples_CIS_JSON.adoc │ │ │ └── landingPage_example.json │ │ ├── examples.adoc │ │ └── examples_subsetting.adoc │ ├── recommendations │ │ └── PER_subset-slice-sparse-dimensions.adoc │ ├── requirements │ │ ├── REQ_cov-subset-definition.adoc │ │ ├── REQ_cov-subset-success.adoc │ │ ├── REQ_cov-subset_conformance.adoc │ │ ├── REQ_subset-definition.adoc │ │ ├── REQ_subset-response.adoc │ │ └── REQ_subset_conformance.adoc │ └── requirements_module_subset.adoc └── subset │ ├── examples │ ├── JSON │ │ ├── collection_example.json │ │ ├── collection_info_example.json │ │ ├── collections_example.json │ │ ├── conformance_example.json │ │ ├── coverage_domainset_example.json │ │ ├── coverage_example.json │ │ ├── coverage_metadata_example.json │ │ ├── coverage_rangeset_example.json │ │ ├── coverage_rangetype_example.json │ │ ├── examples_CIS_JSON.adoc │ │ └── landingPage_example.json │ ├── examples.adoc │ └── examples_subsetting.adoc │ ├── recommendations │ └── PER_subset-slice-sparse-dimensions.adoc │ └── requirements_module_subset.adoc ├── asciidoctor.json ├── charter ├── HTML_Gen.bat ├── OGC-Coverages-SWG-Charter.adoc └── PDF_Gen.bat ├── extensions ├── crs.adoc ├── overview.adoc └── wcps.adoc ├── implementations.adoc ├── ogcapi-ogc-org-coverages-overview.md ├── proposals ├── README.md ├── clause_13_scenes.adoc └── requirements_class_scenes.adoc ├── standard ├── .gitignore ├── 19-087.adoc ├── HTML_Gen.bat ├── PDF_Gen.bat ├── README.md ├── annex_api_guidelines.adoc ├── annex_ats.adoc ├── annex_bibliography.adoc ├── annex_bnf.adoc ├── annex_examples.adoc ├── annex_glossary.adoc ├── annex_history.adoc ├── annex_http_status.adoc ├── clause_0_front_material.adoc ├── clause_10_field_selection.adoc ├── clause_11_CRS.adoc ├── clause_12_coverage_tiles.adoc ├── clause_14_encodings.adoc ├── clause_15_oas.adoc ├── clause_1_scope.adoc ├── clause_2_conformance.adoc ├── clause_3_references.adoc ├── clause_4_terms_and_definitions.adoc ├── clause_5_conventions.adoc ├── clause_6_overview.adoc ├── clause_7_core.adoc ├── clause_8_subsetting.adoc ├── clause_9_scaling.adoc ├── examples │ └── JSON │ │ ├── coverage_domainset_example.json │ │ └── coverage_rangetype_example.json ├── figures │ ├── Abstract_Coverage.png │ ├── Coverage_By_Partitioning.png │ ├── Coverage_Class_Hierarchy.png │ ├── Envelope_By_Axis.png │ ├── General_Grid_Coverage.png │ ├── General_Grid_Coverage_2.png │ ├── General_Grid_Coverage_3.png │ ├── General_Grid_Coverage_4.png │ ├── Grid_Types.png │ ├── MultiPoint_Coverage.png │ ├── Regular_and_Irregular_Grids.png │ ├── WCS_CoverageOfferings.png │ ├── span.png │ ├── spanCoverageTiles.png │ ├── spanExtent.png │ ├── spanLargerMap.png │ ├── spanMap.png │ ├── spanSubset.png │ ├── spanSubsetNonAligned.png │ └── spanTerrainMesh.png ├── openapi │ ├── .validaterc │ ├── README.md │ ├── api │ │ ├── README.md │ │ ├── all-collections.json │ │ ├── coverage-collections.json │ │ └── tileMatrixSets.json │ ├── ogcapi-coverages-1.bundled.json │ ├── ogcapi-coverages-1.yaml │ ├── parameters │ │ ├── common-geodata │ │ │ ├── bbox.yaml │ │ │ ├── collectionId-all.yaml │ │ │ ├── collectionId-coverage.yaml │ │ │ ├── datetime.yaml │ │ │ └── limit-collections.yaml │ │ ├── coverages-core │ │ │ ├── bbox-crs.yaml │ │ │ ├── crs.yaml │ │ │ ├── height.yaml │ │ │ ├── properties.yaml │ │ │ ├── resolutions.yaml │ │ │ ├── scale-axes.yaml │ │ │ ├── scale-factor.yaml │ │ │ ├── scale-size.yaml │ │ │ ├── sceneId.yaml │ │ │ ├── subset-crs.yaml │ │ │ ├── subset.yaml │ │ │ └── width.yaml │ │ ├── tiles-core │ │ │ ├── tileCol.yaml │ │ │ ├── tileMatrix.yaml │ │ │ └── tileRow.yaml │ │ └── unspecified │ │ │ ├── f-coverage.yaml │ │ │ ├── f-coverageTile.yaml │ │ │ ├── f-domainset.yaml │ │ │ ├── f-metadata.yaml │ │ │ ├── f-rangeset.yaml │ │ │ ├── f-rangetype.yaml │ │ │ ├── offset.yaml │ │ │ ├── sortby.yaml │ │ │ └── tileMatrixSetId.yaml │ ├── paths │ │ ├── common-core │ │ │ ├── pAPI.yaml │ │ │ ├── pConformance.yaml │ │ │ └── pLandingPage.yaml │ │ ├── common-geodata │ │ │ ├── pCollection.yaml │ │ │ └── pCollectionsList.yaml │ │ ├── coverages-core │ │ │ ├── pCoverage.yaml │ │ │ ├── pScene.yaml │ │ │ ├── pSceneCoverage.yaml │ │ │ ├── pSceneCoverageTile.yaml │ │ │ ├── pSceneCoverageTileSet.yaml │ │ │ ├── pSceneCoverageTileSetsList.yaml │ │ │ ├── pScenesList.yaml │ │ │ └── pSchema.yaml │ │ ├── dynamic │ │ │ ├── pAllCollections.yaml │ │ │ ├── pCoverageCollections.yaml │ │ │ └── pTileMatrixSets.yaml │ │ └── tiles-core │ │ │ └── collection-tiles │ │ │ └── coverage-tiles │ │ │ ├── pCollectionCoverageTile.yaml │ │ │ ├── pCollectionCoverageTileSet.yaml │ │ │ └── pCollectionCoverageTileSetsList.yaml │ ├── responses │ │ ├── common-core │ │ │ ├── rAPI.yaml │ │ │ ├── rConformance.yaml │ │ │ ├── rException.yaml │ │ │ ├── rInvalidParameter.yaml │ │ │ ├── rLandingPage.yaml │ │ │ ├── rNotAcceptable.yaml │ │ │ ├── rNotFound.yaml │ │ │ └── rServerError.yaml │ │ ├── common-geodata │ │ │ ├── rCollection.yaml │ │ │ └── rCollectionsList.yaml │ │ ├── coverages-core │ │ │ ├── rCoverage.yaml │ │ │ ├── rScene.yaml │ │ │ ├── rScenesList.yaml │ │ │ └── rSchema.yaml │ │ ├── dynamic │ │ │ └── rEnumeration.yaml │ │ └── tiles-core │ │ │ ├── rCoverageTile.yaml │ │ │ ├── rEmptyTile.yaml │ │ │ ├── rTileSet.yaml │ │ │ └── rTileSetsList.yaml │ └── schemas │ │ ├── cis │ │ ├── README.md │ │ ├── coverage-schema.yaml │ │ ├── domainSet.yaml │ │ ├── envelope.yaml │ │ ├── metadata.yaml │ │ ├── partitioningSet.yaml │ │ ├── rangeSet.yaml │ │ └── rangeType.yaml │ │ ├── common-core │ │ ├── confClasses.yaml │ │ ├── exception.yaml │ │ ├── landingPage.yaml │ │ └── link.yaml │ │ ├── common-geodata │ │ ├── collectionDesc.yaml │ │ ├── collections.yaml │ │ ├── crs.yaml │ │ ├── dataType.yaml │ │ ├── extent-uad.yaml │ │ ├── extent.yaml │ │ ├── numberMatched.yaml │ │ ├── numberReturned.yaml │ │ ├── projJSON.yaml │ │ └── timeStamp.yaml │ │ ├── coverages-core │ │ ├── scene.yaml │ │ ├── sceneItem.yaml │ │ └── scenesList.yaml │ │ ├── dynamic │ │ ├── all-collections.yaml │ │ ├── coverage-collections.yaml │ │ ├── enumeration.yaml │ │ └── tileMatrixSets.yaml │ │ └── tms │ │ ├── 2DBoundingBox.yaml │ │ ├── 2DPoint.yaml │ │ ├── geospatialData.yaml │ │ ├── propertiesSchema.yaml │ │ ├── style.yaml │ │ ├── tileMatrix.yaml │ │ ├── tileMatrixLimits.yaml │ │ ├── tileMatrixSet-item.yaml │ │ ├── tileMatrixSet.yaml │ │ ├── tilePoint.yaml │ │ ├── tileSet-item.yaml │ │ ├── tileSet.yaml │ │ └── variableMatrixWidth.yaml ├── requirements │ ├── README.md │ ├── requirements_class_cisjson.adoc │ ├── requirements_class_cog.adoc │ ├── requirements_class_core.adoc │ ├── requirements_class_coverage_scaling_general.adoc │ ├── requirements_class_coverage_scaling_spatial.adoc │ ├── requirements_class_coverage_scaling_temporal.adoc │ ├── requirements_class_coverage_subset_general.adoc │ ├── requirements_class_coverage_subset_spatial.adoc │ ├── requirements_class_coverage_subset_temporal.adoc │ ├── requirements_class_coverage_tiles.adoc │ ├── requirements_class_coveragejson.adoc │ ├── requirements_class_crs.adoc │ ├── requirements_class_fieldselection.adoc │ ├── requirements_class_geotiff.adoc │ ├── requirements_class_html.adoc │ ├── requirements_class_jpeg2000.adoc │ ├── requirements_class_jpegxl.adoc │ ├── requirements_class_las.adoc │ ├── requirements_class_laszip.adoc │ ├── requirements_class_netcdf.adoc │ ├── requirements_class_oas30.adoc │ ├── requirements_class_png.adoc │ └── requirements_class_zarr.adoc └── standard.css └── users-guide ├── .gitignore ├── 20-075.adoc ├── HTML_Gen.bat ├── PDF_Gen.bat ├── README.md ├── UML └── README.md ├── annex_bibliography.adoc ├── annex_glossary.adoc ├── annex_history.adoc ├── clause_0_front_material.adoc ├── clause_1_scope.adoc ├── clause_2_references.adoc ├── clause_3_terms_and_definitions.adoc ├── clause_4_conventions.adoc ├── clause_5_get_data_from_point.adoc ├── clause_5_informative_text.adoc ├── clause_5_range-types.adoc ├── clause_5_selecting_pixels.adoc ├── clause_5_slicing-and-subsetting.adoc ├── clause_5_template.adoc ├── clause_5_using_api-common.adoc ├── clause_5_using_metadata.adoc ├── code └── README.md ├── figures └── README.md ├── images ├── README.md ├── image_1.png ├── image_2.png ├── image_2_A.png ├── image_2_B.png └── image_2_C.png └── standard.css /.github/workflows/build-openapi-bundle.yml: -------------------------------------------------------------------------------- 1 | name: Build OpenAPI bundle 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | paths: 8 | - 'standard/openapi/**.yaml' 9 | 10 | jobs: 11 | build-openapi-bundle: 12 | name: Generate OpenAPI bundle 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Setup npm 16 | uses: actions/setup-node@v2 17 | - name: Install dependencies 18 | run: npm install -g @apidevtools/swagger-cli 19 | - name: Checkout 20 | uses: actions/checkout@v2 21 | with: 22 | fetch-depth: 0 23 | - name: Generate OpenAPI bundle 24 | run: | 25 | cd standard/openapi 26 | swagger-cli bundle -o ogcapi-coverages-1.bundled.json ogcapi-coverages-1.yaml 27 | - name: Commit changes 28 | uses: EndBug/add-and-commit@v9 29 | with: 30 | author_name: Tom Kralidis 31 | author_email: tomkralidis@gmail.com 32 | message: 'Updating OpenAPI bundle' 33 | add: '*.json' 34 | cwd: './standard/openapi/' 35 | -------------------------------------------------------------------------------- /.github/workflows/test-build-openapi-bundle.yml: -------------------------------------------------------------------------------- 1 | name: Test build OpenAPI bundle 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - master 7 | paths: 8 | - 'standard/openapi/**.yaml' 9 | 10 | jobs: 11 | test-build-openapi-bundle: 12 | name: Generate OpenAPI bundle 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Setup npm 16 | uses: actions/setup-node@v2 17 | - name: Install dependencies 18 | run: npm install -g @apidevtools/swagger-cli 19 | - name: Checkout 20 | uses: actions/checkout@v2 21 | with: 22 | repository: ${{ github.event.pull_request.head.repo.full_name }} 23 | ref: ${{ github.event.pull_request.head.ref }} 24 | #with: 25 | # fetch-depth: 0 26 | - name: Generate OpenAPI bundle 27 | run: | 28 | cd standard/openapi 29 | swagger-cli bundle -o ogcapi-coverages-1.bundled.json ogcapi-coverages-1.yaml 30 | -------------------------------------------------------------------------------- /CIS+WCS-standards/09-110r4_WCS_Core_2.0.1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/CIS+WCS-standards/09-110r4_WCS_Core_2.0.1.pdf -------------------------------------------------------------------------------- /CIS+WCS-standards/09-146r6_Coverage_Implementation_Schema_CIS_1.1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/CIS+WCS-standards/09-146r6_Coverage_Implementation_Schema_CIS_1.1.pdf -------------------------------------------------------------------------------- /CIS+WCS-standards/14-121_Web-Query-Service_2016-06-19.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/CIS+WCS-standards/14-121_Web-Query-Service_2016-06-19.pdf -------------------------------------------------------------------------------- /CIS+WCS-standards/2019-02-27_TC-Singapore_Cov+OpenAPI.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/CIS+WCS-standards/2019-02-27_TC-Singapore_Cov+OpenAPI.pptx -------------------------------------------------------------------------------- /CIS+WCS-standards/links-to-resources.txt: -------------------------------------------------------------------------------- 1 | This file collets links to coverage-related information, 2 | 3 | OGC Coverages.DWG wiki (good for a start - references to authoritative documents, educational material, etc.) 4 | - http://myogc.org/go/coveragesDWG 5 | - start here for an overview: http://external.opengeospatial.org/twiki_public/CoveragesDWG/CoveragesBigPicture 6 | 7 | OGC authoritative standards page 8 | - Coverage standard: http://docs.opengeospatial.org/is/09-146r6/09-146r6.html 9 | - WCS standard: http://www.opengeospatial.org/standards/wcs 10 | - WCPS standard: http://www.opengeospatial.org/standards/wcps 11 | - schemas, including many examples: http://schemas.opengis.net/cis , http://schemas.opengis.net/wcs 12 | 13 | Training material 14 | - Wikipedia: http://en.wikipedia.org/wiki/Data_cube, http://en.wikipedia.org/wiki/Coverage_data, http://en.wikipedia.org/wiki/Web_Coverage_Service, http://en.wikipedia.org/wiki/Web_Coverage_Processing_Service 15 | - Webinars: www.earthserver.eu/webinars 16 | - Tutorials: http://tutorial.rasdaman.org/rasdaman-and-ogc-ws-tutorial/ 17 | - Online interactive demos & sandbox: http://standards.rasdaman.com/ 18 | - Jupyter notebooks: http://nbviewer.jupyter.org/github/earthserver-eu/ 19 | 20 | -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | * Chuck Heazel [@cmheazel](https://github.com/cmheazel) 2 | * Stephan Meissl [@Schpidi](https://github.com/Schpidi) 3 | * Jerome Jacovella-St-Louis [@jerstlouis](https://github.com/jerstlouis) 4 | * Tom Kralidis [@tomkralidis](https://github.com/tomkralidis) 5 | -------------------------------------------------------------------------------- /DEVELOPMENT.md: -------------------------------------------------------------------------------- 1 | ## Development Guidelines 2 | 3 | TBD 4 | 5 | ## Specification Driving factors 6 | 7 | TBD 8 | 9 | ## Specification Change Criteria 10 | 11 | TBD 12 | 13 | ## Specification Change Process 14 | 15 | TBD 16 | 17 | ## Tracking Process 18 | 19 | * GitHub is the medium of record for all spec designs, use cases, and so on. 20 | 21 | 22 | ## Release Process 23 | 24 | TBD 25 | 26 | ## Draft Features 27 | 28 | 29 | ## Transparency 30 | 31 | 32 | 33 | ## Participation 34 | 35 | 36 | 37 | ## Community Roles 38 | 39 | -------------------------------------------------------------------------------- /OGC-Coverages-SWG-Charter.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/OGC-Coverages-SWG-Charter.pdf -------------------------------------------------------------------------------- /api_modules/Notes.adoc: -------------------------------------------------------------------------------- 1 | Notes: 2 | 3 | . Do not include anchors in API-Modules. Since a module can be included in a standard more than once, the anchor is no longer unique. 4 | . An API Module which contains an identifier can only be used once in a Requirements Class. The identifer of the Requirements Class, combined with the relative URI identifier in the module, produces the unique identifier for that entity. 5 | . Question - should Requirements Modules identify themself in the Standard? Is there value in exposing them to the user, or are they just a convinience for the developers of the standard and test suites? 6 | 7 | -------------------------------------------------------------------------------- /api_modules/bbox/ATS/ATS_rc-bbox-definition.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collections_rc-bbox-definition]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/collections/rc-bbox-definition* 5 | ^|Test Purpose |Validate that the bounding box query parameter is constructed correctly. 6 | ^|Requirement |<> 7 | ^|Test Method |Verify that the `bbox` query parameter complies with the following definition (using an OpenAPI Specification 3.0 fragment): 8 | 9 | [source,YAML] 10 | ---- 11 | name: bbox 12 | in: query 13 | required: false 14 | schema: 15 | type: array 16 | minItems: 4 17 | maxItems: 6 18 | items: 19 | type: number 20 | style: form 21 | explode: false 22 | ---- 23 | 24 | Use a bounding box with four numbers in all requests where the collection has spatial geometries in 2D: 25 | 26 | * Lower left corner, WGS 84 longitude 27 | * Lower left corner, WGS 84 latitude 28 | * Upper right corner, WGS 84 longitude 29 | * Upper right corner, WGS 84 latitude 30 | 31 | Use a bounding box with six numbers in all requests where the collection has spatial geometries in 3D: 32 | 33 | * Lower left corner, WGS 84 longitude 34 | * Lower left corner, WGS 84 latitude 35 | * Minimum value, WGS 84 ellipsoidal height 36 | * Upper right corner, WGS 84 longitude 37 | * Upper right corner, WGS 84 latitude 38 | * Maximum value, WGS 84 ellipsoidal height 39 | |=== 40 | -------------------------------------------------------------------------------- /api_modules/bbox/ATS/ATS_rc-bbox-response.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collections_rc-bbox-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/collections/rc-bbox-response* 5 | ^|Test Purpose |Validate that the `bbox` query parameter is processed correctly. 6 | ^|Requirement |<> + 7 | <> 8 | ^|Test Method |DO FOR each `Collection` in the `collections` element of the response: 9 | 10 | . Extract the spatial geometry from the `bbox` element of the `extent` property of the `Collection` resource. 11 | . IF there is a spatial geometry, verify that the coordinate reference system of the spatial geometry is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84 or http://www.opengis.net/def/crs/OGC/0/CRS84h. 12 | . IF there is a spatial geometry, verify that the spatial geometry intersects the bounding box defined by the `bbox` parameter. 13 | |=== 14 | -------------------------------------------------------------------------------- /api_modules/bbox/ATS/ATS_rc-op-bbox.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collections_rc-op-bbox]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/collections/rc-op-bbox* 5 | ^|Test Purpose |Validate that resources can be identified and extracted from an API server using the bbox query parameter. 6 | ^|Requirement |<> + 7 | <> 8 | ^|Test Method |. Select a valid bbox value which intersects a subset of the resource collections available through the API implementation. 9 | . Construct a bbox query parameter using the selected value. 10 | . Validate the bbox query parameter using <> 11 | . Issue an HTTP GET request to the URL `{root}/collections`. Include the validated bbox query parameter. 12 | . Validate that a document was returned with a status code 200 13 | . Validate the contents of the returned document using: 14 | .. <> and 15 | .. <> and 16 | .. <>. 17 | 18 | |=== 19 | -------------------------------------------------------------------------------- /api_modules/bbox/requirements_module_bbox.adoc: -------------------------------------------------------------------------------- 1 | [[rm_bbox]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Module* 5 | 2+|http://www.opengis.net/spec/ogcapi-common-2/1.0/rm/bbox 6 | |Target type |Web API Query Parameter 7 | |=== 8 | 9 | The `bbox` parameter is used to select resources based on the geospatial footprint or extent. 10 | 11 | The `bbox` parameter is defined as follows: 12 | 13 | include::./requirements/REQ_rc-bbox-definition.adoc[] 14 | 15 | While the processing of the `bbox` parameter is specific to the resource and operation for which it is applied, there is a general set of requirements which all implementations must address. 16 | 17 | include::./requirements/REQ_rc-bbox-response.adoc[] 18 | 19 | "Intersects" means that a coordinate that is part of the spatial geometry of the resource falls within the area specified in the parameter `bbox`. This includes the boundaries of the geometries. For curves the boundary includes the start and end position. For surfaces the boundary includes the outer and inner rings. 20 | 21 | In case of a degenerate bounding box, the resulting geometry is used. For example, if the lower left corner is the same as the upper right corner, all resources match where the geometry intersects with this point. 22 | 23 | This standard does not specify requirements for the parameter `bbox-crs`. Those requirements will be specified in a later version of this standard. 24 | 25 | The bounding box for WGS 84 longitude/latitude is, in most cases, the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the anti-meridian (180th meridian) the first value (west-most box edge) is larger than the third value (east-most box edge). 26 | 27 | .The bounding box of the New Zealand Exclusive Economic Zone 28 | ================= 29 | The bounding box of the New Zealand Exclusive Economic Zone in WGS84 (from 160.6°E to 170°W and from 55.95°S to 25.89°S) would be represented in JSON as `[ 160.6, -55.95, -170, -25.89 ]` and in a query as `bbox=160.6,-55.95,-170,-25.89`. 30 | ================= 31 | 32 | Note that the server will return an error if a latitude value of ``160.0`` is used. 33 | 34 | If the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box. 35 | 36 | A template for the definition of the parameter in YAML according to OpenAPI 3.0 is available at link:http://beta.schemas.opengis.net/ogcapi/common/part2/0.1/collections/openapi/parameters/bbox.yaml[bbox.yaml]. 37 | 38 | -------------------------------------------------------------------------------- /api_modules/datetime/ATS/ATS_rc-datetime-definition.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collections_rc-datetime-definition]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/collections/rc-datetime-definition* 5 | ^|Test Purpose |Validate that the dateTime query parameter is constructed correctly. 6 | ^|Requirement |<> 7 | ^|Test Method |Verify that the `datetime` query parameter complies with the following definition (using an OpenAPI Specification 3.0 fragment): 8 | 9 | [source,YAML] 10 | ---- 11 | name: datetime 12 | in: query 13 | required: false 14 | schema: 15 | type: string 16 | style: form 17 | explode: false 18 | ---- 19 | |=== 20 | -------------------------------------------------------------------------------- /api_modules/datetime/ATS/ATS_rc-datetime-response.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collections_rc-datetime-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/collections/rc-datetime-response* 5 | ^|Test Purpose |Validate that the `datetime` query parameter is processed correctly. 6 | ^|Requirement |<> + 7 | <> + 8 | <> 9 | ^|Test Method |DO FOR each `Collection` in the `collections` element of the response: 10 | 11 | . Extract the temporal geometry from the `interval` element of the `extent` property of the `Collection` resource. 12 | . IF there is a temporal geometry, verify that the temporal geometry intersects the temporal period defined by the `datetime` parameter. 13 | . IF there is a temporal geometry, validate that the processing of the datetime parameter complies with the syntax described in /req/collections/rc-datetime-definition (B, C, and D). 14 | |=== 15 | 16 | -------------------------------------------------------------------------------- /api_modules/datetime/ATS/ATS_rc-op-datetime.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collections_rc-op-datetime]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/collections/rc-op-datetime* 5 | ^|Test Purpose |Validate that resources can be identified and extracted from an API server using the datetime query parameter. 6 | ^|Requirement |<> + 7 | <> 8 | ^|Test Method |. Select a valid datetime value which intersects a subset of the resource collections available through the API implementation. 9 | . Construct a datetime query parameter using the selected value. 10 | . Validate the datetime query parameter using <> 11 | . Issue an HTTP GET request to the URL `{root}/collections`. Include the validated datetime query parameter. 12 | . Validate that a document was returned with a status code 200 13 | . Validate the contents of the returned document using: 14 | .. <> and 15 | .. <> and 16 | .. <>. 17 | 18 | |=== 19 | -------------------------------------------------------------------------------- /api_modules/datetime/requirements_module_datetime.adoc: -------------------------------------------------------------------------------- 1 | [[rm_datetime]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Module* 5 | 2+|http://www.opengis.net/spec/ogcapi-common-2/1.0/rm/datetime 6 | |Target type |Web API Query Parameter 7 | |=== 8 | 9 | The `datetime` parameter selects resources based on their temporal extent. The definition of temporal extent is specific to the resource type being filtered. 10 | 11 | The `datetime` parameter is defined as follows: 12 | 13 | include::./requirements/REQ_rc-datetime-definition.adoc[] 14 | 15 | While the processing of the `datetime` parameter is specific to the resource and operation for which it is applied, there is a general set of requirements which all implementations must address. 16 | 17 | include::./requirements/REQ_rc-datetime-response.adoc[] 18 | 19 | "Intersects" means that the time (instant or period) specified in the parameter `datetime` includes a timestamp that is part of the temporal geometry of the resource (again, a time instant or period). For time periods this includes the start and end time. 20 | 21 | [width="90%",cols="2,6a"] 22 | |==== 23 | | Note | ISO 8601-2 distinguishes open start/end timestamps (double-dot) and unknown start/end timestamps (empty string). For queries, an unknown start/end has the same effect as an open start/end. 24 | |==== 25 | 26 | .A date-time 27 | ================= 28 | February 12, 2018, 23:20:52 GMT: 29 | 30 | `datetime=2018-02-12T23%3A20%3A52Z` 31 | ================= 32 | 33 | For resources with a temporal property that is a timestamp (like `lastUpdate`), a date-time value would match all resources where the temporal property is identical. 34 | 35 | For resources with a temporal property that is a date or a time interval, a date-time value would match all resources where the timestamp is on that day or within the time interval. 36 | 37 | .Intervals 38 | ================= 39 | February 12, 2018, 00:00:00 GMT to March 18, 2018, 12:31:12 GMT: 40 | 41 | `datetime=2018-02-12T00%3A00%3A00Z%2F2018-03-18T12%3A31%3A12Z` 42 | 43 | February 12, 2018, 00:00:00 UTC or later: 44 | 45 | `datetime=2018-02-12T00%3A00%3A00Z%2F..` 46 | 47 | March 18, 2018, 12:31:12 UTC or earlier: 48 | 49 | `datetime=..%2F2018-03-18T12%3A31%3A12Z` 50 | ================= 51 | 52 | A template for the definition of the parameter in YAML according to OpenAPI 3.0 is available at link:http://beta.schemas.opengis.net/ogcapi/common/part2/0.1/collections/openapi/parameters/datetime.yaml[datetime.yaml]. 53 | 54 | -------------------------------------------------------------------------------- /api_modules/extent-uad/schemas/extent-uad.yaml: -------------------------------------------------------------------------------- 1 | title: Extent with Uniform Additional Dimensions Schema 2 | description: |- 3 | The extent module only addresses spatial and temporal extents. This module extends extent by specifying how 4 | intervals and crs properties can be used to specify additional geometries. 5 | allOf: 6 | - $ref: 'http://beta.schemas.opengis.net/ogcapi/common/part2/0.1/collections/openapi/schemas/extent.yaml' 7 | - type: object 8 | additionalProperties: 9 | description: |- 10 | The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial. 11 | type: object 12 | properties: 13 | allOf: 14 | - interval: 15 | description: |- 16 | One or more intervals that describe the extent for this dimension of the dataset. 17 | The value `null` is supported and indicates an unbounded or half-bounded interval. 18 | The first interval describes the overall extent of the data for this dimension. 19 | All subsequent intervals describe more precise intervals, e.g., to identify clusters of data. 20 | Clients only interested in the overall extent will only need 21 | to access the first item (a pair of lower and upper bound values). 22 | type: array 23 | minItems: 1 24 | items: 25 | description: |- 26 | Lower and upper bound values of the interval. The values 27 | are in the coordinate reference system specified in `crs`, `trs` or `vrs`. 28 | type: array 29 | minItems: 2 30 | maxItems: 2 31 | items: 32 | - type: string 33 | - type: number 34 | - type: null 35 | example: 36 | - '2011-11-11T12:22:11Z' 37 | - 32.5 38 | - null 39 | - oneOf: 40 | - crs: 41 | type: string 42 | description: generic coordinate reference system suitable for any type of dimensions 43 | - trs: 44 | type: string 45 | description: temporal coordinate reference system (e.g. as defined by Features for 'temporal') 46 | - vrs: 47 | type: string 48 | description: vertical coordinate reference system (e.g. as defined in EDR for 'vertical') 49 | -------------------------------------------------------------------------------- /api_modules/limit/ATS/ATS_rc-limit-definition.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collections_rc-limit-definition]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/collections/rc-limit-definition* 5 | ^|Test Purpose |Validate that the limit query parameter is constructed correctly. 6 | ^|Requirement |<> 7 | ^|Test Method |Verify that the `limit` query parameter complies with the following definition (using an OpenAPI Specification 3.0 fragment): 8 | 9 | [source,YAML] 10 | ---- 11 | name: datetime 12 | in: query 13 | required: false 14 | schema: 15 | type: string 16 | style: form 17 | explode: false 18 | ---- 19 | 20 | |=== 21 | -------------------------------------------------------------------------------- /api_modules/limit/ATS/ATS_rc-limit-response.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collections_rc-limit-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/collections/rc-limit-response* 5 | ^|Test Purpose |Validate that the limit query parameters are processed correctly. 6 | ^|Requirement |<> + 7 | <> 8 | ^|Test Method |. Count the items in the `collections` element of the response: 9 | . Verify that this count is not greater than the value specified for the `limit` parameter. 10 | . If the API definition specifies a maximum value for limit parameter, verify that the count does not exceed this maximum value. 11 | |=== 12 | -------------------------------------------------------------------------------- /api_modules/limit/ATS/ATS_rc-op-limit.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collections_rc-op-limit]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/collections/rc-op-limit* 5 | ^|Test Purpose |Validate that the client can place a limit on the number of resources returned. 6 | ^|Requirement |<> + 7 | <> 8 | ^|Test Method |. Select a valid limit value which is less than the number of resource collections available through the API implementation and less than any limits advertised for the server. 9 | . Construct a limit query parameter using the selected value. 10 | . Validate the limit query parameter using <> 11 | . Issue an HTTP GET request to the URL `{root}/collections`. Include the validated limit query parameter. 12 | . Validate that a document was returned with a status code 200 13 | . Validate the contents of the returned document using: 14 | .. <> and 15 | .. <> and 16 | .. <>. 17 | 18 | |=== 19 | -------------------------------------------------------------------------------- /api_modules/limit/ATS/ATS_rc-paged-response.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collections_rc-paged-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/collections/rc-paged-response* 5 | ^|Test Purpose |Validate that the `numberMatched` and `numberReturned` parameters, if present, are populated correctly.. 6 | ^|Requirement |<> + 7 | <> 8 | ^|Test Method |. IF the `numerMatched` property is included in the response, THEN verify that the value of the `numberMatched` parameter is identical to the number of hosted resources that meet the selection parameters provided by the client. 9 | . IF the `numberReturned` property is included in the response, THEN verify that the value of the `numberReturned` parameter is identical to the number of resources returned in the response. 10 | |=== 11 | -------------------------------------------------------------------------------- /api_modules/limit/recommendations/PER_rc-prev.adoc: -------------------------------------------------------------------------------- 1 | [[per_collections_rc-prev]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Permission {counter:per-id}* |*/per/collections/rc-prev* 5 | ^|A |A response to a `next` link MAY include a `prev` link to the resource that included the `next` link. 6 | |=== 7 | -------------------------------------------------------------------------------- /api_modules/limit/recommendations/PER_rc-server-limit.adoc: -------------------------------------------------------------------------------- 1 | [[per_collections_rc-server-limit]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Permission {counter:per-id}* |*/per/collections/rc-server-limit* 5 | ^|A |If a server is configured with a maximum response size, then the server MAY page responses which exceed that threshold. 6 | |=== 7 | -------------------------------------------------------------------------------- /api_modules/limit/recommendations/REC_rc-next-1.adoc: -------------------------------------------------------------------------------- 1 | [[rec_collections_rc-next-1]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/collections/rc-next-1* 5 | ^|A |A `200`-response SHOULD include a link to the next "page" (relation: `next`), if more resources have been selected than returned in the response. 6 | |=== 7 | -------------------------------------------------------------------------------- /api_modules/limit/recommendations/REC_rc-next-2.adoc: -------------------------------------------------------------------------------- 1 | [[rec_collections_rc-next-2]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/collections/rc-next-2* 5 | ^|A |Dereferencing a `next` link SHOULD return additional resources from the set of selected resources that have not yet been returned. 6 | |=== 7 | -------------------------------------------------------------------------------- /api_modules/limit/recommendations/REC_rc-next-3.adoc: -------------------------------------------------------------------------------- 1 | [[rec_collections_rc-next-3]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/collections/rc-next-3* 5 | ^|A |The number of resources in a response to a ``next`` link SHOULD follow the same rules as for the response to the original query and again include a ``next`` link, if there are more resources in the selection that have not yet been returned. 6 | |=== 7 | -------------------------------------------------------------------------------- /api_modules/limit/recommendations/REC_rc-server-limit.adoc: -------------------------------------------------------------------------------- 1 | [[rec_collections_rc-server-limit]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/collections/rc-server-limit* 5 | ^|A |Clients SHOULD be prepared to handle a paged response even if they have not specified a `limit` parameter in their query. 6 | |=== 7 | -------------------------------------------------------------------------------- /api_modules/limit/requirements/REQ_rc-limit-definition.adoc: -------------------------------------------------------------------------------- 1 | [[req_collections_rc-limit-definition]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/collections/rc-limit-definition* 5 | ^|A |The `limit` parameter SHALL possess the following characteristics (using an OpenAPI Specification 3.0 fragment): 6 | 7 | [source,YAML] 8 | ---- 9 | name: limit 10 | in: query 11 | required: false 12 | schema: 13 | type: integer 14 | minimum: 1 15 | maximum: 10000 16 | default: 10 17 | style: form 18 | explode: false 19 | ---- 20 | ^|Note: |The values for `minimum`, `maximum` and `default` are only examples and MAY be changed. 21 | |=== 22 | -------------------------------------------------------------------------------- /api_modules/limit/requirements/REQ_rc-limit-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_collections_rc-limit-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/collections/rc-limit-response* 5 | ^|A |If the `limit` parameter is provided by the client and supported by the server, then the response SHALL not contain more resources than specified by the `limit` parameter. 6 | ^|B |If the API definition specifies a maximum value for the `limit` parameter, the response SHALL not contain more resources than this maximum value. 7 | ^|C |Only items are counted that are on the first level of the collection. Any nested objects contained within the explicitly requested items SHALL not be counted. 8 | |=== 9 | -------------------------------------------------------------------------------- /api_modules/limit/requirements_module_limit.adoc: -------------------------------------------------------------------------------- 1 | [[rm_limit]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Module* 5 | 2+|http://www.opengis.net/spec/ogcapi-common-2/1.0/rm/limit 6 | |Target type |Web API Query Parameter 7 | |=== 8 | 9 | The `limit` parameter limits the number of resources that can be returned in a single response. 10 | 11 | include::./requirements/REQ_rc-limit-definition.adoc[] 12 | 13 | While the processing of the `limit` parameter is specific to the resource and operation for which it is applied, there is a general set of requirements which all implementations must address. 14 | 15 | include::./requirements/REQ_rc-limit-response.adoc[] 16 | 17 | The number of resources returned depends on the server and the value of the `limit` parameter. 18 | 19 | * The client can request a limit to the number of resources returned. 20 | * The server may have a default value for the limit, and a maximum limit. 21 | * If the server has any more results available than it returns (the number it returns is less than or equal to the requested/default/maximum limit) then the server will include a link to the next set of results. 22 | 23 | include::./recommendations/PER_rc-server-limit.adoc[] 24 | 25 | Since many servers will place a limit on the size of their responses, clients should be prepared to handle a paged response even if they have not specified a `limit` parameter in their query. 26 | 27 | The effect of the limit parameter is to divide the response into a number of pages. Each page (except for the last) contains the specified number of entities. The response contains the first page. Additional pages can be accessed through hyperlink navigation. 28 | 29 | include::./recommendations/REC_rc-next-1.adoc[] 30 | 31 | include::./recommendations/REC_rc-next-2.adoc[] 32 | 33 | include::./recommendations/REC_rc-next-3.adoc[] 34 | 35 | Providing `prev` links supports navigating back and forth between pages, but depending on the implementation approach it may be too complex to implement. 36 | 37 | include::./recommendations/PER_rc-prev.adoc[] 38 | -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/collection_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/collection_info_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "CIS123456789", 3 | "title": "Bonn Germany", 4 | "description": "Image over the city of Bonn.", 5 | "extent": { 6 | "spatial": { 7 | "bbox" : [ [ 7.01, 50.63, 7.22, 50.78 ] ], 8 | "crs" : "http://www.opengis.net/def/crs/OGC/1.3/CRS84" 9 | }, 10 | "temporal": { 11 | "interval" : [ [ "2010-02-15T12:34:56Z", "2018-03-18T12:11:00Z" ] ] 12 | } 13 | }, 14 | "CRS": [ 15 | "http://www.opengis.net/def/crs/OGC/1.3/CRS84", 16 | "http://www.opengis.net/def/crs/EPSG/0/4326" 17 | ], 18 | "links": [ 19 | { 20 | "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage", 21 | "type": "application/json", 22 | "title": "CIS Image", 23 | "href": "http://data.example.org/collections/CIS123456789/coverage" 24 | }, 25 | { 26 | "rel" : "http://www.opengis.net/def/rel/ogc/1.0/coverage-domainset", 27 | "type" : "application/json", 28 | "href": "http://data.example.org/collections/CIS123456789/coverage/domainSet" 29 | }, 30 | { 31 | "rel" : "http://www.opengis.net/def/rel/ogc/1.0/coverage-rangetype", 32 | "type" : "application/json", 33 | "href": "http://data.example.org/collections/CIS123456789/coverage/rangeType" 34 | } 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/collections_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/conformance_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "conformsTo": [ 3 | "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/core", 4 | "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/json", 5 | "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/html", 6 | "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/oas3", 7 | "http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/geodata", 8 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-coverage", 9 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/cisjson", 10 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/cisrdf", 11 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/netcdf", 12 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geotiff", 13 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/html", 14 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-subset", 15 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-bbox", 16 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-datetime" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/coverage_domainset_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/coverage_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/coverage_metadata_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/coverage_rangeset_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/coverage_rangetype_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/examples_CIS_JSON.adoc: -------------------------------------------------------------------------------- 1 | === JSON examples for CIS 2 | http://schemas.opengis.net/cis/1.1/json/examples/00_metadata.json[Metadata] 3 | 4 | http://schemas.opengis.net/cis/1.1/json/examples/05_2D_index.json[2D Index] 5 | 6 | http://schemas.opengis.net/cis/1.1/json/examples/10_2D_regular.json[2D Regular] 7 | 8 | http://schemas.opengis.net/cis/1.1/json/examples/11_2D_regular_fileref.json[2D Regular Fileref] 9 | 10 | http://schemas.opengis.net/cis/1.1/json/examples/12_2D_regular_fileref_multiband.json[2D Regular Filerer Multiband] 11 | 12 | http://schemas.opengis.net/cis/1.1/json/examples/15_with-envelope.json[with Envelope] 13 | 14 | http://schemas.opengis.net/cis/1.1/json/examples/20_3D_height.json[3D Height] 15 | 16 | http://schemas.opengis.net/cis/1.1/json/examples/25_3D_time.json[3D Time] 17 | 18 | http://schemas.opengis.net/cis/1.1/json/examples/30_4D_height+time.json[4D Height + Time] 19 | 20 | http://schemas.opengis.net/cis/1.1/json/examples/40_1D_regular.json[1D Regular] 21 | 22 | http://schemas.opengis.net/cis/1.1/json/examples/45_2D_distorted.json[2D Distorted] 23 | 24 | http://schemas.opengis.net/cis/1.1/json/examples/46_irregular+distorted.json[Irreguar + Distorted] 25 | 26 | http://schemas.opengis.net/cis/1.1/json/examples/50_3D_partitioned-1.json[3D Partitioned] 27 | 28 | http://schemas.opengis.net/cis/1.1/json/examples/55_1D_timeseries-partitioned.json[1D Timeseries Partioned] 29 | 30 | http://schemas.opengis.net/cis/1.1/json/examples/60_3D_timeseries-multipart.json[3D Timeseries Multipart] 31 | 32 | http://schemas.opengis.net/cis/1.1/json/examples/65_1D_timeseries-interleaved.json[1D Timeseries Interleaved] 33 | 34 | http://schemas.opengis.net/cis/1.1/json/examples/70_2D_interpolation.json[2D Interpolation] 35 | 36 | http://schemas.opengis.net/cis/1.1/json/examples/80_sensormodel.json[Sensor Model] 37 | 38 | http://schemas.opengis.net/cis/1.1/json/examples/90_point-cloud.json[Point Cloud] 39 | 40 | -------------------------------------------------------------------------------- /api_modules/subset-old/examples/JSON/landingPage_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "string", 3 | "description": "string", 4 | "links": [ 5 | { 6 | "href": "http://data.example.org/", 7 | "rel": "self", 8 | "type": "application/json", 9 | "title": "this document" 10 | }, 11 | { 12 | "href": "http://data.example.org/api", 13 | "rel": "service-desc", 14 | "type": "application/openapi+json;version=3.0", 15 | "title": "the API definition" 16 | }, 17 | { 18 | "href": "http://data.example.org/conformance", 19 | "rel": "conformance", 20 | "type": "application/json", 21 | "title": "OGC conformance classes implemented by this API" 22 | }, 23 | { 24 | "href": "http://data.example.org/collections", 25 | "title": "The list of available collections", 26 | "rel": "data" 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /api_modules/subset-old/examples/examples.adoc: -------------------------------------------------------------------------------- 1 | == Examples 2 | 3 | This section contains examples for coverage access, subsetting, and encoding. It assumes a service endpoint of http://acme.com/oapi/[http://acme.com/oapi/] . 4 | 5 | === Service Metadata 6 | 7 | The first part is about service metadata. Currently this is wild speculation as it will mainly be defined through https://github.com/opengeospatial/oapi_common[OGC API - Common]. 8 | 9 | * http://acme.com/oapi/servicedescription/formatssupported[http://acme.com/oapi/servicedescription/formatssupported] -- returns a list of formats in which coverage representations can be requested 10 | 11 | === Coverage Finding 12 | 13 | * http://acme.com/oapi/collections[http://acme.com/oapi/collections] -- returns a list of all collection identifiers 14 | * http://acme.com/oapi/collections?bbox=160.6,-55.95,-170,-25.89[http://acme.com/oapi/collections?bbox=160.6,-55.95,-170,-25.89] 15 | -- returns a list of all collection identifiers intersecting with the 16 | New Zealand economic zone (any time, any elevation, etc.); the CRS inwhich the bbox parameters are expressed is WGS84, defined in OGC API -Common and likely in a future OGC API - Catalog 17 | * http://acme.com/oapi/collections/%7Bcoverageid%7D[http://acme.com/oapi/collections/{coverageid}] -- returns the description of a specific collection including links to available sub-paths like /coverage, /tiles, or /map 18 | * http://acme.com/oapi/collections/%7Bcoverageid%7D/coverage[http://acme.com/oapi/collections/{coverageid}/coverage] 19 | -- returns a general description of the coverage represented by 20 | `coverageid` containing the coverage's envelope (the full domainset might be huge and thus is omitted here), rangetype, and service metadata 21 | like the coverage's native format 22 | 23 | Notes: 24 | 25 | * all list results include links (cf. OGC API - Common) 26 | * "coverage" is a specialization of "items"; further names could be defined in future (RectifiedGridCoverage, features, ...) 27 | * "description of collection" to be clarified (defined in OGC API - Common?) 28 | * bbox is OGC API - Common syntax 29 | ** in OGC API - Coverages Core, no subsetting on vertical and time coordinates 30 | ** horizontal coordinates: all filtering is evaluated in WGS84 (may require bounding box translation before intersecting) 31 | ** if filtering dimension is not present in coverage to be tested (due to above restriction not an issue currently): coverage will be discarded from result 32 | -------------------------------------------------------------------------------- /api_modules/subset-old/examples/examples_subsetting.adoc: -------------------------------------------------------------------------------- 1 | These examples return a subset of a coverage in the negotiated format, including domain set, range type (and metadata if applicable) to the extent than they can be described in that format: 2 | 3 | * {datasetAPI}/collections/{coverageid}/coverage?subset=Lat(40:50),Lon(10:20) -- returns a cutout (trim) from the coverage for the extent between corner coordinates (Lat: 40, Lon: 10) and (Lat: 50, Lon: 20) 4 | * {datasetAPI}/collections/{coverageid}/coverage?subset=time("2019-03-27") -- returns a coverage slice at the timestamp (if the coverage is has 2D spatial dimensions plus time, the result will be a 2D image with its full spatial extent) 5 | 6 | A `rangeset` resource, also supporting subsetting, may be available in some implementations, for some formats/media types. 7 | The following examples using this resource return only the sample values for a subset of a coverage in the negotiated format, without domain set, range type or metadata: 8 | 9 | * {datasetAPI}/collections/{coverageid}/coverage/rangeset?subset=Lat(40:50),Lon(10:20) -- returns a coverage cutout/trim between (Lat: 40, Lon: 10) and (Lat: 50, Lon: 20) 10 | * {datasetAPI}/collections/{coverageid}/coverage/rangeset?subset=time("2019-03-27") -- returns a coverage slice at the timestamp given, with all data available in the other dimensions (if the coverage is has 2D spatial dimensions plus time, the result will be a 2D image with its full spatial extent) 11 | -------------------------------------------------------------------------------- /api_modules/subset-old/recommendations/PER_subset-slice-sparse-dimensions.adoc: -------------------------------------------------------------------------------- 1 | [[per_slice_sparse_dimension]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Permission {counter:per-id}* |*/per/coverage-subset/slice-sparse-dimension* 5 | ^|A |The empty portions in a coverage resulting from a slice operation on an axis (e.g. time), combined with a trimming operations on other axes (e.g. latitude and longitude) 6 | which would either be empty or not cover the full extent of the trim operation MAY be filled with data values from the same trim operation 7 | combined with a slicing operation on a different value of the slicing axis which would return non-empty values. 8 | For example, the closest or last previous time for which data is available for a certain geospatial extent may be returned. 9 | An Earth Observation use case for this permission is to allow retrieving a slice of the last available imagery on or before a certain date, 10 | taking into account that a certain geographic area may only be observed every few days. 11 | ^|B |This permission applies to both explicit slice operations using subset, as well as to implicit slicing from requesting an output format only supporting 12 | a lower dimensionality than the data (e.g. requesting a 2D image from a 3D coverage as PNG or GeoTIFF). 13 | ^|C |A query parameter defined by a custom or standardized extension MAY be made available to enable, disable or alter that behavior. 14 | |=== 15 | -------------------------------------------------------------------------------- /api_modules/subset-old/requirements/REQ_cov-subset-definition.adoc: -------------------------------------------------------------------------------- 1 | [[req_coverage_subset-definition]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/coverage-subset/definition* 5 | ^|A |The operation SHALL support a parameter `subset` with the following characteristics (using an Extended Backus Naur Form (EBNF) fragment): 6 | 7 | [source,EBNF] 8 | ---- 9 | SubsetSpec: "subset"=axisName(intervalOrPoint) 10 | axisName: {text} 11 | intervalOrPoint: interval \| point 12 | interval: low : high 13 | low: point \| * 14 | high: point \| * 15 | point: {number} \| "{text}" 16 | 17 | Where: 18 | \" = double quote = ASCII code 0x42, 19 | {number} is an integer or floating-point number, and 20 | {text} is some general ASCII text (such as a time and date notation in ISO 8601). 21 | ---- 22 | ^|B |The axis name SHALL be the same as one of the `axisLabels` defined in the DomainSet or else return a 400 status code. 23 | ^|C |If the intervalOrPoint values fall entirely outside the range of valid values defined by the DomainSet for the identified axis,a 204 status code SHALL be returned 24 | ^|D |For a CRS where an axis can wrap around, such as subsetting across the dateline (anti-meridian) in a geographic CRS, a `low` value greater than `high` SHALL 25 | be supported to indicate an extent crossing that wrapping point. 26 | |=== 27 | 28 | NOTE: When the intervalOrPoint values fall partially outside of the range of valid values defined by the DomainSet for the identified axis, 29 | the service is expected to return the non-empty portion of the coverage resulting from the subset. 30 | For subsetting on the range set, and for coverage media types with no geo-referencing mechanisms (e.g. PNG), NO_DATA values or transparency should be used. 31 | If a georeferencing mechanism is available within the negotiated media type, the service could decide whether to use NO_DATA values 32 | or simply return the properly geo-referenced values within the domain set. 33 | -------------------------------------------------------------------------------- /api_modules/subset-old/requirements/REQ_cov-subset-success.adoc: -------------------------------------------------------------------------------- 1 | [[req_coverage_subset-success]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/coverage-subset/success* 5 | ^|A |The `subset` parameter SHALL be applied to the coverage (and rangeset, if available as a separate resource). 6 | ^|B |Only that part of the coverage addressed SHALL be returned that falls within the bounds of the subset expression whereby a `*` (asterisk) in the position of a lower or upper limit along an axis denotes the coverage's minimum or maximum extent along this axis, respectively. The DomainSet shall be adjusted accordingly to the new boundaries (in case of trimming) and the reduced dimension (in case of slicing). 7 | |=== 8 | -------------------------------------------------------------------------------- /api_modules/subset-old/requirements/REQ_cov-subset_conformance.adoc: -------------------------------------------------------------------------------- 1 | [[req_coverage_subset-conformance]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/coverage-subset/conformance* 5 | 2+|The list of Conformance Classes advertised by the API SHALL include: 6 | ^|A |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-coverage 7 | ^|B |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/coverage-subset 8 | |=== 9 | -------------------------------------------------------------------------------- /api_modules/subset-old/requirements/REQ_subset-definition.adoc: -------------------------------------------------------------------------------- 1 | [width="90%",cols="2,6a"] 2 | |=== 3 | ^|*Requirement {counter:req-id}* |*/req/collections/rc-subset-definition* 4 | ^|A |The `subset` parameter SHALL have the following characteristics (using an Augmented Backus Naur Form (ABNF) fragment): 5 | 6 | [source,ABNF] 7 | ---- 8 | SubsetSpec: "subset"=axisName(intervalOrPoint) 9 | axisName: {text} 10 | intervalOrPoint: interval \| point 11 | interval: low : high 12 | low: point \| * 13 | high: point \| * 14 | point: {number} \| "{text}" 15 | 16 | Where: 17 | \" = double quote = ASCII code 0x42, 18 | {number} is an integer or floating-point number, and 19 | {text} is some general ASCII text (such as a time and date notation in ISO 8601). 20 | ---- 21 | ^|B |The axis name SHALL correspond to one of the axis of the Coordinate Reference System (CRS) of the target resource or else return a 400 status code. 22 | ^|C |If the intervalOrPoint values fall entirely outside the range of valid values defined for the identified axis, a 204 status code SHALL be returned 23 | ^|D |For a CRS where an axis can wrap around, such as subsetting across the dateline (anti-meridian) in a geographic CRS, a `low` value greater than `high` SHALL 24 | be supported to indicate an extent crossing that wrapping point. 25 | |=== 26 | 27 | NOTE: When the intervalOrPoint values fall partially outside of the range of valid values defined by the CRS for the identified axis, the service is expected to select the non-empty portion of the resource resulting from the subset operation. 28 | -------------------------------------------------------------------------------- /api_modules/subset-old/requirements/REQ_subset-response.adoc: -------------------------------------------------------------------------------- 1 | [width="90%",cols="2,6a"] 2 | |=== 3 | ^|*Requirement {counter:req-id}* |*/req/collection/subset-response* 4 | ^|A |Only that part of the resource that falls within the bounds of the subset expression SHALL be selected. 5 | ^|B |If an lower limit of the subset expression is populated with an asterix "*" THEN the mainumum extent of the resource along that axis SHALL be selected. 6 | ^|C |If an upper limit of the subset expression is populated with an asterix "*" THEN the maximum extent of the resource along that axis SHALL be selected. 7 | |=== 8 | -------------------------------------------------------------------------------- /api_modules/subset-old/requirements/REQ_subset_conformance.adoc: -------------------------------------------------------------------------------- 1 | [width="90%",cols="2,6a"] 2 | |=== 3 | ^|*Requirement {counter:req-id}* |*/req/collections/subset-conformance* 4 | 2+|The list of Conformance Classes advertised by the API SHALL include: 5 | ^|A |http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/subset 6 | |=== 7 | -------------------------------------------------------------------------------- /api_modules/subset-old/requirements_module_subset.adoc: -------------------------------------------------------------------------------- 1 | [cols="1,4",width="90%"] 2 | |=== 3 | 2+|*Requirements Module* 4 | 2+|http://www.opengis.net/spec/ogcapi-common-2/1.0/rm/subset 5 | |Target type |Web API Query Parameter 6 | |=== 7 | 8 | The `subset` parameter is used to select a subset of a geospatial resource. 9 | 10 | The `subset` parameter is defined as follows: 11 | 12 | include::requirements/REQ_subset-definition.adoc[] 13 | 14 | While the processing of the `subset` parameter is specific to the resource and operation for which it is applied, there are requirements which all implementations must address. 15 | 16 | include::requirements/REQ_subset-response.adoc[] 17 | 18 | -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/collection_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/collection_info_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "CIS123456789", 3 | "title": "Bonn Germany", 4 | "description": "Image over the city of Bonn.", 5 | "extent": { 6 | "spatial": { 7 | "bbox" : [ [ 7.01, 50.63, 7.22, 50.78 ] ], 8 | "crs" : "http://www.opengis.net/def/crs/OGC/1.3/CRS84" 9 | }, 10 | "temporal": { 11 | "interval" : [ [ "2010-02-15T12:34:56Z", "2018-03-18T12:11:00Z" ] ] 12 | } 13 | }, 14 | "CRS": [ 15 | "http://www.opengis.net/def/crs/OGC/1.3/CRS84", 16 | "http://www.opengis.net/def/crs/EPSG/0/4326" 17 | ], 18 | "links": [ 19 | { 20 | "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage", 21 | "type": "application/json", 22 | "title": "CIS Image", 23 | "href": "http://data.example.org/collections/CIS123456789/coverage" 24 | }, 25 | { 26 | "rel" : "http://www.opengis.net/def/rel/ogc/1.0/coverage-domainset", 27 | "type" : "application/json", 28 | "href": "http://data.example.org/collections/CIS123456789/coverage/domainSet" 29 | }, 30 | { 31 | "rel" : "http://www.opengis.net/def/rel/ogc/1.0/coverage-rangetype", 32 | "type" : "application/json", 33 | "href": "http://data.example.org/collections/CIS123456789/coverage/rangeType" 34 | } 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/collections_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/conformance_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "conformsTo": [ 3 | "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/core", 4 | "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/json", 5 | "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/html", 6 | "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/oas3", 7 | "http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/geodata", 8 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-coverage", 9 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/cisjson", 10 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/cisrdf", 11 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/netcdf", 12 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geotiff", 13 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/html", 14 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-subset", 15 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-bbox", 16 | "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-datetime" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/coverage_domainset_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/coverage_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/coverage_metadata_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/coverage_rangeset_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/coverage_rangetype_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/examples_CIS_JSON.adoc: -------------------------------------------------------------------------------- 1 | === JSON examples for CIS 2 | http://schemas.opengis.net/cis/1.1/json/examples/00_metadata.json[Metadata] 3 | 4 | http://schemas.opengis.net/cis/1.1/json/examples/05_2D_index.json[2D Index] 5 | 6 | http://schemas.opengis.net/cis/1.1/json/examples/10_2D_regular.json[2D Regular] 7 | 8 | http://schemas.opengis.net/cis/1.1/json/examples/11_2D_regular_fileref.json[2D Regular Fileref] 9 | 10 | http://schemas.opengis.net/cis/1.1/json/examples/12_2D_regular_fileref_multiband.json[2D Regular Filerer Multiband] 11 | 12 | http://schemas.opengis.net/cis/1.1/json/examples/15_with-envelope.json[with Envelope] 13 | 14 | http://schemas.opengis.net/cis/1.1/json/examples/20_3D_height.json[3D Height] 15 | 16 | http://schemas.opengis.net/cis/1.1/json/examples/25_3D_time.json[3D Time] 17 | 18 | http://schemas.opengis.net/cis/1.1/json/examples/30_4D_height+time.json[4D Height + Time] 19 | 20 | http://schemas.opengis.net/cis/1.1/json/examples/40_1D_regular.json[1D Regular] 21 | 22 | http://schemas.opengis.net/cis/1.1/json/examples/45_2D_distorted.json[2D Distorted] 23 | 24 | http://schemas.opengis.net/cis/1.1/json/examples/46_irregular+distorted.json[Irreguar + Distorted] 25 | 26 | http://schemas.opengis.net/cis/1.1/json/examples/50_3D_partitioned-1.json[3D Partitioned] 27 | 28 | http://schemas.opengis.net/cis/1.1/json/examples/55_1D_timeseries-partitioned.json[1D Timeseries Partioned] 29 | 30 | http://schemas.opengis.net/cis/1.1/json/examples/60_3D_timeseries-multipart.json[3D Timeseries Multipart] 31 | 32 | http://schemas.opengis.net/cis/1.1/json/examples/65_1D_timeseries-interleaved.json[1D Timeseries Interleaved] 33 | 34 | http://schemas.opengis.net/cis/1.1/json/examples/70_2D_interpolation.json[2D Interpolation] 35 | 36 | http://schemas.opengis.net/cis/1.1/json/examples/80_sensormodel.json[Sensor Model] 37 | 38 | http://schemas.opengis.net/cis/1.1/json/examples/90_point-cloud.json[Point Cloud] 39 | 40 | -------------------------------------------------------------------------------- /api_modules/subset/examples/JSON/landingPage_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "string", 3 | "description": "string", 4 | "links": [ 5 | { 6 | "href": "http://data.example.org/", 7 | "rel": "self", 8 | "type": "application/json", 9 | "title": "this document" 10 | }, 11 | { 12 | "href": "http://data.example.org/api", 13 | "rel": "service-desc", 14 | "type": "application/openapi+json;version=3.0", 15 | "title": "the API definition" 16 | }, 17 | { 18 | "href": "http://data.example.org/conformance", 19 | "rel": "conformance", 20 | "type": "application/json", 21 | "title": "OGC conformance classes implemented by this API" 22 | }, 23 | { 24 | "href": "http://data.example.org/collections", 25 | "title": "The list of available collections", 26 | "rel": "data" 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /api_modules/subset/examples/examples.adoc: -------------------------------------------------------------------------------- 1 | == Examples 2 | 3 | This section contains examples for coverage access, subsetting, and encoding. It assumes a service endpoint of http://acme.com/oapi/[http://acme.com/oapi/] . 4 | 5 | === Service Metadata 6 | 7 | The first part is about service metadata. Currently this is wild speculation as it will mainly be defined through https://github.com/opengeospatial/oapi_common[OGC API - Common]. 8 | 9 | * http://acme.com/oapi/servicedescription/formatssupported[http://acme.com/oapi/servicedescription/formatssupported] -- returns a list of formats in which coverage representations can be requested 10 | 11 | === Coverage Finding 12 | 13 | * http://acme.com/oapi/collections[http://acme.com/oapi/collections] -- returns a list of all collection identifiers 14 | * http://acme.com/oapi/collections?bbox=160.6,-55.95,-170,-25.89[http://acme.com/oapi/collections?bbox=160.6,-55.95,-170,-25.89] 15 | -- returns a list of all collection identifiers intersecting with the 16 | New Zealand economic zone (any time, any elevation, etc.); the CRS inwhich the bbox parameters are expressed is WGS84, defined in OGC API -Common and likely in a future OGC API - Catalog 17 | * http://acme.com/oapi/collections/%7Bcoverageid%7D[http://acme.com/oapi/collections/{coverageid}] -- returns the description of a specific collection including links to available sub-paths like /coverage, /tiles, or /map 18 | * http://acme.com/oapi/collections/%7Bcoverageid%7D/coverage[http://acme.com/oapi/collections/{coverageid}/coverage] 19 | -- returns a general description of the coverage represented by 20 | `coverageid` containing the coverage's envelope (the full domainset might be huge and thus is omitted here), rangetype, and service metadata 21 | like the coverage's native format 22 | 23 | Notes: 24 | 25 | * all list results include links (cf. OGC API - Common) 26 | * "coverage" is a specialization of "items"; further names could be defined in future (RectifiedGridCoverage, features, ...) 27 | * "description of collection" to be clarified (defined in OGC API - Common?) 28 | * bbox is OGC API - Common syntax 29 | ** in OGC API - Coverages Core, no subsetting on vertical and time coordinates 30 | ** horizontal coordinates: all filtering is evaluated in WGS84 (may require bounding box translation before intersecting) 31 | ** if filtering dimension is not present in coverage to be tested (due to above restriction not an issue currently): coverage will be discarded from result 32 | -------------------------------------------------------------------------------- /api_modules/subset/examples/examples_subsetting.adoc: -------------------------------------------------------------------------------- 1 | These examples return a subset of a coverage in the negotiated format, including domain set, range type (and metadata if applicable) to the extent than they can be described in that format: 2 | 3 | * {datasetAPI}/collections/{coverageid}/coverage?subset=Lat(40:50),Lon(10:20) -- returns a cutout (trim) from the coverage for the extent between corner coordinates (Lat: 40, Lon: 10) and (Lat: 50, Lon: 20) 4 | * {datasetAPI}/collections/{coverageid}/coverage?subset=time("2019-03-27") -- returns a coverage slice at the timestamp (if the coverage is has 2D spatial dimensions plus time, the result will be a 2D image with its full spatial extent) 5 | 6 | A `rangeset` resource, also supporting subsetting, may be available in some implementations, for some formats/media types. 7 | The following examples using this resource return only the sample values for a subset of a coverage in the negotiated format, without domain set, range type or metadata: 8 | 9 | * {datasetAPI}/collections/{coverageid}/coverage/rangeset?subset=Lat(40:50),Lon(10:20) -- returns a coverage cutout/trim between (Lat: 40, Lon: 10) and (Lat: 50, Lon: 20) 10 | * {datasetAPI}/collections/{coverageid}/coverage/rangeset?subset=time("2019-03-27") -- returns a coverage slice at the timestamp given, with all data available in the other dimensions (if the coverage is has 2D spatial dimensions plus time, the result will be a 2D image with its full spatial extent) 11 | -------------------------------------------------------------------------------- /api_modules/subset/recommendations/PER_subset-slice-sparse-dimensions.adoc: -------------------------------------------------------------------------------- 1 | [[per_slice_sparse_dimension]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Permission {counter:per-id}* |*/per/coverage-subset/slice-sparse-dimension* 5 | ^|A |The empty portions in a coverage resulting from a slice operation on an axis (e.g. time), combined with a trimming operations on other axes (e.g. latitude and longitude) 6 | which would either be empty or not cover the full extent of the trim operation MAY be filled with data values from the same trim operation 7 | combined with a slicing operation on a different value of the slicing axis which would return non-empty values. 8 | For example, the closest or last previous time for which data is available for a certain geospatial extent may be returned. 9 | An Earth Observation use case for this permission is to allow retrieving a slice of the last available imagery on or before a certain date, 10 | taking into account that a certain geographic area may only be observed every few days. 11 | ^|B |This permission applies to both explicit slice operations using subset, as well as to implicit slicing from requesting an output format only supporting 12 | a lower dimensionality than the data (e.g. requesting a 2D image from a 3D coverage as PNG or GeoTIFF). 13 | ^|C |A query parameter defined by a custom or standardized extension MAY be made available to enable, disable or alter that behavior. 14 | |=== 15 | -------------------------------------------------------------------------------- /api_modules/subset/requirements_module_subset.adoc: -------------------------------------------------------------------------------- 1 | [cols="1,4",width="90%"] 2 | |=== 3 | 2+|*Requirements Module* 4 | 2+|http://www.opengis.net/spec/ogcapi-common-2/1.0/rm/subset 5 | |Target type |Web API Query Parameter 6 | |=== 7 | 8 | The `subset` parameter is used to select a subset of a geospatial resource. 9 | 10 | The `subset` parameter is defined as follows: 11 | 12 | include::requirements/REQ_subset-definition.adoc[] 13 | 14 | While the processing of the `subset` parameter is specific to the resource and operation for which it is applied, there is a general set of requirements which all implementations must address. 15 | 16 | include::requirements/REQ_subset-response.adoc[] 17 | 18 | -------------------------------------------------------------------------------- /asciidoctor.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "OGC_doc_number": "19-087", 4 | "urn":"http://www.opengis.net/doc/is/ogcapi-coverages-1/1.0", 5 | "title":"OGC API - Coverages - Part 1: Core", 6 | "path":"standard/19-087.adoc", 7 | "options": ["--trace"], 8 | "a":[ 9 | "data-uri" 10 | ] 11 | }, 12 | "2": { 13 | "OGC_doc_number": "20-075", 14 | "urn":"http://www.opengis.net/doc/eg/ogcapi-coverages/1.0", 15 | "title":"OGC API - Coverages Users Guide", 16 | "path":"users-guide/20-075.adoc", 17 | "options": ["--trace"], 18 | "a":[ 19 | "data-uri" 20 | ] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /charter/HTML_Gen.bat: -------------------------------------------------------------------------------- 1 | asciidoctor --trace -o ../OGC-Coverages-SWG-Charter.html OGC-Coverages-SWG-Charter.adoc 2 | -------------------------------------------------------------------------------- /charter/PDF_Gen.bat: -------------------------------------------------------------------------------- 1 | asciidoctor -r asciidoctor-pdf --trace -b pdf -o ../OGC-Coverages-SWG-Charter.pdf OGC-Coverages-SWG-Charter.adoc 2 | -------------------------------------------------------------------------------- /extensions/crs.adoc: -------------------------------------------------------------------------------- 1 | Selecting an output Coordinate Reference Systems is now an optional requirement class of _Part 1: Core_. 2 | 3 | See https://docs.ogc.org/DRAFTS/19-087.html#rc-crs 4 | -------------------------------------------------------------------------------- /extensions/overview.adoc: -------------------------------------------------------------------------------- 1 | == Extension Classs 2 | 3 | [[extensions-overview]] 4 | === Overview 5 | In addition to the _OGC API - Coverages - Part 1: Core, _"Core"_ requirement class which every implementation claiming conformance must implement, 6 | a number of optional conformance classes are also defined in _Part 1: Core_ which an implementation optionally may support, and some additional extensions are planned. These extensions are as follows. 7 | 8 | 9 | [#mapping-to-common,reftext='{table-caption} {counter:table-num}'] 10 | ._OGC API - Coverages_ Extensions 11 | [width="90%",cols="2,6"] 12 | |==== 13 | ^|*Extension* ^|*Purpose* 14 | | Part 2: Filtering and deriving fields | only include cells for the resulting coverage if they match a query predicate, define new fields based on existing ones, using an expression language such as https://docs.ogc.org/DRAFTS/21-065.html[CQL2]. See #164. 15 | | https://docs.ogc.org/DRAFTS/21-009.html[OGC API - Processes - Part 1: Core and Part 3: Workflows and Chaining] | accept an OGC API - Coverage as an input to a process, or return an OGC API - Coverage as an output from a _OGC API - Procesess_ process 16 | | https://docs.ogc.org/is/08-068r3/08-068r3.html[Web Coverage Processing Service] | process WCPS analytics queries in the server (see #97) 17 | | Transactions | insert, delete, or update a coverage on a server (to be based on Common CRUD building blocks, see also https://docs.ogc.org/DRAFTS/19-087.html#rc-scenes[Scenes requirement class permissions for CRUD operations]) 18 | | Range Subsetting _(now in Core)_ | extract range components ("bands", "variables") from a coverage 19 | | Scaling _(now in Core)_ | change resolution of a gridd coverage 20 | | CRS _(now in Core)_ | change the projection of a coverage 21 | | Interpolation | apply a particular interpolation method when interpolation occurs during request processing 22 | |==== 23 | -------------------------------------------------------------------------------- /implementations.adoc: -------------------------------------------------------------------------------- 1 | == Implementations 2 | 3 | === Services 4 | 5 | [#table_implementation,reftext='{table-caption} {counter:table-num}'] 6 | .Service implementations 7 | [cols=",,",width="75%",options="header",align="center"] 8 | |=== 9 | |Implementation | Type | Contact 10 | 11 | | https://pygeoapi.io[pygeoapi] 12 | | OGC API - Coverages 13 | | https://github.com/tomkralidis[Tom Kralidis] 14 | 15 | | https://maps.gnosis.earth/ogcapi/[GNOSIS Map Server] 16 | | OGC API - Coverages 17 | | https://github.com/jerstlouis[Jerome St-Louis] 18 | 19 | | https://test.cubewerx.com/cubewerx/cubeserv/demo/ogcapi[CubeSERV] 20 | | OGC API - Coverages 21 | | https://github.com/pomakis[Keith Pomakis] 22 | 23 | | https://rasdaman.org/[rasdaman] 24 | | OGC API - Coverages 25 | | https://github.com/pebau[Peter Baumann] 26 | 27 | | https://www.webenterprisesuite.com/[Web Enterprise Suite] 28 | | OGC API - Coverages (T19 GDC API) 29 | | https://www.compusult.com/[Compusult] 30 | 31 | | http://oge.whu.edu.cn/geocube/gdc_api_t19/[WHU] 32 | | OGC API - Coverages (T19 GDC API) 33 | | https://en.whu.edu.cn/[Wuhan University] 34 | 35 | | https://testbed19.api.dev.brockmann-consult.de/api/ogc[Brockmann Consult] 36 | | OGC API - Coverages (T19 GDC API) 37 | |https://github.com/pont-us[Pontus Lurcock] 38 | 39 | | https://dev.openeo.eurac.edu/[Eurac GDC API] 40 | | OGC API - Coverages (T19 GDC API) 41 | | https://github.com/clausmichele[Michele Claus] 42 | 43 | | TBA 44 | | TBA 45 | | TBA 46 | |=== 47 | 48 | 49 | === Clients 50 | 51 | [#table_implementation,reftext='{table-caption} {counter:table-num}'] 52 | .Client implementations 53 | [cols=",,",width="75%",options="header",align="center"] 54 | |=== 55 | |Implementation | Type | Contact 56 | 57 | | https://geopython.github.io/OWSLib[OWSLib] 58 | | Python client 59 | | https://github.com/tomkralidis[Tom Kralidis] 60 | 61 | | https://gdal.org/[GDAL] (https://gdal.org/drivers/raster/ogcapi.html[OGC API driver]) 62 | | OGC API - Coverages client 63 | | https://github.com/rouault[Even Rouault] 64 | 65 | | https://ecere.ca/gnosis[GNOSIS SDK / GNOSIS Cartographer] 66 | | OGC API - Coverages client 67 | | https://github.com/jerstlouis[Jerome St-Louis] 68 | 69 | | https://m-mohr.github.io/gdc-web-editor/[GDC Web Editor] 70 | | OGC API - Coverages client (T19 GDC API) 71 | | https://github.com/m-mohr[Matthias Mohr] 72 | 73 | | https://tm.gis.tw/testbed19client/[GIS FCU] 74 | | OGC API - Coverages client (T19 GDC API) 75 | | https://github.com/gisfcu[GIS FCU] 76 | 77 | |https://github.com/dcs4cop/xcube-ogccov/[xcube-ogccov] 78 | |OGC API - Coverages client (T19 GDC API) 79 | |https://github.com/pont-us[Pontus Lurcock] 80 | 81 | |https://www.geomatys.com/en/examind-suite/[Examind] 82 | |OGC API - Coverages client (T19 GDC API) 83 | |https://github.com/Geomatys[Geomatys] 84 | 85 | | TBA 86 | | TBA 87 | | TBA 88 | |=== 89 | -------------------------------------------------------------------------------- /proposals/clause_13_scenes.adoc: -------------------------------------------------------------------------------- 1 | [[rc_scenes]] 2 | == Requirements Class "Scenes" 3 | 4 | === Overview 5 | 6 | The _Scenes_ Requirements Class defines the ability to present separate components of a coverage as individual scenes, in addition to an overall coverage for the collection as a whole. 7 | A list of scenes and a resource associated to each individual scene, including a description of its domain, are available, along with the ability to retrieve a coverage for each scene. 8 | The native CRS of the coverage for each scene and/or the resolution of the coverage data may differ from that of the overall collection. 9 | For example, the native CRS of an individual scene may be a particular UTM zone CRS based on its geospatial extent, whereas a global coverage for the collection is natively available in a WGS84 / EPSG:4326 geographic CRS. 10 | 11 | The API may also integrate additional functionality related to scenes, such as for advanced filtering capabilities when listing scenes, as defined in _OGC API - Records_ _Local Resource Catalogues_ and/or 12 | _SpatioTemporal Asset Catalog (STAC)_, the ability to create new scenes, update and delete existing scenes, or the ability to use scene-level metadata as part of requesting coverage data with a filtering extension. 13 | 14 | include::requirements/requirements_class_scenes.adoc[] 15 | -------------------------------------------------------------------------------- /standard/.gitignore: -------------------------------------------------------------------------------- 1 | /19-087.html 2 | /19-087.pdf 3 | -------------------------------------------------------------------------------- /standard/HTML_Gen.bat: -------------------------------------------------------------------------------- 1 | asciidoctor --trace -o ./19-087.html 19-087.adoc 2 | -------------------------------------------------------------------------------- /standard/PDF_Gen.bat: -------------------------------------------------------------------------------- 1 | asciidoctor -r asciidoctor-pdf --trace -b pdf -o ./19-087.pdf 19-087.adoc 2 | -------------------------------------------------------------------------------- /standard/README.md: -------------------------------------------------------------------------------- 1 | # OGC API (OAPI) Coverages Specification 2 | 3 | This directory contains the OGC API Specification for Coverages. This specification, working with the parallel OGC API Common specification, defines the API analog to the WCS standard. 4 | 5 | This Coverage specification addresses only those parts of an API which are specific to Coverage resources. Those capabilities which may have applicability beyond coverages should be considered for inclusion in Common. 6 | -------------------------------------------------------------------------------- /standard/annex_ats.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Conformance Class Abstract Test Suite (Normative) 4 | 5 | [NOTE] 6 | Ensure that there is a conformance class for each requirements class and a test for each requirement (identified by requirement name and number) 7 | 8 | === Conformance Class A 9 | 10 | ==== Requirement 1 11 | [cols=">20h,<80d",width="100%"] 12 | |=== 13 | |Test id: |/conf/conf-class-a/req-name-1 14 | |Requirement: |/req/req-class-a/req-name-1 15 | |Test purpose: | Verify that... 16 | |Test method: | Inspect... 17 | |=== 18 | 19 | ==== Requirement 2 20 | -------------------------------------------------------------------------------- /standard/annex_bibliography.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | [[Bibliography]] 4 | = Bibliography 5 | 6 | * [[SDWBP]] W3C/OGC: *Spatial Data on the Web Best Practices*, W3C Working Group Note 28 September 2017, https://www.w3.org/TR/sdw-bp/ 7 | * [[DWBP]] W3C: *Data on the Web Best Practices*, W3C Recommendation 31 January 2017, https://www.w3.org/TR/dwbp/ 8 | * [[DCAT]] W3C: *Data Catalog Vocabulary*, W3C Recommendation 16 January 2014, https://www.w3.org/TR/vocab-dcat/ 9 | * [[link-relations]] IANA: *Link Relation Types*, https://www.iana.org/assignments/link-relations/link-relations.xml 10 | * [[J2K]] International Telecommunication Union, *ITU-T.800 : Information technology - JPEG 2000 image coding system: Core coding system*, June, 2019, https://www.itu.int/rec/T-REC-T.800-201906-I/en 11 | * [[RDF]] W3C, *RDF 1.1 Semantics*, February 2014, https://www.w3.org/TR/rdf11-mt/ 12 | * OGC: OGC 13-102r2, *Name type specification – Time and index coordinate reference system definitions* (OGC Policy Document), version 1, 2014 13 | * [[[Zarr2,Zarr2]]], Zarr Storage Specification Version 2. https://zarr-specs.readthedocs.io/en/latest/v2/v2.0.html 14 | -------------------------------------------------------------------------------- /standard/annex_history.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Revision History 4 | 5 | [cols="12,18,12,12,46",options="header"] 6 | |=== 7 | |Date |Release |Editor | Primary clauses modified |Description 8 | |2019-03-06 |Template |C. Heazel |all |initial template 9 | |=== 10 | -------------------------------------------------------------------------------- /standard/annex_http_status.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | [[http-status-codes]] 4 | == HTTP Status Codes 5 | 6 | <> lists the main HTTP status codes that clients should be prepared to receive. This includes support for specific security schemes or URI redirection. In addition, other error situations may occur in the transport layer outside of the server. 7 | 8 | [#status-codes,reftext='{table-caption} {counter:table-num}'] 9 | .Typical HTTP status codes 10 | [cols="15,85",options="header"] 11 | !=== 12 | ^|Status code ^|Description 13 | ^|`200` |A successful request. 14 | ^|`302` |The target resource was found but resides temporarily under a different URI. A 302 response is not evidence that the operation has been successfully completed. 15 | ^|`303` |The server is redirecting the user agent to a different resource. A 303 response is not evidence that the operation has been successfully completed. 16 | ^|`304` |An entity tag was provided in the request and the resource has not changed since the previous request. 17 | ^|`307` |The target resource resides temporarily under a different URI and the user agent MUST NOT change the request method if it performs an automatic redirection to that URI. 18 | ^|`308` |Indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs. 19 | ^|`400` |The server cannot or will not process the request due to an apparent client error. For example, a query parameter had an incorrect value. 20 | ^|`401` |The request requires user authentication. The response includes a `WWW-Authenticate` header field containing a challenge applicable to the requested resource. 21 | ^|`403` |The server understood the request, but is refusing to fulfill it. While status code `401` indicates missing or bad authentication, status code `403` indicates that authentication is not the issue, but the client is not authorized to perform the requested operation on the resource. 22 | ^|`404` |The requested resource does not exist on the server. For example, a path parameter had an incorrect value. 23 | ^|`405` |The request method is not supported. For example, a POST request was submitted, but the resource only supports GET requests. 24 | ^|`406` |Content negotiation failed. For example, the `Accept` header submitted in the request did not support any of the media types supported by the server for the requested resource. 25 | ^|`500` |An internal error occurred in the server. 26 | !=== 27 | 28 | The status codes described in <> do not cover all possible conditions. See <> for a complete list of HTTP status codes. 29 | -------------------------------------------------------------------------------- /standard/clause_0_front_material.adoc: -------------------------------------------------------------------------------- 1 | [big]*i. Abstract* 2 | 3 | 4 | 5 | [big]*ii. Keywords* 6 | 7 | The following are keywords to be used by search engines and document catalogues. 8 | 9 | ogcdoc, OGC document, geographic information, spatial data, spatial things, dataset, distribution, API, json, html, OpenAPI, REST, Coverages 10 | 11 | [big]*iii. Preface* 12 | 13 | Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium Inc. shall not be held responsible for identifying any or all such patent rights. 14 | 15 | Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation. 16 | 17 | [big]*iv. Submitting organizations* 18 | 19 | The following organizations submitted this Document to the Open Geospatial Consortium (OGC): 20 | 21 | * Heazeltech LLC 22 | * Ecere Corporation 23 | 24 | [big]*v. Submitters* 25 | 26 | All questions regarding this submission should be directed to the editor or the submitters: 27 | 28 | |=== 29 | ^|Name ^|Affiliation 30 | |Charles Heazel (Editor) |HeazelTech 31 | |Jérôme Jacovella-St-Louis (Editor) |https://ecere.ca[Ecere Corporation] 32 | |Stephan Meissl |https://eox.at[EOX IT Services GmbH] 33 | |Tom Kralidis |Meteorological Service of Canada 34 | |=== 35 | -------------------------------------------------------------------------------- /standard/clause_10_field_selection.adoc: -------------------------------------------------------------------------------- 1 | [[rc_fieldselection]] 2 | == Requirements Class "Field Selection" 3 | 4 | === Overview 5 | 6 | The "Field Selection" Requirements Class defines the `properties` parameter for selecting a subset of the fields to retrieve from the coverage resource (`/collections/{collection_id}/coverage`). 7 | The available fields for the coverage, for example individual imagery bands, are defined in the schema resource (corresponding to the CIS _range type_). 8 | The order of the fields as listed in the value of the parameter also determines the order in which those fields will be ordered in the response, if the negotiated format has such a concept of field order. 9 | 10 | === Field Selection Examples 11 | 12 | See also <> in an annex. 13 | 14 | include::requirements/requirements_class_fieldselection.adoc[] 15 | -------------------------------------------------------------------------------- /standard/clause_11_CRS.adoc: -------------------------------------------------------------------------------- 1 | [[rc_crs]] 2 | == Requirement Class "Coordinate Reference System" 3 | 4 | === Overview 5 | 6 | The "Coordinate Reference System" requirement class specifies a `crs` parameter allowing a client to select an output CRS (equivalent to `OUTPUTCRS` in WCS 2.0). 7 | 8 | As defined in this standard, a coverage is conceptually associated with native CRS (also called a _storage CRS_) which is indicated in the collection description. 9 | This native CRS is the default output CRS if no `crs` parameter is specified, and the only supported output CRS without support for this requirements class. 10 | The `Content-Crs:` header (see <>) specifies the CRS used in the response to avoid any confusion as to the CRS of a response. 11 | 12 | include::requirements/requirements_class_crs.adoc[] 13 | -------------------------------------------------------------------------------- /standard/clause_12_coverage_tiles.adoc: -------------------------------------------------------------------------------- 1 | [[rc_coverage-tiles]] 2 | == Requirements Class "Coverage Tiles" 3 | 4 | === Overview 5 | 6 | The "Coverage Tiles" Requirements Class defines how to combine the _OGC API - Tiles_ building blocks with the _Coverages API_ to request coverage tiles. 7 | Coverages parameters such as for subsetting additional dimensions not covered by the Tiles 2D Tile Matrix Set (such as time or elevation), 8 | or for range subsetting, can be used together with the path for requesting individual tiles. 9 | 10 | The tiles response for a coverage corresponds to a subsetting request for the tile extent. 11 | Note that the number of cells in the response for a _Value-Is-Point_ coverage is one more than the tile pixel size of the TileMatrixSet. 12 | 13 | [#span-coverage-tiles,reftext='{figure-caption} {counter:fig-num}'] 14 | .The cells returned for a tile response of a gridded coverage for _Value-is-Point_ (span = 0) and _Value-is-Area_ (span = 1) 15 | image::figures/spanCoverageTiles.png[] 16 | 17 | === Coverage Tiles Examples 18 | 19 | See also <> in an annex. 20 | 21 | include::requirements/requirements_class_coverage_tiles.adoc[] 22 | -------------------------------------------------------------------------------- /standard/clause_15_oas.adoc: -------------------------------------------------------------------------------- 1 | [[rc_oas30]] 2 | == Requirements class "OpenAPI 3.0" 3 | 4 | === Overview 5 | 6 | The OpenAPI 3.0 Requirements Class is applicable to OGC API - Coverages as well. 7 | So an implementation of _OGC API - Coverages_ which supports OpenAPI 3.0 as an API Description format must also comply with the _OGC API - Common_ oas30 Conformance Class. 8 | 9 | In addition, this optional requirements class defines the `.getCoverage` operationId suffix to be used in order to facilitate the identification of coverage resources available from an API. 10 | 11 | include::requirements/requirements_class_oas30.adoc[] 12 | -------------------------------------------------------------------------------- /standard/clause_4_terms_and_definitions.adoc: -------------------------------------------------------------------------------- 1 | == Terms and Definitions 2 | This document uses the terms defined in Sub-clause 5 of https://github.com/opengeospatial/oapi_common/blob/master/19-072.pdf[OGC API - Common - Part 1: Core] (OGC 19-072), which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this standard. 3 | 4 | For the purposes of this document, the following additional terms and definitions apply. 5 | 6 | === Coverage 7 | function which returns values from its range for any direct position within its domain (as defined in OGC Abstract Topic 6) 8 | 9 | === Regular grid 10 | grid whose grid lines have a constant distance along each grid axis 11 | 12 | === Irregular grid 13 | Grid whose grid lines have individual distances along each grid axis 14 | 15 | === Displaced grid 16 | grid whose direct positions are topologically aligned to a grid, but whose geometric positions can vary arbitrarily 17 | 18 | === Mesh 19 | coverage consisting of a collection of curves, surfaces, or solids, respectively 20 | 21 | === Partition [of a coverage] 22 | separately stored coverage acting, by being referenced in the coverage on hand, as one of its components 23 | 24 | === Scene 25 | component of a coverage with its domain being a subset of the overall coverage for a coverage consisting of multiple scenes, similar to a partition 26 | 27 | (in the context of Earth Observation imagery data products and the _Scenes_ requirements class defined in this standard) 28 | 29 | Unlike Coverage Implementation Schema (CIS) _coverages by partitioning_, scenes are an optional capability of the API with corresponding individual resource paths rather than a potential aspect of a coverage resource. 30 | A client can either retrieve a coverage for the overall collection or for an individual scene, but will never receive a special "partitioned coverage" response necessitating special handling considerations. 31 | 32 | === (Geometric) Sensor model 33 | mathematical description of the relationship between the three-dimensional object space and the corresponding dimensions of the associated coverage produced by a 34 | https://www.iso.org/obp/ui/en/#iso:std:iso:ts:19130:-3:ed-1:v1:en:term:3.5[sensor (3.5)] 35 | 36 | NOTE: Adapted from https://www.iso.org/obp/ui/en/#iso:std:iso:ts:19130:-3:ed-1:v1:en:term:3.6[ISO 19130-3 sensor model (3.6)] 37 | 38 | === Transformation grid 39 | grid whose direct positions are given by some transformation algorithm not further specified in this standard 40 | -------------------------------------------------------------------------------- /standard/clause_9_scaling.adoc: -------------------------------------------------------------------------------- 1 | [[rc_scaling_spatial]] 2 | == Requirements Class "Spatial Scaling" 3 | 4 | === Overview 5 | 6 | The "Spatial Scaling" Requirements Class defines the `resolutions`, `width` and `height` query parameters for retrieving coverage data at a specific spatial resolution. 7 | The spatial dimensions are named `Lat` and `Lon` for a geographic output CRS, and `N` and `E` for a projected CRS. 8 | For a three-dimensional output CRS, resolution can also be specified for a third spatial dimension `h`, which corresponds to the height above the ellipsoid for a geographic CRS such as CRS84h or EPSG:4979, 9 | and to the third dimension often called _z_ in a Cartesian 3D CRS such as EPSG:4978. 10 | Common aliases for these dimensions are also recommended to be supported by servers, but clients should only use these required spatial dimension names to ensure interoperability. 11 | 12 | include::requirements/requirements_class_coverage_scaling_spatial.adoc[] 13 | 14 | [[rc_scaling_temporal]] 15 | == Requirements Class "Temporal Scaling" 16 | 17 | === Overview 18 | 19 | The "Temporal Scaling" Requirements Class defines the `resolutions` query parameter and a dimension named `time` for retrieving coverage data at a specific temporal resolution using ISO 8601 period notation. 20 | 21 | include::requirements/requirements_class_coverage_scaling_temporal.adoc[] 22 | 23 | [[rc_scaling_general]] 24 | == Requirements Class "General Scaling" 25 | 26 | === Overview 27 | 28 | The "General Scaling" Requirements Class defines the `resolutions` query parameter for additional dimensions beyond 3D space and the primary temporal dimension 29 | for retrieving coverage data at a specific resolution for those dimensions. 30 | These additional dimensions are named as described as additional property keys besides `"spatial"` and `"temporal"` in the `"extent"` section of the collection description. 31 | Additional temporal dimensions support the ISO 8601 period notation if its temporal reference system (`trs`) 32 | is specified as `https://www.opengis.net/def/crs/OGC/0/GregorianDateTime`. 33 | 34 | include::requirements/requirements_class_coverage_scaling_general.adoc[] 35 | -------------------------------------------------------------------------------- /standard/examples/JSON/coverage_domainset_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /standard/examples/JSON/coverage_rangetype_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "TBD": [ 3 | "filler1", 4 | "filler2" 5 | ] 6 | } -------------------------------------------------------------------------------- /standard/figures/Abstract_Coverage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/Abstract_Coverage.png -------------------------------------------------------------------------------- /standard/figures/Coverage_By_Partitioning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/Coverage_By_Partitioning.png -------------------------------------------------------------------------------- /standard/figures/Coverage_Class_Hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/Coverage_Class_Hierarchy.png -------------------------------------------------------------------------------- /standard/figures/Envelope_By_Axis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/Envelope_By_Axis.png -------------------------------------------------------------------------------- /standard/figures/General_Grid_Coverage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/General_Grid_Coverage.png -------------------------------------------------------------------------------- /standard/figures/General_Grid_Coverage_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/General_Grid_Coverage_2.png -------------------------------------------------------------------------------- /standard/figures/General_Grid_Coverage_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/General_Grid_Coverage_3.png -------------------------------------------------------------------------------- /standard/figures/General_Grid_Coverage_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/General_Grid_Coverage_4.png -------------------------------------------------------------------------------- /standard/figures/Grid_Types.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/Grid_Types.png -------------------------------------------------------------------------------- /standard/figures/MultiPoint_Coverage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/MultiPoint_Coverage.png -------------------------------------------------------------------------------- /standard/figures/Regular_and_Irregular_Grids.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/Regular_and_Irregular_Grids.png -------------------------------------------------------------------------------- /standard/figures/WCS_CoverageOfferings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/WCS_CoverageOfferings.png -------------------------------------------------------------------------------- /standard/figures/span.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/span.png -------------------------------------------------------------------------------- /standard/figures/spanCoverageTiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/spanCoverageTiles.png -------------------------------------------------------------------------------- /standard/figures/spanExtent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/spanExtent.png -------------------------------------------------------------------------------- /standard/figures/spanLargerMap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/spanLargerMap.png -------------------------------------------------------------------------------- /standard/figures/spanMap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/spanMap.png -------------------------------------------------------------------------------- /standard/figures/spanSubset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/spanSubset.png -------------------------------------------------------------------------------- /standard/figures/spanSubsetNonAligned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/spanSubsetNonAligned.png -------------------------------------------------------------------------------- /standard/figures/spanTerrainMesh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/standard/figures/spanTerrainMesh.png -------------------------------------------------------------------------------- /standard/openapi/README.md: -------------------------------------------------------------------------------- 1 | # OpenAPI definitions 2 | 3 | This example API definition can be used to provide an OpenAPI 3.0 definition for an implementation of _OGC API - Coverages_. 4 | The API definition can be visualized with [SwaggerUI](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/master/standard/openapi/ogcapi-coverages-1.bundled.json). 5 | 6 | The lists of collections and tile matrix sets in the `/api` sub-directory should be tailored to the implementation and deployment, or those `/api/*` paths can be implemented dynamically by the server instead. 7 | 8 | The list of supported paths should be adjusted in `ogcapi-coverages-1.yaml`. 9 | 10 | # Building the OpenAPI bundle 11 | 12 | The `ogcapi-coverages-1.bundled.json` file is a standalone/portable OpenAPI document which includes all dependencies included from the components sub-directories, and is built automatically via GitHub Actions. To test/build the bundle locally: 13 | 14 | ```bash 15 | # install Swagger CLI via npm 16 | npm install -g @apidevtools/swagger-cli 17 | 18 | # generate OpenAPI bundle 19 | cd standard/openapi 20 | swagger-cli bundle -o ogcapi-coverages-1.bundled.json ogcapi-coverages-1.yaml 21 | ``` 22 | 23 | See also [Swagger CLI](https://apitools.dev/swagger-cli/) and its [GitHub repository](https://github.com/APIDevTools/swagger-cli). 24 | -------------------------------------------------------------------------------- /standard/openapi/api/README.md: -------------------------------------------------------------------------------- 1 | These stand-in API resources are intended to dynamically enumerate specific types of implementation/deployment-dependent available resources in responses to `/api/*`. 2 | 3 | Alternatively, those resources could be directly enumerated in `schemas/dynamic/*` 4 | -------------------------------------------------------------------------------- /standard/openapi/api/all-collections.json: -------------------------------------------------------------------------------- 1 | { 2 | "type" : "string", 3 | "enum" : [ 4 | "blueMarble", 5 | "NaturalEarth:raster:HYP_HR_SR_OB_DR", 6 | "NaturalEarth:cultural:ne_10m_admin_0_countries", 7 | "NaturalEarth:physical:bathymetry", 8 | "SRTM_ViewFinderPanorama", 9 | "HRDEM-Ottawa", 10 | "HRDEM-RedRiver" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /standard/openapi/api/coverage-collections.json: -------------------------------------------------------------------------------- 1 | { 2 | "type" : "string", 3 | "enum" : [ 4 | "SRTM_ViewFinderPanorama", 5 | "HRDEM-Ottawa", 6 | "HRDEM-RedRiver" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /standard/openapi/api/tileMatrixSets.json: -------------------------------------------------------------------------------- 1 | { 2 | "type" : "string", 3 | "enum" : [ 4 | "WebMercatorQuad", 5 | "WorldCRS84Quad", 6 | "GNOSISGlobalGrid", 7 | "WorldMercatorWGS84Quad" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /standard/openapi/parameters/common-geodata/bbox.yaml: -------------------------------------------------------------------------------- 1 | name: bbox 2 | in: query 3 | description: >- 4 | Only resources that have a geometry that intersects the bounding box are selected. 5 | The bounding box is provided as four or six numbers, depending on whether the 6 | coordinate reference system includes a vertical axis (elevation or depth): 7 | 8 | * Lower left corner, coordinate axis 1 9 | * Lower left corner, coordinate axis 2 10 | * Minimum value, coordinate axis 3 (optional) 11 | * Upper right corner, coordinate axis 1 12 | * Upper right corner, coordinate axis 2 13 | * Maximum value, coordinate axis 3 (optional) 14 | 15 | If the value consists of four numbers, the coordinate reference system is 16 | WGS84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) 17 | unless a different coordinate reference system is specified in the parameter `bbox-crs`. 18 | 19 | If the value consists of six numbers, the coordinate reference system is WGS 84 20 | longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h) 21 | unless a different coordinate reference system is specified in a parameter `bbox-crs`. 22 | 23 | For WGS84 longitude/latitude the values are in most cases the sequence of 24 | minimum longitude, minimum latitude, maximum longitude and maximum latitude. 25 | However, in cases where the box spans the antimeridian the first value 26 | (west-most box edge) is larger than the third value (east-most box edge). 27 | 28 | If the vertical axis is included, the third and the sixth number are the 29 | bottom and the top of the 3-dimensional bounding box. 30 | 31 | If a resource has multiple spatial geometry properties, it is the decision of the server 32 | whether only a single spatial geometry property is used to determine 33 | the extent or all relevant geometries. 34 | required: false 35 | schema: 36 | type: array 37 | oneOf: 38 | - minItems: 4 39 | maxItems: 4 40 | - minItems: 6 41 | maxItems: 6 42 | items: 43 | type: number 44 | style: form 45 | explode: false 46 | -------------------------------------------------------------------------------- /standard/openapi/parameters/common-geodata/collectionId-all.yaml: -------------------------------------------------------------------------------- 1 | name: collectionId 2 | in: path 3 | description: Local identifier of a collection 4 | required: true 5 | schema: 6 | $ref: '../../schemas/dynamic/all-collections.yaml' 7 | -------------------------------------------------------------------------------- /standard/openapi/parameters/common-geodata/collectionId-coverage.yaml: -------------------------------------------------------------------------------- 1 | name: collectionId 2 | in: path 3 | description: Local identifier of a coverage collection 4 | required: true 5 | allowEmptyValue: false 6 | schema: 7 | $ref: '../../schemas/dynamic/coverage-collections.yaml' 8 | style: simple 9 | explode: false 10 | -------------------------------------------------------------------------------- /standard/openapi/parameters/common-geodata/datetime.yaml: -------------------------------------------------------------------------------- 1 | name: datetime 2 | in: query 3 | description: >- 4 | Either a date-time or an interval. Date and time expressions 5 | adhere to RFC 3339, section 5.6. Intervals may be bounded or half-bounded (double-dots at start or end). 6 | Server implementations may or may not support times expressed using time offsets from UTC, but need to support 7 | UTC time with the notation ending with a Z. 8 | 9 | Examples: 10 | 11 | * A date-time: "2018-02-12T23:20:50Z" 12 | * A bounded interval: "2018-02-12T00:00:00Z/2018-03-18T12:31:12Z" 13 | * Half-bounded intervals: "2018-02-12T00:00:00Z/.." or "../2018-03-18T12:31:12Z" 14 | 15 | Only resources that have a temporal property that intersects the value of 16 | `datetime` are selected. 17 | 18 | If a feature has multiple temporal properties, it is the decision of the 19 | server whether only a single temporal property is used to determine 20 | the extent or all relevant temporal properties. 21 | required: false 22 | schema: 23 | type: string 24 | style: form 25 | explode: false 26 | -------------------------------------------------------------------------------- /standard/openapi/parameters/common-geodata/limit-collections.yaml: -------------------------------------------------------------------------------- 1 | name: limit 2 | in: query 3 | description: >- 4 | The optional limit parameter limits the number of collections that are 5 | presented in the response document. 6 | 7 | Only items are counted that are on the first level of the collection in 8 | the response document. Nested objects contained within the explicitly 9 | requested items shall not be counted. 10 | 11 | * Minimum = 1 12 | * Maximum = 10000 13 | * Default = 10 14 | required: false 15 | schema: 16 | type: integer 17 | minimum: 1 18 | maximum: 10000 19 | default: 10 20 | style: form 21 | explode: false 22 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/bbox-crs.yaml: -------------------------------------------------------------------------------- 1 | name: bbox-crs 2 | in: query 3 | description: crs for the specified bbox 4 | required: false 5 | style: form 6 | explode: true 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/crs.yaml: -------------------------------------------------------------------------------- 1 | name: crs 2 | in: query 3 | description: reproject the output to the given crs 4 | required: false 5 | style: form 6 | explode: true 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/height.yaml: -------------------------------------------------------------------------------- 1 | name: height 2 | in: query 3 | description: >- 4 | Number of cells across the coverage dimension corresponding to the spatial dimension represented vertically on a 2D map, such as latitude or northing. 5 | required: false 6 | style: form 7 | explode: false 8 | schema: 9 | type: integer 10 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/properties.yaml: -------------------------------------------------------------------------------- 1 | name: properties 2 | in: query 3 | description: |- 4 | Select specific data record fields (measured/observed properties) to be returned. 5 | 6 | ``` 7 | RangeSubsetSpec: "properties"=field[,fieldName]* 8 | field: {fieldName}|{fieldIndex}|"*" 9 | fieldName: {text} 10 | fieldIndex: {number} 11 | 12 | Where: 13 | {number} is an integer number, and 14 | {text} is some general ASCII text. 15 | ``` 16 | 17 | The field name must be one of the id defined in the RangeType DataRecord fields. 18 | The field index must be an integer between 0 and the number of fields - 1 defined in the RangeType DataRecord fields. 19 | An asterisk indicates to also include subsequent fields. 20 | 21 | required: false 22 | schema: 23 | type: string 24 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/resolutions.yaml: -------------------------------------------------------------------------------- 1 | name: resolutions 2 | in: query 3 | description: |- 4 | Request a specific resolution for one or more dimension in terms of the minimum distance between two samples. 5 | For a regular grid coverage output, the resolution corresponds to the grid resolution. 6 | The parameter value is a comma separated list of dimensions followed by values in parentheses. 7 | For example, `resolutions=Lat(0.5),Lon(0.5),time(P1D)` specifies a 0.5 degrees spatial resolution and a daily temporal resolution. 8 | For server supporting Spatial subsetting, the `Lat` and `Lon` dimensions are supported for a geographic output CRS, 9 | and the `E` and `N` dimensions are supported for a projected output CRS, with the resolution specified in positive CRS units. 10 | For a 3D CRS, the resolution for an additional `h` dimension can be specified, corresponding to the height above the ellipsoid 11 | for a geographic CRS, or to a vertical dimension usually called _z_ in a 3D Cartesian CRS. 12 | For server supporting Temporal subsetting, the `time` dimension is supported referring to the primary temporal dimensions, 13 | with units specified in ISO 8601 UTC / Gregorian date and time. 14 | For server supporting General subsetting, a resolution for additional dimensions, as named in the collection description's extent, 15 | can also be specified in the units of those dimensions. 16 | required: false 17 | schema: 18 | type: string 19 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/scale-axes.yaml: -------------------------------------------------------------------------------- 1 | name: scale-axes 2 | in: query 3 | description: |- 4 | Returns a coverage re-scaled so as to contain `{number}` times less sample 5 | values along the corresponding axisName axis, and all original values along 6 | the dimensions of unspecified axes 7 | ``` 8 | ScalingSpec: "scale-axes"=axisName({number})[,axisName({number})]* 9 | axisName: {NCName} 10 | 11 | Where: 12 | {number} is an integer or floating-point number, and {axisName} is the 13 | same as one of the axisLabels defined in the DomainSet 14 | ``` 15 | required: false 16 | schema: 17 | type: string 18 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/scale-factor.yaml: -------------------------------------------------------------------------------- 1 | name: scale-factor 2 | in: query 3 | description: |- 4 | For each axis, the returned coverage will contain the number of original 5 | sampled values, divided by the scale-factor. 6 | required: false 7 | schema: 8 | type: number 9 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/scale-size.yaml: -------------------------------------------------------------------------------- 1 | name: scale-size 2 | in: query 3 | description: |- 4 | When `scale-size` is used, the returned coverage will contain exactly the 5 | specified number of sample values along each axis which is specified, and 6 | the original number of sample values for unspecified axes. 7 | ``` 8 | ScalingSpec: "scale-size"=axisName({number})[,axisName({number})]* 9 | axisName: {text} 10 | 11 | Where: 12 | {number} is an integer or floating-point number and {axisName} 13 | is the same as one of the axisLabels defined in the DomainSet 14 | ``` 15 | required: false 16 | schema: 17 | type: string 18 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/sceneId.yaml: -------------------------------------------------------------------------------- 1 | name: sceneId 2 | in: path 3 | description: Local identifier of a scene 4 | required: true 5 | schema: 6 | type: string 7 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/subset-crs.yaml: -------------------------------------------------------------------------------- 1 | name: subset-crs 2 | in: query 3 | description: crs for the specified subset 4 | required: false 5 | style: form 6 | explode: true 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/subset.yaml: -------------------------------------------------------------------------------- 1 | name: subset 2 | in: query 3 | description: | 4 | Retrieve only part of the data by slicing or trimming along one or more axis 5 | For trimming: {axisAbbrev}({low}:{high}) (preserves dimensionality) 6 | For slicing: {axisAbbrev}({value}) (reduces dimensionality) 7 | An asterisk (`*`) can be used instead of {low} or {high} to indicate the minimum/maximum value. 8 | For a temporal dimension, a single asterisk can be used to indicate the high value. 9 | Support for `*` is required for time, but optional for spatial and other dimensions. 10 | style: form 11 | explode: false 12 | required: false 13 | schema: 14 | type: array 15 | items: 16 | type: string 17 | -------------------------------------------------------------------------------- /standard/openapi/parameters/coverages-core/width.yaml: -------------------------------------------------------------------------------- 1 | name: width 2 | in: query 3 | description: >- 4 | Number of cells across the coverage dimension corresponding to the spatial dimension represented horizontally on a map, such as longitude or easting. 5 | required: false 6 | style: form 7 | explode: false 8 | schema: 9 | type: integer 10 | -------------------------------------------------------------------------------- /standard/openapi/parameters/tiles-core/tileCol.yaml: -------------------------------------------------------------------------------- 1 | name: tileCol 2 | in: path 3 | description: Column index of the tile on the selected TileMatrix. It cannot exceed the MatrixHeight-1 for the selected TileMatrix. For example, Ireland is fully within the Tile at WebMercatorQuad tileMatrix=5, tileRow=10 and tileCol=15. 4 | required: true 5 | schema: 6 | minimum: 0 7 | type: integer 8 | example: 15 9 | -------------------------------------------------------------------------------- /standard/openapi/parameters/tiles-core/tileMatrix.yaml: -------------------------------------------------------------------------------- 1 | name: tileMatrix 2 | in: path 3 | description: |- 4 | Identifier selecting one of the scales defined in the TileMatrixSet and representing the scaleDenominator the tile. For example, 5 | Ireland is fully within the Tile at WebMercatorQuad tileMatrix=5, tileRow=10 and tileCol=15. 6 | required: true 7 | schema: 8 | type: string 9 | example: '5' 10 | -------------------------------------------------------------------------------- /standard/openapi/parameters/tiles-core/tileRow.yaml: -------------------------------------------------------------------------------- 1 | name: tileRow 2 | in: path 3 | description: Row index of the tile on the selected TileMatrix. It cannot exceed the MatrixWidth-1 for the selected TileMatrix. For example, Ireland is fully within the Tile at WebMercatorQuad tileMatrix=5, tileRow=10 and tileCol=15. 4 | required: true 5 | schema: 6 | minimum: 0 7 | type: integer 8 | example: 10 9 | -------------------------------------------------------------------------------- /standard/openapi/parameters/unspecified/f-coverage.yaml: -------------------------------------------------------------------------------- 1 | name: f 2 | description: >- 3 | The optional f parameter indicates the output format which the server 4 | shall provide as part of the response document. It has preference over 5 | the HTTP Accept header. 6 | explode: false 7 | in: query 8 | required: false 9 | schema: 10 | type: string 11 | enum: 12 | - png 13 | - geotiff 14 | - netcdf 15 | - json 16 | - covjson 17 | - html 18 | style: form 19 | -------------------------------------------------------------------------------- /standard/openapi/parameters/unspecified/f-coverageTile.yaml: -------------------------------------------------------------------------------- 1 | name: f 2 | in: query 3 | description: The format of the coverage tile response (e.g. tiff). Accepted values are 'tiff' (GeoTIFF), 'netcdf', or 'png'. 4 | required: false 5 | schema: 6 | type: string 7 | enum: 8 | - png 9 | - geotiff 10 | - netcdf 11 | style: form 12 | explode: false 13 | -------------------------------------------------------------------------------- /standard/openapi/parameters/unspecified/f-domainset.yaml: -------------------------------------------------------------------------------- 1 | name: f 2 | description: >- 3 | The optional f parameter indicates the output format which the server 4 | shall provide as part of the response document. It has preference over 5 | the HTTP Accept header. 6 | explode: false 7 | in: query 8 | required: false 9 | schema: 10 | default: json 11 | enum: 12 | - json 13 | - html 14 | type: string 15 | style: form 16 | -------------------------------------------------------------------------------- /standard/openapi/parameters/unspecified/f-metadata.yaml: -------------------------------------------------------------------------------- 1 | name: f 2 | in: query 3 | description: The format of the response. If no value is provided, the accept header is used to determine the format. Accepted values are 'json' or 'html'. 4 | required: false 5 | schema: 6 | type: string 7 | enum: 8 | - json 9 | - html 10 | style: form 11 | explode: false 12 | -------------------------------------------------------------------------------- /standard/openapi/parameters/unspecified/f-rangeset.yaml: -------------------------------------------------------------------------------- 1 | name: f 2 | description: >- 3 | The optional f parameter indicates the output format which the server 4 | shall provide as part of the response document. It has preference over 5 | the HTTP Accept header. 6 | explode: false 7 | in: query 8 | required: false 9 | schema: 10 | default: json 11 | enum: 12 | - json 13 | - html 14 | type: string 15 | style: form 16 | -------------------------------------------------------------------------------- /standard/openapi/parameters/unspecified/f-rangetype.yaml: -------------------------------------------------------------------------------- 1 | name: f 2 | description: >- 3 | The optional f parameter indicates the output format which the server 4 | shall provide as part of the response document. It has preference over 5 | the HTTP Accept header. 6 | explode: false 7 | in: query 8 | required: false 9 | schema: 10 | default: json 11 | enum: 12 | - json 13 | - html 14 | type: string 15 | style: form 16 | -------------------------------------------------------------------------------- /standard/openapi/parameters/unspecified/offset.yaml: -------------------------------------------------------------------------------- 1 | description: >- 2 | The optional offset parameter indicates the offset within the result 3 | set from which the server shall begin presenting results in the response 4 | document. The first element has an offset of 0 (default). 5 | explode: false 6 | in: query 7 | name: offset 8 | required: false 9 | schema: 10 | default: 0 11 | minimum: 0 12 | type: integer 13 | style: form 14 | -------------------------------------------------------------------------------- /standard/openapi/parameters/unspecified/sortby.yaml: -------------------------------------------------------------------------------- 1 | description: >- 2 | The optional sortby parameter indicates the sort property and order on 3 | which the server shall present results in the response document using 4 | the convention `sortby=PROPERTY:X`, where `PROPERTY` is the sort 5 | property and `X` is the sort order (`A` is ascending, `D` is 6 | descending). Sorting by multiple properties is supported by providing a 7 | comma-separated list. 8 | explode: false 9 | in: query 10 | name: sortby 11 | required: false 12 | schema: 13 | type: string 14 | style: form 15 | -------------------------------------------------------------------------------- /standard/openapi/parameters/unspecified/tileMatrixSetId.yaml: -------------------------------------------------------------------------------- 1 | name: tileMatrixSetId 2 | in: path 3 | description: Identifier for a supported TileMatrixSet 4 | required: true 5 | allowEmptyValue: false 6 | schema: 7 | $ref: '../../schemas/dynamic/tileMatrixSets.yaml' 8 | -------------------------------------------------------------------------------- /standard/openapi/paths/common-core/pAPI.yaml: -------------------------------------------------------------------------------- 1 | # API definition 2 | get: 3 | tags: 4 | - API 5 | operationId: getAPI 6 | summary: Retrieve this API definition. 7 | parameters: 8 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 9 | responses: 10 | '200': 11 | $ref: '../../responses/common-core/rAPI.yaml' 12 | '406': 13 | $ref: '../../responses/common-core/rNotAcceptable.yaml' 14 | '500': 15 | $ref: '../../responses/common-core/rServerError.yaml' 16 | -------------------------------------------------------------------------------- /standard/openapi/paths/common-core/pConformance.yaml: -------------------------------------------------------------------------------- 1 | # Conformance 2 | get: 3 | tags: 4 | - Conformance 5 | operationId: getConformance 6 | summary: Retrieve the set of OGC API conformance classes that are supported by this service. 7 | parameters: 8 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 9 | responses: 10 | '200': 11 | $ref: '../../responses/common-core/rConformance.yaml' 12 | '406': 13 | $ref: '../../responses/common-core/rNotAcceptable.yaml' 14 | '500': 15 | $ref: '../../responses/common-core/rServerError.yaml' 16 | -------------------------------------------------------------------------------- /standard/openapi/paths/common-core/pLandingPage.yaml: -------------------------------------------------------------------------------- 1 | # Landing Page 2 | get: 3 | tags: 4 | - Landing Page 5 | operationId: getLandingPage 6 | summary: Retrieve the OGC API landing page for this service. 7 | parameters: 8 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 9 | responses: 10 | '200': 11 | $ref: '../../responses/common-core/rLandingPage.yaml' 12 | '406': 13 | $ref: '../../responses/common-core/rNotAcceptable.yaml' 14 | '500': 15 | $ref: '../../responses/common-core/rServerError.yaml' 16 | -------------------------------------------------------------------------------- /standard/openapi/paths/common-geodata/pCollection.yaml: -------------------------------------------------------------------------------- 1 | get: 2 | tags: 3 | - Data Collections 4 | operationId: getCollection 5 | summary: Retrieve the description of a collection available from this service. 6 | parameters: 7 | - $ref: '../../parameters/common-geodata/collectionId-all.yaml' 8 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 9 | responses: 10 | '200': 11 | $ref: '../../responses/common-geodata/rCollection.yaml' 12 | -------------------------------------------------------------------------------- /standard/openapi/paths/common-geodata/pCollectionsList.yaml: -------------------------------------------------------------------------------- 1 | get: 2 | tags: 3 | - Data Collections 4 | operationId: getCollectionsList 5 | summary: Retrieve the list of geospatial data collections available from this service. 6 | parameters: 7 | - $ref: '../../parameters/common-geodata/datetime.yaml' 8 | - $ref: '../../parameters/common-geodata/bbox.yaml' 9 | - $ref: '../../parameters/common-geodata/limit-collections.yaml' 10 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 11 | responses: 12 | '200': 13 | $ref: '../../responses/common-geodata/rCollectionsList.yaml' 14 | -------------------------------------------------------------------------------- /standard/openapi/paths/coverages-core/pCoverage.yaml: -------------------------------------------------------------------------------- 1 | # Coverage 2 | get: 3 | tags: 4 | - Coverage 5 | summary: Retrieve the coverage identified by {collectionId} 6 | description: |- 7 | Coverage identified by {collectionId}. 8 | Use content negotiation to request required format. 9 | operationId: getCoverage 10 | parameters: 11 | - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' 12 | - $ref: '../../parameters/coverages-core/subset.yaml' 13 | - $ref: '../../parameters/common-geodata/bbox.yaml' 14 | - $ref: '../../parameters/common-geodata/datetime.yaml' 15 | - $ref: '../../parameters/coverages-core/properties.yaml' 16 | - $ref: '../../parameters/coverages-core/resolutions.yaml' 17 | - $ref: '../../parameters/coverages-core/width.yaml' 18 | - $ref: '../../parameters/coverages-core/height.yaml' 19 | - $ref: '../../parameters/coverages-core/subset-crs.yaml' 20 | - $ref: '../../parameters/coverages-core/bbox-crs.yaml' 21 | - $ref: '../../parameters/coverages-core/crs.yaml' 22 | - $ref: '../../parameters/unspecified/f-coverage.yaml' 23 | responses: 24 | '200': 25 | $ref: '../../responses/coverages-core/rCoverage.yaml' 26 | default: 27 | $ref: '../../responses/common-core/rException.yaml' 28 | -------------------------------------------------------------------------------- /standard/openapi/paths/coverages-core/pScene.yaml: -------------------------------------------------------------------------------- 1 | # Scene 2 | get: 3 | tags: 4 | - Scenes 5 | summary: Retrieve metadata for a particular scene 6 | description: |- 7 | Retrieve metadata for a particular scene 8 | operationId: getScene 9 | parameters: 10 | - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' 11 | - $ref: '../../parameters/coverages-core/sceneId.yaml' 12 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 13 | responses: 14 | '200': 15 | $ref: '../../responses/coverages-core/rScene.yaml' 16 | default: 17 | $ref: '../../responses/common-core/rException.yaml' 18 | -------------------------------------------------------------------------------- /standard/openapi/paths/coverages-core/pSceneCoverage.yaml: -------------------------------------------------------------------------------- 1 | # Scene Coverage 2 | get: 3 | tags: 4 | - Scenes 5 | summary: Retrieve the coverage for scene {sceneId} of {collectionId} 6 | description: |- 7 | Coverage for scene {sceneId} of collection identified by {collectionId}. 8 | Use content negotiation to request required format. 9 | operationId: getSceneCoverage 10 | parameters: 11 | - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' 12 | - $ref: '../../parameters/coverages-core/sceneId.yaml' 13 | - $ref: '../../parameters/coverages-core/subset.yaml' 14 | - $ref: '../../parameters/common-geodata/bbox.yaml' 15 | - $ref: '../../parameters/common-geodata/datetime.yaml' 16 | - $ref: '../../parameters/coverages-core/properties.yaml' 17 | - $ref: '../../parameters/coverages-core/resolutions.yaml' 18 | - $ref: '../../parameters/coverages-core/width.yaml' 19 | - $ref: '../../parameters/coverages-core/height.yaml' 20 | - $ref: '../../parameters/coverages-core/subset-crs.yaml' 21 | - $ref: '../../parameters/coverages-core/bbox-crs.yaml' 22 | - $ref: '../../parameters/coverages-core/crs.yaml' 23 | - $ref: '../../parameters/unspecified/f-coverage.yaml' 24 | responses: 25 | '200': 26 | $ref: '../../responses/coverages-core/rCoverage.yaml' 27 | default: 28 | $ref: '../../responses/common-core/rException.yaml' 29 | -------------------------------------------------------------------------------- /standard/openapi/paths/coverages-core/pSceneCoverageTile.yaml: -------------------------------------------------------------------------------- 1 | get: 2 | tags: 3 | - Coverage Tiles 4 | summary: Retrieve coverage scene tiles 5 | operationId: .collection.scene.coverage.getTile 6 | parameters: 7 | - $ref: '../../parameters/tiles-core/tileMatrix.yaml' 8 | - $ref: '../../parameters/tiles-core/tileRow.yaml' 9 | - $ref: '../../parameters/tiles-core/tileCol.yaml' 10 | - $ref: '../../parameters/common-geodata/datetime.yaml' 11 | - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' 12 | - $ref: '../../parameters/coverages-core/sceneId.yaml' 13 | - $ref: '../../parameters/coverages-core/subset.yaml' 14 | - $ref: '../../parameters/coverages-core/crs.yaml' 15 | - $ref: '../../parameters/coverages-core/subset-crs.yaml' 16 | - $ref: '../../parameters/unspecified/tileMatrixSetId.yaml' 17 | - $ref: '../../parameters/unspecified/f-coverageTile.yaml' 18 | responses: 19 | '200': 20 | $ref: '../../responses/tiles-core/rCoverageTile.yaml' 21 | '204': 22 | $ref: '../../responses/tiles-core/rEmptyTile.yaml' 23 | '404': 24 | $ref: '../../responses/common-core/rNotFound.yaml' 25 | '406': 26 | $ref: '../../responses/common-core/rNotAcceptable.yaml' 27 | '500': 28 | $ref: '../../responses/common-core/rServerError.yaml' 29 | -------------------------------------------------------------------------------- /standard/openapi/paths/coverages-core/pSceneCoverageTileSet.yaml: -------------------------------------------------------------------------------- 1 | get: 2 | tags: 3 | - Coverage Tiles 4 | summary: Retrieve the coverage scene tileset metadata for the specified collection, scene and tiling scheme (tile matrix set) 5 | operationId: .collection.scene.coverage.getTileSet 6 | parameters: 7 | - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' 8 | - $ref: '../../parameters/coverages-core/sceneId.yaml' 9 | - $ref: '../../parameters/unspecified/tileMatrixSetId.yaml' 10 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 11 | responses: 12 | '200': 13 | $ref: '../../responses/tiles-core/rTileSet.yaml' 14 | '404': 15 | $ref: '../../responses/common-core/rNotFound.yaml' 16 | '406': 17 | $ref: '../../responses/common-core/rNotAcceptable.yaml' 18 | '500': 19 | $ref: '../../responses/common-core/rServerError.yaml' 20 | -------------------------------------------------------------------------------- /standard/openapi/paths/coverages-core/pSceneCoverageTileSetsList.yaml: -------------------------------------------------------------------------------- 1 | get: 2 | tags: 3 | - Coverage Tiles 4 | summary: Retrieve the list of available coverage tilesets for the specified coverage scene. 5 | operationId: .collection.scene.coverage.getTileSetsList 6 | parameters: 7 | - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' 8 | - $ref: '../../parameters/coverages-core/sceneId.yaml' 9 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 10 | responses: 11 | '200': 12 | $ref: '../../responses/tiles-core/rTileSetsList.yaml' 13 | '404': 14 | $ref: '../../responses/common-core/rNotFound.yaml' 15 | '406': 16 | $ref: '../../responses/common-core/rNotAcceptable.yaml' 17 | '500': 18 | $ref: '../../responses/common-core/rServerError.yaml' 19 | -------------------------------------------------------------------------------- /standard/openapi/paths/coverages-core/pScenesList.yaml: -------------------------------------------------------------------------------- 1 | # Scenes List 2 | get: 3 | tags: 4 | - Scenes 5 | summary: Retrieve the list of scenes comprising this collection 6 | description: |- 7 | The list of scenes comprising this collection. 8 | operationId: getCollectionScenes 9 | parameters: 10 | - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' 11 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 12 | responses: 13 | '200': 14 | $ref: '../../responses/coverages-core/rScenesList.yaml' 15 | default: 16 | $ref: '../../responses/common-core/rException.yaml' 17 | -------------------------------------------------------------------------------- /standard/openapi/paths/coverages-core/pSchema.yaml: -------------------------------------------------------------------------------- 1 | # Schema 2 | get: 3 | tags: 4 | - Coverage 5 | summary: Retrieve the schema of the coverage identified by {collectionId} 6 | description: |- 7 | Schema for coverage identified by {collectionId}. 8 | Use content negotiation to request required format. 9 | operationId: getCollectionSchema 10 | parameters: 11 | - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' 12 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 13 | responses: 14 | '200': 15 | $ref: '../../responses/coverages-core/rSchema.yaml' 16 | default: 17 | $ref: '../../responses/common-core/rException.yaml' 18 | -------------------------------------------------------------------------------- /standard/openapi/paths/dynamic/pAllCollections.yaml: -------------------------------------------------------------------------------- 1 | # API Collections 2 | get: 3 | tags: 4 | - API 5 | operationId: getAPICollections 6 | summary: JSON enumeration of all the collections available from this API implementation & deployment (for inclusion in the API definition). 7 | parameters: 8 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 9 | responses: 10 | '200': 11 | $ref: '../../responses/dynamic/rEnumeration.yaml' 12 | '404': 13 | $ref: '../../responses/common-core/rNotFound.yaml' 14 | '406': 15 | $ref: '../../responses/common-core/rNotAcceptable.yaml' 16 | '500': 17 | $ref: '../../responses/common-core/rServerError.yaml' 18 | -------------------------------------------------------------------------------- /standard/openapi/paths/dynamic/pCoverageCollections.yaml: -------------------------------------------------------------------------------- 1 | # API Coverage Collections 2 | get: 3 | tags: 4 | - API 5 | operationId: getAPICoverageCollections 6 | summary: JSON enumeration of the coverage collections available from this API implementation & deployment (for inclusion in the API definition). 7 | parameters: 8 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 9 | responses: 10 | '200': 11 | $ref: '../../responses/dynamic/rEnumeration.yaml' 12 | '404': 13 | $ref: '../../responses/common-core/rNotFound.yaml' 14 | '406': 15 | $ref: '../../responses/common-core/rNotAcceptable.yaml' 16 | '500': 17 | $ref: '../../responses/common-core/rServerError.yaml' 18 | -------------------------------------------------------------------------------- /standard/openapi/paths/dynamic/pTileMatrixSets.yaml: -------------------------------------------------------------------------------- 1 | # API TileMatrixSets 2 | get: 3 | tags: 4 | - API 5 | operationId: getAPITileMatrixSets 6 | summary: JSON enumeration of the shared TileMatrixSets available from this API implementation & deployment (for inclusion in the API definition). 7 | parameters: 8 | - $ref: '../../parameters/unspecified/f-metadata.yaml' 9 | responses: 10 | '200': 11 | $ref: '../../responses/dynamic/rEnumeration.yaml' 12 | '404': 13 | $ref: '../../responses/common-core/rNotFound.yaml' 14 | '406': 15 | $ref: '../../responses/common-core/rNotAcceptable.yaml' 16 | '500': 17 | $ref: '../../responses/common-core/rServerError.yaml' 18 | -------------------------------------------------------------------------------- /standard/openapi/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTile.yaml: -------------------------------------------------------------------------------- 1 | get: 2 | tags: 3 | - Coverage Tiles 4 | summary: Retrieve coverage tiles 5 | operationId: .collection.coverage.getTile 6 | parameters: 7 | - $ref: '../../../../parameters/tiles-core/tileMatrix.yaml' 8 | - $ref: '../../../../parameters/tiles-core/tileRow.yaml' 9 | - $ref: '../../../../parameters/tiles-core/tileCol.yaml' 10 | - $ref: '../../../../parameters/common-geodata/datetime.yaml' 11 | - $ref: '../../../../parameters/common-geodata/collectionId-coverage.yaml' 12 | - $ref: '../../../../parameters/coverages-core/subset.yaml' 13 | - $ref: '../../../../parameters/coverages-core/crs.yaml' 14 | - $ref: '../../../../parameters/coverages-core/subset-crs.yaml' 15 | - $ref: '../../../../parameters/unspecified/tileMatrixSetId.yaml' 16 | - $ref: '../../../../parameters/unspecified/f-coverageTile.yaml' 17 | responses: 18 | '200': 19 | $ref: '../../../../responses/tiles-core/rCoverageTile.yaml' 20 | '204': 21 | $ref: '../../../../responses/tiles-core/rEmptyTile.yaml' 22 | '404': 23 | $ref: '../../../../responses/common-core/rNotFound.yaml' 24 | '406': 25 | $ref: '../../../../responses/common-core/rNotAcceptable.yaml' 26 | '500': 27 | $ref: '../../../../responses/common-core/rServerError.yaml' 28 | -------------------------------------------------------------------------------- /standard/openapi/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSet.yaml: -------------------------------------------------------------------------------- 1 | get: 2 | tags: 3 | - Coverage Tiles 4 | summary: Retrieve the coverage tileset metadata for the specified collection and tiling scheme (tile matrix set) 5 | operationId: .collection.coverage.getTileSet 6 | parameters: 7 | - $ref: '../../../../parameters/common-geodata/collectionId-coverage.yaml' 8 | - $ref: '../../../../parameters/unspecified/tileMatrixSetId.yaml' 9 | - $ref: '../../../../parameters/unspecified/f-metadata.yaml' 10 | responses: 11 | '200': 12 | $ref: '../../../../responses/tiles-core/rTileSet.yaml' 13 | '404': 14 | $ref: '../../../../responses/common-core/rNotFound.yaml' 15 | '406': 16 | $ref: '../../../../responses/common-core/rNotAcceptable.yaml' 17 | '500': 18 | $ref: '../../../../responses/common-core/rServerError.yaml' 19 | -------------------------------------------------------------------------------- /standard/openapi/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSetsList.yaml: -------------------------------------------------------------------------------- 1 | get: 2 | tags: 3 | - Coverage Tiles 4 | summary: Retrieve the list of available coverage tilesets for the specified collection. 5 | operationId: .collection.coverage.getTileSetsList 6 | parameters: 7 | - $ref: '../../../../parameters/common-geodata/collectionId-coverage.yaml' 8 | - $ref: '../../../../parameters/unspecified/f-metadata.yaml' 9 | responses: 10 | '200': 11 | $ref: '../../../../responses/tiles-core/rTileSetsList.yaml' 12 | '404': 13 | $ref: '../../../../responses/common-core/rNotFound.yaml' 14 | '406': 15 | $ref: '../../../../responses/common-core/rNotAcceptable.yaml' 16 | '500': 17 | $ref: '../../../../responses/common-core/rServerError.yaml' 18 | -------------------------------------------------------------------------------- /standard/openapi/responses/common-core/rAPI.yaml: -------------------------------------------------------------------------------- 1 | description: The OpenAPI definition of the API. 2 | content: 3 | application/vnd.oai.openapi+json;version=3.0: 4 | schema: 5 | type: object 6 | text/html: 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/responses/common-core/rConformance.yaml: -------------------------------------------------------------------------------- 1 | description: The URIs of all conformance classes supported by the server 2 | content: 3 | application/json: 4 | schema: 5 | allOf: 6 | - $ref: '../../schemas/common-core/confClasses.yaml' 7 | example: 8 | conformsTo: 9 | - http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/core 10 | - http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/landing-page 11 | - http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/json 12 | - http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/html 13 | - http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/oas30 14 | - http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/collections 15 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/core 16 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/subsetting 17 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/scaling 18 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/fieldselection 19 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/crs 20 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/tiles 21 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/netcdf 22 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geotiff 23 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/coveragejson 24 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/cisjson 25 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/html 26 | - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/oas30 27 | -------------------------------------------------------------------------------- /standard/openapi/responses/common-core/rException.yaml: -------------------------------------------------------------------------------- 1 | description: An error occurred. 2 | content: 3 | application/json: 4 | schema: 5 | $ref: '../../schemas/common-core/exception.yaml' 6 | text/html: 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/responses/common-core/rInvalidParameter.yaml: -------------------------------------------------------------------------------- 1 | description: A query parameter has an invalid value. 2 | content: 3 | application/json: 4 | schema: 5 | $ref: '../../schemas/common-core/exception.yaml' 6 | text/html: 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/responses/common-core/rLandingPage.yaml: -------------------------------------------------------------------------------- 1 | description: |- 2 | The landing page provides links to the API definition (link relation `service-desc`, in this case path `/api`), 3 | to the Conformance declaration (path `/conformance`, link relation `conformance`), and to the Collections of geospatial data (path `/collections`, link relation `data`). 4 | content: 5 | application/json: 6 | schema: 7 | $ref: '../../schemas/common-core/landingPage.yaml' 8 | example: 9 | title: Elevation in Bonn 10 | description: Access to elevation data in the city of Bonn via a Web API that conforms to the OGC API - Coverages specification. 11 | links: 12 | - href: http://data.example.org/ 13 | rel: self 14 | type: application/json 15 | title: this document 16 | - href: http://data.example.org/api 17 | rel: service-desc 18 | type: application/vnd.oai.openapi+json;version=3.0 19 | title: the API definition 20 | - href: http://data.example.org/api.html 21 | rel: service-doc 22 | type: text/html 23 | title: the API documentation 24 | - href: http://data.example.org/conformance 25 | rel: http://www.opengis.net/def/rel/ogc/1.0/conformance 26 | type: application/json 27 | title: OGC API conformance classes implemented by this service 28 | - href: http://data.example.org/collections 29 | rel: http://www.opengis.net/def/rel/ogc/1.0/data 30 | type: application/json 31 | title: Information about the collections (i.e.,. the coverages) 32 | text/html: 33 | schema: 34 | type: string 35 | -------------------------------------------------------------------------------- /standard/openapi/responses/common-core/rNotAcceptable.yaml: -------------------------------------------------------------------------------- 1 | description: Content negotiation failed. For example, the `Accept` header submitted in the request did not support any of the media types supported by the server for the requested resource. 2 | content: 3 | application/json: 4 | schema: 5 | $ref: '../../schemas/common-core/exception.yaml' 6 | text/html: 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/responses/common-core/rNotFound.yaml: -------------------------------------------------------------------------------- 1 | description: The requested resource does not exist on the server. For example, a path parameter had an incorrect value. 2 | content: 3 | application/json: 4 | schema: 5 | $ref: '../../schemas/common-core/exception.yaml' 6 | text/html: 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/responses/common-core/rServerError.yaml: -------------------------------------------------------------------------------- 1 | description: A server error occurred. 2 | content: 3 | application/json: 4 | schema: 5 | $ref: '../../schemas/common-core/exception.yaml' 6 | text/html: 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/responses/coverages-core/rCoverage.yaml: -------------------------------------------------------------------------------- 1 | description: A coverage, including any self-describing information supported by the encoding. 2 | content: 3 | application/vnd.cov+json: 4 | schema: 5 | type: string 6 | # SwaggerUI Validation errors? $ref: 'https://schemas.opengis.net/covjson/1.0/coveragejson.json' 7 | application/json: 8 | schema: 9 | $ref: '../../schemas/cis/coverage-schema.yaml' 10 | image/tiff; application=geotiff: 11 | schema: 12 | type: string 13 | format: binary 14 | application/x-netcdf: 15 | schema: 16 | type: string 17 | format: binary 18 | vnd.las: 19 | schema: 20 | type: string 21 | format: binary 22 | vnd.laszip: 23 | schema: 24 | type: string 25 | format: binary 26 | image/png: 27 | schema: 28 | type: string 29 | format: binary 30 | image/jxl: 31 | schema: 32 | type: string 33 | format: binary 34 | image/jp2: 35 | schema: 36 | type: string 37 | format: binary 38 | application/x-zarr: 39 | schema: 40 | type: string 41 | format: binary 42 | text/html: 43 | schema: 44 | type: string 45 | -------------------------------------------------------------------------------- /standard/openapi/responses/coverages-core/rScene.yaml: -------------------------------------------------------------------------------- 1 | description: |- 2 | Information about a particular scene of a coverage. 3 | content: 4 | application/json: 5 | schema: 6 | $ref: '../../schemas/common-geodata/collectionDesc.yaml' 7 | example: 8 | id: elevation 9 | title: Elevation 10 | description: Elevation in the city of Bonn. 11 | extent: 12 | spatial: 13 | bbox: 14 | - - 7.01 15 | - 50.63 16 | - 7.22 17 | - 50.78 18 | links: 19 | - href: http://data.example.org/collections/elevation/coverage/domainset 20 | rel: http://www.opengis.net/def/rel/ogc/1.0/coverage-domainset 21 | type: application/json 22 | title: Elevation 23 | - href: http://data.example.org/collections/elevation/coverage/rangetype 24 | rel: http://www.opengis.net/def/rel/ogc/1.0/coverage-rangetype 25 | type: application/json 26 | title: Elevation 27 | - href: http://data.example.org/collections/elevation/coverage 28 | rel: http://www.opengis.net/def/rel/ogc/1.0/coverage 29 | type: application/json 30 | title: Elevation 31 | - href: http://data.example.org/collections/buildings/coverage.html 32 | rel: http://www.opengis.net/def/rel/ogc/1.0/coverage 33 | type: text/html 34 | title: Elevation 35 | - href: https://creativecommons.org/publicdomain/zero/1.0/ 36 | rel: license 37 | type: text/html 38 | title: CC0-1.0 39 | - href: https://creativecommons.org/publicdomain/zero/1.0/rdf 40 | rel: license 41 | type: application/rdf+xml 42 | title: CC0-1.0 43 | text/html: 44 | schema: 45 | type: string 46 | -------------------------------------------------------------------------------- /standard/openapi/responses/coverages-core/rScenesList.yaml: -------------------------------------------------------------------------------- 1 | description: |- 2 | The individual scenes comprising the coverage 3 | content: 4 | application/json: 5 | schema: 6 | $ref: '../../schemas/coverages-core/scenesList.yaml' 7 | text/html: 8 | schema: 9 | type: string 10 | -------------------------------------------------------------------------------- /standard/openapi/responses/coverages-core/rSchema.yaml: -------------------------------------------------------------------------------- 1 | description: Collection schema describing all fields of the coverage 2 | content: 3 | application/json: 4 | schema: 5 | $ref: '../../schemas/tms/propertiesSchema.yaml' 6 | text/html: 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/responses/dynamic/rEnumeration.yaml: -------------------------------------------------------------------------------- 1 | description: An enumerated list of valid string values for API parameters. 2 | content: 3 | application/json: 4 | schema: 5 | $ref: '../../schemas/dynamic/enumeration.yaml' 6 | text/html: 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/responses/tiles-core/rCoverageTile.yaml: -------------------------------------------------------------------------------- 1 | description: A coverage tile returned as a response. 2 | content: 3 | application/netcdf: 4 | schema: 5 | type: string 6 | format: binary 7 | image/tiff; application=geotiff: 8 | schema: 9 | type: string 10 | format: binary 11 | -------------------------------------------------------------------------------- /standard/openapi/responses/tiles-core/rEmptyTile.yaml: -------------------------------------------------------------------------------- 1 | description: No data available for this tile. 2 | -------------------------------------------------------------------------------- /standard/openapi/responses/tiles-core/rTileSet.yaml: -------------------------------------------------------------------------------- 1 | description: Description of the tileset 2 | content: 3 | application/json: 4 | schema: 5 | $ref: '../../schemas/tms/tileSet.yaml' 6 | text/html: 7 | schema: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/responses/tiles-core/rTileSetsList.yaml: -------------------------------------------------------------------------------- 1 | description: List of available tilesets. 2 | content: 3 | application/json: 4 | schema: 5 | type: object 6 | required: 7 | - tilesets 8 | properties: 9 | links: 10 | type: array 11 | items: 12 | $ref: '../../schemas/common-core/link.yaml' 13 | tilesets: 14 | type: array 15 | items: 16 | $ref: '../../schemas/tms/tileSet-item.yaml' 17 | text/html: 18 | schema: 19 | type: string 20 | -------------------------------------------------------------------------------- /standard/openapi/schemas/cis/README.md: -------------------------------------------------------------------------------- 1 | This folder holds yaml files generated from 2 | http://schemas.opengis.net/cis/1.1/json/coverage-schema.json using 3 | https://editor.swagger.io/ on 2020-08-12. 4 | -------------------------------------------------------------------------------- /standard/openapi/schemas/cis/coverage-schema.yaml: -------------------------------------------------------------------------------- 1 | #$schema: 'http://json-schema.org/draft-04/schema#' 2 | title: Coverage object 3 | description: 'Component of OGC Coverage Implementation Schema 1.1. Last updated: 2016-may-18. Copyright (c) 2016 Open Geospatial Consortium, Inc. All Rights Reserved. To obtain additional rights of use, visit http://www.opengeospatial.org/legal/.' 4 | type: object 5 | oneOf: 6 | - required: 7 | - type 8 | - domainSet 9 | - rangeSet 10 | - rangeType 11 | properties: 12 | id: 13 | type: string 14 | type: 15 | enum: 16 | - CoverageByDomainAndRange 17 | envelope: 18 | $ref: 'envelope.yaml' 19 | domainSet: 20 | $ref: 'domainSet.yaml' 21 | rangeSet: 22 | $ref: 'rangeSet.yaml' 23 | rangeType: 24 | $ref: 'rangeType.yaml' 25 | metadata: 26 | $ref: 'metadata.yaml' 27 | - required: 28 | - type 29 | - partitionSet 30 | - rangeType 31 | properties: 32 | id: 33 | type: string 34 | type: 35 | enum: 36 | - CoverageByPartitioning 37 | envelope: 38 | $ref: 'envelope.yaml' 39 | partitionSet: 40 | $ref: 'partitioningSet.yaml' 41 | rangeType: 42 | $ref: 'rangeType.yaml' 43 | metadata: 44 | $ref: 'metadata.yaml' 45 | -------------------------------------------------------------------------------- /standard/openapi/schemas/cis/envelope.yaml: -------------------------------------------------------------------------------- 1 | title: envelope 2 | description: 'The envelope around a coverage is defined by the lower and upper bound of each axis, respectively. The purpose of the axisLabels attribute, which lists the axis labels of all axisExtent elements in proper sequence, is to enforce axis sequence also in XML systems which do not preserve document order.' 3 | type: object 4 | required: 5 | - type 6 | - srsName 7 | - axisLabels 8 | - axis 9 | properties: 10 | type: 11 | enum: 12 | - EnvelopeByAxis 13 | id: 14 | type: string 15 | srsName: 16 | type: string 17 | format: uri 18 | axisLabels: 19 | type: array 20 | items: 21 | type: string 22 | axis: 23 | type: array 24 | items: 25 | type: object 26 | required: 27 | - type 28 | - lowerBound 29 | - upperBound 30 | - uomLabel 31 | additionalProperties: false 32 | properties: 33 | type: 34 | enum: 35 | - AxisExtent 36 | id: 37 | type: string 38 | axisLabel: 39 | type: string 40 | lowerBound: 41 | oneOf: 42 | - type: number 43 | - type: string 44 | nullable: true 45 | - type: boolean 46 | upperBound: 47 | oneOf: 48 | - type: number 49 | - type: string 50 | nullable: true 51 | - type: boolean 52 | uomLabel: 53 | type: string 54 | -------------------------------------------------------------------------------- /standard/openapi/schemas/cis/metadata.yaml: -------------------------------------------------------------------------------- 1 | title: Metadata 2 | description: 'The metadata element is a container of any (not further specified) information which should be transported along with the coverage on hand, such as domain-specific metadata.' 3 | type: object 4 | -------------------------------------------------------------------------------- /standard/openapi/schemas/cis/partitioningSet.yaml: -------------------------------------------------------------------------------- 1 | title: Partitioning Set 2 | description: 'A partition describes how a coverage (*sub-coverage*) referenced is located within referencing coverage (*super-coverage*). The sub-coverage can be represented by referencing a coverage id or a URL pointing to a coverage. Such sub-coverages referenced may be grouped into the super-coverage document, or reside remote, or mixed. As an additional alternative, single range values can be indicated verbatimg, together with their direct position. All values must share an identical structure and conform to the rangeType definition.' 3 | type: object 4 | required: 5 | - type 6 | properties: 7 | type: 8 | enum: 9 | - PartitionSet 10 | partition: 11 | type: array 12 | items: 13 | type: object 14 | oneOf: 15 | - required: 16 | - type 17 | - coverageRef 18 | properties: 19 | id: 20 | type: string 21 | type: 22 | enum: 23 | - PartitionRef 24 | envelope: 25 | $ref: 'envelope.yaml' 26 | coverageRef: 27 | type: string 28 | format: uri 29 | - required: 30 | - type 31 | - coverage 32 | properties: 33 | id: 34 | type: string 35 | type: 36 | enum: 37 | - Partition 38 | envelope: 39 | $ref: 'envelope.yaml' 40 | coverage: 41 | # $ref: 'coverage-schema.yaml' # recursion issues... 42 | type: object 43 | positionValuePair: 44 | type: array 45 | items: 46 | type: object 47 | required: 48 | - type 49 | - coordinate 50 | - value 51 | properties: 52 | id: 53 | type: string 54 | type: 55 | enum: 56 | - PVP 57 | coordinate: 58 | type: array 59 | items: 60 | oneOf: 61 | - type: number 62 | - type: string 63 | - type: boolean 64 | value: 65 | type: array 66 | items: 67 | oneOf: 68 | - type: number 69 | - type: string 70 | nullable: true 71 | - type: boolean 72 | -------------------------------------------------------------------------------- /standard/openapi/schemas/cis/rangeSet.yaml: -------------------------------------------------------------------------------- 1 | title: rangeSet 2 | description: 'The rangeSet lists a value for each of the coverage''s direct positions. Values resemble the *payload* information of some particular direct positions. Values can be composite (with a single nesting level, i.e.: composites always consist of atomics), or atomic (emulated through single-component composites) whereby the sequence, structure, and meaning of every value is defined through the rangeType. Values can be represented in-line or by reference to an external file which may have any suitable encoding.' 3 | type: object 4 | oneOf: 5 | - required: 6 | - type 7 | - dataBlock 8 | properties: 9 | type: 10 | enum: 11 | - RangeSet 12 | dataBlock: 13 | title: dataBlock 14 | description: Data block objects 15 | type: object 16 | required: 17 | - type 18 | - values 19 | properties: 20 | type: 21 | enum: 22 | - VDataBlock 23 | - CVDataBlock 24 | values: 25 | type: array 26 | items: 27 | type: string 28 | - required: 29 | - type 30 | - fileReference 31 | properties: 32 | type: 33 | enum: 34 | - RangeSetRef 35 | fileReference: 36 | type: array 37 | items: 38 | type: string 39 | format: uri 40 | -------------------------------------------------------------------------------- /standard/openapi/schemas/cis/rangeType.yaml: -------------------------------------------------------------------------------- 1 | title: rangeType 2 | description: 'The rangeType element describes the structure and semantics of a coverage''s range values, including (optionally) restrictions on the interpolation allowed on such values.' 3 | type: object 4 | oneOf: 5 | - required: 6 | - type 7 | - field 8 | properties: 9 | type: 10 | enum: 11 | - DataRecord 12 | field: 13 | type: array 14 | items: 15 | title: DataRecord field 16 | description: e.g. Quantity or Count 17 | type: object 18 | required: 19 | - type 20 | properties: 21 | type: 22 | enum: 23 | - Quantity 24 | - Count 25 | id: 26 | type: string 27 | format: uri 28 | name: 29 | type: string 30 | definition: 31 | type: string 32 | format: uri 33 | uom: 34 | title: units of measure 35 | description: units of measure 36 | type: object 37 | required: 38 | - type 39 | - code 40 | properties: 41 | type: 42 | enum: 43 | - UnitReference 44 | id: 45 | type: string 46 | format: uri 47 | code: 48 | type: string 49 | constraint: 50 | title: Constraint 51 | description: Constraint 52 | type: object 53 | required: 54 | - type 55 | properties: 56 | type: 57 | enum: 58 | - AllowedValues 59 | id: 60 | type: string 61 | format: uri 62 | interval: 63 | type: array 64 | items: 65 | type: string 66 | interpolationRestriction: 67 | title: interpolationRestriction 68 | description: Interpolation restriction 69 | type: object 70 | required: 71 | - type 72 | properties: 73 | type: 74 | enum: 75 | - InterpolationRestriction 76 | id: 77 | type: string 78 | format: uri 79 | allowedInterpolation: 80 | type: array 81 | items: 82 | type: string 83 | format: uri 84 | - required: 85 | - type 86 | - fileReference 87 | properties: 88 | type: 89 | enum: 90 | - RangeTypeRef 91 | id: 92 | type: string 93 | format: uri 94 | fileReference: 95 | type: string 96 | format: uri 97 | -------------------------------------------------------------------------------- /standard/openapi/schemas/common-core/confClasses.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | required: 3 | - conformsTo 4 | properties: 5 | conformsTo: 6 | type: array 7 | items: 8 | type: string 9 | -------------------------------------------------------------------------------- /standard/openapi/schemas/common-core/exception.yaml: -------------------------------------------------------------------------------- 1 | title: Exception Schema 2 | description: JSON schema for exceptions based on RFC 7807 3 | type: object 4 | required: 5 | - type 6 | properties: 7 | type: 8 | type: string 9 | title: 10 | type: string 11 | status: 12 | type: integer 13 | detail: 14 | type: string 15 | instance: 16 | type: string 17 | -------------------------------------------------------------------------------- /standard/openapi/schemas/common-core/landingPage.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | required: 3 | - links 4 | properties: 5 | title: 6 | type: string 7 | title: The title of the API. 8 | description: While a title is not required, implementors are strongly advised to include one. 9 | example: Buildings in Bonn 10 | description: 11 | type: string 12 | example: Access to data about buildings in the city of Bonn via a Web API that conforms to the OGC API Common specification. 13 | attribution: 14 | type: string 15 | title: attribution for the API 16 | description: The `attribution` should be short and intended for presentation to a user, for example, in a corner of a map. Parts of the text can be links to other resources if additional information is needed. The string can include HTML markup. 17 | links: 18 | type: array 19 | items: 20 | $ref: 'link.yaml' 21 | -------------------------------------------------------------------------------- /standard/openapi/schemas/common-core/link.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | required: 3 | - href 4 | - rel 5 | properties: 6 | href: 7 | type: string 8 | description: Supplies the URI to a remote resource (or resource fragment). 9 | example: http://data.example.com/buildings/123 10 | rel: 11 | type: string 12 | description: The type or semantics of the relation. 13 | example: alternate 14 | type: 15 | type: string 16 | description: A hint indicating what the media type of the result of dereferencing the link should be. 17 | example: application/geo+json 18 | hreflang: 19 | type: string 20 | description: A hint indicating what the language of the result of dereferencing the link should be. 21 | example: en 22 | title: 23 | type: string 24 | description: Used to label the destination of a link such that it can be used as a human-readable identifier. 25 | example: Trierer Strasse 70, 53115 Bonn 26 | length: 27 | type: integer 28 | -------------------------------------------------------------------------------- /standard/openapi/schemas/common-geodata/collections.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | required: 3 | - links 4 | - collections 5 | properties: 6 | links: 7 | type: array 8 | items: 9 | $ref: '../common-core/link.yaml' 10 | timeStamp: 11 | type: string 12 | format: date-time 13 | numberMatched: 14 | $ref: 'numberMatched.yaml' 15 | numberReturned: 16 | $ref: 'numberReturned.yaml' 17 | collections: 18 | type: array 19 | items: 20 | $ref: 'collectionDesc.yaml' 21 | -------------------------------------------------------------------------------- /standard/openapi/schemas/common-geodata/crs.yaml: -------------------------------------------------------------------------------- 1 | title: CRS 2 | oneOf: 3 | - description: Simplification of the object into a url if the other properties are not present 4 | type: string 5 | - type: object 6 | oneOf: 7 | - required: 8 | - uri 9 | properties: 10 | uri: 11 | description: Reference to one coordinate reference system (CRS) 12 | type: string 13 | format: uri 14 | - required: 15 | - wkt 16 | properties: 17 | wkt: 18 | allOf: 19 | - description: An object defining the CRS using the JSON encoding for Well-known text representation of coordinate reference systems 2.0 20 | - type: object # - $ref: 'projJSON.yaml' 21 | - required: 22 | - referenceSystem 23 | properties: 24 | referenceSystem: 25 | description: A reference system data structure as defined in the MD_ReferenceSystem of the ISO 19115 26 | type: object 27 | -------------------------------------------------------------------------------- /standard/openapi/schemas/common-geodata/dataType.yaml: -------------------------------------------------------------------------------- 1 | # This list may be extended (e.g. point clouds, meshes) 2 | anyOf: 3 | - type: string 4 | - type: string 5 | enum: 6 | - map 7 | - vector 8 | - coverage 9 | -------------------------------------------------------------------------------- /standard/openapi/schemas/common-geodata/numberMatched.yaml: -------------------------------------------------------------------------------- 1 | description: |- 2 | The number of elements in the response that match the selection parameters like `bbox`. 3 | type: integer 4 | minimum: 0 5 | example: 127 6 | -------------------------------------------------------------------------------- /standard/openapi/schemas/common-geodata/numberReturned.yaml: -------------------------------------------------------------------------------- 1 | description: |- 2 | The number of elements in the response. 3 | A server may omit this information, if the information about the 4 | number of elements is not known or difficult to compute. 5 | If the value is provided, the value shall be identical to the number 6 | of elements in the response. 7 | type: integer 8 | minimum: 0 9 | example: 10 10 | -------------------------------------------------------------------------------- /standard/openapi/schemas/common-geodata/timeStamp.yaml: -------------------------------------------------------------------------------- 1 | description: This property indicates the time and date when the response was generated using RFC 3339 notation. 2 | type: string 3 | format: date-time 4 | example: "2017-08-17T08:05:32Z" 5 | -------------------------------------------------------------------------------- /standard/openapi/schemas/coverages-core/scene.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | required: 3 | - id 4 | - crs 5 | - storageCrs 6 | - links 7 | properties: 8 | id: 9 | type: 10 | oneOf: 11 | - string 12 | - integer 13 | extent: 14 | $ref: '../common-geodata/extent-uad.yaml' 15 | crs: 16 | type: array 17 | items: 18 | type: string 19 | format: uri 20 | minItems: 1 21 | storageCrs: 22 | type: string 23 | format: uri 24 | links: 25 | type: array 26 | items: 27 | $ref: '../common-core/link.yaml' 28 | -------------------------------------------------------------------------------- /standard/openapi/schemas/coverages-core/sceneItem.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | required: 3 | - id 4 | properties: 5 | id: 6 | oneOf: 7 | - type: string 8 | - type: integer 9 | links: 10 | type: array 11 | items: 12 | $ref: '../common-core/link.yaml' 13 | -------------------------------------------------------------------------------- /standard/openapi/schemas/coverages-core/scenesList.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | required: 3 | - links 4 | - scenes 5 | properties: 6 | scenes: 7 | type: array 8 | items: 9 | $ref: 'sceneItem.yaml' 10 | links: 11 | type: array 12 | items: 13 | $ref: '../common-core/link.yaml' 14 | timeStamp: 15 | type: string 16 | format: date-time 17 | numberMatched: 18 | type: integer 19 | minimum: 0 20 | example: 1 21 | numberReturned: 22 | type: integer 23 | minimum: 0 24 | example: 1 25 | -------------------------------------------------------------------------------- /standard/openapi/schemas/dynamic/all-collections.yaml: -------------------------------------------------------------------------------- 1 | # This can be implemented as a dynamic enumeration type 2 | # returning all collections available on the server: 3 | $ref: ../../api/all-collections.json 4 | 5 | # Standardizing this capability would enable to generate and compile generic clients 6 | # from OpenAPI definitions which are not tied to a particular implementation. 7 | -------------------------------------------------------------------------------- /standard/openapi/schemas/dynamic/coverage-collections.yaml: -------------------------------------------------------------------------------- 1 | # This can be implemented as a dynamic enumeration type 2 | # returning all collections supporting coverages on the server: 3 | $ref: ../../api/coverage-collections.json 4 | 5 | # Standardizing this capability would enable to generate and compile generic clients 6 | # from OpenAPI definitions which are not tied to a particular implementation. 7 | -------------------------------------------------------------------------------- /standard/openapi/schemas/dynamic/enumeration.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | required: [ type, enum ] 3 | properties: 4 | type: 5 | type: string 6 | enum: [ enum ] 7 | enum: 8 | type: array 9 | items: 10 | type: string 11 | -------------------------------------------------------------------------------- /standard/openapi/schemas/dynamic/tileMatrixSets.yaml: -------------------------------------------------------------------------------- 1 | # This can be implemented as a dynamic enumeration type 2 | # returning all tile matrix sets supported by the server: 3 | $ref: ../../api/tileMatrixSets.json 4 | 5 | # Standardizing this capability would enable to generate and compile generic clients 6 | # from OpenAPI definitions which are not tied to a particular implementation. 7 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/2DBoundingBox.yaml: -------------------------------------------------------------------------------- 1 | description: Minimum bounding rectangle surrounding a 2D resource in the CRS indicated elsewhere 2 | type: object 3 | required: 4 | - lowerLeft 5 | - upperRight 6 | properties: 7 | lowerLeft: 8 | $ref: '2DPoint.yaml' 9 | upperRight: 10 | $ref: '2DPoint.yaml' 11 | crs: 12 | $ref: '../common-geodata/crs.yaml' 13 | orderedAxes: 14 | type: array 15 | minItems: 2 16 | maxItems: 2 17 | items: 18 | type: string 19 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/2DPoint.yaml: -------------------------------------------------------------------------------- 1 | description: A 2D Point in the CRS indicated elsewhere 2 | type: array 3 | minItems: 2 4 | maxItems: 2 5 | items: 6 | type: number 7 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/propertiesSchema.yaml: -------------------------------------------------------------------------------- 1 | description: Attributes of the features or rangetypes of a coverage. Defined by 2 | a subset of the JSON Schema for the properties of a feature 3 | type: object 4 | required: 5 | - type 6 | - properties 7 | properties: 8 | type: 9 | type: string 10 | enum: 11 | - object 12 | required: 13 | description: "Implements 'multiplicity' by citing property 'name' defined as 'additionalProperties'" 14 | type: array 15 | minItems: 1 16 | items: 17 | type: string 18 | properties: 19 | type: object 20 | default: {} 21 | additionalProperties: 22 | description: "No property names are defined but any property name they should be described by JSON Schema. So 'additionalProperties' implements 'name'." 23 | type: object 24 | properties: 25 | title: 26 | type: string 27 | description: 28 | description: "Implements 'description'" 29 | type: string 30 | type: 31 | type: string 32 | enum: 33 | - array 34 | - boolean 35 | - integer 36 | - 'null' 37 | - number 38 | - object 39 | - string 40 | enum: 41 | description: "Implements 'acceptedValues'" 42 | type: array 43 | minItems: 1 44 | items: {} 45 | uniqueItems: true 46 | format: 47 | description: "Complements implementation of 'type'" 48 | type: string 49 | contentMediaType: 50 | description: "Implements 'mediaType'" 51 | type: string 52 | maximum: 53 | description: "Implements 'range'" 54 | type: number 55 | exclusiveMaximum: 56 | description: "Implements 'range'" 57 | type: number 58 | minimum: 59 | description: "Implements 'range'" 60 | type: number 61 | exclusiveMinimum: 62 | description: "Implements 'range'" 63 | type: number 64 | pattern: 65 | type: string 66 | format: regex 67 | maxItems: 68 | description: "Implements 'upperMultiplicity'" 69 | type: integer 70 | minimum: 0 71 | minItems: 72 | description: "Implements 'lowerMultiplicity'" 73 | type: integer 74 | default: 0 75 | minimum: 0 76 | x-ogc-definition: 77 | type: string 78 | format: uri 79 | x-ogc-unit: 80 | type: string 81 | x-ogc-unitLang: 82 | type: string 83 | format: uri 84 | x-ogc-propertySeq: 85 | type: integer 86 | minimum: 0 87 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/style.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | required: 3 | - id 4 | properties: 5 | id: 6 | description: An identifier for this style. Implementation of 'identifier' 7 | type: string 8 | title: 9 | description: A title for this style 10 | type: string 11 | description: 12 | description: Brief narrative description of this style 13 | type: string 14 | keywords: 15 | description: keywords about this style 16 | type: array 17 | items: 18 | type: string 19 | links: 20 | description: 'Links to style related resources. Possible link ''rel'' values 21 | are: ''style'' for a URL pointing to the style description, ''styleSpec'' 22 | for a URL pointing to the specification or standard used to define the style.' 23 | type: array 24 | minItems: 1 25 | items: 26 | $ref: '../common-core/link.yaml' 27 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/tileMatrix.yaml: -------------------------------------------------------------------------------- 1 | description: 'A tile matrix, usually corresponding to a particular zoom level of a TileMatrixSet.' 2 | type: object 3 | required: 4 | - id 5 | - scaleDenominator 6 | - cellSize 7 | - pointOfOrigin 8 | - tileWidth 9 | - tileHeight 10 | - matrixWidth 11 | - matrixHeight 12 | properties: 13 | title: 14 | description: Title of this tile matrix, normally used for display to a 15 | human 16 | type: string 17 | description: 18 | description: Brief narrative description of this tile matrix set, normally 19 | available for display to a human 20 | type: string 21 | keywords: 22 | description: Unordered list of one or more commonly used or formalized word(s) 23 | or phrase(s) used to describe this dataset 24 | type: array 25 | items: 26 | type: string 27 | id: 28 | description: Identifier selecting one of the scales defined in the TileMatrixSet 29 | and representing the scaleDenominator the tile. Implementation of 'identifier' 30 | type: string 31 | scaleDenominator: 32 | description: Scale denominator of this tile matrix 33 | type: number 34 | cellSize: 35 | description: Cell size of this tile matrix 36 | type: number 37 | cornerOfOrigin: 38 | description: The corner of the tile matrix (_topLeft_ or _bottomLeft_) used 39 | as the origin for numbering tile rows and columns. This corner is also a 40 | corner of the (0, 0) tile. 41 | type: string 42 | enum: 43 | - topLeft 44 | - bottomLeft 45 | default: topLeft 46 | pointOfOrigin: 47 | allOf: 48 | - description: Precise position in CRS coordinates of the corner of origin (e.g. 49 | the top-left corner) for this tile matrix. This position is also a corner 50 | of the (0, 0) tile. In previous version, this was 'topLeftCorner' and 'cornerOfOrigin' 51 | did not exist. 52 | - $ref: '2DPoint.yaml' 53 | tileWidth: 54 | type: number 55 | description: Width of each tile of this tile matrix in pixels 56 | format: integer 57 | minimum: 1 58 | multipleOf: 1 59 | tileHeight: 60 | type: number 61 | description: Height of each tile of this tile matrix in pixels 62 | format: integer 63 | minimum: 1 64 | multipleOf: 1 65 | matrixHeight: 66 | type: number 67 | description: Width of the matrix (number of tiles in width) 68 | format: integer 69 | minimum: 1 70 | multipleOf: 1 71 | matrixWidth: 72 | type: number 73 | description: Height of the matrix (number of tiles in height) 74 | format: integer 75 | minimum: 1 76 | multipleOf: 1 77 | variableMatrixWidths: 78 | description: Describes the rows that has variable matrix width 79 | type: array 80 | items: 81 | $ref: 'variableMatrixWidth.yaml' 82 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/tileMatrixLimits.yaml: -------------------------------------------------------------------------------- 1 | title: TileMatrixLimits 2 | description: The limits for an individual tile matrix of a TileSet's TileMatrixSet, 3 | as defined in the OGC 2D TileMatrixSet and TileSet Metadata Standard 4 | type: object 5 | required: 6 | - tileMatrix 7 | - minTileRow 8 | - maxTileRow 9 | - minTileCol 10 | - maxTileCol 11 | properties: 12 | tileMatrix: 13 | type: string 14 | minTileRow: 15 | type: integer 16 | minimum: 0 17 | maxTileRow: 18 | type: integer 19 | minimum: 0 20 | minTileCol: 21 | type: integer 22 | minimum: 0 23 | maxTileCol: 24 | type: integer 25 | minimum: 0 26 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/tileMatrixSet-item.yaml: -------------------------------------------------------------------------------- 1 | title: Tile Matrix Set Item 2 | description: A minimal tile matrix set element for use within a list of tile matrix sets linking to a full definition. 3 | type: object 4 | required: 5 | - links 6 | properties: 7 | id: 8 | description: Optional local tile matrix set identifier, e.g. for use as unspecified `{tileMatrixSetId}` parameter. Implementation of 'identifier' 9 | type: string 10 | title: 11 | description: Title of this tile matrix set, normally used for display to a human 12 | type: string 13 | uri: 14 | description: Reference to an official source for this tileMatrixSet 15 | type: string 16 | format: uri 17 | crs: 18 | allOf: 19 | - description: Coordinate Reference System (CRS) 20 | - $ref: '../../schemas/common-geodata/crs.yaml' 21 | links: 22 | description: Links to related resources. A 'self' link to the tile matrix set definition is required. 23 | type: array 24 | items: 25 | $ref: '../../schemas/common-core/link.yaml' 26 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/tileMatrixSet.yaml: -------------------------------------------------------------------------------- 1 | title: Tile Matrix Set Definition 2 | description: A definition of a tile matrix set following the Tile Matrix Set standard. 3 | For tileset metadata, such a description (in `tileMatrixSet` property) is only required 4 | for offline use, as an alternative to a link with a `http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme` 5 | relation type. 6 | type: object 7 | required: 8 | - crs 9 | - tileMatrices 10 | properties: 11 | title: 12 | description: Title of this tile matrix set, normally used for display to a human 13 | type: string 14 | description: 15 | description: Brief narrative description of this tile matrix set, normally available 16 | for display to a human 17 | type: string 18 | keywords: 19 | description: Unordered list of one or more commonly used or formalized word(s) 20 | or phrase(s) used to describe this tile matrix set 21 | type: array 22 | items: 23 | type: string 24 | id: 25 | description: Tile matrix set identifier. Implementation of 'identifier' 26 | type: string 27 | uri: 28 | description: Reference to an official source for this tileMatrixSet 29 | type: string 30 | format: uri 31 | orderedAxes: 32 | type: array 33 | minItems: 1 34 | items: 35 | type: string 36 | crs: 37 | allOf: 38 | - description: Coordinate Reference System (CRS) 39 | - $ref: '../common-geodata/crs.yaml' 40 | wellKnownScaleSet: 41 | description: Reference to a well-known scale set 42 | type: string 43 | format: uri 44 | boundingBox: 45 | allOf: 46 | - description: Minimum bounding rectangle surrounding the tile matrix set, in the supported CRS 47 | - $ref: '2DBoundingBox.yaml' 48 | tileMatrices: 49 | type: array 50 | description: Describes scale levels and its tile matrices 51 | items: 52 | $ref: 'tileMatrix.yaml' 53 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/tilePoint.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | required: 3 | - coordinates 4 | properties: 5 | coordinates: 6 | type: array 7 | minItems: 2 8 | maxItems: 2 9 | items: 10 | type: number 11 | crs: 12 | allOf: 13 | - description: Coordinate Reference System (CRS) of the coordinates 14 | - $ref: '../common-geodata/crs.yaml' 15 | tileMatrix: 16 | description: TileMatrix identifier associated with the scaleDenominator 17 | type: string 18 | scaleDenominator: 19 | description: Scale denominator of the tile matrix selected 20 | type: number 21 | cellSize: 22 | description: Cell size of the tile matrix selected 23 | type: number 24 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/tileSet-item.yaml: -------------------------------------------------------------------------------- 1 | title: Tile Set Metadata item 2 | description: A minimal tileset element for use within a list of tilesets linking to full description of those tilesets. 3 | type: object 4 | required: 5 | - dataType 6 | - links 7 | - crs 8 | properties: 9 | title: 10 | description: A title for this tileset 11 | type: string 12 | dataType: 13 | allOf: 14 | - description: Type of data represented in the tileset 15 | - $ref: '../../schemas/common-geodata/dataType.yaml' 16 | crs: 17 | allOf: 18 | - description: Coordinate Reference System (CRS) 19 | - $ref: '../../schemas/common-geodata/crs.yaml' 20 | tileMatrixSetURI: 21 | description: Reference to a Tile Matrix Set on an offical source for Tile Matrix 22 | Sets such as the OGC NA definition server (http://www.opengis.net/def/tms/). 23 | Required if the tile matrix set is registered on an open official source. 24 | type: string 25 | format: uri 26 | links: 27 | description: Links to related resources. A 'self' link to the tileset 28 | as well as a 'http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme' link 29 | to a definition of the TileMatrixSet are required. 30 | type: array 31 | items: 32 | $ref: '../../schemas/common-core/link.yaml' 33 | -------------------------------------------------------------------------------- /standard/openapi/schemas/tms/variableMatrixWidth.yaml: -------------------------------------------------------------------------------- 1 | description: Variable Matrix Width data structure 2 | type: object 3 | required: 4 | - coalesce 5 | - minTileRow 6 | - maxTileRow 7 | properties: 8 | coalesce: 9 | description: Number of tiles in width that coalesce in a single tile for these 10 | rows 11 | type: number 12 | format: integer 13 | minimum: 2 14 | multipleOf: 1 15 | minTileRow: 16 | description: First tile row where the coalescence factor applies for this 17 | tilematrix 18 | type: number 19 | format: integer 20 | minimum: 0 21 | multipleOf: 1 22 | maxTileRow: 23 | description: Last tile row where the coalescence factor applies for this tilematrix 24 | type: number 25 | format: integer 26 | minimum: 0 27 | multipleOf: 1 28 | -------------------------------------------------------------------------------- /standard/requirements/README.md: -------------------------------------------------------------------------------- 1 | This directory contains requirements classes, including a summary table indicating dependencies, the individual normative requirements. 2 | 3 | The requirement files are integrated into the main document as links. 4 | 5 | Each requirement should have a corresponding Abstract Test. 6 | 7 | The requirements class is included in the corresponding clause document, following a high-level overview. 8 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_cog.adoc: -------------------------------------------------------------------------------- 1 | [[rc_cog]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/cog 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf 9 | |Dependency |https://docs.ogc.org/is/19-008r4/19-008r4.html 10 | |Dependency |https://docs.ogc.org/is/21-026/21-026.html 11 | |=== 12 | 13 | // [[GeoTIFF]] OGC 19-008: *OGC GeoTIFF Standard*, Version 1.1, http://docs.opengeospatial.org/is/19-008r4/19-008r4.html 14 | // [[[TIFF_V6,TIFF V6.0]]], Adobe Developers Association: TIFF Specification Revision 6.0. (1992) https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf[https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf] 15 | 16 | ==== Requirements 17 | 18 | [[requirements-class-cog-clause]] 19 | 20 | ===== Cloud Optimized GeoTIFF access 21 | 22 | [[req_cog_http-range]] 23 | [width="90%",cols="2,6a"] 24 | |=== 25 | ^|*Requirement {counter:req-id}* |*/req/cog/http-range* 26 | ^|A |The coverage resource (`/coverage`), as defined in the Core requirement class, SHALL support HTTP range requests as specified in 27 | the https://docs.ogc.org/is/21-026/21-026.html#HTTPRangeSupportRequirements[`/req/http-range` requirement class of COG]. 28 | |=== 29 | 30 | [[req_cog_cloud-optimized]] 31 | [width="90%",cols="2,6a"] 32 | |=== 33 | ^|*Requirement {counter:req-id}* |*/req/cog/cloud-optimized* 34 | ^|A |The coverage resource, as defined in the Core requirement class, SHALL support content negotiation of a https://docs.ogc.org/is/19-008r4/19-008r4.html[GeoTIFF] using the cloud-optimized profile, 35 | (`Accept-Profile:`/`Content-Profile:` http://www.opengis.net/def/profile/geotiff/cloud-optimized`, `Accept:`/`Content-Type:` `image/tiff; application=geotiff` media type). 36 | ^|B |The response SHALL be a GeoTIFF document which validates against the GeoTIFF and TIFF standard. 37 | ^|C |If the response contains multiple fields, the fields SHALL be encoded as bands ordered following the `x-ogc-propertySeq` sequence. 38 | |=== 39 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_coveragejson.adoc: -------------------------------------------------------------------------------- 1 | [[rc_coveragejson]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/coveragejson 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |https://docs.ogc.org/cs/21-069r2/21-069r2.html 9 | |=== 10 | 11 | ==== Requirements 12 | 13 | [[requirements-class-coveragejson-clause]] 14 | 15 | ===== Coverage JSON representation 16 | 17 | [[req_coveragejson_coverage]] 18 | [width="90%",cols="2,6a"] 19 | |=== 20 | ^|*Requirement {counter:req-id}* |*/req/coveragejson/coverage* 21 | ^|A |If a particular collection is suitable for a CoverageJSON representation, the coverage resource as defined in the Core requirement class SHALL support negotiating a https://docs.ogc.org/cs/21-069r2/21-069r2.html[CoverageJSON] response using the `application/vnd.cov+json` media type. 22 | ^|B |The response SHALL be a CoverageJSON document which validates against the CoverageJSON community standard. 23 | |=== 24 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_crs.adoc: -------------------------------------------------------------------------------- 1 | [[rc_table_crs]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class Coordinate Reference System* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/crs 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |=== 9 | 10 | === Requirements 11 | 12 | ==== Parameter `crs` 13 | A successful GET response is described in the Coverages API core class (http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/core). 14 | 15 | [[req_crs_crs-definition]] 16 | [width="90%",cols="2,6a"] 17 | |=== 18 | ^|*Requirement {counter:req-id}* |*/req/crs/crs-definition* 19 | ^|A |The coverage retrieval operation SHALL support a parameter `crs` with the characteristics defined in the OpenAPI Specification 3.0 fragment 20 | [source,YAML] 21 | ---- 22 | crs: 23 | name: crs 24 | in: query 25 | description: A coordinate reference system of the coverage response. A list of all supported CRS values can be found under the collection metadata. 26 | required: false 27 | schema: 28 | type: string 29 | example: http://www.opengis.net/def/crs/OGC/1.3/CRS84 30 | ---- 31 | ^|B |Any of the CRSs listed in the collection (or collections) description SHALL be supported. If the list of supported CRS is not present, only http://www.opengis.net/def/crs/OGC/1.3/CRS84 SHALL be supported. 32 | ^|C |If the spatial subsetting requirements class is supported, the `bbox-crs` and the `subset-crs` SHALL additionally support value specified in the crs parameter. 33 | ^|D |CRS expressed as URIs or as safe CURIEs SHALL be supported. 34 | ^|E |The content of that response SHALL be consistent with the requested CRS. 35 | ^|F |If the parameter value for `crs` is not valid for requested coverage, the status code of the response SHALL be 400. 36 | |=== 37 | 38 | NOTE: When no `crs` parameters are specified, the default output CRS is the native (`storage CRS`), which is CRS84 if none is specified (see <> for additional details). 39 | 40 | NOTE: A CURIE `{authority}[-{objectType}]:{id}` would map to the following OGC URI: `http://www.opengis.net/def/{objectType}/{authority}/0/{id}`. If `-{objectType}` is missing, the default object type is crs. 41 | 42 | See how to determine the native (storage) CRS for the coverage in <> respectively. 43 | 44 | NOTE: The default CRS of the BBOX is http://www.opengis.net/def/crs/OGC/1.3/CRS84 but the default CRS of the coverage is the native (storage) CRS 45 | 46 | [[per_crs_crs-curie]] 47 | [width="90%",cols="2,6a"] 48 | |=== 49 | ^|*Permission {counter:per-id}* |*/per/crs/crs-curie* 50 | ^|A |Un-safe CURIE without square brackets MAY be supported. 51 | |=== 52 | 53 | NOTE: This makes the notation compatible with WCS. 54 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_fieldselection.adoc: -------------------------------------------------------------------------------- 1 | [[rc_table_fieldselection]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/fieldselection 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |=== 9 | 10 | === Requirements 11 | 12 | ==== Parameter `properties` 13 | 14 | [[req_fieldselection-properties]] 15 | [width="90%",cols="2,6a"] 16 | |=== 17 | ^|*Requirement {counter:req-id}* |*/req/fieldselection/properties* 18 | ^|A |The operation SHALL support a parameter `properties` with the following characteristics (using an Extended Backus Naur Form (EBNF) fragment): 19 | 20 | [source,EBNF] 21 | ---- 22 | propertiesSpec: "properties"=field[,field]* 23 | field: {fieldName}\|{fieldIndex}\|"*" 24 | fieldName: {text} 25 | fieldIndex: {number} 26 | 27 | Where: 28 | {number} is an integer number, and 29 | {text} is some general ASCII text. 30 | ---- 31 | 32 | ^|B |The implementation SHALL support selecting a field using the identifier corresponding to the top-level property keys of the coverage fields schema, and return 400 status code for an unrecognized selected field. 33 | ^|C |The implementation SHALL support selecting a field using an index corresponding to an `x-ogc-propertySeq` property in the coverage fields schema, if present, and return a 400 status code for an unrecognized field index. 34 | ^|D |The coverage fields schema SHALL not contain any potential conflict between a numeric band name and a band index. 35 | ^|E |The implementation SHALL interpret an `*` (asterisk) at the begining or at the end of the comma-separated list as all other fields before or after the listed fields, respectively, as per the numeric `x-ogc-propertySeq` order. 36 | ^|F |Only the selected fields of the coverage SHALL be returned from coverage request. 37 | ^|G |If the coverage response can self-describes its list of fields (as with the CIS _range type_), the field description SHALL be adjusted accordingly to the new selected fields. 38 | ^|H |If the negotiated format of the response has a concept of field order, then the fields SHALL be in the same order as the requested list of selected fields. 39 | |=== 40 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_html.adoc: -------------------------------------------------------------------------------- 1 | [[rc_html]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/html 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |<> 9 | |=== 10 | 11 | ==== Requirements 12 | 13 | [[requirements-class-html-clause]] 14 | 15 | ===== Coverage 16 | 17 | [[req_html_coverage-success]] 18 | [width="90%",cols="2,6a"] 19 | |=== 20 | ^|*Requirement {counter:req-id}* |*/req/html/coverage* 21 | ^|A |The coverage resource, as defined in the "Core" requirement class, SHALL support negotiating an HTML response using the `text/html` media type. 22 | ^|B |The response SHALL be a valid HTML document 23 | ^|C |The response SHALL represent the coverage. 24 | |=== 25 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_jpeg2000.adoc: -------------------------------------------------------------------------------- 1 | [[rc_jpeg2000]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/jpeg2000 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |https://www.iso.org/standard/78321.html[ISO/IEC 15444-1:2019] 9 | |Dependency |https://www.iso.org/standard/84573.html[ISO/IEC 15444-2:2023] 10 | |Dependency |https://docs.ogc.org/is/08-085r8/08-085r8.html 11 | |=== 12 | 13 | ==== Requirements 14 | 15 | [[requirements-class-jpeg2000-clause]] 16 | 17 | ===== JPEG 2000 representation 18 | 19 | [[req_jpeg2000_coverage]] 20 | [width="90%",cols="2,6a"] 21 | |=== 22 | ^|*Requirement {counter:req-id}* |*/req/jpeg2000/coverage* 23 | ^|A |Two-dimensional coverage responses for the coverage resource, as defined in the Core requirement class, SHALL support negotiating a https://jpeg.org/jpeg2000/[JPEG 2000] response using the `image/jp2` media type. 24 | ^|B |The JPEG 2000 response SHALL use the appropriate data types most closely matching the coverage field (e.g., 8 bit or 16-bit integer, 32-bit floating point). 25 | ^|C |The response SHALL contain all selected fields. 26 | ^|D |If the response contains multiple fields, the fields SHALL be encoded as bands ordered following the `x-ogc-propertySeq` sequence. 27 | ^|E |Georeferencing SHALL be included in the response using the https://docs.ogc.org/is/08-085r8/08-085r8.html[GMLJP2] encoding, consistent with the requested subset of the coverage domain. 28 | |=== 29 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_jpegxl.adoc: -------------------------------------------------------------------------------- 1 | [[rc_jpegxl]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/jpegxl 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |https://www.iso.org/standard/85066.html[ISO/IEC 18181-1:2024] 9 | |Dependency |https://www.iso.org/standard/85253.html[ISO/IEC 18181-2:2024] 10 | |=== 11 | 12 | ==== Requirements 13 | 14 | [[requirements-class-jpegxl-clause]] 15 | 16 | ===== JPEG XL representation 17 | 18 | [[req_jpegxl_coverage]] 19 | [width="90%",cols="2,6a"] 20 | |=== 21 | ^|*Requirement {counter:req-id}* |*/req/jpegxl/coverage* 22 | ^|A |Two-dimensional coverage responses for the coverage resource, as defined in the Core requirement class, SHALL support negotiating a https://jpeg.org/jpegxl/[JPEG XL] response using the `image/jxl` media type. 23 | ^|B |The JPEG XL response SHALL use the appropriate data types most closely matching the coverage field (e.g., 8 bit or 16-bit integer, 32-bit floating point). 24 | ^|C |The response SHALL contain all selected fields. 25 | ^|D |If the response contains multiple fields, the fields SHALL be encoded as bands ordered following the `x-ogc-propertySeq` sequence. 26 | |=== 27 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_las.adoc: -------------------------------------------------------------------------------- 1 | [[rc_las]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/las 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |https://portal.ogc.org/files/?artifact_id=74523[OGC 17-030r1 LAS Specification 1.4 Community Standard] 9 | |=== 10 | 11 | ==== Requirements 12 | 13 | [[requirements-class-las-clause]] 14 | 15 | ===== LAS representation 16 | 17 | [[req_las_coverage]] 18 | [width="90%",cols="2,6a"] 19 | |=== 20 | ^|*Requirement {counter:req-id}* |*/req/las/coverage* 21 | ^|A |If a particular collection such as point cloud is suitable for a LAS representation, the coverage resource as defined in the Core requirement class SHALL support negotiating a https://portal.ogc.org/files/?artifact_id=74523[LAS] response using the `application/vnd.las` media type. 22 | ^|B |The response SHALL be a LAS point cloud which validates against the OGC LAS Community Standard, using a Point Data Record Format suitable for the data being returned. 23 | |=== 24 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_laszip.adoc: -------------------------------------------------------------------------------- 1 | [[rc_laszip]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/laszip 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |https://www.cs.unc.edu/~isenburg/lastools/download/laszip.pdf[LASzip: lossless compression of LiDAR data] 9 | |Dependency |https://portal.ogc.org/files/?artifact_id=74523[OGC 17-030r1 LAS Specification 1.4 Community Standard] 10 | |=== 11 | 12 | ==== Requirements 13 | 14 | [[requirements-class-laszip-clause]] 15 | 16 | ===== LASzip representation 17 | 18 | [[req_laszip_coverage]] 19 | [width="90%",cols="2,6a"] 20 | |=== 21 | ^|*Requirement {counter:req-id}* |*/req/laszip/coverage* 22 | ^|A |If a particular collection such as point cloud is suitable for a LASzip representation, the coverage resource as defined in the Core requirement class SHALL support negotiating a LASzip: lossless compression of LiDAR data[LASzip] response using the `application/vnd.laszip` media type. 23 | ^|B |The response SHALL be a LASzip point cloud which validates against the LASzip format, which can be used to losslessly compress point cloud data encoded in the OGC LAS Community Standard, using a Point Data Record Format suitable for the data being returned. 24 | |=== 25 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_netcdf.adoc: -------------------------------------------------------------------------------- 1 | [[rc_netcdf]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/netcdf 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |https://portal.ogc.org/files/?artifact_id=43732[OGC 10-090r3 Network Common Data Form Core Encoding Standard 1.0] 9 | |=== 10 | 11 | ==== Requirements 12 | 13 | [[requirements-class-netCDF-clause]] 14 | 15 | ===== netCDF representation 16 | 17 | [[req_netcdf_coverage]] 18 | [width="90%",cols="2,6a"] 19 | |=== 20 | ^|*Requirement {counter:req-id}* |*/req/netcdf/coverage* 21 | ^|A |If a particular collection is suitable for a CIS JSON representation, the coverage resource as defined in the Core requirement class SHALL support negotiating a https://portal.ogc.org/files/?artifact_id=43732[netCDF] response using the `application/x-netcdf` media type. 22 | ^|B |The response SHALL be a netCDF document which validates against the OGC netCDF standard. 23 | ^|C |For dimensions that do not have a well-defined netCDF `standard_name`, the name of the corresponding variable SHALL match the name of the dimension in the collection description's extent. 24 | |=== 25 | 26 | NOTE: The https://portal.ogc.org/files/?artifact_id=50294[OGC netCDF Enhanced Data Model Extension] can be fully encoded using the 27 | https://docs.ogc.org/is/18-043r3/18-043r3.html[OGC Hierarchical Data Format Version 5 (HDF5®) Standard]. 28 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_oas30.adoc: -------------------------------------------------------------------------------- 1 | [[rc_table_oas30]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages/1.0/req/oas30 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |http://www.opengis.net/spec/ogcapi-common-1/1.0/req/oas30 9 | |=== 10 | 11 | === Requirements 12 | 13 | [[req_oas30_oas-common]] 14 | [width="90%",cols="2,6"] 15 | |=== 16 | ^|*Requirement {counter:req-id}* |*/req/oas30/oas-common* 17 | ^|A | The OpenAPI api description SHALL use an operationId ending with `.getCoverage` for coverage resources. 18 | |=== 19 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_png.adoc: -------------------------------------------------------------------------------- 1 | [[rc_png]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/geotiff 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |https://www.w3.org/TR/png/ 9 | |=== 10 | 11 | ==== Requirements 12 | 13 | [[requirements-class-png-clause]] 14 | 15 | ===== PNG representation 16 | 17 | [[req_png_coverage]] 18 | [width="90%",cols="2,6a"] 19 | |=== 20 | ^|*Requirement {counter:req-id}* |*/req/png/coverage* 21 | ^|A |Two-dimensional coverage responses for the coverage resource, as defined in the Core requirement class, SHALL support negotiating a https://www.w3.org/TR/png/[PNG] response using the `image/png` media type. 22 | ^|B |The PNG response SHALL use 16-bit values for fields requiring more than 8-bit to encode accurately. 23 | ^|C |The Implementation SHALL return a 400 error for requests for any number of fields other than 1 or 3. 24 | ^|D |If the response contains multiple fields, the fields SHALL be encoded as bands ordered following the `x-ogc-propertySeq` sequence. 25 | ^|E | A `Values-Scale:` response header with a numeric real value SHALL be returned indicating the factor by which values were multiplied before an offset was added to result in the encoded 8-bit or 16-bit PNG unsigned integer values. 26 | ^|F | A `Values-Offset:` response header with a numeric real value SHALL be returned indicating the offset which was added after multiplying values by the scale factor to result in the encoded 8-bit or 16-bit PNG unsigned integer values. 27 | |=== 28 | 29 | [[rec_png_scale_offset]] 30 | [width="90%",cols="2,6a"] 31 | |=== 32 | ^|*Recommendation {counter:rec-id}* |*/rec/png/scale-offset* 33 | ^|A |The Implementation SHOULD support a `values-scale` query parameter on coverage resources when requesting a PNG output to indicate the value scale factor, as described in the `Values-Scale:` response header part of the content requirement. 34 | ^|B |The Implementation SHOULD support a `values-offset` query parameter on coverage resources when requesting a PNG output to indicate the value offset, as described in the `Values-Offset:` response header part of the content requirement. 35 | |=== 36 | -------------------------------------------------------------------------------- /standard/requirements/requirements_class_zarr.adoc: -------------------------------------------------------------------------------- 1 | [[rc_zarr]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/zarr 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi-coverages-1/1.0/req/core 8 | |Dependency |https://zarr-specs.readthedocs.io/en/latest/v2/v2.0.html[Zarr2, Zarr Storage Specification Version 2] 9 | |Dependency |<> 10 | |=== 11 | 12 | ==== Requirements 13 | 14 | [[requirements-class-zarr-clause]] 15 | 16 | ===== Zarr representation 17 | 18 | [[req_zarr_coverage]] 19 | [width="90%",cols="2,6a"] 20 | |=== 21 | ^|*Requirement {counter:req-id}* |*/req/zarr/coverage* 22 | ^|A |Coverage responses for the coverage resource, as defined in the Core requirement class, SHALL support negotiating a https://zarr-specs.readthedocs.io/en/latest/v2/v2.0.html[Zarr] response packaged in a https://www.iso.org/standard/60101.html[Zip] file using the `application/zarr+zip` media type. 23 | ^|B |The Zarr response SHALL use the appropriate data types most closely matching the coverage fields. 24 | ^|C |The response SHALL contain all selected fields. 25 | ^|D |If the response contains multiple fields, the fields SHALL be encoded as bands ordered following the `x-ogc-propertySeq` sequence. 26 | |=== 27 | 28 | [[rec_zarr_geozarr]] 29 | [width="90%",cols="2,6a"] 30 | |=== 31 | ^|*Recommendation {counter:rec-id}* |*/rec/zarr/geozarr* 32 | ^|A |Georeferencing information SHOULD be included in the response using the https://github.com/zarr-developers/geozarr-spec[GeoZarr] candidate Standard. 33 | |=== 34 | -------------------------------------------------------------------------------- /users-guide/.gitignore: -------------------------------------------------------------------------------- 1 | 19-072BP.html 2 | 19-072BP.pdf 3 | -------------------------------------------------------------------------------- /users-guide/HTML_Gen.bat: -------------------------------------------------------------------------------- 1 | asciidoctor --trace -o ../20-075.html OAPI_Coverages_Users_Guide.adoc 2 | -------------------------------------------------------------------------------- /users-guide/PDF_Gen.bat: -------------------------------------------------------------------------------- 1 | asciidoctor -r asciidoctor-pdf --trace -b pdf -o ..\20-075.pdf OAPI_Coverages_Users_Guide.adoc 2 | -------------------------------------------------------------------------------- /users-guide/README.md: -------------------------------------------------------------------------------- 1 | # Best Practice template 2 | 3 | ## Content 4 | 5 | This folder contains the text for the Best Practice 6 | 7 | * bp.adoc - the main Best Practice document with references to all sections 8 | * remaining adocs - each section of the Best Practice document is in a separate document: follow directions in each document to populate 9 | * figures - figures go here 10 | * images - Image files for graphics go here. Image files for figures go in the "figures" directory. Only place in here images not used in figures (e.g., as parts of tables, as logos, etc.) 11 | * requirements - (OPTIONAL) directory for requirements and requirement classes to be referenced in clause_7_normative_text.adoc 12 | * code - (OPTIONAL)sample code to accompany the Best Practice, if desired 13 | * abstract_tests - (OPTIONAL)the Abstract Test Suite comprising one test for every requirement, optional 14 | * UML - UML diagrams, if applicable 15 | 16 | ## Building 17 | 18 | To produce the HTML of the Best Practice run `asciidoctor --safe -a data-uri -o 19 | .html bp.adoc` 20 | 21 | To produce the PDF of the Best Practice run `asciidoctor-pdf --safe -o 22 | .pdf bp.adoc` 23 | -------------------------------------------------------------------------------- /users-guide/UML/README.md: -------------------------------------------------------------------------------- 1 | Store UML content in this directory. Feel free to use any organizational scheme that you like. 2 | 3 | Figures derived from UML diagrams should be placed in the "figures" folder. 4 | -------------------------------------------------------------------------------- /users-guide/annex_bibliography.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | [[Bibliography]] 4 | = Bibliography 5 | 6 | * [[SDWBP]] W3C/OGC: *Spatial Data on the Web Best Practices*, W3C Working Group Note 28 September 2017, https://www.w3.org/TR/sdw-bp/ 7 | * [[DWBP]] W3C: *Data on the Web Best Practices*, W3C Recommendation 31 January 2017, https://www.w3.org/TR/dwbp/ 8 | * [[DCAT]] W3C: *Data Catalog Vocabulary*, W3C Recommendation 16 January 2014, https://www.w3.org/TR/vocab-dcat/ 9 | * [[link-relations]] IANA: *Link Relation Types*, https://www.iana.org/assignments/link-relations/link-relations.xml 10 | * [[J2K]] International Telecommunication Union, *ITU-T.800 : Information technology - JPEG 2000 image coding system: Core coding system*, June, 2019, https://www.itu.int/rec/T-REC-T.800-201906-I/en 11 | * [[RDF]] W3C, *RDF 1.1 Semantics*, February 2014, https://www.w3.org/TR/rdf11-mt/ 12 | * OGC: OGC 13-102r2, *Name type specification – Time and index coordinate reference system definitions* (OGC Policy Document), version 1, 2014 13 | -------------------------------------------------------------------------------- /users-guide/annex_history.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Revision History 4 | 5 | [width="90%",options="header"] 6 | |=== 7 | |Date |Release |Editor | Primary clauses modified |Description 8 | |2016-04-28 |0.1 |G. Editor |all |initial version 9 | |=== 10 | -------------------------------------------------------------------------------- /users-guide/clause_0_front_material.adoc: -------------------------------------------------------------------------------- 1 | [big]*i. Abstract* 2 | 3 | 4 | 5 | [big]*ii. Keywords* 6 | 7 | The following are keywords to be used by search engines and document catalogues. 8 | 9 | ogcdoc, OGC document, 10 | 11 | [big]*iii. Preface* 12 | 13 | [NOTE] 14 | ==== 15 | Insert Preface Text here. Give OGC specific commentary: describe the technical content, reason for document, history of the document and precursors, and plans for future work. > 16 | Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights. 17 | 18 | Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation. 19 | ==== 20 | [big]*iv. Submitting organizations* 21 | 22 | The following organizations submitted this Document to the Open Geospatial Consortium (OGC): 23 | 24 | Organization name(s) 25 | 26 | [big]*v. Submitters* 27 | 28 | All questions regarding this submission should be directed to the editor or the submitters: 29 | 30 | Name Affiliation 31 | -------------------------------------------------------------------------------- /users-guide/clause_1_scope.adoc: -------------------------------------------------------------------------------- 1 | == Scope 2 | [NOTE] 3 | ==== 4 | Insert Scope text here. Give the subject of the document and the aspects of that scope covered by the document. 5 | ==== 6 | -------------------------------------------------------------------------------- /users-guide/clause_3_terms_and_definitions.adoc: -------------------------------------------------------------------------------- 1 | == Terms and Definitions 2 | This document uses the terms defined in Sub-clause 5 of https://github.com/opengeospatial/oapi_common/blob/master/19-072.pdf[OGC API - Common - Part 1: Core] (OGC 19-072), which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this standard. 3 | 4 | For the purposes of this document, the following additional terms and definitions apply. 5 | 6 | === Coverage 7 | feature that acts as a function to return values from its range for any direct position within its spatiotemporal domain, as defined in OGC Abstract Topic 6 8 | 9 | === Regular grid 10 | grid whose grid lines have a constant distance along each grid axis 11 | 12 | === Irregular grid 13 | Grid whose grid lines have individual distances along each grid axis 14 | 15 | === Displaced grid 16 | grid whose direct positions are topologically aligned to a grid, but whose geometric positions can vary arbitrarily 17 | 18 | === Mesh 19 | coverage consisting of a collection of curves, surfaces, or solids, respectively 20 | 21 | === Partition [of a coverage] 22 | separately stored coverage acting, by being referenced in the coverage on hand, as one of its components 23 | 24 | === Sensor model 25 | mathematical model for estimating geolocations from recorded sensor data such as digital imagery 26 | 27 | === Transformation grid 28 | grid whose direct positions are given by some transformation algorithm not further specified in this standard 29 | -------------------------------------------------------------------------------- /users-guide/clause_4_conventions.adoc: -------------------------------------------------------------------------------- 1 | == Conventions 2 | This sections provides details and examples for any conventions used in the document. Examples of conventions are symbols, abbreviations, use of XML schema, or special notes regarding how to read the document. 3 | 4 | === Identifiers 5 | The normative provisions in this document are denoted by the URI 6 | 7 | http://www.opengis.net/spec/{standard}/{m.n} 8 | 9 | All requirements and conformance tests that appear in this document are denoted by partial URIs which are relative to this base. 10 | -------------------------------------------------------------------------------- /users-guide/clause_5_informative_text.adoc: -------------------------------------------------------------------------------- 1 | [[api-users-guide-section]] 2 | == Users Guide 3 | 4 | Everything up the now has been information about this document and how to use it. Topics related to the implementation of Coverages APIs are included in this section. 5 | 6 | include::./clause_5_get_data_from_point.adoc[] 7 | 8 | include::./clause_5_using_api-common.adoc[] 9 | 10 | include::./clause_5_using_metadata.adoc[] 11 | 12 | include::./clause_5_selecting_pixels.adoc[] 13 | 14 | include::./clause_5_range-types.adoc[] 15 | 16 | include::./clause_5_slicing-and-subsetting.adoc[] 17 | -------------------------------------------------------------------------------- /users-guide/clause_5_range-types.adoc: -------------------------------------------------------------------------------- 1 | [[range-types-section]] 2 | === Range Types 3 | 4 | In our implementation, we currently support coverages encoded in 5 | 16-bit PNG, with the 16-bit range mapped linearly to the range of values 6 | for the coverage, similar to how it is done in the http://docs.opengeospatial.org/is/17-066r1/17-066r1.html[GeoPackage tile gridded coverage extension]. 7 | 8 | Two main points: 9 | 10 | * How could it be possible to desribe in the ``.../{collectionId}`` resource the range of the values that occur in the coverage? e.g. -11000..9000, or 1 to 27? 11 | 12 | As far as I understand the RangeType does not specify this, it only says a 32-bit float or an unsigned 8 bit integer is used. 13 | * How could a linear mapping be established from encoded values to 14 | units like meters, to use a format like PNG and maximize precision while 15 | minimizing storage size? 16 | 17 | GeoServer WCS 2 example: 18 | 19 | [source,java] 20 | ---- 21 | 22 | RED_BAND 23 | 24 | 25 | 0.0 26 | 27 | 28 | 29 | 30 | 31 | 100.0 150.0 32 | 33 | 34 | 35 | 36 | ---- 37 | 38 | Here is an example using ISO 19115-2. I believe the Range Type in CIS is similar. The coverage is a SAR collection. Each pixel is an imaginary number (real and imaginary components) represented as 2s compliment integers. "Count" is the SWE Common equivalent of integer. There is a lot of additional information you can add, but this was sufficient for my immediate needs. 39 | 40 | I'm sure there is a range type you cannot represent using SWE Common, but I haven't found one yet. 41 | 42 | [source,java] 43 | ---- 44 | 45 | 46 | 47 | Each component is stored in a 16-bit signed integer in 2’s complement format. 48 | 49 | 0 65535 50 | 51 | 52 | 53 | 54 | 55 | Each component is stored in a 16-bit signed integer in 2’s complement format. 56 | 57 | 0 65535 58 | 59 | 60 | 61 | 62 | 63 | ---- -------------------------------------------------------------------------------- /users-guide/clause_5_slicing-and-subsetting.adoc: -------------------------------------------------------------------------------- 1 | [[slicing-and-subsetting-section]] 2 | === Slicing and Subsetting 3 | 4 | First we need to define two concepts: 5 | 6 | subsetting - this appears to be the case where you select a subset of the range set that is at full resolution. To perform a selection you identify the range of values along each axis that should be included in the result. 7 | 8 | thinning - appears to be the case where you reduce the resolution of the range set. This is done by removing elements from the range set and performing any smoothing or interpolation functions needed to maintain the integrity of the data. 9 | 10 | Once we have agreed on these definitions, we can talk about the implications of these techniques for both regular and irregular grids. 11 | 12 | Also consider edge cases: 13 | 1) non-terrestrial data 14 | 2) swath or curtain data (collection across a vertical column) 15 | 3) RF data - phase, frequency, doppler, etc. -------------------------------------------------------------------------------- /users-guide/clause_5_template.adoc: -------------------------------------------------------------------------------- 1 | [[api-users-guide-section]] 2 | == Users Guide 3 | 4 | Everything up the now has been information about this document and how to use it. Topics related to the implementation of Coverages APIs are included in this section. -------------------------------------------------------------------------------- /users-guide/clause_5_using_api-common.adoc: -------------------------------------------------------------------------------- 1 | [[using-api-common-section]] 2 | === Using API-Common 3 | 4 | Provides a description of how API-Common Parts 1 and 2 should be used in a Coverage API. Key issues: 5 | 6 | 1) Collections vs. Coverages 7 | 2) Use of bbox and datetime - what is their purpose, what elements are they applied against, what are their limitations. 8 | -------------------------------------------------------------------------------- /users-guide/clause_5_using_metadata.adoc: -------------------------------------------------------------------------------- 1 | [[using-metadata-section]] 2 | === Using Metadata 3 | 4 | API-Common provides sets of common metadata along with JSON schema for that metadata. Resource-specific APIs are expected to extend that metadata with information specific to their resource type. 5 | 6 | In the case of coverages, we should distinquish between discovery metadata and exploitation metadata. Coverage metadata is that metadata used to identify and select a coverage. Exploitation metadata is metadata required to use the coverage. Note that there is some overlap between these categories. The API implementor should have the freedom to draw the line based on how they expect their API to be used. 7 | 8 | Foot Stomp - metadata has to come from somewhere. If it is not in the coverage, then it cannot be populated in the API. 9 | -------------------------------------------------------------------------------- /users-guide/code/README.md: -------------------------------------------------------------------------------- 1 | Sample code may be stored in this folder, organized as you see fit 2 | -------------------------------------------------------------------------------- /users-guide/figures/README.md: -------------------------------------------------------------------------------- 1 | Figures go here. 2 | 3 | Each figure is a separate file with the naming convention: 4 | 5 | "FIGn.xxx" where "n" is a number with leading zeroes appropriate for the total number of figures and "xxx" is the appropriate extension for the file type. -------------------------------------------------------------------------------- /users-guide/images/README.md: -------------------------------------------------------------------------------- 1 | Image files for graphics go here. Image files for figures go in the "figures" directory. Only place in here images not used in figures (e.g., as parts of tables, as logos, etc.) 2 | 3 | Each graphic is a separate file with the naming convention: 4 | 5 | "GRPn.xxx" where "n" is a sequential number with leading zeroes appropriate for the total number of graphics and "xxx" is the appropriate extension for the file type. 6 | -------------------------------------------------------------------------------- /users-guide/images/image_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/users-guide/images/image_1.png -------------------------------------------------------------------------------- /users-guide/images/image_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/users-guide/images/image_2.png -------------------------------------------------------------------------------- /users-guide/images/image_2_A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/users-guide/images/image_2_A.png -------------------------------------------------------------------------------- /users-guide/images/image_2_B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/users-guide/images/image_2_B.png -------------------------------------------------------------------------------- /users-guide/images/image_2_C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-coverages/69fc2d84167efdd7ce32b8209c024a7eded1b48e/users-guide/images/image_2_C.png --------------------------------------------------------------------------------