diff --git a/docs/MapColonies/3D/Guides/3D_getting_started.md b/docs/MapColonies/3D/Guides/3D_getting_started.md index c48d0f8b06..5f81b4df57 100644 --- a/docs/MapColonies/3D/Guides/3D_getting_started.md +++ b/docs/MapColonies/3D/Guides/3D_getting_started.md @@ -42,7 +42,7 @@ flowchart LR Query **3D CSW catalog** service to find item(s) according to desired filter [example are here](/docs/ogc/protocols/ogc-csw/ogc-csw-examples) -Filter should be based on [3D profile](/docs/MapColonies/3D/services/catalog/catalog-profile-v2) +Filter should be based on [3D profile](/docs/MapColonies/3D/services/catalog/catalog-profile-v2). :::warning Pay attention to set the following parameter 'outputSchema="http://schema.mapcolonies.com/3d"' in order to get full catalog data @@ -197,99 +197,7 @@ In the Response, look for ::: ## Get terrain provider URI (Step 2.1, optional) -This section explains how to query "Best" terrain for complementing the `3D models` and giving a true 3D visualization. If you wish to get a specifc terrain please use [DEM Getting Started Guide](/docs/MapColonies/DEM/Guides/DEM_getting_started.md) - -To query the "Best" terrain, use the following: -```xml title="GetRecords Request For Terrain" -POST Request - -url: -'<3D_CATALOG_SERVICE_URL>/csw' - -body (XML): - - - - full - - - - - - mc:productType - - - - QuantizedMeshDTMBest - - - - - - - -``` - -You will get GetRecords XML Response with product **metadata**. - -
- Response example - -```xml title="Search Results Example" - - - - - - 4.0 - 5 - 2022-10-24 - {"type":"Polygon","coordinates":[[[34.98,32.8],[35.1,32.8],[35.1,32.7],[34.98,32.7],[34.98,32.8]]]} - North - 999.0 - 33333333-3333-3333-3333-333333333333 - 2022-10-24 - https://tiles.mapcolonies.net/api/dem/v1/terrains/srtm100 - producer - 35.2670012825,32.5856881598,35.3105702702,32.6300363309 - 33333333-3333-3333-3333-333333333333 - srtm100 - - PUBLISHED - QuantizedMeshDTMBest - Test subtype - 1 - - 1 - region - UNDEFINED - 2022-10-24 - 2022-10-24 - 4326 - WGS84GEO - RECORD_3D - 2022-10-25T16:48:17Z - - 32.7 34.98 - 32.8 35.1 - - - - -``` -
- - -```xml title="Extract link for terrain provider" - - http://tiles.com/terrains/srtm100/layer.json - -``` - - -:::info -**You need to save `` element value as TERRAIN_URL, which is a terrain provider consumption URL.** -::: +Read more in the [DEM Terrain Provider Guide](/docs/MapColonies/DEM/Guides/terrain-provider). ## Step 3 ### Construct Client side Layer diff --git a/docs/MapColonies/DEM/Guides/DEM_getting_started.md b/docs/MapColonies/DEM/Guides/DEM_getting_started.md deleted file mode 100644 index e7c5573bf1..0000000000 --- a/docs/MapColonies/DEM/Guides/DEM_getting_started.md +++ /dev/null @@ -1,202 +0,0 @@ ---- -id: dem-getting-started -slug: dem-getting-started -title: Getting started -tags: - - guide - - DEM - - DTM - - DSM - - terrain - - getting-started ---- - -## Step by step guide -The following guide will help you understand, ***Step-by-step*** the best practices of how to work with the Map Colonies **DEM** Catalog and how to consume mapping products in a ***dynamic way*** (materials might be changed or added) - -## Flow diagram -```mermaid -flowchart LR - subgraph Prerequisite - direction LR - a1[Define filter] - a2[Get Auth Token] - end - - a1 -- filter --> B[STEP 1
Query CSW catalog] - a2 -- token --> B - subgraph Metadata drill-down - direction LR - c1[STEP 2
Get DEM metadata] - c2[STEP 2.1 optional
Get terrain provider URI] - end - B -- xml --> c1 - B -- xml --> c2 - c1 -. IN DEVELOPMENT
metadata
of available for export data .-> E[STEP 3
Your system] - c2 -- terrain_URI --> D[STEP 3.1
Cesium] - - linkStyle 4 color:green,stroke:#f4cccc,stroke-width:5px %% Arrow -``` - -## Query CSW catalog (Step 1) -Query **DEM CSW catalog** service to find item(s) according to desired filter [examples are here](/docs/ogc/protocols/ogc-csw/ogc-csw-examples) - -Filter should be based on [DEM profile](/docs/MapColonies/DEM/Services/catalog/catalog-profile-v1) - -Example query based on `mc:classification` profile field -```xml title="GetRecords Request" -POST Request - -url: -'/csw' - -body (XML): - - - - full - - - - - mc:classification - 5 - - - mc:productType - DTM - - - - - - -``` - -You will get GetRecords XML Response with product **metadata**. - -
- Response example - -```xml title="Search Results Example" - - - - - - 999.0 - 5 - {"type":"Polygon","coordinates":[[[31.2603,33.4345],[31.2603,34.4888],[32.3353,34.4888],[32.3353,33.4345],[31.2603,33.4345]]]} - ישראל - 999.0 - c2bbeeee-6081-4e69-918c-287f48ea244d - http://dem-server/15211-65da-4523-9d6f-08016ad51b0d.... - DAVID - 31.2603,33.4345,32.3353,34.4888 - c2bbeeee-6081-4e69-918c-287f48ea244d - מודל פריז - DTM - 1 - photogrammetric - P-30 - 1 - צפון - sensor1 - 2022-06-15T10:39:00Z - 2022-06-15T10:39:00Z - 4567 - WGS24GEO - RECORD_DEM - - 33.4345 31.2603 - 34.4888 32.3353 - - - - 999.0 - 5 - 2022-06-15 - srtm100 - {"type":"Polygon","coordinates":[[[35.2670012825,32.5856881598],[35.2670012825,32.6300363309],[35.3105702702,32.6300363309],[35.3105702702,32.5856881598],[35.2670012825,32.5856881598]]]} - North - 999.0 - 11111111-1111-1111-1111-111111111111 - http://terrain-server.com/terrains/srtm100 - MIKI - 35.2670012825,32.5856881598,35.3105702702,32.6300363309 - 11111111-1111-1111-1111-111111111111 - srtm100 - DTM - 1 - - - 1 - Israel - UNDEFINED - 2022-06-15 - 2022-06-15 - 4326 - WGS84GEO - RECORD_DEM - - 32.5856881598 35.2670012825 - 32.6300363309 35.3105702702 - - - - -``` -
- -:::info -**Authentication must be integrated in order to communicate with Catalog services.**
-**See the principles [here](/docs/MapColonies/authentication)** -::: - -## Get DEM metadata (Step 2) -In the Response, look for desired data according to profile definition. - -## Get terrain provider URI (Step 2.1, optional) -In the Response, look for - -```xml title="Extract link for terrain provider" - - http://terrain-server.com/terrains/srtm100 - -``` - -:::info -**You should extract the `` element value as TERRAIN_URL variable, which is a terrain provider consumption URL for the following steps.** -::: - -## Using catalog data (Step 3) -In the future, you'll be able to export catalog data( elevation raw data in TIFF format ) after filtering. - -## Construct Client (Step 3.1) -Now, after you got all product metadata that you need by querying our Catalog, lets actually use it in your client application. - -:::warning -**Below examples are based on `Pseudo code`, you will have to adapt it in your own application to make it work.** -::: - -### Cesium - -:::info -**The minimum required version for cesium is v84.** -::: - -```javascript -// **Optional** add to Cesium terrain provider in order to clamp 3d models to the ground or investigate terrain -viewer.terrainProvider = new Cesium.TerrainProvider({ - url: new Cesium.Resource({ - url: "", - queryParameters: { - "token": "", - }, - }), -}); -... -``` -Replace `` with the URL link that you got from **Step 2.1 (optional)**. - -Replace `` with the token you have. diff --git a/docs/MapColonies/DEM/Guides/height_extraction.md b/docs/MapColonies/DEM/Guides/height_extraction.md new file mode 100644 index 0000000000..47b91257f3 --- /dev/null +++ b/docs/MapColonies/DEM/Guides/height_extraction.md @@ -0,0 +1,967 @@ +--- +id: height-extraction +slug: height-extraction +title: Height Extraction +tags: + - guide + - DEM + - DTM + - DSM + - getting-started +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## Step by step guide +The following guide will help you understand ***Step-by-step*** how to work with the Map Colonies Height Extraction service, from the [Catalog](/docs/MapColonies/DEM/Services/catalog/dem-catalog) to the WCS protocol. + +:::warning +This guide is intended for algorithmic design, not visual presentation. +::: + +:::warning +**Any** request to our services should include a `token` as a form of [authentication](/docs/MapColonies/authentication). +::: + +:::note +Please note the [obligations](/docs/MapColonies/obligations) you need to follow while using our services. +::: + +## Flow diagram +```mermaid +flowchart LR + subgraph sub1 [Prerequisites] + direction LR + a1[Define filter] + a2[Get Auth Token] + end + + c[Step 1
Catalog] --> d + d[Step 2
Get Capabilities] --> e + e[Step 2
Describe Coverage] --> f + f[Step 3
Get Coverage] + + sub1 -- request --> c + c -- Metadata --> e + c -- Metadata --> f +``` + +## Query the DEM catalog (Step 1) + +Query the **DEM catalog** service to find item(s) according to a desired filter [examples are here](/docs/ogc/protocols/ogc-csw/ogc-csw-examples). + +Filter should be based on fields in the [DEM profile](/docs/MapColonies/DEM/Services/catalog/dem-catalog-profile-v2). + + + +When we want to get all of the records in the catalog we can make the following query: + +```bash +curl --location --request POST '{DEM_CATALOG_SERVICE_URL}/csw?token=' \ +--header 'Content-Type: application/xml' \ +--data-raw ' + + + full + +' +``` + +
+ Response + ```xml + + + + + + 2019-12-31T11:00:00Z + 2019-12-31T11:00:00Z + Area + 0 + FLOAT32 + + {"type":"Polygon","coordinates":[[[0,0],[10,0],[10,10],[0,0]]]} + Orthometric + 5773 + EGM96 + e2d812ba-40b7-4dfe-b3e7-869356467d3a + 2025-12-31T10:17:16Z + 2020-12-31T11:00:00Z + {WCS_SERVICE_URL}/wcs?request=GetCapabilities + {WCS_SERVICE_URL}/wcs + {WFS_SERVICE_URL}/wfs?request=GetCapabilities + {DOWNLOAD_SERVICE_URL}/path/to/file.ext + 2 + 6 + 4 + 0.0004 + 40 + 1 + 5 + 3 + 0.0004 + 40 + -32768 + PRODUCER + product + product + DSM + 1 + region + sensors + 4326 + WGS84GEO + RECORD_DEM + 2020-12-31T11:00:00Z + + 0.0 0.0 + 10.0 10.0 + + + + + ``` +
+
+ + +To fetch a specific layer you need the following values: +1. `productId` +2. `productType` + +Usually you make this kind of request when you know there's a specific product that you want. + +When you have these values in hand you can make a `POST` request to `{DEM_CATALOG_SERVICE_URL}/csw` with the following body (replace `productId` and `productType` with real values): +```bash +curl --location --request POST '{DEM_CATALOG_SERVICE_URL}/csw?token=' \ +--header 'Content-Type: application/xml' \ +--data-raw ' + + + full + + + + + mc:productId + product + + + mc:productType + DSM + + + + + +' +``` + +
+ Response + ```xml + + + + + + 2019-12-31T11:00:00Z + 2019-12-31T11:00:00Z + Area + 0 + FLOAT32 + + {"type":"Polygon","coordinates":[[[0,0],[10,0],[10,10],[0,0]]]} + Orthometric + 5773 + EGM96 + e2d812ba-40b7-4dfe-b3e7-869356467d3a + 2025-12-31T10:17:16Z + 2020-12-31T11:00:00Z + {WCS_SERVICE_URL}/wcs?request=GetCapabilities + {WCS_SERVICE_URL}/wcs + {WFS_SERVICE_URL}/wfs?request=GetCapabilities + {DOWNLOAD_SERVICE_URL}/path/to/file.ext + 2 + 6 + 4 + 0.0004 + 40 + 1 + 5 + 3 + 0.0004 + 40 + -32768 + PRODUCER + product + product + DSM + 1 + region + sensors + 4326 + WGS84GEO + RECORD_DEM + 2020-12-31T11:00:00Z + + 0.0 0.0 + 10.0 10.0 + + + + + ``` +
+
+ +Fetch all products with productType DTM. +```bash +curl --location --request POST '{DEM_CATALOG_SERVICE_URL}/csw?token=' \ +--header 'Content-Type: application/xml' \ +--data-raw ' + + + full + + + + mc:productType + DTM + + + + +' +``` + +
+ Response + ```xml + + + + + + 2024-12-31T11:00:00Z + 2024-12-31T11:00:00Z + Area + 0 + FLOAT32 + {"type":"Polygon","coordinates":[[[0,0],[10,0],[10,10],[0,0]]]} + Orthometric + 5773 + EGM96 + d2d812ba-40b7-4dfe-b3e7-869356467d3a + 2025-12-31T09:55:51Z + 2025-12-31T11:00:00Z + {WCS_SERVICE_URL}/wcs?request=GetCapabilities + {WCS_SERVICE_URL}/wcs + {WFS_SERVICE_URL}/wfs?request=GetCapabilities + {DOWNLOAD_SERVICE_URL}/path/to/file.ext + 2 + 6 + 4 + 0.0004 + 40 + 1 + 5 + 3 + 0.0004 + 40 + -32768 + PRODUCER + srtm30 + srtm30 + DTM + 1 + region + sensors + 4326 + WGS84GEO + RECORD_DEM + 2025-12-31T11:00:00Z + + 0.0 0.0 + 10.0 10.0 + + + + + ``` +
+
+ +Fetch all products with productType DTM and contained in a given BBOX. +```bash +curl --location --request POST '{DEM_CATALOG_SERVICE_URL}/csw?token=' \ +--data-raw ' + + + full + + + + + mc:productType + DTM + + + ows:BoundingBox + + -10 -10 + 20 20 + + + + + + +' +``` + + +Fetch all products with productType DTM and intersect with a given Polygon. +:::info +A polygon must contain **at least 4 points**, where the first and last point are identical (a closed ring). Any number of additional points is allowed. + +Coordinates go in a single space-separated `gml:posList`, in **latitude longitude** order for `EPSG:4326`. The GML2 form (`gml:outerBoundaryIs` / `gml:coordinates`) is not supported. +::: +```bash +curl --location --request POST '{DEM_CATALOG_SERVICE_URL}/csw?token=' \ +--data-raw ' + + + full + + + + + mc:productType + DTM + + + ows:BoundingBox + + + + + [COORD1_LAT] [COORD1_LON] [COORD2_LAT] [COORD2_LON] [COORD3_LAT] [COORD3_LON] ... [COORDN_LAT] [COORDN_LON] [COORD1_LAT] [COORD1_LON] + + + + + + + + + +' +``` + + +Fetch all products with productType DTM that intersect with a given Point. +```bash +curl --location '{DEM_CATALOG_SERVICE_URL}/csw?token=' \ +--data ' + + + full + + + + + mc:productType + DTM + + + ows:BoundingBox + + 5 5 + + + + + + +' +``` + +
+ +Notice the attributes `startPosition` and `maxRecords`, both of them help us to implement the `pagination` concept. In result, we get the following attributes in the response: + +- `numberOfRecordsMatched` indicating the total amount of records in the catalog matching our filters +- `numberOfRecordsReturned` indicating the amount of records returned for this request (may be less than `maxRecords` given in the request) +- `nextRecord` the value that should be passed for `startPosition` in the following request + +In case we are fetching the full profile without any filters our next request should look like this: + +```bash +curl --location --request POST '{DEM_CATALOG_SERVICE_URL}/csw?token=' \ +--header 'Content-Type: application/xml' \ +--data-raw ' + + + full + +' +``` + +## Get metadata (Step 2) + +In the Response, look for desired data according to profile definition. + +For the next steps you may want to examine the information returned from the `catalog` and extraction service additional requests in order to make calculated decisions about which `product` to use. + +### Catalog service + +:::info +For details about each field read more [here](/docs/MapColonies/DEM/Services/catalog/dem-catalog-profile-v2). +::: + +Fields you may want to filter by: +| **Field name / Partial name** | **Filter purpose** | +| ----------- | ----------- | +| footprint | Specific geographical area | +| ...Accuracy... | | +| ...Resolution... | Min and Max resolution | +| productType | Specific product type (for example: only DTM) | +| srsId / srsName | Wanted horizontal SRS | +| verticalSrsId / verticalSrsName | Wanted vertical SRS | +| verticalType | Orthometric / Ellipsoidal heights | +| ingestionDateUTC | Layers that were ingested before / after a given time | +| updateDateUTC | Layers that were updated before / after a given time | + +### Extraction service capabilities {#capabilities} + +:::info +Read more about this request [here](/docs/ogc/protocols/ogc-wcs#getcapabilities). +::: + +```bash +{WCS_SERVICE_URL}/wcs?request=GetCapabilities&token= +``` + +
+ Response + ```xml + + + + + + urn:ogc:service:wcs + 2.0.1 + 1.1.1 + 1.1.0 + http://www.opengis.net/spec/WCS/2.0/conf/core + http://www.opengis.net/spec/WCS_protocol-binding_get-kvp/1.0.1 + http://www.opengis.net/spec/WCS_protocol-binding_post-xml/1.0 + http://www.opengis.net/spec/WCS_service-extension_crs/1.0/conf/crs-gridded-coverage + + + + http://www.opengis.net/spec/GMLCOV/1.0/conf/gml-coverage + http://www.opengis.net/spec/GMLCOV/1.0/conf/special-format + http://www.opengis.net/spec/GMLCOV/1.0/conf/multipart + http://www.opengis.net/spec/WCS_service-extension_scaling/1.0/conf/scaling + http://www.opengis.net/spec/WCS_service-extension_crs/1.0/conf/crs + http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/interpolation + http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/interpolation-per-axis + http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/nearest-neighbor + http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/linear + http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/cubic + http://www.opengis.net/spec/WCS_service-extension_range-subsetting/1.0/conf/record-subsetting + NONE + NONE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XML + + + + + application/gml+xml + image/jpeg + image/png + image/tiff + image/tiff;application=geotiff + text/plain + + + ... + http://www.opengis.net/def/crs/EPSG/0/3857 + ... + http://www.opengis.net/def/crs/EPSG/0/4326 + ... + http://www.opengis.net/def/crs/EPSG/0/32600 + http://www.opengis.net/def/crs/EPSG/0/32601 + http://www.opengis.net/def/crs/EPSG/0/32602 + http://www.opengis.net/def/crs/EPSG/0/32603 + http://www.opengis.net/def/crs/EPSG/0/32604 + http://www.opengis.net/def/crs/EPSG/0/32605 + http://www.opengis.net/def/crs/EPSG/0/32606 + http://www.opengis.net/def/crs/EPSG/0/32607 + http://www.opengis.net/def/crs/EPSG/0/32608 + http://www.opengis.net/def/crs/EPSG/0/32609 + http://www.opengis.net/def/crs/EPSG/0/32610 + http://www.opengis.net/def/crs/EPSG/0/32611 + http://www.opengis.net/def/crs/EPSG/0/32612 + http://www.opengis.net/def/crs/EPSG/0/32613 + http://www.opengis.net/def/crs/EPSG/0/32614 + http://www.opengis.net/def/crs/EPSG/0/32615 + http://www.opengis.net/def/crs/EPSG/0/32616 + http://www.opengis.net/def/crs/EPSG/0/32617 + http://www.opengis.net/def/crs/EPSG/0/32618 + http://www.opengis.net/def/crs/EPSG/0/32619 + http://www.opengis.net/def/crs/EPSG/0/32620 + http://www.opengis.net/def/crs/EPSG/0/32621 + http://www.opengis.net/def/crs/EPSG/0/32622 + http://www.opengis.net/def/crs/EPSG/0/32623 + http://www.opengis.net/def/crs/EPSG/0/32624 + http://www.opengis.net/def/crs/EPSG/0/32625 + http://www.opengis.net/def/crs/EPSG/0/32626 + http://www.opengis.net/def/crs/EPSG/0/32627 + http://www.opengis.net/def/crs/EPSG/0/32628 + http://www.opengis.net/def/crs/EPSG/0/32629 + http://www.opengis.net/def/crs/EPSG/0/32630 + http://www.opengis.net/def/crs/EPSG/0/32631 + http://www.opengis.net/def/crs/EPSG/0/32632 + http://www.opengis.net/def/crs/EPSG/0/32633 + http://www.opengis.net/def/crs/EPSG/0/32634 + http://www.opengis.net/def/crs/EPSG/0/32635 + http://www.opengis.net/def/crs/EPSG/0/32636 + http://www.opengis.net/def/crs/EPSG/0/32637 + http://www.opengis.net/def/crs/EPSG/0/32638 + http://www.opengis.net/def/crs/EPSG/0/32639 + http://www.opengis.net/def/crs/EPSG/0/32640 + http://www.opengis.net/def/crs/EPSG/0/32641 + http://www.opengis.net/def/crs/EPSG/0/32642 + http://www.opengis.net/def/crs/EPSG/0/32643 + http://www.opengis.net/def/crs/EPSG/0/32644 + http://www.opengis.net/def/crs/EPSG/0/32645 + http://www.opengis.net/def/crs/EPSG/0/32646 + http://www.opengis.net/def/crs/EPSG/0/32647 + http://www.opengis.net/def/crs/EPSG/0/32648 + http://www.opengis.net/def/crs/EPSG/0/32649 + http://www.opengis.net/def/crs/EPSG/0/32650 + http://www.opengis.net/def/crs/EPSG/0/32651 + http://www.opengis.net/def/crs/EPSG/0/32652 + http://www.opengis.net/def/crs/EPSG/0/32653 + http://www.opengis.net/def/crs/EPSG/0/32654 + http://www.opengis.net/def/crs/EPSG/0/32655 + http://www.opengis.net/def/crs/EPSG/0/32656 + http://www.opengis.net/def/crs/EPSG/0/32657 + http://www.opengis.net/def/crs/EPSG/0/32658 + http://www.opengis.net/def/crs/EPSG/0/32659 + http://www.opengis.net/def/crs/EPSG/0/32660 + http://www.opengis.net/def/crs/EPSG/0/32661 + http://www.opengis.net/def/crs/EPSG/0/32662 + http://www.opengis.net/def/crs/EPSG/0/32663 + http://www.opengis.net/def/crs/EPSG/0/32664 + http://www.opengis.net/def/crs/EPSG/0/32665 + http://www.opengis.net/def/crs/EPSG/0/32666 + http://www.opengis.net/def/crs/EPSG/0/32667 + http://www.opengis.net/def/crs/EPSG/0/32700 + http://www.opengis.net/def/crs/EPSG/0/32701 + http://www.opengis.net/def/crs/EPSG/0/32702 + http://www.opengis.net/def/crs/EPSG/0/32703 + http://www.opengis.net/def/crs/EPSG/0/32704 + http://www.opengis.net/def/crs/EPSG/0/32705 + http://www.opengis.net/def/crs/EPSG/0/32706 + http://www.opengis.net/def/crs/EPSG/0/32707 + http://www.opengis.net/def/crs/EPSG/0/32708 + http://www.opengis.net/def/crs/EPSG/0/32709 + http://www.opengis.net/def/crs/EPSG/0/32710 + http://www.opengis.net/def/crs/EPSG/0/32711 + http://www.opengis.net/def/crs/EPSG/0/32712 + http://www.opengis.net/def/crs/EPSG/0/32713 + http://www.opengis.net/def/crs/EPSG/0/32714 + http://www.opengis.net/def/crs/EPSG/0/32715 + http://www.opengis.net/def/crs/EPSG/0/32716 + http://www.opengis.net/def/crs/EPSG/0/32717 + http://www.opengis.net/def/crs/EPSG/0/32718 + http://www.opengis.net/def/crs/EPSG/0/32719 + http://www.opengis.net/def/crs/EPSG/0/32720 + http://www.opengis.net/def/crs/EPSG/0/32721 + http://www.opengis.net/def/crs/EPSG/0/32722 + http://www.opengis.net/def/crs/EPSG/0/32723 + http://www.opengis.net/def/crs/EPSG/0/32724 + http://www.opengis.net/def/crs/EPSG/0/32725 + http://www.opengis.net/def/crs/EPSG/0/32726 + http://www.opengis.net/def/crs/EPSG/0/32727 + http://www.opengis.net/def/crs/EPSG/0/32728 + http://www.opengis.net/def/crs/EPSG/0/32729 + http://www.opengis.net/def/crs/EPSG/0/32730 + http://www.opengis.net/def/crs/EPSG/0/32731 + http://www.opengis.net/def/crs/EPSG/0/32732 + http://www.opengis.net/def/crs/EPSG/0/32733 + http://www.opengis.net/def/crs/EPSG/0/32734 + http://www.opengis.net/def/crs/EPSG/0/32735 + http://www.opengis.net/def/crs/EPSG/0/32736 + http://www.opengis.net/def/crs/EPSG/0/32737 + http://www.opengis.net/def/crs/EPSG/0/32738 + http://www.opengis.net/def/crs/EPSG/0/32739 + http://www.opengis.net/def/crs/EPSG/0/32740 + http://www.opengis.net/def/crs/EPSG/0/32741 + http://www.opengis.net/def/crs/EPSG/0/32742 + http://www.opengis.net/def/crs/EPSG/0/32743 + http://www.opengis.net/def/crs/EPSG/0/32744 + http://www.opengis.net/def/crs/EPSG/0/32745 + http://www.opengis.net/def/crs/EPSG/0/32746 + http://www.opengis.net/def/crs/EPSG/0/32747 + http://www.opengis.net/def/crs/EPSG/0/32748 + http://www.opengis.net/def/crs/EPSG/0/32749 + http://www.opengis.net/def/crs/EPSG/0/32750 + http://www.opengis.net/def/crs/EPSG/0/32751 + http://www.opengis.net/def/crs/EPSG/0/32752 + http://www.opengis.net/def/crs/EPSG/0/32753 + http://www.opengis.net/def/crs/EPSG/0/32754 + http://www.opengis.net/def/crs/EPSG/0/32755 + http://www.opengis.net/def/crs/EPSG/0/32756 + http://www.opengis.net/def/crs/EPSG/0/32757 + http://www.opengis.net/def/crs/EPSG/0/32758 + http://www.opengis.net/def/crs/EPSG/0/32759 + http://www.opengis.net/def/crs/EPSG/0/32760 + http://www.opengis.net/def/crs/EPSG/0/32761 + http://www.opengis.net/def/crs/EPSG/0/32762 + http://www.opengis.net/def/crs/EPSG/0/32763 + http://www.opengis.net/def/crs/EPSG/0/32764 + http://www.opengis.net/def/crs/EPSG/0/32765 + http://www.opengis.net/def/crs/EPSG/0/32766 + ... + + + http://www.opengis.net/def/interpolation/OGC/1/nearest-neighbor + http://www.opengis.net/def/interpolation/OGC/1/linear + http://www.opengis.net/def/interpolation/OGC/1/cubic + + + + + + product + + product + WCS + GeoTIFF + + dem__product-DTM + RectifiedGridCoverage + + 473139.25219177455 3230615.3954787063 + 873608.5831505858 3831319.391916923 + + + 32.70697763422942 29.149161895068794 + 37.071150249328454 34.62339561526329 + + + + product + + product + WCS + GeoTIFF + + dem__product-DSM + RectifiedGridCoverage + + 473139.25219177455 3230615.3954787063 + 873608.5831505858 3831319.391916923 + + + 32.70697763422942 29.149161895068794 + 37.071150249328454 34.62339561526329 + + + + srtm30 + + srtm30 + WCS + GeoTIFF + + dem__srtm30-DTM + RectifiedGridCoverage + + 34.716796875 32.16796875 + 35.68359375 32.958984375 + + + 34.716796875 32.16796875 + 35.68359375 32.958984375 + + + + + + ``` +
+ +#### Understanding the capabilities response + +Read more [here](/docs/ogc/protocols/ogc-wcs#understanding-capabilities). + +### Extraction service coverage metadata + +:::info +Read more about this request [here](/docs/ogc/protocols/ogc-wcs#describecoverage). +::: + +For this step we need the `coverageId` of a product we selected from the previous steps. The wanted ID should look like this: `-`. + +:::info +The WCS service accepts the `coverageId` with or without the internal workspace prefix, but the prefix form differs by WCS version: `dem:srtm30-DTM` works in both 1.0.0 and 2.0.1, and 2.0.1 also accepts `dem__srtm30-DTM`. The examples in this guide use the un-prefixed form, which works in both versions. +::: + +Lets select the product `srtm30`, this means our ID will be `srtm30-DTM` and our request will be: + +```bash +curl --location --request GET '{WCS_SERVICE_URL}/wcs?request=DescribeCoverage&version=2.0.1&coverageId=srtm30-DTM&token=' +``` + +
+ Response + ```xml + + + + Generated from GeoTIFF + srtm30-DTM + + + 32.16796875 34.716796875 + 32.958984375 35.68359375 + + + dem__srtm30-DTM + + + Linear + 0 0 + + + + + + srtm30-DTM + WCS + GeoTIFF + + + + + + + + 0 0 + 2815 2303 + + + i j + + + 32.95881271362305 34.71696853637695 + + + 0.0 3.4332275390625E-4 + -3.4332275390625E-4 0.0 + + + + + + + GRAY_INDEX + + + -32768.0 + + + + + + -32768 32767 + + + + + + + + RectifiedGridCoverage + image/tiff + + + + ``` +
+ +You should save the `srsName`, `axisLabels` and `srsDimension` attributes from the `gml:Envelope` element for [step 3](#get-coverage). These describe how to compose `subset=` parameters and what CRS the coverage is natively stored in (see examples). + +#### Understanding the extraction service coverage metadata + +Read more [here](/docs/ogc/protocols/ogc-wcs#understanding-describe-coverage). + +## Request elevation data (Step 3) {#get-coverage} + +Now we can actually make a request for elevation data. + +:::danger +We recommend you don't use the following `query parameters` when making requests: +- `scaleSize` +- `scaleFactor` +- `scaleAxes` +- `outputCRS` +- `interpolation` + +These parameters require additional calculations on the server-side which means that the original data is changed on-the-fly resulting in new data with different attributes such as `resolution` or `accuracy`. +**Any** use of these parameters is the sole responsibility of the user as we cannot know the resulting requests metadata. +::: + +For all of the examples in this section we need the following parameters: +- `coverageId` + +In the examples we show the use of specific parameter values, to see what other values you can use, review the [service capabilities](#capabilities). + +### Get whole coverage + +:::warning +To maintain system stability and prevent oversized payloads, the service enforces a **maximum output size limit**. Exceeding this limit will trigger the following error: + +```xml + + + + This request is trying to generate too much data, the limit is 1500MB but the actual amount of bytes to be written in the output is 5000MB + + +``` + +Most coverages will be larger than the limit so we suggest you [directly download](/docs/MapColonies/DEM/Services/download/dem-download) the source file. +::: + +Here we request the whole coverage in the `geotiff` format. + +```bash +curl --location '{WCS_SERVICE_URL}/wcs?request=GetCoverage&version=2.0.1&coverageId=srtm30-DTM&format=image/tiff;application=geotiff&token=' +``` + +### Get by BBOX + +In most cases, we know which geographical area is of significance to us. This means that we can request the specific `BBOX` as a subset of the selected `coverage`. + +For example, given a coverage with the following extent: +```xml + + 32.16796875 34.716796875 + 32.958984375 35.68359375 + +``` + +- `srsDimension="2"` tells you the coverage has 2 axes — you'll need one `subset=` per axis. +- `axisLabels="Lat Long"` gives you the axis names to use in the request: `subset=Lat(...)&subset=Long(...)`. +- `srsName="http://www.opengis.net/def/crs/EPSG/0/4326"` is the native CRS — the coordinates inside `subset=` must be expressed in this CRS, and the corner values above bound the valid range. + +This produces a `GetCoverage` request like: +```bash +curl --location --request GET '{WCS_SERVICE_URL}/wcs?request=GetCoverage&version=2.0.1&coverageId=srtm30-DTM&format=image/tiff;application=geotiff&subset=Lat(32.35306,32.49437)&subset=Long(35.13102,35.37051)&token=' +``` + +### Convert to other CRS + +In some situations we will have data in a geographical area in a different CRS than we expect for our calculations. In this case we can ask the service to convert the output to the wanted CRS. + +Here we are making a request to a coverage in `EPSG:4326` and requesting it in `EPSG:3857`: + +```bash +curl --location '{WCS_SERVICE_URL}/wcs?request=GetCoverage&version=2.0.1&coverageId=srtm30-DTM&format=image/tiff;application=geotiff&outputCRS=EPSG:3857&token=' +``` + +### Scale image size (pixels) + + + +Set the output image to be a fixed amount of pixels. +```bash +curl --location '{WCS_SERVICE_URL}/wcs?request=GetCoverage&version=2.0.1&coverageId=srtm30-DTM&format=image/tiff;application=geotiff&scaleSize=i(256),j(256)&token=' +``` + + +Set the output image size to be a certain factor from its original size. +```bash +curl --location '{WCS_SERVICE_URL}/wcs?request=GetCoverage&version=2.0.1&coverageId=srtm30-DTM&format=image/tiff;application=geotiff&scaleFactor=0.1&token=' +``` + + +Set the output image size to be a certain factor from its original size for each axis. +```bash +curl --location '{WCS_SERVICE_URL}/wcs?request=GetCoverage&version=2.0.1&coverageId=srtm30-DTM&format=image/tiff;application=geotiff&scaleAxes=i(0.1),j(0.2)&token=' +``` + + + +### Change interpolation method + +There is an option to set the wanted interpolation method. +To see a full list of the available methods see the [capabilities](#capabilities). + +:::note +The default method is `linear`. +::: + +```bash +curl --location '{WCS_SERVICE_URL}/wcs?request=GetCoverage&version=2.0.1&coverageId=srtm30-DTM&format=image/tiff;application=geotiff&interpolation=http://www.opengis.net/def/interpolation/OGC/1/nearest-neighbor&token=' +``` diff --git a/docs/MapColonies/DEM/Guides/terrain_provider.md b/docs/MapColonies/DEM/Guides/terrain_provider.md new file mode 100644 index 0000000000..bad6cd8ed6 --- /dev/null +++ b/docs/MapColonies/DEM/Guides/terrain_provider.md @@ -0,0 +1,181 @@ +--- +id: terrain-provider +slug: terrain-provider +title: Terrain Provider +tags: + - guide + - DEM + - DTM + - DSM + - terrain + - getting-started +--- + +## Step by step guide +The following guide will help you understand, ***Step-by-step*** how to add a `terrain provider` to your application. + +## Flow diagram +```mermaid +flowchart LR + subgraph Prerequisite + direction LR + a1[Define filter] + a2[Get Auth Token] + end + + a1 -- filter --> B[STEP 1
Query CSW catalog] + a2 -- token --> B + subgraph Metadata drill-down + direction LR + c1[STEP 2
Get DEM metadata] + c2[STEP 2.1 optional
Get terrain provider URI] + end + B -- xml --> c1 + B -- xml --> c2 + c1 -. IN DEVELOPMENT
metadata
of available for export data .-> E[STEP 3
Your system] + c2 -- terrain_URI --> D[STEP 3.1
Cesium] + + linkStyle 4 color:green,stroke:#f4cccc,stroke-width:5px %% Arrow +``` + +## Query CSW catalog (Step 1) + +:::info + +The terrain provider link is available in both the `3D catalog` and the `DEM catalog`. + +::: + +:::info + +**Authentication must be integrated in order to communicate with Catalog services.**
+**See the principles [here](/docs/MapColonies/authentication)** + +::: + +Query **3D CSW catalog** service to find item(s) according to desired filter [examples are here](/docs/ogc/protocols/ogc-csw/ogc-csw-examples). + +Filter should be based on [3D profile](/docs/MapColonies/3D/services/catalog/catalog-profile-v2). + +```xml title="GetRecords Request For Terrain" +POST Request + +url: +'<3D_CATALOG_SERVICE_URL>/csw' + +body (XML): + + + + full + + + + + + mc:productType + + + + QuantizedMeshDTMBest + + + + + + + +``` + +You will get GetRecords XML Response with product **metadata**. + +
+ Response example + +```xml title="Search Results Example" + + + + + + 4.0 + 5 + 2022-10-24 + {"type":"Polygon","coordinates":[[[34.98,32.8],[35.1,32.8],[35.1,32.7],[34.98,32.7],[34.98,32.8]]]} + North + 999.0 + 33333333-3333-3333-3333-333333333333 + 2022-10-24 + https://tiles.mapcolonies.net/api/dem/v1/terrains/srtm100 + producer + 35.2670012825,32.5856881598,35.3105702702,32.6300363309 + 33333333-3333-3333-3333-333333333333 + srtm100 + + PUBLISHED + QuantizedMeshDTMBest + 1 + + 1 + region + UNDEFINED + 2022-10-24 + 2022-10-24 + 4326 + WGS84GEO + RECORD_3D + 2022-10-25T16:48:17Z + + 32.7 34.98 + 32.8 35.1 + + + + +``` +
+ +## Get terrain metadata (Step 2) +In the Response, look for desired data according to profile definition. + +## Get terrain provider URI (Step 2.1) {#step-2.1} +In the Response, look for a `link` tag with `scheme="TERRAIN_QMESH"`, this will be the link you need to get the data. + +For our case: + +```xml title="Extract link for terrain provider" + + {TERRAIN_URL}/terrains/srtm100 + +``` + +Save the value as `TERRAIN_URL` for the next steps. + +## Construct Client (Step 3) +Now let's see how we can load the provider in our application. + +:::warning +**Below examples are based on `Pseudo code`, you will have to adapt it in your own application to make it work.** +::: + +### Cesium + +:::info +**The minimum required version for cesium is v1.104.** +::: + +```javascript +// **Optional** add to Cesium terrain provider in order to clamp 3d models to the ground or investigate terrain +viewer.terrainProvider = await Cesium.CesiumTerrainProvider.fromUrl( + new Cesium.Resource({ + url: "{TERRAIN_URL}", + queryParameters: { + "token": "{token}", + }, + }), +); +... +``` +Replace `{TERRAIN_URL}` with the URL link that you got from **[Step 2.1](#step-2.1)**. + +Replace `{token}` with the token we provided you. diff --git a/docs/MapColonies/DEM/Services/CesiumTerrainProvider/README.md b/docs/MapColonies/DEM/Services/CesiumTerrainProvider/README.md index f5905dd6af..8166228e7a 100644 --- a/docs/MapColonies/DEM/Services/CesiumTerrainProvider/README.md +++ b/docs/MapColonies/DEM/Services/CesiumTerrainProvider/README.md @@ -102,23 +102,25 @@ Create an instance of `Cesium.CesiumTerrainProvider`, providing the base `URL` o ```js // A new CesiumTerrainProvider instance. -const terrainProvider = new Cesium.CesiumTerrainProvider({ - url: 'https://your.custom.terrain.server/path/to/tiles/', // CRITICAL: This URL must be replaced with the actual URL of the custom Quantized Mesh terrain server. - requestVertexNormals: false, // Optional: The fetching of vertex normals is to be enabled for enhanced lighting. - requestWaterMask: false // Optional: The fetching of water masks is to be enabled for accurate water rendering. -}); +const terrainProvider = await Cesium.CesiumTerrainProvider.fromUrl( + 'https://your.custom.terrain.server/path/to/tiles/', // CRITICAL: This URL must be replaced with the actual URL of the custom Quantized Mesh terrain server. + { + requestVertexNormals: false, // Optional: The fetching of vertex normals is to be enabled for enhanced lighting. + requestWaterMask: false // Optional: The fetching of water masks is to be enabled for accurate water rendering. + } +); ``` :::info *Critical Considerations Pertaining to the url Parameter* The url parameter must unequivocally designate the root directory of the terrain tile service. The `CesiumTerrainProvider` internally constructs the complete path to individual tiles (e.g. level/x/y.terrain) based upon this foundational URL. -Get the URL for the terrain server from the catalog, details [here](../../Guides/DEM_getting_started.md#query-csw-catalog-step-1) +Get the URL for the terrain server from the catalog, details [here](../../Guides/terrain-provider#query-csw-catalog-step-1) ::: ### Assigning the Terrain Provider -Assign the newly created terrainProvider instance to the `terrainProvider` property of the `viewer.scene` object. This action directs `Cesium.js` to utilize the specified Quantized Mesh data source for the rendering of the globe's terrain. +Assign the newly created terrainProvider instance to the `terrainProvider` property of the `viewer` object. This action directs `Cesium.js` to utilize the specified Quantized Mesh data source for the rendering of the globe's terrain. ```js // Assign the custom terrain provider to the viewer's scene. @@ -166,20 +168,30 @@ Refer down in the example down blow for cesium query / header mapcolonies' token // Create the CesiumTerrainProvider instance, referencing the custom Quantized Mesh server. // CRITICAL: The placeholder 'https://your.custom.terrain.server/path/to/tiles/' must be substituted with the actual URL from MapColonies 3D / DEM Catalog! - const terrainProvider = new Cesium.CesiumTerrainProvider({ - url: 'https://your.custom.terrain.server/path/to/tiles/', - // url:new Cesium.Resource({ - // url: '', + Cesium.CesiumTerrainProvider.fromUrl( + 'https://your.custom.terrain.server/path/to/tiles/', + // new Cesium.Resource({ + // url: '', // headers: { 'x-api-key': MAPCOLONIES_TOKEN }, // choose either header or query // queryParameters: { 'token': MAPCOLONIES_TOKEN }, // choose either header or query - //}), - requestVertexNormals: true, // Vertex normals are to be requested for enhanced lighting and shading. - requestWaterMask: true // Water masks are to be requested for accurate water rendering effects. + // }), + { + requestVertexNormals: true, // Vertex normals are to be requested for enhanced lighting and shading. + requestWaterMask: true // Water masks are to be requested for accurate water rendering effects. + } + ).then(function(terrainProvider) { + // Assign the custom terrain provider to the viewer. + viewer.terrainProvider = terrainProvider; + + // Add robust error handling for terrain loading. + // The errorEvent is dispatched if issues arise during the fetching or parsing of terrain tiles. + terrainProvider.errorEvent.addEventListener(function(error) { + console.error('An error was encountered during terrain loading:', error); + }); + }).catch(function(error) { + console.error('CesiumTerrainProvider initialization failed', error); }); - // Assign the custom terrain provider to the viewer's scene. - viewer.terrainProvider = terrainProvider; - // Optional: The camera may be programmatically directed to a specific geographic location // to immediately showcase the loaded terrain. viewer.camera.flyTo({ @@ -191,22 +203,6 @@ Refer down in the example down blow for cesium query / header mapcolonies' token }, duration: 3 // Duration of the flight in seconds }); - - // Add robust error handling for terrain loading. - // The errorEvent is dispatched if issues arise during the fetching or parsing of terrain tiles. - terrainProvider.errorEvent.addEventListener(function(error) { - console.error('An error was encountered during terrain loading:', error); - // In a production environment, consider using a more user-friendly message - // or attempting to utilize a fallback terrain provider. - }); - - // Optional: A listener may be added for the event signifying the readiness of the terrain provider. - // This is beneficial for executing actions only subsequent to the commencement of terrain data loading. - terrainProvider.readyPromise.then(function() { - console.log('CesiumTerrainProvider is ready and terrain loading has started.'); - }).otherwise(function(error) { - console.error('CesiumTerrainProvider initialization failed', error); - }); diff --git a/docs/MapColonies/DEM/Services/catalog/profile_v1_0.md b/docs/MapColonies/DEM/Services/catalog/profile_v1_0.md index 57156bed19..29ea865afd 100644 --- a/docs/MapColonies/DEM/Services/catalog/profile_v1_0.md +++ b/docs/MapColonies/DEM/Services/catalog/profile_v1_0.md @@ -1,6 +1,6 @@ --- id: dem-profile-v1 -slug: catalog-profile-v1 +slug: dem-catalog-profile-v1 description: v1 Profile title: Profile v1 tags: @@ -15,37 +15,43 @@ tags: 2. **main_namespace** = `http://schema.mapcolonies.com/dem` 3. The **DEM** sub-system Catalog profile fields with information of each of them: -| **PYCSW Queryable/XML
Element Name** | **Type** | **Description** | -| ----------- | ----------- | ----------- | -| mc:id | text | unique internal catalog item id | -| mc:productId | text | unique external product id | -| mc:productName | text | the product name | -| [mc:productType](#productType) | enum | **Valid Values**:
DTM / DSM / QuantizedMesh / QuantizedMeshDTMBest / QuantizedMeshDSMBest | -| mc:description | text | the product description | -| mc:imagingTimeBeginUTC | date | start imaging date of raw product
supported format: **dd/mm/yyyy (not later than "End date")** | -| mc:imagingTimeEndUTC | date | end imaging date of raw product
supported format: **dd/mm/yyyy (not earlier than "Begin date")** | -| mc:resolutionDeg | double | the product resolution in degrees
double unsigned valid: **0.00000009 to 0.072** | -| mc:resolutionMeter | double | the product resolution in meters
double unsigned valid: **0.01 to 8000** | -| mc:absoluteAccuracyLEP90 | double | LEP90 maximum absolute vertical plane accuracy range in meters | -| mc:relativeAccuracyLEP90 | double | LEP90 maximum relative vertical plane accuracy range in meters | -| mc:sensors | text | list of sensors used as a source for the product
comma separated list | -| mc:layerPolygonParts | geojson | polygons of the discrete parts (versions) and the list of layers in the best converted to Geojson | -| mc:footprint | geojson | geographical delineation of the product / model trace | -| mc:heightRangeFrom | double | **minimum** height range in Meters (not greater than "heightRangeTo")
valid: **-500 to 9000** | -| mc:heightRangeTo | double | **maximum** height range in Meters (not less than "heightRangeFrom")
valid: **-500 to 9000** | -| mc:SRS | int | reference System ID (EPSG),
ex: 4326 / 3857 | -| mc:SRSName | text | name of reference system | -| mc:verticalDatum | enum | **Valid Values**:
WGS 1984 / WGS 1972 / Pulkovo 1942 / Palestine 1923 / MSL Height / Israel / ED 1950 IDF | -| mc:region | text | sector / countries
comma separated list | -| mc:classification | enum | product classification / confidentiality
Classification values | -| mc:producerName | text | manufacturer / organization that produced / supplied the product | -| mc:units | enum | **Valid Values**:
METER / DD / DMS / ARC_SECONDS / UNKNOWN | -| mc:geographicArea | text | geographic area cities | -| mc:undulationModel | enum | **Valid Values**:
MSL EGM96 / MSL EGM2008 / MSL DMA10 / ILUM | -| mc:dataType | enum | **Valid Values**:
FLOAT64 / FLOAT32 / FLOAT16 / INT64 / INT32 / INT16 / INT8 | -| mc:noDataValue | enum | **Valid Values**:
-32768 / -326767 / -999 | -| mc:productBBox | text | the bounding box of the product minX,minY,maxX,maxY | -| mc:insertDate | date | the date when item was added to catalog | -| mc:keywords | text | list of key words relevant for product | -| mc:updateDateUTC | date | date the record got and update in catalog
supported format: **dd/mm/yyyy** | -| mc:type | enum | type of the catalog
**Valid values**: RECORD_RASTER / RECORD_3D / RECORD_DEM
default: ***RECORD_DEM***| +:::warning +New version [v2](/docs/MapColonies/DEM/Services/catalog/dem-catalog-profile-v2) is coming! + +**Changes in next version** column: 🗑️ removed in v2, blank = unchanged. +::: + +| **Changes in next version** | **PYCSW Queryable/XML
Element Name** | **Type** | **Description** | +| ----------- | ----------- | ----------- | ----------- | +| | mc:id | text | unique internal catalog item id | +| | mc:productId | text | unique external product id | +| | mc:productName | text | the product name | +| | mc:productType | enum | **Valid Values**:
DTM / DSM / QuantizedMesh / QuantizedMeshDTMBest / QuantizedMeshDSMBest | +| | mc:description | text | the product description | +| 🗑️ | mc:imagingTimeBeginUTC | date | start imaging date of raw product
supported format: **dd/mm/yyyy (not later than "End date")** | +| 🗑️ | mc:imagingTimeEndUTC | date | end imaging date of raw product
supported format: **dd/mm/yyyy (not earlier than "Begin date")** | +| 🗑️ | mc:resolutionDeg | double | the product resolution in degrees
double unsigned valid: **0.00000009 to 0.072** | +| 🗑️ | mc:resolutionMeter | double | the product resolution in meters
double unsigned valid: **0.01 to 8000** | +| 🗑️ | mc:absoluteAccuracyLEP90 | double | LEP90 maximum absolute vertical plane accuracy range in meters | +| 🗑️ | mc:relativeAccuracyLEP90 | double | LEP90 maximum relative vertical plane accuracy range in meters | +| | mc:sensors | text | list of sensors used as a source for the product
comma separated list | +| 🗑️ | mc:layerPolygonParts | geojson | polygons of the discrete parts (versions) and the list of layers in the best converted to Geojson | +| | mc:footprint | geojson | geographical delineation of the product / model trace | +| 🗑️ | mc:heightRangeFrom | double | **minimum** height range in Meters (not greater than "heightRangeTo")
valid: **-500 to 9000** | +| 🗑️ | mc:heightRangeTo | double | **maximum** height range in Meters (not less than "heightRangeFrom")
valid: **-500 to 9000** | +| 🗑️ | mc:SRS | int | reference System ID (EPSG),
ex: 4326 / 3857 | +| | mc:SRSName | text | name of reference system | +| 🗑️ | mc:verticalDatum | enum | **Valid Values**:
WGS 1984 / WGS 1972 / Pulkovo 1942 / MSL Height / Israel | +| | mc:region | text | sector / countries
comma separated list | +| | mc:classification | enum | product classification / confidentiality
Classification values | +| | mc:producerName | text | manufacturer / organization that produced / supplied the product | +| 🗑️ | mc:units | enum | **Valid Values**:
METER / DD / DMS / ARC_SECONDS / UNKNOWN | +| 🗑️ | mc:geographicArea | text | geographic area cities | +| 🗑️ | mc:undulationModel | enum | **Valid Values**:
MSL EGM96 / MSL EGM2008 / MSL DMA10 / ILUM | +| | mc:dataType | enum | **Valid Values**:
FLOAT64 / FLOAT32 / FLOAT16 / INT64 / INT32 / INT16 / INT8 | +| | mc:noDataValue | enum | **Valid Values**:
-32768 / -326767 / -999 | +| 🗑️ | mc:productBBox | text | the bounding box of the product minX,minY,maxX,maxY | +| | mc:insertDate | date | the date when item was added to catalog | +| | mc:keywords | text | list of key words relevant for product | +| | mc:updateDateUTC | date | date the record got and update in catalog
supported format: **dd/mm/yyyy** | +| | mc:type | enum | type of the catalog
**Valid values**: RECORD_RASTER / RECORD_3D / RECORD_DEM
default: ***RECORD_DEM***| diff --git a/docs/MapColonies/DEM/Services/catalog/profile_v2_0.md b/docs/MapColonies/DEM/Services/catalog/profile_v2_0.md new file mode 100644 index 0000000000..4181052460 --- /dev/null +++ b/docs/MapColonies/DEM/Services/catalog/profile_v2_0.md @@ -0,0 +1,62 @@ +--- +id: dem-profile-v2 +slug: dem-catalog-profile-v2 +description: v2 Profile +title: Profile v2 +tags: + - DEM + - catalog + - v2 +--- + +# DEM Catalog Profile Information + +1. **typename** = `mc:MCDEMRecord` +2. **main_namespace** = `http://schema.mapcolonies.com/dem` +3. The **DEM** sub-system Catalog profile fields with information of each of them: + +:::info +**Changes from last version** column: 🆕 added, blank = unchanged. +::: + +| **Changes from last version** | **PYCSW Queryable/XML
Element Name** | **Type** | **Description** | +| ----------- | ----------- | ----------- | ----------- | +| | mc:id | text | unique internal catalog item id | +| | mc:productId | text | unique external product id | +| | mc:productName | text | the product name | +| | mc:productType | enum | **Valid Values**:
DTM / DSM | +| 🆕 | mc:productSubType | text | additional classification of the product that provides a more specific description within the selected productType | +| 🆕 | mc:productVersion | int | the product version | +| | mc:description | text | the product description | +| | mc:footprint | geojson | geographical delineation of the product / model trace | +| | mc:BoundingBox | bbox | two points that represent the record extent | +| 🆕 | mc:srsId | text | reference system ID (EPSG),
ex: 4326 / 3857 | +| | mc:srsName | text | name of reference system | +| 🆕 | mc:dataType | enum | **Valid Values**:
FLOAT64 / FLOAT32 / FLOAT16 / INT64 / INT32 / INT16 / INT8 | +| | mc:sensors | text | list of sensors used as a source for the product
comma separated list | +| | mc:region | text | sector / countries
comma separated list | +| | mc:insertDateUTC | date | the date when the product was added to catalog
supported format: **dd-mm-yyyyThh:mm:ssZ** | +| | mc:ingestionDateUTC | date | when last was the **data** or **parts** updated
supported format: **dd-mm-yyyyThh:mm:ssZ** | +| | mc:updateDateUTC | date | when last was the MD updated
supported format: **dd-mm-yyyyThh:mm:ssZ** | +| 🆕 | mc:acquisitionTimeBeginUTC | date | Start acquisition time (UTC time) of raw product
Supported format: **dd-mm-yyyyThh:mm:ssZ** | +| 🆕 | mc:acquisitionTimeEndUTC | date | End acquisition time (UTC time) of raw product
Supported format: **dd-mm-yyyyThh:mm:ssZ** | +| 🆕 | mc:minResolutionDegree | double | the product min resolution in degrees | +| 🆕 | mc:maxResolutionDegree | double | the product max resolution in degrees | +| 🆕 | mc:minResolutionMeter | double | the product min resolution in meters | +| 🆕 | mc:maxResolutionMeter | double | the product max resolution in meters | +| 🆕 | mc:minAbsoluteAccuracyLEP90 | double | LEP90 min absolute vertical plane accuracy range in meters | +| 🆕 | mc:maxAbsoluteAccuracyLEP90 | double | LEP90 max absolute vertical plane accuracy range in meters | +| 🆕 | mc:minRelativeAccuracyLEP90 | double | LEP90 min relative vertical plane accuracy range in meters | +| 🆕 | mc:maxRelativeAccuracyLEP90 | double | LEP90 max relative vertical plane accuracy range in meters | +| 🆕 | mc:minHorizontalAccuracyCEP90 | double | | +| 🆕 | mc:maxHorizontalAccuracyCEP90 | double | | +| 🆕 | mc:areaOrPoint | enum | Describes if pixel is “Area” or “Point” | +| 🆕 | mc:links | text | Available links for different services available for the current product | +| | mc:classification | text | product classification / confidentiality
Classification values should be numbers between 0 and 100 | +| | mc:producerName | text | manufacturer / organization that produced / supplied the product | +| | mc:noDataValue | double | **Valid Values**:
-32768 | +| | mc:type | enum | type of the catalog
**Value**: RECORD_DEM | +| | mc:keywords | text | list of key words relevant for product | +| 🆕 | mc:verticalType | enum | **Valid Values**: Orthometric, Ellipsoidal | +| 🆕 | mc:verticalSrsId | text | reference system ID (EPSG),
ex: 5773 / 3855 / 4979 | +| 🆕 | mc:verticalSrsName | text | name of reference system | diff --git a/docs/MapColonies/DEM/Services/download/README.md b/docs/MapColonies/DEM/Services/download/README.md new file mode 100644 index 0000000000..e51eaaaeb9 --- /dev/null +++ b/docs/MapColonies/DEM/Services/download/README.md @@ -0,0 +1,124 @@ +--- +id: dem-download +slug: dem-download +title: Download +tags: + - guide + - DEM + - DTM + - DSM + - download +--- + +## Step by step guide +The following guide will help you understand ***Step-by-step*** how to work with the Map Colonies DEM download service, from the [Catalog](/docs/MapColonies/DEM/Services/catalog/dem-catalog) to the download server. + +:::note +Please note the [obligations](/docs/MapColonies/obligations) you need to follow while using our services. +::: + +:::warning +**Any** request to our services should include a `token` as a form of [authentication](/docs/MapColonies/authentication). +::: + +## Query the DEM catalog (Step 1) + +Query the **DEM catalog** service to find item(s) according to a desired filter [examples are here](/docs/ogc/protocols/ogc-csw/ogc-csw-examples). + +Filter should be based on fields in the [DEM profile](/docs/MapColonies/DEM/Services/catalog/dem-catalog-profile-v2). + +Request example: + +```bash +curl --location --request POST '{DEM_CATALOG_SERVICE_URL}/csw?token=' \ +--header 'Content-Type: application/xml' \ +--data-raw ' + + + full + + + + + mc:productId + product + + + mc:productType + DSM + + + + + +' +``` + +Response: + +```xml + + + + + + 2019-12-31T11:00:00Z + 2019-12-31T11:00:00Z + Area + 0 + FLOAT32 + + {"type":"Polygon","coordinates":[[[0,0],[10,0],[10,10],[0,0]]]} + Orthometric + 5773 + EGM96 + e2d812ba-40b7-4dfe-b3e7-869356467d3a + 2025-12-31T10:17:16Z + 2020-12-31T11:00:00Z + {WCS_SERVICE_URL}/wcs?request=GetCapabilities + {WCS_SERVICE_URL}/wcs + {WFS_SERVICE_URL}/wfs?request=GetCapabilities + {DOWNLOAD_SERVICE_URL}/path/to/file.ext + 2 + 6 + 4 + 0.0004 + 40 + 1 + 5 + 3 + 0.0004 + 40 + -32768 + PRODUCER + product + product + DSM + 1 + region + sensors + 4326 + WGS84GEO + RECORD_DEM + 2020-12-31T11:00:00Z + + 0.0 0.0 + 10.0 10.0 + + + + +``` + +We want to extract the value of the `links` tag with the `scheme=Download` attribute for the next step. + +## Download the source material (Step 2) + +Now we can make a request for the material: +```bash +curl --location '{DOWNLOAD_SERVICE_URL}/path/to/file.ext?token=' +``` + +:::note +Materials may be very large so we suggest you implement a fail-safe strategy and prepare for long download times. +::: diff --git a/docs/MapColonies/Raster/services/catalog/profile_v1_0.md b/docs/MapColonies/Raster/services/catalog/profile_v1_0.md index 3b3109d2b1..d9aeec28f8 100644 --- a/docs/MapColonies/Raster/services/catalog/profile_v1_0.md +++ b/docs/MapColonies/Raster/services/catalog/profile_v1_0.md @@ -17,7 +17,7 @@ tags: :::warning New version [v2](/docs/MapColonies/Raster/services/catalog/raster-catalog-profile-v2) is coming! -

The following parameters are depracted an will be removed in v2

+

The following parameters are deprecated and will be removed in v2

| **PYCSW Queryable/XML
Element Name** | **Type** | **Description** | | ----------- | ----------- | ----------- | diff --git a/docs/MapColonies/obligations.md b/docs/MapColonies/obligations.md index e194fe4482..3e5d64da13 100644 --- a/docs/MapColonies/obligations.md +++ b/docs/MapColonies/obligations.md @@ -7,7 +7,7 @@ tags: - obligations - recommendations - catalog - - catalogue + - catalog - raster - vector - 3d @@ -20,11 +20,11 @@ Here we detail the must-haves for every application that wishes to work with our ## Application Startup -When your application is loaded or refreshed you are required make a request to our `catalogue` services in order to fetch **up-to-date information**. Caching the request may result in errors due to changed metadata and links, new products or even deleted products that don't exist anymore. +When your application is loaded or refreshed you are required make a request to our `catalog` services in order to fetch **up-to-date information**. Caching the request may result in errors due to changed metadata and links, new products or even deleted products that don't exist anymore. ## Catalog items -In order to use our services you are required to go through the catalogue. The `catalogue` is the gateway to many of our services, it details the available `products` and `product metadata` for a particular domain. +In order to use our services you are required to go through the catalog. The `catalog` is the gateway to many of our services, it details the available `products` and `product metadata` for a particular domain. ## Pagination @@ -34,11 +34,11 @@ You should be using `pagination` in order to control the amount of results retur ## Hardcoded Links -We require that you fetch and extract any link that is available in our `catalogue services` through your code.
-Any link that **isn't available** through the catalogue service may be held as an **easily configurable** parameter. +We require that you fetch and extract any link that is available in our `catalog services` through your code.
+Any link that **isn't available** through the catalog service may be held as an **easily configurable** parameter. :::warning -We hold the right to change any link that is available through our catalogue services at any time. +We hold the right to change any link that is available through our catalog services at any time. ::: # Domain specific @@ -68,3 +68,15 @@ If you choose to display [`Elevation`](/docs/MapColonies/DEM/Services/elevation) - `resolutionMeter` - `absoluteAccuracyLEP90` Displaying these fields is critical to ensuring end-users can make informed decisions based on the returned data. + +### Using WCS specific parameters + +We recommend you don't use the following `query parameters` when making requests: +- `scalesize` +- `scaleFactor` +- `scaleAxes` +- `outputCRS` +- `interpolation` + +These parameters require additional calculations on the server-side which means that the original data is changed on-the-fly resulting in new data with different attributes such as `resolution` or `accuracy`. +**Any** use of these parameters is the sole responsibility of the user as we cannot know the resulting requests metadata. diff --git a/docs/ogc/protocols/ogc-wcs.md b/docs/ogc/protocols/ogc-wcs.md index ffc65936ec..76d270b1a7 100644 --- a/docs/ogc/protocols/ogc-wcs.md +++ b/docs/ogc/protocols/ogc-wcs.md @@ -25,10 +25,12 @@ tags: ## GetCapabilities A WCS server responding to a **GetCapabilities** request returns metadata about the service, including supported operations and parameters, and a list of the available layers. +### Version 1.0.0 + ``` -/geoserver/ows? +{WCS_SERVICE_URL}/wcs? service=WCS& -version=2.0.1& +version=1.0.0& request=GetCapabilities ``` @@ -37,315 +39,439 @@ request=GetCapabilities ``` xml title="Response Example" - - - - - urn:ogc:service:wcs - 2.0.1 - 1.1.1 - 1.1.0 - http://www.opengis.net/spec/WCS/2.0/conf/core - http://www.opengis.net/spec/WCS_protocol-binding_get-kvp/1.0.1 - http://www.opengis.net/spec/WCS_protocol-binding_post-xml/1.0 - http://www.opengis.net/spec/WCS_service-extension_crs/1.0/conf/crs-gridded-coverage - http://www.opengis.net/spec/WCS_geotiff-coverages/1.0/conf/geotiff-coverage - http://www.opengis.net/spec/GMLCOV/1.0/conf/gml-coverage - http://www.opengis.net/spec/GMLCOV/1.0/conf/special-format - http://www.opengis.net/spec/GMLCOV/1.0/conf/multipart - http://www.opengis.net/spec/WCS_service-extension_scaling/1.0/conf/scaling - http://www.opengis.net/spec/WCS_service-extension_crs/1.0/conf/crs - http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/interpolation - http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/interpolation-per-axis - http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/nearest-neighbor - http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/linear - http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/cubic - http://www.opengis.net/spec/WCS_service-extension_range-subsetting/1.0/conf/record-subsetting - NONE - NONE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XML - - - - - application/gml+xml - application/x-gzip - image/jpeg - image/png - image/tiff - text/plain - - - http://www.opengis.net/def/crs/EPSG/0/2000 - http://www.opengis.net/def/crs/EPSG/0/100001 - http://www.opengis.net/def/crs/EPSG/0/100002 - http://www.opengis.net/def/crs/EPSG/0/100003 - http://www.opengis.net/def/crs/EPSG/0/900913 - - http://www.opengis.net/def/interpolation/OGC/1/nearest-neighbor - http://www.opengis.net/def/interpolation/OGC/1/linear - http://www.opengis.net/def/interpolation/OGC/1/cubic - - - - - 30n030e_20101117_gmted_min075 - Generated from GeoTIFF - - 30n030e_20101117_gmted_min075 - WCS - GeoTIFF - - dem__30n030e_20101117_gmted_min075 - RectifiedGridCoverage - - 29.999861111111112 29.99986111111111 - 59.999861111111116 49.99986111111111 - - - 29.999861111111112 29.99986111111111 - 59.999861111111116 49.99986111111111 - - - - gt30e020n40 - Generated from GeoTIFF - - gt30e020n40 - WCS - GeoTIFF - - dem__gt30e020n40 - RectifiedGridCoverage - - 20.000000000000004 -9.999999999980012 - 59.99999999998401 39.99999999999999 - - - 20.000000000000004 -9.999999999980012 - 59.99999999998401 39.99999999999999 - - - - n30_e034_1arc_v3 - Generated from GeoTIFF - - n30_e034_1arc_v3 - WCS - GeoTIFF - - dem__n30_e034_1arc_v3 - RectifiedGridCoverage - - 33.99986111111111 29.999861111111112 - 35.000138888888884 31.00013888888889 - - - 33.99986111111111 29.999861111111112 - 35.000138888888884 31.00013888888889 - - - - n30_e035_1arc_v3 - Generated from GeoTIFF - - n30_e035_1arc_v3 - WCS - GeoTIFF - - dem__n30_e035_1arc_v3 - RectifiedGridCoverage - - 34.99986111111111 29.999861111111112 - 36.000138888888884 31.00013888888889 - - - 34.99986111111111 29.999861111111112 - 36.000138888888884 31.00013888888889 - - - - - n31_e034_1arc_v3 - Generated from GeoTIFF - - n31_e034_1arc_v3 - WCS - GeoTIFF - - dem__n31_e034_1arc_v3 - RectifiedGridCoverage - - 33.99986111111111 30.999861111111112 - 35.000138888888884 32.00013888888889 - - - 33.99986111111111 30.999861111111112 - 35.000138888888884 32.00013888888889 - - - - n31_e035_1arc_v3 - Generated from GeoTIFF - - n31_e035_1arc_v3 - WCS - GeoTIFF - - dem__n31_e035_1arc_v3 - RectifiedGridCoverage - - 34.99986111111111 30.999861111111112 - 36.000138888888884 32.00013888888889 - - - 34.99986111111111 30.999861111111112 - 36.000138888888884 32.00013888888889 - - - - n31_e036_1arc_v3 - Generated from GeoTIFF - - n31_e036_1arc_v3 - WCS - GeoTIFF - - dem__n31_e036_1arc_v3 - RectifiedGridCoverage - - 35.99986111111111 30.999861111111112 - 37.000138888888884 32.00013888888889 - - - 35.99986111111111 30.999861111111112 - 37.000138888888884 32.00013888888889 - - - - n32_e034_1arc_v3 - Generated from GeoTIFF - - n32_e034_1arc_v3 - WCS - GeoTIFF - - dem__n32_e034_1arc_v3 - RectifiedGridCoverage - - 33.99986111111111 31.999861111111112 - 35.000138888888884 33.00013888888889 - - - 33.99986111111111 31.999861111111112 - 35.000138888888884 33.00013888888889 - - - - n32_e035_1arc_v3 - Generated from GeoTIFF - - n32_e035_1arc_v3 - WCS - GeoTIFF - - dem__n32_e035_1arc_v3 - RectifiedGridCoverage - - 34.99986111111111 31.999861111111112 - 36.000138888888884 33.00013888888889 - - - 34.99986111111111 31.999861111111112 - 36.000138888888884 33.00013888888889 - - - - n32_e036_1arc_v3 - Generated from GeoTIFF - - n32_e036_1arc_v3 - WCS - GeoTIFF - - dem__n32_e036_1arc_v3 - RectifiedGridCoverage - - 35.99986111111111 31.999861111111112 - 37.000138888888884 33.00013888888889 - - - 35.99986111111111 31.999861111111112 - 37.000138888888884 33.00013888888889 - - - - - - + + + + WCS + + NONE + NONE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + application/vnd.ogc.se_xml + + + + + Generated from GeoTIFF + dem:product + product + + 32.70697763422942 29.149161895068794 + 37.071150249328454 34.62339561526329 + + + product + WCS + GeoTIFF + + + + Generated from GeoTIFF + dem:srtm30-DTM + srtm30-DTM + + 34.716796875 32.16796875 + 35.68359375 32.958984375 + + + srtm30-DTM + WCS + GeoTIFF + + + + ``` +### Version 2.0.1 + +``` +{WCS_SERVICE_URL}/wcs? +service=WCS& +version=2.0.1& +request=GetCapabilities +``` + +
+Response example + ``` xml title="Response Example" + + + + + + urn:ogc:service:wcs + 2.0.1 + 1.1.1 + 1.1.0 + http://www.opengis.net/spec/WCS/2.0/conf/core + http://www.opengis.net/spec/WCS_protocol-binding_get-kvp/1.0.1 + http://www.opengis.net/spec/WCS_protocol-binding_post-xml/1.0 + http://www.opengis.net/spec/WCS_service-extension_crs/1.0/conf/crs-gridded-coverage + + + + http://www.opengis.net/spec/GMLCOV/1.0/conf/gml-coverage + http://www.opengis.net/spec/GMLCOV/1.0/conf/special-format + http://www.opengis.net/spec/GMLCOV/1.0/conf/multipart + http://www.opengis.net/spec/WCS_service-extension_scaling/1.0/conf/scaling + http://www.opengis.net/spec/WCS_service-extension_crs/1.0/conf/crs + http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/interpolation + http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/interpolation-per-axis + http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/nearest-neighbor + http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/linear + http://www.opengis.net/spec/WCS_service-extension_interpolation/1.0/conf/cubic + http://www.opengis.net/spec/WCS_service-extension_range-subsetting/1.0/conf/record-subsetting + NONE + NONE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XML + + + + + application/gml+xml + image/jpeg + image/png + image/tiff + image/tiff;application=geotiff + text/plain + + + ... + http://www.opengis.net/def/crs/EPSG/0/3857 + ... + http://www.opengis.net/def/crs/EPSG/0/4326 + ... + http://www.opengis.net/def/crs/EPSG/0/32600 + http://www.opengis.net/def/crs/EPSG/0/32601 + http://www.opengis.net/def/crs/EPSG/0/32602 + http://www.opengis.net/def/crs/EPSG/0/32603 + http://www.opengis.net/def/crs/EPSG/0/32604 + http://www.opengis.net/def/crs/EPSG/0/32605 + http://www.opengis.net/def/crs/EPSG/0/32606 + http://www.opengis.net/def/crs/EPSG/0/32607 + http://www.opengis.net/def/crs/EPSG/0/32608 + http://www.opengis.net/def/crs/EPSG/0/32609 + http://www.opengis.net/def/crs/EPSG/0/32610 + http://www.opengis.net/def/crs/EPSG/0/32611 + http://www.opengis.net/def/crs/EPSG/0/32612 + http://www.opengis.net/def/crs/EPSG/0/32613 + http://www.opengis.net/def/crs/EPSG/0/32614 + http://www.opengis.net/def/crs/EPSG/0/32615 + http://www.opengis.net/def/crs/EPSG/0/32616 + http://www.opengis.net/def/crs/EPSG/0/32617 + http://www.opengis.net/def/crs/EPSG/0/32618 + http://www.opengis.net/def/crs/EPSG/0/32619 + http://www.opengis.net/def/crs/EPSG/0/32620 + http://www.opengis.net/def/crs/EPSG/0/32621 + http://www.opengis.net/def/crs/EPSG/0/32622 + http://www.opengis.net/def/crs/EPSG/0/32623 + http://www.opengis.net/def/crs/EPSG/0/32624 + http://www.opengis.net/def/crs/EPSG/0/32625 + http://www.opengis.net/def/crs/EPSG/0/32626 + http://www.opengis.net/def/crs/EPSG/0/32627 + http://www.opengis.net/def/crs/EPSG/0/32628 + http://www.opengis.net/def/crs/EPSG/0/32629 + http://www.opengis.net/def/crs/EPSG/0/32630 + http://www.opengis.net/def/crs/EPSG/0/32631 + http://www.opengis.net/def/crs/EPSG/0/32632 + http://www.opengis.net/def/crs/EPSG/0/32633 + http://www.opengis.net/def/crs/EPSG/0/32634 + http://www.opengis.net/def/crs/EPSG/0/32635 + http://www.opengis.net/def/crs/EPSG/0/32636 + http://www.opengis.net/def/crs/EPSG/0/32637 + http://www.opengis.net/def/crs/EPSG/0/32638 + http://www.opengis.net/def/crs/EPSG/0/32639 + http://www.opengis.net/def/crs/EPSG/0/32640 + http://www.opengis.net/def/crs/EPSG/0/32641 + http://www.opengis.net/def/crs/EPSG/0/32642 + http://www.opengis.net/def/crs/EPSG/0/32643 + http://www.opengis.net/def/crs/EPSG/0/32644 + http://www.opengis.net/def/crs/EPSG/0/32645 + http://www.opengis.net/def/crs/EPSG/0/32646 + http://www.opengis.net/def/crs/EPSG/0/32647 + http://www.opengis.net/def/crs/EPSG/0/32648 + http://www.opengis.net/def/crs/EPSG/0/32649 + http://www.opengis.net/def/crs/EPSG/0/32650 + http://www.opengis.net/def/crs/EPSG/0/32651 + http://www.opengis.net/def/crs/EPSG/0/32652 + http://www.opengis.net/def/crs/EPSG/0/32653 + http://www.opengis.net/def/crs/EPSG/0/32654 + http://www.opengis.net/def/crs/EPSG/0/32655 + http://www.opengis.net/def/crs/EPSG/0/32656 + http://www.opengis.net/def/crs/EPSG/0/32657 + http://www.opengis.net/def/crs/EPSG/0/32658 + http://www.opengis.net/def/crs/EPSG/0/32659 + http://www.opengis.net/def/crs/EPSG/0/32660 + http://www.opengis.net/def/crs/EPSG/0/32661 + http://www.opengis.net/def/crs/EPSG/0/32662 + http://www.opengis.net/def/crs/EPSG/0/32663 + http://www.opengis.net/def/crs/EPSG/0/32664 + http://www.opengis.net/def/crs/EPSG/0/32665 + http://www.opengis.net/def/crs/EPSG/0/32666 + http://www.opengis.net/def/crs/EPSG/0/32667 + http://www.opengis.net/def/crs/EPSG/0/32700 + http://www.opengis.net/def/crs/EPSG/0/32701 + http://www.opengis.net/def/crs/EPSG/0/32702 + http://www.opengis.net/def/crs/EPSG/0/32703 + http://www.opengis.net/def/crs/EPSG/0/32704 + http://www.opengis.net/def/crs/EPSG/0/32705 + http://www.opengis.net/def/crs/EPSG/0/32706 + http://www.opengis.net/def/crs/EPSG/0/32707 + http://www.opengis.net/def/crs/EPSG/0/32708 + http://www.opengis.net/def/crs/EPSG/0/32709 + http://www.opengis.net/def/crs/EPSG/0/32710 + http://www.opengis.net/def/crs/EPSG/0/32711 + http://www.opengis.net/def/crs/EPSG/0/32712 + http://www.opengis.net/def/crs/EPSG/0/32713 + http://www.opengis.net/def/crs/EPSG/0/32714 + http://www.opengis.net/def/crs/EPSG/0/32715 + http://www.opengis.net/def/crs/EPSG/0/32716 + http://www.opengis.net/def/crs/EPSG/0/32717 + http://www.opengis.net/def/crs/EPSG/0/32718 + http://www.opengis.net/def/crs/EPSG/0/32719 + http://www.opengis.net/def/crs/EPSG/0/32720 + http://www.opengis.net/def/crs/EPSG/0/32721 + http://www.opengis.net/def/crs/EPSG/0/32722 + http://www.opengis.net/def/crs/EPSG/0/32723 + http://www.opengis.net/def/crs/EPSG/0/32724 + http://www.opengis.net/def/crs/EPSG/0/32725 + http://www.opengis.net/def/crs/EPSG/0/32726 + http://www.opengis.net/def/crs/EPSG/0/32727 + http://www.opengis.net/def/crs/EPSG/0/32728 + http://www.opengis.net/def/crs/EPSG/0/32729 + http://www.opengis.net/def/crs/EPSG/0/32730 + http://www.opengis.net/def/crs/EPSG/0/32731 + http://www.opengis.net/def/crs/EPSG/0/32732 + http://www.opengis.net/def/crs/EPSG/0/32733 + http://www.opengis.net/def/crs/EPSG/0/32734 + http://www.opengis.net/def/crs/EPSG/0/32735 + http://www.opengis.net/def/crs/EPSG/0/32736 + http://www.opengis.net/def/crs/EPSG/0/32737 + http://www.opengis.net/def/crs/EPSG/0/32738 + http://www.opengis.net/def/crs/EPSG/0/32739 + http://www.opengis.net/def/crs/EPSG/0/32740 + http://www.opengis.net/def/crs/EPSG/0/32741 + http://www.opengis.net/def/crs/EPSG/0/32742 + http://www.opengis.net/def/crs/EPSG/0/32743 + http://www.opengis.net/def/crs/EPSG/0/32744 + http://www.opengis.net/def/crs/EPSG/0/32745 + http://www.opengis.net/def/crs/EPSG/0/32746 + http://www.opengis.net/def/crs/EPSG/0/32747 + http://www.opengis.net/def/crs/EPSG/0/32748 + http://www.opengis.net/def/crs/EPSG/0/32749 + http://www.opengis.net/def/crs/EPSG/0/32750 + http://www.opengis.net/def/crs/EPSG/0/32751 + http://www.opengis.net/def/crs/EPSG/0/32752 + http://www.opengis.net/def/crs/EPSG/0/32753 + http://www.opengis.net/def/crs/EPSG/0/32754 + http://www.opengis.net/def/crs/EPSG/0/32755 + http://www.opengis.net/def/crs/EPSG/0/32756 + http://www.opengis.net/def/crs/EPSG/0/32757 + http://www.opengis.net/def/crs/EPSG/0/32758 + http://www.opengis.net/def/crs/EPSG/0/32759 + http://www.opengis.net/def/crs/EPSG/0/32760 + http://www.opengis.net/def/crs/EPSG/0/32761 + http://www.opengis.net/def/crs/EPSG/0/32762 + http://www.opengis.net/def/crs/EPSG/0/32763 + http://www.opengis.net/def/crs/EPSG/0/32764 + http://www.opengis.net/def/crs/EPSG/0/32765 + http://www.opengis.net/def/crs/EPSG/0/32766 + ... + + + http://www.opengis.net/def/interpolation/OGC/1/nearest-neighbor + http://www.opengis.net/def/interpolation/OGC/1/linear + http://www.opengis.net/def/interpolation/OGC/1/cubic + + + + + + product + + product + WCS + GeoTIFF + + dem__product + RectifiedGridCoverage + + 473139.25219177455 3230615.3954787063 + 873608.5831505858 3831319.391916923 + + + 32.70697763422942 29.149161895068794 + 37.071150249328454 34.62339561526329 + + + + product + + product + WCS + GeoTIFF + + dem__product + RectifiedGridCoverage + + 473139.25219177455 3230615.3954787063 + 873608.5831505858 3831319.391916923 + + + 32.70697763422942 29.149161895068794 + 37.071150249328454 34.62339561526329 + + + + srtm30-DTM + + srtm30-DTM + WCS + GeoTIFF + + dem__srtm30-DTM + RectifiedGridCoverage + + 34.716796875 32.16796875 + 35.68359375 32.958984375 + + + 34.716796875 32.16796875 + 35.68359375 32.958984375 + + + + + + ``` +
+ This request shows an XML file containing the WCS 2.0.1 ***GetCapabilities*** response (the following pictures contains the **dem__gt30e020n40** layer related sub-section).
+### Understanding the capabilities response {#understanding-capabilities} + +| **Tag name** | **Use** | +| ----------- | ----------- | +| OperationsMetadata | Provides details about the service's available operations. | +| formatSupported | Located under the `ServiceMetadata` tag.
Lists the supported formats. | +| Extension | Located under the `ServiceMetadata` tag.
Lists all of the supported crs. | +| InterpolationMetadata | Located under the `Extension` tag.
Lists all of the available interpolation methods available. | +| Contents | Information about the available coverages. | + ## DescribeCoverage The purpose of the **DescribeCoverage** request is to additional information about a Coverage a client wants to query. It returns information about the crs, the metadata, the domain, the range and the formats it is available in. A client generally will need to issue a DescribeCoverage request before being sure it can make the proper GetCoverage request +### Version 1.0.0 + ``` -/geoserver/ows? +{WCS_SERVICE_URL}/wcs? SERVICE=WCS& VERSION=1.0.0& REQUEST=DescribeCoverage& @@ -354,10 +480,9 @@ COVERAGE=n30_e034_1arc_v3
Response example - ``` xml - + Generated from GeoTIFF dem:n30_e034_1arc_v3 @@ -443,24 +568,127 @@ COVERAGE=n30_e034_1arc_v3 ```
-This request shows an XML file containing the DescribeCoverage response of ***n30_e034_1arc_v3*** layer. +### Version 2.0.1 + +```bash +curl --location --request GET '{WCS_SERVICE_URL}/wcs?request=DescribeCoverage&version=2.0.1&coverageId=srtm30-DTM&token=' +``` + +
+ Response + ```xml + + + + Generated from GeoTIFF + srtm30-DTM + + + 32.16796875 34.716796875 + 32.958984375 35.68359375 + + + dem__srtm30-DTM + + + Linear + 0 0 + + + + + + srtm30-DTM + WCS + GeoTIFF + + + + + + + + 0 0 + 2815 2303 + + + i j + + + 32.95881271362305 34.71696853637695 + + + 0.0 3.4332275390625E-4 + -3.4332275390625E-4 0.0 + + + + + + + GRAY_INDEX + + + -32768.0 + + + + + + -32768 32767 + + + + + + + + RectifiedGridCoverage + image/tiff + + + + ``` +
+ +### Understanding the describe coverage response {#understanding-describe-coverage} + +Notice the tag `boundedBy`, it describes the geographic extent of the coverage, It includes the following attributes: +| **Attribute name** | **Details** | **Example** | +| ----------- | ----------- | ----------- | +| srsName | Coverage SRS | http://www.opengis.net/def/crs/EPSG/0/4326 | +| axisLabels | Labels to use to describe the coverage axis | Lat Long | +| srsDimension | Dimension of points in the coverage | 2 | ## GetCoverage The **GetCoverage** operation requests the actual spatial data. It can retrieve subsets of coverages, and the result can be either the coverage itself or a reference to it. The most powerful thing about a GetCoverage request is its ability to subset domains (height and time) and ranges. It can also do resampling, encode in different data formats, and return the resulting file in different ways. Detailed explanation about params might be found [here](https://www.mapserver.org/ogc/wcs_server.html) 🌐 +### Version 1.0.0 + ``` -/geoserver/ows? -SERVICE=WCS& -VERSION=1.0.0& -REQUEST=GetCoverage& -coverage=n30_e034_1arc_v3& -CRS=EPSG:4326& -BBOX=33.99986111111111,29.999861111111112,35.000138888888884,31.00013888888889& -WIDTH=3199& -HEIGHT=2833& -FORMAT=PNG +{WCS_SERVICE_URL}/wcs? +request=GetCoverage& +version=1.0.0& +coverage=srtm30-DTM& +format=image/tiff;application=geotiff& +crs=EPSG%3A4326& +bbox=35.13102,32.35306,35.37051,32.49437& +width=1000& +height=1000 +``` + +### Version 2.0.1 + +``` +{WCS_SERVICE_URL}/wcs? +request=GetCoverage& +version=2.0.1& +coverageId=srtm30-DTM& +format=image/tiff;application=geotiff& +subset=Lat(32.35306,32.49437)& +subset=Long(35.13102,35.37051) ``` -Downloaded data/image for **n30_e034_1arc_v3** layer for **EPSG:4326** projection and for defined **BBOX** +With this request we have successfully fetched data/image for **n30_e034_1arc_v3** layer for **EPSG:4326** projection and for defined **BBOX**! :tada: diff --git a/sidebars.js b/sidebars.js index 0d911c8850..d24b040e06 100644 --- a/sidebars.js +++ b/sidebars.js @@ -74,8 +74,13 @@ const sidebars = { items: [ { type: 'doc', - label: 'Getting Started', - id: 'MapColonies/DEM/Guides/dem-getting-started' + label: 'Terrain Provider', + id: 'MapColonies/DEM/Guides/terrain-provider' + }, + { + type: 'doc', + label: 'Height Extraction', + id: 'MapColonies/DEM/Guides/height-extraction' }, ] },