diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..3af0ccb687b45753a5c8b3c917d0ebe7cc4ab466 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/data diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..8f73718ee8ee506611cc4025ba56394c3c7430dd --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,68 @@ +variables: + DOCKER_TLS_CERTDIR: "" + +build-master: + image: docker:latest + stage: build + services: + - docker:dind + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + script: + - VERSION=`grep 'version="*"' core/Dockerfile | cut -d '"' -f2` + - IMAGE="$CI_REGISTRY_IMAGE/pdas_core" + - docker pull "$IMAGE":latest || true + - docker build --cache-from "$IMAGE":latest -t "$IMAGE":latest -t "$IMAGE":$VERSION core/ + - docker push "$IMAGE":$VERSION + - docker push "$IMAGE":latest + - VERSION=`grep 'version="*"' preprocessor/Dockerfile | cut -d '"' -f2` + - IMAGE="$CI_REGISTRY_IMAGE/pdas_preprocessor" + - docker pull "$IMAGE":latest || true + - docker build --cache-from "$IMAGE":latest -t "$IMAGE":latest -t "$IMAGE":$VERSION preprocessor/ + - docker push "$IMAGE":$VERSION + - docker push "$IMAGE":latest + - VERSION=`grep 'version="*"' client/Dockerfile | cut -d '"' -f2` + - IMAGE="$CI_REGISTRY_IMAGE/pdas_client" + - docker pull "$IMAGE":latest || true + - docker build --cache-from "$IMAGE":latest -t "$IMAGE":latest -t "$IMAGE":$VERSION client/ + - docker push "$IMAGE":$VERSION + - docker push "$IMAGE":latest + - VERSION=`grep 'version="*"' cache/Dockerfile | cut -d '"' -f2` + - IMAGE="$CI_REGISTRY_IMAGE/pdas_cache" + - docker pull "$IMAGE":latest || true + - docker build --cache-from "$IMAGE":latest -t "$IMAGE":latest -t "$IMAGE":$VERSION cache/ + - docker push "$IMAGE":$VERSION + - docker push "$IMAGE":latest + only: + - master + +build: + image: docker:latest + stage: build + services: + - docker:dind + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + script: + - IMAGE="$CI_REGISTRY_IMAGE/pdas_core" + - docker pull "$IMAGE":$CI_COMMIT_REF_NAME || true + - docker build --cache-from "$IMAGE":$CI_COMMIT_REF_NAME -t "$IMAGE":$CI_COMMIT_REF_SLUG -t "$IMAGE":$CI_COMMIT_REF_NAME core/ + - docker push "$IMAGE:$CI_COMMIT_REF_SLUG" + - docker push "$IMAGE:$CI_COMMIT_REF_NAME" + - IMAGE="$CI_REGISTRY_IMAGE/pdas_preprocessor" + - docker pull "$IMAGE":$CI_COMMIT_REF_NAME || true + - docker build --cache-from "$IMAGE":$CI_COMMIT_REF_NAME -t "$IMAGE":$CI_COMMIT_REF_SLUG -t "$IMAGE":$CI_COMMIT_REF_NAME preprocessor/ + - docker push "$IMAGE:$CI_COMMIT_REF_SLUG" + - docker push "$IMAGE:$CI_COMMIT_REF_NAME" + - IMAGE="$CI_REGISTRY_IMAGE/pdas_client" + - docker pull "$IMAGE":$CI_COMMIT_REF_NAME || true + - docker build --cache-from "$IMAGE":$CI_COMMIT_REF_NAME -t "$IMAGE":$CI_COMMIT_REF_SLUG -t "$IMAGE":$CI_COMMIT_REF_NAME client/ + - docker push "$IMAGE:$CI_COMMIT_REF_SLUG" + - docker push "$IMAGE:$CI_COMMIT_REF_NAME" + - IMAGE="$CI_REGISTRY_IMAGE/pdas_cache" + - docker pull "$IMAGE":$CI_COMMIT_REF_NAME || true + - docker build --cache-from "$IMAGE":$CI_COMMIT_REF_NAME -t "$IMAGE":$CI_COMMIT_REF_SLUG -t "$IMAGE":$CI_COMMIT_REF_NAME cache/ + - docker push "$IMAGE:$CI_COMMIT_REF_SLUG" + - docker push "$IMAGE:$CI_COMMIT_REF_NAME" + except: + - master diff --git a/config/emg_index-dev.html b/config/emg_index-dev.html new file mode 100644 index 0000000000000000000000000000000000000000..cfd45fc73a6bf2850643c541749666479a993707 --- /dev/null +++ b/config/emg_index-dev.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> + <meta charset="UTF-8"> + <title>PRISM Data Access Service</title> + <link rel="icon" href="//eox.at/wp-content/uploads/2015/06/cropped-eox_eye-192x192.png" sizes="192x192" /> + <link rel="apple-touch-icon-precomposed" href="//eox.at/wp-content/uploads/2015/06/cropped-eox_eye-180x180.png" /> +</head> +<body> + <header id="header" style="width: 100%; height:70px;"> + <h3 style="width:100%;text-align:center; + color: #006699;">PRISM Data Access Service (PDAS) Client powered by + <a href="//eox.at"><img src="//eox.at/wp-content/uploads/2017/09/EOX_Logo.svg" alt="EOX" style="height:25px;margin-left:10px"/></a> + </h3> + </header> + <div id="app" style="width: 100%; top: 60px; bottom: 0; position: absolute; margin: 0; padding:0;"></div> + <script src="prism.js"></script> + <script> + var today = new Date(); + today.setUTCHours(24, 0, 0, 0); + var baseUrl = '//127.0.0.1'; + var config = { + "settings": { + "rightPanelOpen": true, + "leftPanelOpen": false, + "leftPanelTabIndex": 0, + "tutorial": "once", + "uploadEnabled": false, + "selectFilesDownloadEnabled": false, + "downloadEnabled": true, + "searchEnabled" : true, + "searchDebounceTime": 500, + "language": "en", + "timeDomain": [ + "2015-01-01T00:00:00Z", + today.toISOString(), + ], + "constrainTimeDomain": true, + "displayTimeDomain": [ + "2019-01-01T00:00:00Z", + "2019-12-31T23:59:59Z", + ], + "displayInterval": "P1096D", + "selectedTimeDomain": [ + "2019-01-01T00:00:00Z", + "2019-12-31T23:59:59Z", + ], + "selectableInterval": "P1096D", + "timeSliderControls": true, + "maxTooltips": 1, + "center": [12, 49], + "zoom": 5, + "maxZoom": 17, + "footprintFillColor": "rgba(0, 0, 0, 0.2)", + "footprintStrokeColor": "rgba(0, 0, 0, 1)", + "filterFillColor": "rgba(0, 165, 255, 0)", + "filterStrokeColor": "rgba(0, 165, 255, 1)", + "filterOutsideColor": "rgba(0, 0, 0, 0.5)", + "selectedFootprintFillColor": "rgba(255, 0, 0, 0.2)", + "selectedFootprintStrokeColor": "rgba(255, 0, 0, 1)", + "highlightFillColor": "rgba(246, 182, 0, 0.5)", + "highlightStrokeColor": "rgba(246, 182, 0, 1)", + "highlightStrokeWidth": 3, + "translations": { + "en": { + "Cloud Cover": "Cloud coverage (%)", + "Error: NoApplicableCode": "Search timed out. Please refine the filter criteria.", + } + }, + "filterSettings": { + "time": { + "hidden": true, + } + }, + "downloadFormats": [ + { + "name": "TIFF", + "mimeType": "image/tiff" + }, + { + "name": "JPEG 2000", + "mimeType": "image/jp2" + }, + { + "name": "HDF", + "mimeType": "application/x-hdf", + }, + ], + "downloadProjections": [ + { + "name": "WGS-84", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/4326" + }, + { + "name": "Web Mercator", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/3857" + }, + { + "name": "ETRS89 / LAEA Europe", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/3035" + } + ], + "downloadInterpolations": [ + { + "name": "Bilinear", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/bilinear" + }, + { + "name": "Nearest Neighbour", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/nearest-neighbour" + }, + // { + // "name": "Cubic", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/cubic" + // }, + // { + // "name": "Cubic Spline", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/cubic-spline" + // }, + { + "name": "Average", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/average" + }, + // { + // "name": "Lanczos", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/lanczos" + // }, + // { + // "name": "Mode", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/mode" + // }, + ] + }, + "baseLayers": [ + { + "id": "terrain-light", + "displayName": "EOX Terrain-Light", + "display": { + "id": "terrain-light", + "visible": true, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "Terrain-Light { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors and <a href='javascript:;' onClick='toggle(terrain_attribution)'>others</a>, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> }" + } + }, { + "id": "terrain", + "displayName": "EOX Terrain", + "display": { + "id": "terrain", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "Terrain { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors and <a href='javascript:;' onClick='toggle(terrain_attribution)'>others</a>, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> }" + } + }, { + "id": "s2cloudless", + "displayName": "EOX Sentinel-2 cloudless", + "display": { + "id": "s2cloudless-2018", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "<a xmlns:dct=\"//purl.org/dc/terms/\" href=\"//s2maps.eu\" property=\"dct:title\">Sentinel-2 cloudless - //s2maps.eu</a> by <a xmlns:cc=\"//creativecommons.org/ns#\" href=\"s://eox.at\" property=\"cc:attributionName\" rel=\"cc:attributionURL\">EOX IT Services GmbH</a> (Contains modified Copernicus Sentinel data 2017 & 2018)" + } + } + ], + "layers": [ + { + "id": 'Emergency', + "displayName": 'Emergency', + "displayColor": '#eb3700', + "display": { + "id": 'Emergency__TRUE_COLOR', + "visible": true, + "protocol": 'WMS', + "url": baseUrl + ':83/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "style": '', + "useMilliseconds": false, + "maxZoom": 17, + "options": [{ + "name": "Style", + "target": "display.extraParameters.LAYERS", + "values": [{ + "label": "Emergency True Color", + "value": "Emergency__TRUE_COLOR", + }, { + "label": "Emergency False Color", + "value": "Emergency__FALSE_COLOR", + }, { + "label": "Emergency NDVI", + "value": "Emergency__NDVI", + }] + }], + }, + "search": { + "protocol": "OpenSearch", + "url": baseUrl + ":81/opensearch/collections/Emergency/", + "id": "Emergency", + "histogramBinCount": 28, + "format": "application/atom+xml", + "method": "GET", + "histogramThreshold": 600, + "lightweightBuckets": true, + "searchLimit": 600, + "loadMore": 600, + "pageSize": 200, + "countZeroRecords": true, + "parameters": [ + { + "max": 100, + "min": 0, + "range": true, + "type": "eo:cloudCover", + "title": "Cloud Coverage" + }, + ], + "parametersFilterSettings": { + "collapsed": false, + }, + }, + "download": { + "protocol": "EO-WCS", + "url": baseUrl + ":81/ows/", + // "method": "GET", + "rewrite": { + // add __coverage to the coverageId + "from": "({{id}})", + "to": "$1__coverage" + } + } + }, + ], + "overlayLayers": [ + { + "id": "overlay_base", + "displayName": "EOX Borders and Labels", + "display": { + "id": "overlay_base", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.tiles.maps.eox.at/wmts/", + "//e.tiles.maps.eox.at/wmts/" + ], + "matrixSet": "WGS84", + "style": "default", + "format": "image/png", + "projection": "EPSG:4326", + "attribution": "Overlay { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> and <a href=\"//github.com/mapserver/basemaps\" target=\"_blank\">MapServer</a> }" + } + }, + { + "id": 'Emergency__outlines', + "displayName": 'Emergency Outlines', + "displayColor": '#187465', + "display": { + "id": 'Emergency__outlines', + "visible": false, + "protocol": 'WMS', + "url": baseUrl + ':81/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "style": 'red', + "useMilliseconds": false, + "maxZoom": 17, + "synchronizeTime": true, + }, + } + ] +}; + + var app = new Application({ + config: config, + container: document.getElementById('app'), + }); + app.start(); + </script> +</body> +</html> diff --git a/config/emg_index-ops.html b/config/emg_index-ops.html new file mode 100644 index 0000000000000000000000000000000000000000..6c9ea0bdaf405a3d087a53c722c376337df00a89 --- /dev/null +++ b/config/emg_index-ops.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> + <meta charset="UTF-8"> + <title>PRISM Data Access Service</title> + <link rel="icon" href="//eox.at/wp-content/uploads/2015/06/cropped-eox_eye-192x192.png" sizes="192x192" /> + <link rel="apple-touch-icon-precomposed" href="//eox.at/wp-content/uploads/2015/06/cropped-eox_eye-180x180.png" /> +</head> +<body> + <header id="header" style="width: 100%; height:70px;"> + <h3 style="width:100%;text-align:center; + color: #006699;">PRISM Data Access Service (PDAS) Client powered by + <a href="//eox.at"><img src="//eox.at/wp-content/uploads/2017/09/EOX_Logo.svg" alt="EOX" style="height:25px;margin-left:10px"/></a> + </h3> + </header> + <div id="app" style="width: 100%; top: 60px; bottom: 0; position: absolute; margin: 0; padding:0;"></div> + <script src="prism.js"></script> + <script> + var today = new Date(); + today.setUTCHours(24, 0, 0, 0); + var baseUrl = '//emg.pdas.prism.eox.at/'; + var config = { + "settings": { + "rightPanelOpen": true, + "leftPanelOpen": false, + "leftPanelTabIndex": 0, + "tutorial": "once", + "uploadEnabled": false, + "selectFilesDownloadEnabled": false, + "downloadEnabled": true, + "searchEnabled" : true, + "searchDebounceTime": 500, + "language": "en", + "timeDomain": [ + "2015-01-01T00:00:00Z", + today.toISOString(), + ], + "constrainTimeDomain": true, + "displayTimeDomain": [ + "2019-01-01T00:00:00Z", + "2019-12-31T23:59:59Z", + ], + "displayInterval": "P1096D", + "selectedTimeDomain": [ + "2019-01-01T00:00:00Z", + "2019-12-31T23:59:59Z", + ], + "selectableInterval": "P1096D", + "timeSliderControls": true, + "maxTooltips": 1, + "center": [12, 49], + "zoom": 5, + "maxZoom": 17, + "footprintFillColor": "rgba(0, 0, 0, 0.2)", + "footprintStrokeColor": "rgba(0, 0, 0, 1)", + "filterFillColor": "rgba(0, 165, 255, 0)", + "filterStrokeColor": "rgba(0, 165, 255, 1)", + "filterOutsideColor": "rgba(0, 0, 0, 0.5)", + "selectedFootprintFillColor": "rgba(255, 0, 0, 0.2)", + "selectedFootprintStrokeColor": "rgba(255, 0, 0, 1)", + "highlightFillColor": "rgba(246, 182, 0, 0.5)", + "highlightStrokeColor": "rgba(246, 182, 0, 1)", + "highlightStrokeWidth": 3, + "translations": { + "en": { + "Cloud Cover": "Cloud coverage (%)", + "Error: NoApplicableCode": "Search timed out. Please refine the filter criteria.", + } + }, + "filterSettings": { + "time": { + "hidden": true, + } + }, + "downloadFormats": [ + { + "name": "TIFF", + "mimeType": "image/tiff" + }, + { + "name": "JPEG 2000", + "mimeType": "image/jp2" + }, + { + "name": "HDF", + "mimeType": "application/x-hdf", + }, + ], + "downloadProjections": [ + { + "name": "WGS-84", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/4326" + }, + { + "name": "Web Mercator", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/3857" + }, + { + "name": "ETRS89 / LAEA Europe", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/3035" + } + ], + "downloadInterpolations": [ + { + "name": "Bilinear", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/bilinear" + }, + { + "name": "Nearest Neighbour", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/nearest-neighbour" + }, + // { + // "name": "Cubic", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/cubic" + // }, + // { + // "name": "Cubic Spline", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/cubic-spline" + // }, + { + "name": "Average", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/average" + }, + // { + // "name": "Lanczos", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/lanczos" + // }, + // { + // "name": "Mode", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/mode" + // }, + ] + }, + "baseLayers": [ + { + "id": "terrain-light", + "displayName": "EOX Terrain-Light", + "display": { + "id": "terrain-light", + "visible": true, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "Terrain-Light { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors and <a href='javascript:;' onClick='toggle(terrain_attribution)'>others</a>, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> }" + } + }, { + "id": "terrain", + "displayName": "EOX Terrain", + "display": { + "id": "terrain", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "Terrain { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors and <a href='javascript:;' onClick='toggle(terrain_attribution)'>others</a>, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> }" + } + }, { + "id": "s2cloudless", + "displayName": "EOX Sentinel-2 cloudless", + "display": { + "id": "s2cloudless-2018", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "<a xmlns:dct=\"//purl.org/dc/terms/\" href=\"//s2maps.eu\" property=\"dct:title\">Sentinel-2 cloudless - //s2maps.eu</a> by <a xmlns:cc=\"//creativecommons.org/ns#\" href=\"s://eox.at\" property=\"cc:attributionName\" rel=\"cc:attributionURL\">EOX IT Services GmbH</a> (Contains modified Copernicus Sentinel data 2017 & 2018)" + } + } + ], + "layers": [ + { + "id": 'Emergency', + "displayName": 'Emergency', + "displayColor": '#eb3700', + "display": { + "id": 'Emergency__TRUE_COLOR', + "visible": true, + "protocol": 'WMS', + "url": baseUrl + 'cache/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "style": '', + "useMilliseconds": false, + "maxZoom": 17, + "options": [{ + "name": "Style", + "target": "display.extraParameters.LAYERS", + "values": [{ + "label": "Emergency True Color", + "value": "Emergency__TRUE_COLOR", + }, { + "label": "Emergency False Color", + "value": "Emergency__FALSE_COLOR", + }, { + "label": "Emergency NDVI", + "value": "Emergency__NDVI", + }] + }], + }, + "search": { + "protocol": "OpenSearch", + "url": baseUrl + "opensearch/collections/Emergency/", + "id": "Emergency", + "histogramBinCount": 28, + "format": "application/atom+xml", + "method": "GET", + "histogramThreshold": 600, + "lightweightBuckets": true, + "searchLimit": 600, + "loadMore": 600, + "pageSize": 200, + "countZeroRecords": true, + "parameters": [ + { + "max": 100, + "min": 0, + "range": true, + "type": "eo:cloudCover", + "title": "Cloud Coverage" + }, + ], + "parametersFilterSettings": { + "collapsed": false, + }, + }, + "download": { + "protocol": "EO-WCS", + "url": baseUrl + "ows", + // "method": "GET", + "rewrite": { + // add __coverage to the coverageId + "from": "({{id}})", + "to": "$1__coverage" + } + } + }, + ], + "overlayLayers": [ + { + "id": "overlay_base", + "displayName": "EOX Borders and Labels", + "display": { + "id": "overlay_base", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.tiles.maps.eox.at/wmts/", + "//e.tiles.maps.eox.at/wmts/" + ], + "matrixSet": "WGS84", + "style": "default", + "format": "image/png", + "projection": "EPSG:4326", + "attribution": "Overlay { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> and <a href=\"//github.com/mapserver/basemaps\" target=\"_blank\">MapServer</a> }" + } + }, + { + "id": 'Emergency__outlines', + "displayName": 'Emergency Outlines', + "displayColor": '#187465', + "display": { + "id": 'Emergency__outlines', + "visible": false, + "protocol": 'WMS', + "url": baseUrl + 'ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "style": 'red', + "useMilliseconds": false, + "maxZoom": 17, + "synchronizeTime": true, + }, + } + ] +}; + + var app = new Application({ + config: config, + container: document.getElementById('app'), + }); + app.start(); + </script> +</body> +</html> diff --git a/config/emg_mapcache-dev.xml b/config/emg_mapcache-dev.xml new file mode 100644 index 0000000000000000000000000000000000000000..5950aa3b6cbe8ba94efec83a5eaa6fe4f61f7a8e --- /dev/null +++ b/config/emg_mapcache-dev.xml @@ -0,0 +1,167 @@ +<mapcache> + <default_format>mixed</default_format> + <format name="mypng" type="PNG"> + <compression>fast</compression> + </format> + <format name="myjpeg" type="JPEG"> + <quality>75</quality> + <photometric>ycbcr</photometric> + </format> + <format name="mixed" type="MIXED"> + <transparent>mypng</transparent> + <opaque>myjpeg</opaque> + </format> + <service type="wms" enabled="true"> + <full_wms>assemble</full_wms> + <resample_mode>bilinear</resample_mode> + <format>mixed</format> + <maxsize>4096</maxsize> + <!-- <forwarding_rule name="wms"> + <param name="SERVICE" type="values">WMS</param> + <http> + <url>http://localhost/browse/ows</url> + </http> + </forwarding_rule> --> + </service> + <service type="wmts" enabled="true"/> + <metadata> + <title>Pre-rendered View Service (pdas) developed by EOX</title> + <abstract>Pre-rendered View Service (pdas) developed by EOX</abstract> + <keyword>view service</keyword> + <accessconstraints>UNKNOWN</accessconstraints> + <fees>UNKNOWN</fees> + <contactname>Stephan Meissl</contactname> + <contactphone>Please contact via mail.</contactphone> + <contactfacsimile>None</contactfacsimile> + <contactorganization>EOX IT Services GmbH</contactorganization> + <contactcity>Vienna</contactcity> + <contactstateorprovince>Vienna</contactstateorprovince> + <contactpostcode>1090</contactpostcode> + <contactcountry>Austria</contactcountry> + <contactelectronicmailaddress>office@eox.at</contactelectronicmailaddress> + <contactposition>CTO</contactposition> + <providername>EOX</providername> + <providerurl>https://eox.at</providerurl> + <inspire_profile>true</inspire_profile> + <inspire_metadataurl>TBD</inspire_metadataurl> + <defaultlanguage>eng</defaultlanguage> + <language>eng</language> + </metadata> + <errors>empty_img</errors> + <lock_dir>/tmp</lock_dir> + <threaded_fetching>true</threaded_fetching> + <cache name="emg" type="sqlite3"> + <dbfile>/tmp/cache.db</dbfile> + </cache> + + <!-- SOURCES Emergency --> + <source type="wms" name="emg_true_color"> + <getmap> + <params> + <LAYERS>Emergency__TRUE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://localhost/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="emg_false_color"> + <getmap> + <params> + <LAYERS>Emergency__FALSE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://localhost/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="emg_ndvi"> + <getmap> + <params> + <LAYERS>Emergency__NDVI</LAYERS> + <STYLES>earth</STYLES> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://localhost/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + + <!-- TILESETS Emergency --> + <tileset name="Emergency__TRUE_COLOR"> + <metadata> + <title>Emergency True Color</title> + <abstract>Emergency True Color</abstract> + </metadata> + <source>emg_true_color</source> + <cache>emg</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/emg_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="Emergency__FALSE_COLOR"> + <metadata> + <title>Emergency False Color</title> + <abstract>Emergency False Color</abstract> + </metadata> + <source>emg_false_color</source> + <cache>emg</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/emg_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="Emergency__NDVI"> + <metadata> + <title>Emergency NDVI</title> + <abstract>Emergency NDVI</abstract> + </metadata> + <source>emg_ndvi</source> + <cache>emg</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/emg_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + +</mapcache> diff --git a/config/emg_mapcache-ops.xml b/config/emg_mapcache-ops.xml new file mode 100644 index 0000000000000000000000000000000000000000..d6e904c19b1a0036a225f755a80548d22021fdc5 --- /dev/null +++ b/config/emg_mapcache-ops.xml @@ -0,0 +1,171 @@ +<mapcache> + <default_format>mixed</default_format> + <format name="mypng" type="PNG"> + <compression>fast</compression> + </format> + <format name="myjpeg" type="JPEG"> + <quality>75</quality> + <photometric>ycbcr</photometric> + </format> + <format name="mixed" type="MIXED"> + <transparent>mypng</transparent> + <opaque>myjpeg</opaque> + </format> + <service type="wms" enabled="true"> + <full_wms>assemble</full_wms> + <resample_mode>bilinear</resample_mode> + <format>mixed</format> + <maxsize>4096</maxsize> + <!-- <forwarding_rule name="wms"> + <param name="SERVICE" type="values">WMS</param> + <http> + <url>http://localhost/browse/ows</url> + </http> + </forwarding_rule> --> + </service> + <service type="wmts" enabled="true"/> + <metadata> + <title>Pre-rendered View Service (pdas) developed by EOX</title> + <abstract>Pre-rendered View Service (pdas) developed by EOX</abstract> + <url>https://emg.pdas.prism.eox.at/cache/ows</url> + <keyword>view service</keyword> + <accessconstraints>UNKNOWN</accessconstraints> + <fees>UNKNOWN</fees> + <contactname>Stephan Meissl</contactname> + <contactphone>Please contact via mail.</contactphone> + <contactfacsimile>None</contactfacsimile> + <contactorganization>EOX IT Services GmbH</contactorganization> + <contactcity>Vienna</contactcity> + <contactstateorprovince>Vienna</contactstateorprovince> + <contactpostcode>1090</contactpostcode> + <contactcountry>Austria</contactcountry> + <contactelectronicmailaddress>office@eox.at</contactelectronicmailaddress> + <contactposition>CTO</contactposition> + <providername>EOX</providername> + <providerurl>https://eox.at</providerurl> + <inspire_profile>true</inspire_profile> + <inspire_metadataurl>TBD</inspire_metadataurl> + <defaultlanguage>eng</defaultlanguage> + <language>eng</language> + </metadata> + <errors>empty_img</errors> + <lock_dir>/tmp</lock_dir> + <threaded_fetching>true</threaded_fetching> + <cache name="emg" type="rest"> + <url>{{OS_STORAGE_URL}}/{{BUCKET_NAME}}/{tileset}/{grid}/{dim}/{z}/{x}/{y}.{ext}</url> + <headers> + <X-Auth-Token>{{OS_AUTH_TOKEN}}</X-Auth-Token> + </headers> + </cache> + + <!-- SOURCES Emergency --> + <source type="wms" name="emg_true_color"> + <getmap> + <params> + <LAYERS>Emergency__TRUE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://localhost/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="emg_false_color"> + <getmap> + <params> + <LAYERS>Emergency__FALSE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://localhost/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="emg_ndvi"> + <getmap> + <params> + <LAYERS>Emergency__NDVI</LAYERS> + <STYLES>earth</STYLES> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://localhost/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + + <!-- TILESETS Emergency --> + <tileset name="Emergency__TRUE_COLOR"> + <metadata> + <title>Emergency True Color</title> + <abstract>Emergency True Color</abstract> + </metadata> + <source>emg_true_color</source> + <cache>emg</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/emg_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="Emergency__FALSE_COLOR"> + <metadata> + <title>Emergency False Color</title> + <abstract>Emergency False Color</abstract> + </metadata> + <source>emg_false_color</source> + <cache>emg</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/emg_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="Emergency__NDVI"> + <metadata> + <title>Emergency NDVI</title> + <abstract>Emergency NDVI</abstract> + </metadata> + <source>emg_ndvi</source> + <cache>emg</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/emg_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + +</mapcache> diff --git a/config/vhr18_index-dev.html b/config/vhr18_index-dev.html new file mode 100644 index 0000000000000000000000000000000000000000..bf3b39337236b219a84d567ac6a1b8ef2c77f261 --- /dev/null +++ b/config/vhr18_index-dev.html @@ -0,0 +1,401 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> + <meta charset="UTF-8"> + <title>PRISM Data Access Service</title> + <link rel="icon" href="//eox.at/wp-content/uploads/2015/06/cropped-eox_eye-192x192.png" sizes="192x192" /> + <link rel="apple-touch-icon-precomposed" href="//eox.at/wp-content/uploads/2015/06/cropped-eox_eye-180x180.png" /> +</head> +<body> + <header id="header" style="width: 100%; height:70px;"> + <h3 style="width:100%;text-align:center; + color: #006699;">PRISM Data Access Service (PDAS) Client powered by + <a href="//eox.at"><img src="//eox.at/wp-content/uploads/2017/09/EOX_Logo.svg" alt="EOX" style="height:25px;margin-left:10px"/></a> + </h3> + </header> + <div id="app" style="width: 100%; top: 60px; bottom: 0; position: absolute; margin: 0; padding:0;"></div> + <script src="prism.js"></script> + <script> + var baseUrl = '//127.0.0.1'; + var config = { + "settings": { + "rightPanelOpen": true, + "leftPanelOpen": false, + "leftPanelTabIndex": 0, + "tutorial": "once", + "uploadEnabled": false, + "selectFilesDownloadEnabled": false, + "downloadEnabled": true, + "searchEnabled" : true, + "searchDebounceTime": 500, + "language": "en", + "timeDomain": [ + "2017-01-01T00:00:00Z", + "2019-12-31T23:59:59Z", + ], + "constrainTimeDomain": true, + "displayTimeDomain": [ + "2017-01-01T00:00:00Z", + "2019-12-31T23:59:59Z", + ], + "displayInterval": "P1096D", + "selectedTimeDomain": [ + "2018-08-01T00:00:00Z", + "2018-08-31T23:59:59Z", + ], + "selectableInterval": "P1096D", + "timeSliderControls": true, + "maxTooltips": 1, + "center": [12, 49], + "zoom": 5, + "maxZoom": 17, + "footprintFillColor": "rgba(0, 0, 0, 0.2)", + "footprintStrokeColor": "rgba(0, 0, 0, 1)", + "filterFillColor": "rgba(0, 165, 255, 0)", + "filterStrokeColor": "rgba(0, 165, 255, 1)", + "filterOutsideColor": "rgba(0, 0, 0, 0.5)", + "selectedFootprintFillColor": "rgba(255, 0, 0, 0.2)", + "selectedFootprintStrokeColor": "rgba(255, 0, 0, 1)", + "highlightFillColor": "rgba(246, 182, 0, 0.5)", + "highlightStrokeColor": "rgba(246, 182, 0, 1)", + "highlightStrokeWidth": 3, + "translations": { + "en": { + "Cloud Cover": "Cloud coverage (%)", + "Error: NoApplicableCode": "Search timed out. Please refine the filter criteria.", + } + }, + "filterSettings": { + "time": { + "hidden": true, + } + }, + "downloadFormats": [ + { + "name": "TIFF", + "mimeType": "image/tiff" + }, + { + "name": "JPEG 2000", + "mimeType": "image/jp2" + }, + { + "name": "HDF", + "mimeType": "application/x-hdf", + }, + ], + "downloadProjections": [ + { + "name": "WGS-84", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/4326" + }, + { + "name": "Web Mercator", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/3857" + }, + { + "name": "ETRS89 / LAEA Europe", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/3035" + } + ], + "downloadInterpolations": [ + { + "name": "Bilinear", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/bilinear" + }, + { + "name": "Nearest Neighbour", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/nearest-neighbour" + }, + // { + // "name": "Cubic", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/cubic" + // }, + // { + // "name": "Cubic Spline", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/cubic-spline" + // }, + { + "name": "Average", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/average" + }, + // { + // "name": "Lanczos", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/lanczos" + // }, + // { + // "name": "Mode", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/mode" + // }, + ] + }, + "baseLayers": [ + { + "id": "terrain-light", + "displayName": "EOX Terrain-Light", + "display": { + "id": "terrain-light", + "visible": true, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "Terrain-Light { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors and <a href='javascript:;' onClick='toggle(terrain_attribution)'>others</a>, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> }" + } + }, { + "id": "terrain", + "displayName": "EOX Terrain", + "display": { + "id": "terrain", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "Terrain { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors and <a href='javascript:;' onClick='toggle(terrain_attribution)'>others</a>, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> }" + } + }, { + "id": "s2cloudless", + "displayName": "EOX Sentinel-2 cloudless", + "display": { + "id": "s2cloudless-2018", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "<a xmlns:dct=\"//purl.org/dc/terms/\" href=\"//s2maps.eu\" property=\"dct:title\">Sentinel-2 cloudless - //s2maps.eu</a> by <a xmlns:cc=\"//creativecommons.org/ns#\" href=\"s://eox.at\" property=\"cc:attributionName\" rel=\"cc:attributionURL\">EOX IT Services GmbH</a> (Contains modified Copernicus Sentinel data 2017 & 2018)" + } + } + ], + "layers": [ + { + "id": 'VHR_IMAGE_2018_Level_1', + "displayName": 'VHR Image 2018 Level 1', + "displayColor": '#eb3700', + "display": { + "id": 'VHR_IMAGE_2018_Level_1__TRUE_COLOR', + "visible": false, + "protocol": 'WMS', + "url": baseUrl + ':83/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "style": '', + "useMilliseconds": false, + "maxZoom": 17, + "options": [{ + "name": "Style", + "target": "display.extraParameters.LAYERS", + "values": [{ + "label": "VHR Image 2018 True Color", + "value": "VHR_IMAGE_2018_Level_1__TRUE_COLOR", + }, { + "label": "VHR Image 2018 True Color with masked validity", + "value": "VHR_IMAGE_2018_Level_1__masked_validity", + }, { + "label": "VHR Image 2018 False Color", + "value": "VHR_IMAGE_2018_Level_1__FALSE_COLOR", + }, { + "label": "VHR Image 2018 NDVI", + "value": "VHR_IMAGE_2018_Level_1__NDVI", + }] + }], + }, + "search": { + "protocol": "OpenSearch", + "url": baseUrl + ":81/opensearch/collections/VHR_IMAGE_2018_Level_1/", + "id": "VHR_IMAGE_2018_Level_1", + "histogramBinCount": 28, + "format": "application/atom+xml", + "method": "GET", + "histogramThreshold": 600, + "lightweightBuckets": true, + "searchLimit": 600, + "loadMore": 600, + "pageSize": 200, + "countZeroRecords": true, + "parameters": [ + { + "max": 100, + "min": 0, + "range": true, + "type": "eo:cloudCover", + "title": "Cloud Coverage" + }, + ], + "parametersFilterSettings": { + "collapsed": false, + }, + }, + "download": { + "protocol": "EO-WCS", + "url": baseUrl + ":81/ows/", + // "method": "GET", + "rewrite": { + // add __coverage to the coverageId + "from": "({{id}})", + "to": "$1__coverage" + } + } + }, + { + "id": 'VHR_IMAGE_2018_Level_3', + "displayName": 'VHR Image 2018 Level 3', + "displayColor": '#37eb00', + "display": { + "id": 'VHR_IMAGE_2018_Level_3__TRUE_COLOR', + "visible": true, + "protocol": 'WMS', + "url": baseUrl + ':83/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "style": '', + "useMilliseconds": false, + "maxZoom": 17, + "options": [{ + "name": "Style", + "target": "display.extraParameters.LAYERS", + "values": [{ + "label": "VHR Image 2018 True Color", + "value": "VHR_IMAGE_2018_Level_3__TRUE_COLOR", + }, { + "label": "VHR Image 2018 True Color with masked validity", + "value": "VHR_IMAGE_2018_Level_3__masked_validity", + }, { + "label": "VHR Image 2018 False Color", + "value": "VHR_IMAGE_2018_Level_3__FALSE_COLOR", + }, { + "label": "VHR Image 2018 NDVI", + "value": "VHR_IMAGE_2018_Level_3__NDVI", + }] + }], + }, + "search": { + "protocol": "OpenSearch", + "url": baseUrl + ":81/opensearch/collections/VHR_IMAGE_2018_Level_3/", + "id": "VHR_IMAGE_2018_Level_3", + "histogramBinCount": 28, + "format": "application/atom+xml", + "method": "GET", + "histogramThreshold": 600, + "lightweightBuckets": true, + "searchLimit": 600, + "loadMore": 600, + "pageSize": 200, + "countZeroRecords": true, + "parameters": [ + { + "max": 100, + "min": 0, + "range": true, + "type": "eo:cloudCover", + "title": "Cloud Coverage" + }, + ], + "parametersFilterSettings": { + "collapsed": false, + }, + }, + "download": { + "protocol": "EO-WCS", + "url": baseUrl + ":81/ows/", + // "method": "GET", + "rewrite": { + // add __coverage to the coverageId + "from": "({{id}})", + "to": "$1__coverage" + } + } + }, + ], + "overlayLayers": [ + { + "id": "overlay_base", + "displayName": "EOX Borders and Labels", + "display": { + "id": "overlay_base", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.tiles.maps.eox.at/wmts/", + "//e.tiles.maps.eox.at/wmts/" + ], + "matrixSet": "WGS84", + "style": "default", + "format": "image/png", + "projection": "EPSG:4326", + "attribution": "Overlay { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> and <a href=\"//github.com/mapserver/basemaps\" target=\"_blank\">MapServer</a> }" + } + }, + { + "id": 'VHR_IMAGE_2018_Level_3__outlines', + "displayName": 'VHR Image 2018 Level 3 Outlines', + "displayColor": '#187465', + "display": { + "id": 'VHR_IMAGE_2018_Level_3__outlines', + "visible": false, + "protocol": 'WMS', + "url": baseUrl + ':81/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "style": 'red', + "useMilliseconds": false, + "maxZoom": 17, + "synchronizeTime": true, + }, + }, + { + "id": 'VHR_IMAGE_2018_Level_3__masked_validity__Full', + "displayName": 'VHR Image 2018 Level 3 True Color with masked validity Full Coverage', + "display": { + "id": 'VHR_IMAGE_2018_Level_3__masked_validity__Full', + "visible": false, + "protocol": 'WMS', + "url": baseUrl + ':83/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "maxZoom": 17, + "synchronizeTime": false, + }, + }, + { + "id": 'VHR_IMAGE_2018_Level_3__Full', + "displayName": 'VHR Image 2018 Level 3 True Color Full Coverage', + "display": { + "id": 'VHR_IMAGE_2018_Level_3__Full', + "visible": false, + "protocol": 'WMS', + "url": baseUrl + ':83/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "maxZoom": 17, + "synchronizeTime": false, + }, + } + ] +}; + + var app = new Application({ + config: config, + container: document.getElementById('app'), + }); + app.start(); + </script> +</body> +</html> diff --git a/config/vhr18_index-ops.html b/config/vhr18_index-ops.html new file mode 100644 index 0000000000000000000000000000000000000000..2bf79c662b6f0a623f56b013c755fa44ebef0330 --- /dev/null +++ b/config/vhr18_index-ops.html @@ -0,0 +1,401 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> + <meta charset="UTF-8"> + <title>PRISM Data Access Service</title> + <link rel="icon" href="//eox.at/wp-content/uploads/2015/06/cropped-eox_eye-192x192.png" sizes="192x192" /> + <link rel="apple-touch-icon-precomposed" href="//eox.at/wp-content/uploads/2015/06/cropped-eox_eye-180x180.png" /> +</head> +<body> + <header id="header" style="width: 100%; height:70px;"> + <h3 style="width:100%;text-align:center; + color: #006699;">PRISM Data Access Service (PDAS) Client powered by + <a href="//eox.at"><img src="//eox.at/wp-content/uploads/2017/09/EOX_Logo.svg" alt="EOX" style="height:25px;margin-left:10px"/></a> + </h3> + </header> + <div id="app" style="width: 100%; top: 60px; bottom: 0; position: absolute; margin: 0; padding:0;"></div> + <script src="prism.js"></script> + <script> + var baseUrl = '//vhr18.pdas.prism.eox.at/'; + var config = { + "settings": { + "rightPanelOpen": true, + "leftPanelOpen": false, + "leftPanelTabIndex": 0, + "tutorial": "once", + "uploadEnabled": false, + "selectFilesDownloadEnabled": false, + "downloadEnabled": true, + "searchEnabled" : true, + "searchDebounceTime": 500, + "language": "en", + "timeDomain": [ + "2017-01-01T00:00:00Z", + "2019-12-31T23:59:59Z", + ], + "constrainTimeDomain": true, + "displayTimeDomain": [ + "2017-01-01T00:00:00Z", + "2019-12-31T23:59:59Z", + ], + "displayInterval": "P1096D", + "selectedTimeDomain": [ + "2018-08-01T00:00:00Z", + "2018-08-31T23:59:59Z", + ], + "selectableInterval": "P1096D", + "timeSliderControls": true, + "maxTooltips": 1, + "center": [12, 49], + "zoom": 5, + "maxZoom": 17, + "footprintFillColor": "rgba(0, 0, 0, 0.2)", + "footprintStrokeColor": "rgba(0, 0, 0, 1)", + "filterFillColor": "rgba(0, 165, 255, 0)", + "filterStrokeColor": "rgba(0, 165, 255, 1)", + "filterOutsideColor": "rgba(0, 0, 0, 0.5)", + "selectedFootprintFillColor": "rgba(255, 0, 0, 0.2)", + "selectedFootprintStrokeColor": "rgba(255, 0, 0, 1)", + "highlightFillColor": "rgba(246, 182, 0, 0.5)", + "highlightStrokeColor": "rgba(246, 182, 0, 1)", + "highlightStrokeWidth": 3, + "translations": { + "en": { + "Cloud Cover": "Cloud coverage (%)", + "Error: NoApplicableCode": "Search timed out. Please refine the filter criteria.", + } + }, + "filterSettings": { + "time": { + "hidden": true, + } + }, + "downloadFormats": [ + { + "name": "TIFF", + "mimeType": "image/tiff" + }, + { + "name": "JPEG 2000", + "mimeType": "image/jp2" + }, + { + "name": "HDF", + "mimeType": "application/x-hdf", + }, + ], + "downloadProjections": [ + { + "name": "WGS-84", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/4326" + }, + { + "name": "Web Mercator", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/3857" + }, + { + "name": "ETRS89 / LAEA Europe", + "identifier": "http://www.opengis.net/def/crs/EPSG/0/3035" + } + ], + "downloadInterpolations": [ + { + "name": "Bilinear", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/bilinear" + }, + { + "name": "Nearest Neighbour", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/nearest-neighbour" + }, + // { + // "name": "Cubic", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/cubic" + // }, + // { + // "name": "Cubic Spline", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/cubic-spline" + // }, + { + "name": "Average", + "identifier": "http://www.opengis.net/def/interpolation/OGC/1/average" + }, + // { + // "name": "Lanczos", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/lanczos" + // }, + // { + // "name": "Mode", + // "identifier": "http://www.opengis.net/def/interpolation/OGC/1/mode" + // }, + ] + }, + "baseLayers": [ + { + "id": "terrain-light", + "displayName": "EOX Terrain-Light", + "display": { + "id": "terrain-light", + "visible": true, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "Terrain-Light { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors and <a href='javascript:;' onClick='toggle(terrain_attribution)'>others</a>, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> }" + } + }, { + "id": "terrain", + "displayName": "EOX Terrain", + "display": { + "id": "terrain", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "Terrain { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors and <a href='javascript:;' onClick='toggle(terrain_attribution)'>others</a>, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> }" + } + }, { + "id": "s2cloudless", + "displayName": "EOX Sentinel-2 cloudless", + "display": { + "id": "s2cloudless-2018", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.s2maps-tiles.eu/wmts/", + "//e.s2maps-tiles.eu/wmts/" + ], + "matrixSet": "WGS84", + "format": "image/png", + "projection": "EPSG:4326", + "style": "default", + "attribution": "<a xmlns:dct=\"//purl.org/dc/terms/\" href=\"//s2maps.eu\" property=\"dct:title\">Sentinel-2 cloudless - //s2maps.eu</a> by <a xmlns:cc=\"//creativecommons.org/ns#\" href=\"s://eox.at\" property=\"cc:attributionName\" rel=\"cc:attributionURL\">EOX IT Services GmbH</a> (Contains modified Copernicus Sentinel data 2017 & 2018)" + } + } + ], + "layers": [ + { + "id": 'VHR_IMAGE_2018_Level_1', + "displayName": 'VHR Image 2018 Level 1', + "displayColor": '#eb3700', + "display": { + "id": 'VHR_IMAGE_2018_Level_1__TRUE_COLOR', + "visible": false, + "protocol": 'WMS', + "url": baseUrl + 'cache/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "style": '', + "useMilliseconds": false, + "maxZoom": 17, + "options": [{ + "name": "Style", + "target": "display.extraParameters.LAYERS", + "values": [{ + "label": "VHR Image 2018 True Color", + "value": "VHR_IMAGE_2018_Level_1__TRUE_COLOR", + }, { + "label": "VHR Image 2018 True Color with masked validity", + "value": "VHR_IMAGE_2018_Level_1__masked_validity", + }, { + "label": "VHR Image 2018 False Color", + "value": "VHR_IMAGE_2018_Level_1__FALSE_COLOR", + }, { + "label": "VHR Image 2018 NDVI", + "value": "VHR_IMAGE_2018_Level_1__NDVI", + }] + }], + }, + "search": { + "protocol": "OpenSearch", + "url": baseUrl + "opensearch/collections/VHR_IMAGE_2018_Level_1/", + "id": "VHR_IMAGE_2018_Level_1", + "histogramBinCount": 28, + "format": "application/atom+xml", + "method": "GET", + "histogramThreshold": 600, + "lightweightBuckets": true, + "searchLimit": 600, + "loadMore": 600, + "pageSize": 200, + "countZeroRecords": true, + "parameters": [ + { + "max": 100, + "min": 0, + "range": true, + "type": "eo:cloudCover", + "title": "Cloud Coverage" + }, + ], + "parametersFilterSettings": { + "collapsed": false, + }, + }, + "download": { + "protocol": "EO-WCS", + "url": baseUrl + "ows", + // "method": "GET", + "rewrite": { + // add __coverage to the coverageId + "from": "({{id}})", + "to": "$1__coverage" + } + } + }, + { + "id": 'VHR_IMAGE_2018_Level_3', + "displayName": 'VHR Image 2018 Level 3', + "displayColor": '#37eb00', + "display": { + "id": 'VHR_IMAGE_2018_Level_3__TRUE_COLOR', + "visible": true, + "protocol": 'WMS', + "url": baseUrl + 'cache/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "style": '', + "useMilliseconds": false, + "maxZoom": 17, + "options": [{ + "name": "Style", + "target": "display.extraParameters.LAYERS", + "values": [{ + "label": "VHR Image 2018 True Color", + "value": "VHR_IMAGE_2018_Level_3__TRUE_COLOR", + }, { + "label": "VHR Image 2018 True Color with masked validity", + "value": "VHR_IMAGE_2018_Level_3__masked_validity", + }, { + "label": "VHR Image 2018 False Color", + "value": "VHR_IMAGE_2018_Level_3__FALSE_COLOR", + }, { + "label": "VHR Image 2018 NDVI", + "value": "VHR_IMAGE_2018_Level_3__NDVI", + }] + }], + }, + "search": { + "protocol": "OpenSearch", + "url": baseUrl + "opensearch/collections/VHR_IMAGE_2018_Level_3/", + "id": "VHR_IMAGE_2018_Level_3", + "histogramBinCount": 28, + "format": "application/atom+xml", + "method": "GET", + "histogramThreshold": 600, + "lightweightBuckets": true, + "searchLimit": 600, + "loadMore": 600, + "pageSize": 200, + "countZeroRecords": true, + "parameters": [ + { + "max": 100, + "min": 0, + "range": true, + "type": "eo:cloudCover", + "title": "Cloud Coverage" + }, + ], + "parametersFilterSettings": { + "collapsed": false, + }, + }, + "download": { + "protocol": "EO-WCS", + "url": baseUrl + "ows", + // "method": "GET", + "rewrite": { + // add __coverage to the coverageId + "from": "({{id}})", + "to": "$1__coverage" + } + } + }, + ], + "overlayLayers": [ + { + "id": "overlay_base", + "displayName": "EOX Borders and Labels", + "display": { + "id": "overlay_base", + "visible": false, + "protocol": "WMTS", + "urls": [ + "//d.tiles.maps.eox.at/wmts/", + "//e.tiles.maps.eox.at/wmts/" + ], + "matrixSet": "WGS84", + "style": "default", + "format": "image/png", + "projection": "EPSG:4326", + "attribution": "Overlay { Data © <a href=\"//www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, Rendering © <a href=\"//eox.at\" target=\"_blank\">EOX</a> and <a href=\"//github.com/mapserver/basemaps\" target=\"_blank\">MapServer</a> }" + } + }, + { + "id": 'VHR_IMAGE_2018_Level_3__outlines', + "displayName": 'VHR Image 2018 Level 3 Outlines', + "displayColor": '#187465', + "display": { + "id": 'VHR_IMAGE_2018_Level_3__outlines', + "visible": false, + "protocol": 'WMS', + "url": baseUrl + 'ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "style": 'red', + "useMilliseconds": false, + "maxZoom": 17, + "synchronizeTime": true, + }, + }, + { + "id": 'VHR_IMAGE_2018_Level_3__masked_validity__Full', + "displayName": 'VHR Image 2018 Level 3 True Color with masked validity Full Coverage', + "display": { + "id": 'VHR_IMAGE_2018_Level_3__masked_validity__Full', + "visible": false, + "protocol": 'WMS', + "url": baseUrl + 'cache/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "maxZoom": 17, + "synchronizeTime": false, + }, + }, + { + "id": 'VHR_IMAGE_2018_Level_3__Full', + "displayName": 'VHR Image 2018 Level 3 True Color Full Coverage', + "display": { + "id": 'VHR_IMAGE_2018_Level_3__Full', + "visible": false, + "protocol": 'WMS', + "url": baseUrl + 'cache/ows', + "format": 'image/png', + "projection": 'EPSG:4326', + "maxZoom": 17, + "synchronizeTime": false, + }, + } + ] +}; + + var app = new Application({ + config: config, + container: document.getElementById('app'), + }); + app.start(); + </script> +</body> +</html> diff --git a/config/vhr18_mapcache-dev.xml b/config/vhr18_mapcache-dev.xml new file mode 100644 index 0000000000000000000000000000000000000000..27e720828974891cae4c9f7295442bb9425cde42 --- /dev/null +++ b/config/vhr18_mapcache-dev.xml @@ -0,0 +1,516 @@ +<mapcache> + <default_format>mixed</default_format> + <format name="mypng" type="PNG"> + <compression>fast</compression> + </format> + <format name="myjpeg" type="JPEG"> + <quality>75</quality> + <photometric>ycbcr</photometric> + </format> + <format name="mixed" type="MIXED"> + <transparent>mypng</transparent> + <opaque>myjpeg</opaque> + </format> + <service type="wms" enabled="true"> + <full_wms>assemble</full_wms> + <resample_mode>bilinear</resample_mode> + <format>mixed</format> + <maxsize>4096</maxsize> + <!-- <forwarding_rule name="wms"> + <param name="SERVICE" type="values">WMS</param> + <http> + <url>http://localhost/browse/ows</url> + </http> + </forwarding_rule> --> + </service> + <service type="wmts" enabled="true"/> + <metadata> + <title>Pre-rendered View Service (pdas) developed by EOX</title> + <abstract>Pre-rendered View Service (pdas) developed by EOX</abstract> + <keyword>view service</keyword> + <accessconstraints>UNKNOWN</accessconstraints> + <fees>UNKNOWN</fees> + <contactname>Stephan Meissl</contactname> + <contactphone>Please contact via mail.</contactphone> + <contactfacsimile>None</contactfacsimile> + <contactorganization>EOX IT Services GmbH</contactorganization> + <contactcity>Vienna</contactcity> + <contactstateorprovince>Vienna</contactstateorprovince> + <contactpostcode>1090</contactpostcode> + <contactcountry>Austria</contactcountry> + <contactelectronicmailaddress>office@eox.at</contactelectronicmailaddress> + <contactposition>CTO</contactposition> + <providername>EOX</providername> + <providerurl>https://eox.at</providerurl> + <inspire_profile>true</inspire_profile> + <inspire_metadataurl>TBD</inspire_metadataurl> + <defaultlanguage>eng</defaultlanguage> + <language>eng</language> + </metadata> + <errors>empty_img</errors> + <lock_dir>/tmp</lock_dir> + <threaded_fetching>true</threaded_fetching> + <cache name="vhr18" type="sqlite3"> + <dbfile>/tmp/cache.db</dbfile> + </cache> + + <!-- SOURCES VHR_IMAGE_2018 --> + <source type="wms" name="vhr18_true_color"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018__TRUE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_validity"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018__masked_validity</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_false_color"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018__FALSE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_ndvi"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018__NDVI</LAYERS> + <STYLES>earth</STYLES> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + + <!-- TILESETS VHR_IMAGE_2018 --> + <tileset name="VHR_IMAGE_2018__TRUE_COLOR"> + <metadata> + <title>VHR Image 2018 True Color</title> + <abstract>VHR Image 2018 True Color</abstract> + </metadata> + <source>vhr18_true_color</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018__masked_validity"> + <metadata> + <title>VHR Image 2018 True Color with masked validity</title> + <abstract>VHR Image 2018 True Color with masked validity</abstract> + </metadata> + <source>vhr18_validity</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018__FALSE_COLOR"> + <metadata> + <title>VHR Image 2018 False Color</title> + <abstract>VHR Image 2018 False Color</abstract> + </metadata> + <source>vhr18_false_color</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018__NDVI"> + <metadata> + <title>VHR Image 2018 NDVI</title> + <abstract>VHR Image 2018 NDVI</abstract> + </metadata> + <source>vhr18_ndvi</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + + <!-- SOURCES VHR_IMAGE_2018_Level_1 --> + <source type="wms" name="vhr18_true_color_l1"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_1__TRUE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_validity_l1"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_1__masked_validity</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_false_color_l1"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_1__FALSE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_ndvi_l1"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_1__NDVI</LAYERS> + <STYLES>earth</STYLES> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + + <!-- TILESETS VHR_IMAGE_2018_Level_1 --> + <tileset name="VHR_IMAGE_2018_Level_1__TRUE_COLOR"> + <metadata> + <title>VHR Image 2018 Level 1 True Color</title> + <abstract>VHR Image 2018 Level 1 True Color</abstract> + </metadata> + <source>vhr18_true_color_l1</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_1__masked_validity"> + <metadata> + <title>VHR Image 2018 Level 1 True Color with masked validity</title> + <abstract>VHR Image 2018 Level 1 True Color with masked validity</abstract> + </metadata> + <source>vhr18_validity_l1</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_1__FALSE_COLOR"> + <metadata> + <title>VHR Image 2018 Level 1 False Color</title> + <abstract>VHR Image 2018 Level 1 False Color</abstract> + </metadata> + <source>vhr18_false_color_l1</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_1__NDVI"> + <metadata> + <title>VHR Image 2018 Level 1 NDVI</title> + <abstract>VHR Image 2018 Level 1 NDVI</abstract> + </metadata> + <source>vhr18_ndvi_l1</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + + <!-- SOURCES VHR_IMAGE_2018_Level_3 --> + <source type="wms" name="vhr18_true_color_l3"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_3__TRUE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_validity_l3"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_3__masked_validity</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_false_color_l3"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_3__FALSE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_ndvi_l3"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_3__NDVI</LAYERS> + <STYLES>earth</STYLES> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + + <!-- TILESETS VHR_IMAGE_2018_Level_3 --> + <tileset name="VHR_IMAGE_2018_Level_3__Full"> + <metadata> + <title>VHR Image 2018 Level 3 True Color Full Coverage</title> + <abstract>VHR Image 2018 Level 3 True Color Full Coverage</abstract> + </metadata> + <source>vhr18_true_color_l3</source> + <cache>vhr18</cache> + <grid restricted_extent="-24.7 27.5 45 71.3" max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_3__masked_validity__Full"> + <metadata> + <title>VHR Image 2018 Level 3 True Color with masked validity Full Coverage</title> + <abstract>VHR Image 2018 Level 3 True Color with masked validity Full Coverage</abstract> + </metadata> + <source>vhr18_validity_l3</source> + <cache>vhr18</cache> + <grid restricted_extent="-24.7 27.5 45 71.3" max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_3__TRUE_COLOR"> + <metadata> + <title>VHR Image 2018 Level 3 True Color</title> + <abstract>VHR Image 2018 Level 3 True Color</abstract> + </metadata> + <source>vhr18_true_color_l3</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_3__masked_validity"> + <metadata> + <title>VHR Image 2018 Level 3 True Color with masked validity</title> + <abstract>VHR Image 2018 Level 3 True Color with masked validity</abstract> + </metadata> + <source>vhr18_validity_l3</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_3__FALSE_COLOR"> + <metadata> + <title>VHR Image 2018 Level 3 False Color</title> + <abstract>VHR Image 2018 Level 3 False Color</abstract> + </metadata> + <source>vhr18_false_color_l3</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_3__NDVI"> + <metadata> + <title>VHR Image 2018 Level 3 NDVI</title> + <abstract>VHR Image 2018 Level 3 NDVI</abstract> + </metadata> + <source>vhr18_ndvi_l3</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + +</mapcache> diff --git a/config/vhr18_mapcache-ops.xml b/config/vhr18_mapcache-ops.xml new file mode 100644 index 0000000000000000000000000000000000000000..d7d6bec9942b7b12ea84a79358c1828f60e9ff09 --- /dev/null +++ b/config/vhr18_mapcache-ops.xml @@ -0,0 +1,520 @@ +<mapcache> + <default_format>mixed</default_format> + <format name="mypng" type="PNG"> + <compression>fast</compression> + </format> + <format name="myjpeg" type="JPEG"> + <quality>75</quality> + <photometric>ycbcr</photometric> + </format> + <format name="mixed" type="MIXED"> + <transparent>mypng</transparent> + <opaque>myjpeg</opaque> + </format> + <service type="wms" enabled="true"> + <full_wms>assemble</full_wms> + <resample_mode>bilinear</resample_mode> + <format>mixed</format> + <maxsize>4096</maxsize> + <!-- <forwarding_rule name="wms"> + <param name="SERVICE" type="values">WMS</param> + <http> + <url>http://localhost/browse/ows</url> + </http> + </forwarding_rule> --> + </service> + <service type="wmts" enabled="true"/> + <metadata> + <title>Pre-rendered View Service (pdas) developed by EOX</title> + <abstract>Pre-rendered View Service (pdas) developed by EOX</abstract> + <url>https://vhr18.pdas.prism.eox.at/cache/ows</url> + <keyword>view service</keyword> + <accessconstraints>UNKNOWN</accessconstraints> + <fees>UNKNOWN</fees> + <contactname>Stephan Meissl</contactname> + <contactphone>Please contact via mail.</contactphone> + <contactfacsimile>None</contactfacsimile> + <contactorganization>EOX IT Services GmbH</contactorganization> + <contactcity>Vienna</contactcity> + <contactstateorprovince>Vienna</contactstateorprovince> + <contactpostcode>1090</contactpostcode> + <contactcountry>Austria</contactcountry> + <contactelectronicmailaddress>office@eox.at</contactelectronicmailaddress> + <contactposition>CTO</contactposition> + <providername>EOX</providername> + <providerurl>https://eox.at</providerurl> + <inspire_profile>true</inspire_profile> + <inspire_metadataurl>TBD</inspire_metadataurl> + <defaultlanguage>eng</defaultlanguage> + <language>eng</language> + </metadata> + <errors>empty_img</errors> + <lock_dir>/tmp</lock_dir> + <threaded_fetching>true</threaded_fetching> + <cache name="vhr18" type="rest"> + <url>{{OS_STORAGE_URL}}/vhr18_cache/{tileset}/{grid}/{dim}/{z}/{x}/{y}.{ext}</url> + <headers> + <X-Auth-Token>{{OS_AUTH_TOKEN}}</X-Auth-Token> + </headers> + </cache> + + <!-- SOURCES VHR_IMAGE_2018 --> + <source type="wms" name="vhr18_true_color"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018__TRUE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_validity"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018__masked_validity</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_false_color"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018__FALSE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_ndvi"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018__NDVI</LAYERS> + <STYLES>earth</STYLES> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + + <!-- TILESETS VHR_IMAGE_2018 --> + <tileset name="VHR_IMAGE_2018__TRUE_COLOR"> + <metadata> + <title>VHR Image 2018 True Color</title> + <abstract>VHR Image 2018 True Color</abstract> + </metadata> + <source>vhr18_true_color</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018__masked_validity"> + <metadata> + <title>VHR Image 2018 True Color with masked validity</title> + <abstract>VHR Image 2018 True Color with masked validity</abstract> + </metadata> + <source>vhr18_validity</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018__FALSE_COLOR"> + <metadata> + <title>VHR Image 2018 False Color</title> + <abstract>VHR Image 2018 False Color</abstract> + </metadata> + <source>vhr18_false_color</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018__NDVI"> + <metadata> + <title>VHR Image 2018 NDVI</title> + <abstract>VHR Image 2018 NDVI</abstract> + </metadata> + <source>vhr18_ndvi</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + + <!-- SOURCES VHR_IMAGE_2018_Level_1 --> + <source type="wms" name="vhr18_true_color_l1"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_1__TRUE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_validity_l1"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_1__masked_validity</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_false_color_l1"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_1__FALSE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_ndvi_l1"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_1__NDVI</LAYERS> + <STYLES>earth</STYLES> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + + <!-- TILESETS VHR_IMAGE_2018_Level_1 --> + <tileset name="VHR_IMAGE_2018_Level_1__TRUE_COLOR"> + <metadata> + <title>VHR Image 2018 Level 1 True Color</title> + <abstract>VHR Image 2018 Level 1 True Color</abstract> + </metadata> + <source>vhr18_true_color_l1</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_1__masked_validity"> + <metadata> + <title>VHR Image 2018 Level 1 True Color with masked validity</title> + <abstract>VHR Image 2018 Level 1 True Color with masked validity</abstract> + </metadata> + <source>vhr18_validity_l1</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_1__FALSE_COLOR"> + <metadata> + <title>VHR Image 2018 Level 1 False Color</title> + <abstract>VHR Image 2018 Level 1 False Color</abstract> + </metadata> + <source>vhr18_false_color_l1</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_1__NDVI"> + <metadata> + <title>VHR Image 2018 Level 1 NDVI</title> + <abstract>VHR Image 2018 Level 1 NDVI</abstract> + </metadata> + <source>vhr18_ndvi_l1</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + + <!-- SOURCES VHR_IMAGE_2018_Level_3 --> + <source type="wms" name="vhr18_true_color_l3"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_3__TRUE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_validity_l3"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_3__masked_validity</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_false_color_l3"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_3__FALSE_COLOR</LAYERS> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + <source type="wms" name="vhr18_ndvi_l3"> + <getmap> + <params> + <LAYERS>VHR_IMAGE_2018_Level_3__NDVI</LAYERS> + <STYLES>earth</STYLES> + <TRANSPARENT>true</TRANSPARENT> + </params> + </getmap> + <http> + <url>http://renderer/ows?</url> + <connection_timeout>10</connection_timeout> + <timeout>120</timeout> + </http> + </source> + + <!-- TILESETS VHR_IMAGE_2018_Level_3 --> + <tileset name="VHR_IMAGE_2018_Level_3__Full"> + <metadata> + <title>VHR Image 2018 Level 3 True Color Full Coverage</title> + <abstract>VHR Image 2018 Level 3 True Color Full Coverage</abstract> + </metadata> + <source>vhr18_true_color_l3</source> + <cache>vhr18</cache> + <grid restricted_extent="-24.7 27.5 45 71.3" max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_3__masked_validity__Full"> + <metadata> + <title>VHR Image 2018 Level 3 True Color with masked validity Full Coverage</title> + <abstract>VHR Image 2018 Level 3 True Color with masked validity Full Coverage</abstract> + </metadata> + <source>vhr18_validity_l3</source> + <cache>vhr18</cache> + <grid restricted_extent="-24.7 27.5 45 71.3" max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_3__TRUE_COLOR"> + <metadata> + <title>VHR Image 2018 Level 3 True Color</title> + <abstract>VHR Image 2018 Level 3 True Color</abstract> + </metadata> + <source>vhr18_true_color_l3</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_3__masked_validity"> + <metadata> + <title>VHR Image 2018 Level 3 True Color with masked validity</title> + <abstract>VHR Image 2018 Level 3 True Color with masked validity</abstract> + </metadata> + <source>vhr18_validity_l3</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_3__FALSE_COLOR"> + <metadata> + <title>VHR Image 2018 Level 3 False Color</title> + <abstract>VHR Image 2018 Level 3 False Color</abstract> + </metadata> + <source>vhr18_false_color_l3</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + <tileset name="VHR_IMAGE_2018_Level_3__NDVI"> + <metadata> + <title>VHR Image 2018 Level 3 NDVI</title> + <abstract>VHR Image 2018 Level 3 NDVI</abstract> + </metadata> + <source>vhr18_ndvi_l3</source> + <cache>vhr18</cache> + <grid max-cached-zoom="15" out-of-zoom-strategy="reassemble">WGS84</grid> + <format>mixed</format> + <metatile>1 1</metatile> + <expires>3600</expires> + <dimensions> + <assembly_type>stack</assembly_type> + <store_assemblies>false</store_assemblies> + <subdimensions_read_only>false</subdimensions_read_only> + <dimension type="sqlite" name="time" default="2017/2019" time="true"> + <dbfile>/cache-db/vhr18_mapcache_cache.sqlite</dbfile> + <list_query>select strftime('%Y-%m-%dT%H:%M:%SZ', MIN(start_time))||'/'||strftime('%Y-%m-%dT%H:%M:%SZ', MAX(end_time)) from time</list_query> + <validate_query>select * from (select strftime('%Y-%m-%dT%H:%M:%SZ',start_time)||'/'||strftime('%Y-%m-%dT%H:%M:%SZ',end_time) as interval from time where (start_time<datetime(:end_timestamp,'unixepoch') and (end_time>datetime(:start_timestamp,'unixepoch')) or (start_time=end_time and start_time<=datetime(:end_timestamp,'unixepoch') and end_time>=datetime(:start_timestamp,'unixepoch'))) and ((maxx>=:minx and minx<=:maxx) or (maxx>180 and (maxx-360.0)>=:minx and (minx-360.0)<=:maxx)) and maxy>=:miny and miny<=:maxy order by end_time desc limit 20) order by interval asc</validate_query> + </dimension> + </dimensions> + </tileset> + +</mapcache> diff --git a/docker-compose.base.ops.yml b/docker-compose.base.ops.yml new file mode 100644 index 0000000000000000000000000000000000000000..8fb37ee3d2fed2f96f2f43e289549e3c92a4b939 --- /dev/null +++ b/docker-compose.base.ops.yml @@ -0,0 +1,35 @@ +version: "3.6" +services: + reverse-proxy: + image: traefik:2.1 + ports: + - target: 80 + published: 80 + protocol: tcp + mode: host + - target: 443 + published: 443 + protocol: tcp + mode: host + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - traefik-data:/etc/traefik/acme + - ./traefik.yml:/etc/traefik/traefik.yml + - ./traefik-dynamic.yml:/etc/traefik/traefik-dynamic.yml + environment: + HTTP_PROXY: "http://172.30.252.68:3128" + HTTPS_PROXY: "http://172.30.252.68:3128" + NO_PROXY: "172.0.0.0/8,192.168.0.0/16,10.0.0.0/8" + deploy: + placement: + constraints: [node.role == manager] + networks: + - vhr18-extnet + - emg-extnet +volumes: + traefik-data: +networks: + vhr18-extnet: + name: vhr18-extnet + emg-extnet: + name: emg-extnet diff --git a/docker-compose.emg.dev.yml b/docker-compose.emg.dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..c0cf7b5fe871f6016e0ea485e9238e1a5a229973 --- /dev/null +++ b/docker-compose.emg.dev.yml @@ -0,0 +1,41 @@ +version: "3.6" +services: + client: + ports: + - "80:80" + configs: + - source: client-dev + target: /usr/share/nginx/html/index.html + renderer: + ports: + - "81:80" + - "82:8080" + volumes: + - type: bind + source: ./data/ + target: /data/ + registrar: + volumes: + - type: bind + source: ./data/ + target: /data/ + - type: bind + source: ./core/ + target: /core/ + cache: + ports: + - "83:80" + volumes: + - type: bind + source: ./data/ + target: /data/ + configs: + - source: mapcache-dev + target: /mapcache-template.xml + preprocessor: + volumes: + - type: tmpfs + target: /tmp + - type: bind + source: ./preprocessor/ + target: /preprocessor/ diff --git a/docker-compose.emg.ops.yml b/docker-compose.emg.ops.yml new file mode 100644 index 0000000000000000000000000000000000000000..5abf2cb20ae1c5101d07ab41e433e74cd86547ec --- /dev/null +++ b/docker-compose.emg.ops.yml @@ -0,0 +1,118 @@ +version: "3.6" +services: + database: + volumes: + - type: tmpfs + target: /dev/shm + tmpfs: + size: 536870912 + renderer: + environment: + INSTALL_DIR: "/var/www/pdas/ops/" + deploy: + labels: + # router for basic auth based access (https) + - "traefik.http.routers.emg-renderer.rule=Host(`emg.pdas.prism.eox.at`, `a.emg.pdas.prism.eox.at`, `b.emg.pdas.prism.eox.at`, `c.emg.pdas.prism.eox.at`, `d.emg.pdas.prism.eox.at`, `e.emg.pdas.prism.eox.at`, `f.emg.pdas.prism.eox.at`, `g.emg.pdas.prism.eox.at`, `h.emg.pdas.prism.eox.at`) && PathPrefix(`/ows`, `/opensearch`, `/admin`)" + - "traefik.http.routers.emg-renderer.middlewares=auth@file,compress@file" + - "traefik.http.routers.emg-renderer.tls=true" + - "traefik.http.routers.emg-renderer.tls.certresolver=default" + - "traefik.http.routers.emg-renderer.entrypoints=https" + # router for basic auth based access (http) + - "traefik.http.routers.emg-renderer-redirect.rule=Host(`emg.pdas.prism.eox.at`, `a.emg.pdas.prism.eox.at`, `b.emg.pdas.prism.eox.at`, `c.emg.pdas.prism.eox.at`, `d.emg.pdas.prism.eox.at`, `e.emg.pdas.prism.eox.at`, `f.emg.pdas.prism.eox.at`, `g.emg.pdas.prism.eox.at`, `h.emg.pdas.prism.eox.at`) && PathPrefix(`/ows`, `/opensearch`, `/admin`)" + - "traefik.http.routers.emg-renderer-redirect.middlewares=redirect@file" + - "traefik.http.routers.emg-renderer-redirect.entrypoints=http" + # router for referrer based access (https) + - "traefik.http.routers.emg-renderer_referer.rule=Host(`emg.pdas.prism.eox.at`, `a.emg.pdas.prism.eox.at`, `b.emg.pdas.prism.eox.at`, `c.emg.pdas.prism.eox.at`, `d.emg.pdas.prism.eox.at`, `e.emg.pdas.prism.eox.at`, `f.emg.pdas.prism.eox.at`, `g.emg.pdas.prism.eox.at`, `h.emg.pdas.prism.eox.at`) && PathPrefix(`/ows`, `/opensearch`, `/admin`) && HeadersRegexp(`Referer`, `(https?://)?(panda.copernicus.eu|panda.cdsv3.eu|panda-demo.ondaprism.eu|emg.pdas.prism.eox.at)/?`)" + - "traefik.http.routers.emg-renderer_referer.middlewares=compress@file" + - "traefik.http.routers.emg-renderer_referer.tls=true" + - "traefik.http.routers.emg-renderer_referer.tls.certresolver=default" + - "traefik.http.routers.emg-renderer_referer.entrypoints=https" + # router for referrer based access (http) + - "traefik.http.routers.emg-renderer_referer-redirect.rule=Host(`emg.pdas.prism.eox.at`, `a.emg.pdas.prism.eox.at`, `b.emg.pdas.prism.eox.at`, `c.emg.pdas.prism.eox.at`, `d.emg.pdas.prism.eox.at`, `e.emg.pdas.prism.eox.at`, `f.emg.pdas.prism.eox.at`, `g.emg.pdas.prism.eox.at`, `h.emg.pdas.prism.eox.at`) && PathPrefix(`/ows`, `/opensearch`, `/admin`) && HeadersRegexp(`Referer`, `(https?://)?(panda.copernicus.eu|panda.cdsv3.eu|panda-demo.ondaprism.eu|emg.pdas.prism.eox.at)/?`)" + - "traefik.http.routers.emg-renderer_referer-redirect.middlewares=redirect@file" + - "traefik.http.routers.emg-renderer_referer-redirect.entrypoints=http" + # general + - "traefik.http.services.emg-renderer.loadbalancer.sticky=false" + - "traefik.http.services.emg-renderer.loadbalancer.server.port=80" + - "traefik.docker.network=pdas_extnet" + - "traefik.docker.lbswarm=true" + - "traefik.enable=true" + resources: + limits: + memory: 12G #TODO 4G ended up with many processes in D state, supposedly because of swapping + networks: + - extnet + cache: + configs: + - source: mapcache-ops + target: /mapcache-template.xml + deploy: + labels: + - "traefik.http.middlewares.cache-stripprefix.stripprefix.prefixes=/cache" + # router for basic auth based access (https) + - "traefik.http.routers.emg-cache.rule=Host(`emg.pdas.prism.eox.at`, `a.emg.pdas.prism.eox.at`, `b.emg.pdas.prism.eox.at`, `c.emg.pdas.prism.eox.at`, `d.emg.pdas.prism.eox.at`, `e.emg.pdas.prism.eox.at`, `f.emg.pdas.prism.eox.at`, `g.emg.pdas.prism.eox.at`, `h.emg.pdas.prism.eox.at`) && PathPrefix(`/cache`)" + - "traefik.http.routers.emg-cache.middlewares=auth@file,cache-stripprefix,compress@file" + - "traefik.http.routers.emg-cache.tls=true" + - "traefik.http.routers.emg-cache.tls.certresolver=default" + - "traefik.http.routers.emg-cache.entrypoints=https" + # router for basic auth based access (http) + - "traefik.http.routers.emg-cache-redirect.rule=Host(`emg.pdas.prism.eox.at`, `a.emg.pdas.prism.eox.at`, `b.emg.pdas.prism.eox.at`, `c.emg.pdas.prism.eox.at`, `d.emg.pdas.prism.eox.at`, `e.emg.pdas.prism.eox.at`, `f.emg.pdas.prism.eox.at`, `g.emg.pdas.prism.eox.at`, `h.emg.pdas.prism.eox.at`) && PathPrefix(`/cache`)" + - "traefik.http.routers.emg-cache-redirect.middlewares=redirect@file" + - "traefik.http.routers.emg-cache-redirect.entrypoints=http" + # router for referrer based access (https) + - "traefik.http.routers.emg-cache_referer.rule=Host(`emg.pdas.prism.eox.at`, `a.emg.pdas.prism.eox.at`, `b.emg.pdas.prism.eox.at`, `c.emg.pdas.prism.eox.at`, `d.emg.pdas.prism.eox.at`, `e.emg.pdas.prism.eox.at`, `f.emg.pdas.prism.eox.at`, `g.emg.pdas.prism.eox.at`, `h.emg.pdas.prism.eox.at`) && PathPrefix(`/cache`) && HeadersRegexp(`Referer`, `(https?://)?(panda.copernicus.eu|panda.cdsv3.eu|panda-demo.ondaprism.eu|emg.pdas.prism.eox.at)/?`)" + - "traefik.http.routers.emg-cache_referer.middlewares=cache-stripprefix,compress@file" + - "traefik.http.routers.emg-cache_referer.tls=true" + - "traefik.http.routers.emg-cache_referer.tls.certresolver=default" + - "traefik.http.routers.emg-cache_referer.entrypoints=https" + # router for referrer based access (http) + - "traefik.http.routers.emg-cache_referer-redirect.rule=Host(`emg.pdas.prism.eox.at`, `a.emg.pdas.prism.eox.at`, `b.emg.pdas.prism.eox.at`, `c.emg.pdas.prism.eox.at`, `d.emg.pdas.prism.eox.at`, `e.emg.pdas.prism.eox.at`, `f.emg.pdas.prism.eox.at`, `g.emg.pdas.prism.eox.at`, `h.emg.pdas.prism.eox.at`) && PathPrefix(`/cache`) && HeadersRegexp(`Referer`, `(https?://)?(panda.copernicus.eu|panda.cdsv3.eu|panda-demo.ondaprism.eu|emg.pdas.prism.eox.at)/?`)" + - "traefik.http.routers.emg-cache_referer-redirect.middlewares=redirect@file" + - "traefik.http.routers.emg-cache_referer-redirect.entrypoints=http" + # general + - "traefik.http.services.emg-cache.loadbalancer.sticky=false" + - "traefik.http.services.emg-cache.loadbalancer.server.port=80" + - "traefik.docker.network=pdas_extnet" + - "traefik.docker.lbswarm=true" + - "traefik.enable=true" + networks: + - extnet + registrar: + environment: + INSTALL_DIR: "/var/www/pdas/ops/" + # redis-manager: + # environment: + # INSTALL_DIR: "/var/www/pdas/ops/" + client: + configs: + - source: client-ops + target: /usr/share/nginx/html/index.html + deploy: + labels: + # router for basic auth based access (https) + - "traefik.http.routers.emg-client.rule=Host(`emg.pdas.prism.eox.at`)" + - "traefik.http.routers.emg-client.middlewares=auth@file,compress@file" + - "traefik.http.routers.emg-client.tls=true" + - "traefik.http.routers.emg-client.tls.certresolver=default" + - "traefik.http.routers.emg-client.entrypoints=https" + # router for basic auth based access (http) + - "traefik.http.routers.emg-client-redirect.rule=Host(`emg.pdas.prism.eox.at`)" + - "traefik.http.routers.emg-client-redirect.middlewares=redirect@file" + - "traefik.http.routers.emg-client-redirect.entrypoints=http" + # general + - "traefik.http.services.emg-client.loadbalancer.sticky=false" + - "traefik.http.services.emg-client.loadbalancer.server.port=80" + - "traefik.docker.network=pdas_extnet" + - "traefik.docker.lbswarm=true" + - "traefik.enable=true" + networks: + - extnet + preprocessor: + volumes: + - type: bind + source: /var/vhr + target: /tmp +networks: + extnet: + name: emg-extnet + external: true diff --git a/docker-compose.emg.yml b/docker-compose.emg.yml new file mode 100644 index 0000000000000000000000000000000000000000..3c2fd623f2c4af169ccd5bc5d974b59a24813167 --- /dev/null +++ b/docker-compose.emg.yml @@ -0,0 +1,171 @@ +version: "3.6" +services: + database: + image: mdillon/postgis:10 + volumes: + - db-data:/var/lib/postgresql/data + env_file: + - env/emg.env + - env/emg_db.env + environment: + INSTANCE_ID: "prism-data-access-server_database" + deploy: + placement: + constraints: [node.role == manager] + networks: + - intnet + redis: + image: redis + volumes: + - redis-data:/data + deploy: + placement: + constraints: [node.role == manager] + networks: + - intnet + renderer: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_core:latest + volumes: + - type: tmpfs + target: /tmp + - type: volume + source: cache-db + target: /cache-db + - type: volume + source: instance-data + target: /var/www/pdas + env_file: + - env/emg.env + - env/emg_db.env + - env/emg_django.env + - env/emg_obs.env + environment: + INSTANCE_ID: "prism-data-access-server_renderer" + INSTALL_DIR: "/var/www/pdas/dev/" + deploy: + replicas: 1 + networks: + - intnet + command: + ["/wait-for-database.sh", "/run-httpd.sh"] + cache: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_cache:latest + volumes: + - type: tmpfs + target: /tmp + - type: volume + source: cache-db + target: /cache-db + env_file: + - env/emg.env + - env/emg_obs.env + environment: + INSTANCE_ID: "prism-data-access-server_cache" + RENDERER_HOST: renderer + deploy: + replicas: 1 + networks: + - intnet + command: + ["/run-httpd.sh"] + seeder: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_cache:latest + volumes: + - type: tmpfs + target: /tmp + - type: volume + source: cache-db + target: /cache-db + env_file: + - env/emg.env + - env/emg_obs.env + - env/emg_redis.env + environment: + INSTANCE_ID: "prism-data-access-server_seeder" + RENDERER_HOST: renderer + deploy: + replicas: 0 + networks: + - intnet + command: + ["/run-seeder.sh"] + preprocessor: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_preprocessor:latest + env_file: + - env/emg.env + - env/emg_obs.env + - env/emg_redis.env + environment: + INSTANCE_ID: "prism-data-access-server_preprocessor" + deploy: + replicas: 1 + networks: + - intnet + command: + ["/run-preprocessor.sh"] + registrar: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_core:latest + volumes: + - type: tmpfs + target: /tmp + - type: volume + source: instance-data + target: /var/www/pdas + env_file: + - env/emg.env + - env/emg_db.env + - env/emg_obs.env + - env/emg_redis.env + environment: + INSTANCE_ID: "prism-data-access-server_registrar" + INSTALL_DIR: "/var/www/pdas/dev/" + SCALEFACTOR: "1" + IN_MEMORY: "false" + deploy: + replicas: 1 + networks: + - intnet + command: + ["/wait-for-database.sh", "/run-registrar.sh"] + # redis-manager: + # image: registry.gitlab.eox.at/esa/prism/vs/pdas_core:latest + # volumes: + # - type: tmpfs + # target: /tmp + # - type: volume + # source: cache-db + # target: /cache-db + # env_file: + # - env/emg.env + # - env/emg_db.env + # - env/emg_redis.env + # environment: + # INSTANCE_ID: "prism-data-access-server_redis-manager" + # INSTALL_DIR: "/var/www/pdas/dev/" + # CACHE_DB_PATH: "/cache-db/emg_mapcache_cache.sqlite" + # deploy: + # replicas: 0 + # networks: + # - intnet + # command: + # ["/wait-for-database.sh", "/run-redis-manager.sh"] + client: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_client:latest + deploy: + replicas: 1 +configs: + mapcache-dev: + file: ./config/emg_mapcache-dev.xml + mapcache-ops: + file: ./config/emg_mapcache-ops.xml + client-dev: + file: ./config/emg_index-dev.html + client-ops: + file: ./config/emg_index-ops.html +volumes: + db-data: + redis-data: + cache-db: + instance-data: +networks: + intnet: diff --git a/docker-compose.vhr18.dev.yml b/docker-compose.vhr18.dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..c0cf7b5fe871f6016e0ea485e9238e1a5a229973 --- /dev/null +++ b/docker-compose.vhr18.dev.yml @@ -0,0 +1,41 @@ +version: "3.6" +services: + client: + ports: + - "80:80" + configs: + - source: client-dev + target: /usr/share/nginx/html/index.html + renderer: + ports: + - "81:80" + - "82:8080" + volumes: + - type: bind + source: ./data/ + target: /data/ + registrar: + volumes: + - type: bind + source: ./data/ + target: /data/ + - type: bind + source: ./core/ + target: /core/ + cache: + ports: + - "83:80" + volumes: + - type: bind + source: ./data/ + target: /data/ + configs: + - source: mapcache-dev + target: /mapcache-template.xml + preprocessor: + volumes: + - type: tmpfs + target: /tmp + - type: bind + source: ./preprocessor/ + target: /preprocessor/ diff --git a/docker-compose.vhr18.ops.yml b/docker-compose.vhr18.ops.yml new file mode 100644 index 0000000000000000000000000000000000000000..248ef7df568430d524789bee6f725cfc9f797ccc --- /dev/null +++ b/docker-compose.vhr18.ops.yml @@ -0,0 +1,118 @@ +version: "3.6" +services: + database: + volumes: + - type: tmpfs + target: /dev/shm + tmpfs: + size: 536870912 + renderer: + environment: + INSTALL_DIR: "/var/www/pdas/ops/" + deploy: + labels: + # router for basic auth based access (https) + - "traefik.http.routers.vhr18-renderer.rule=Host(`vhr18.pdas.prism.eox.at`, `a.vhr18.pdas.prism.eox.at`, `b.vhr18.pdas.prism.eox.at`, `c.vhr18.pdas.prism.eox.at`, `d.vhr18.pdas.prism.eox.at`, `e.vhr18.pdas.prism.eox.at`, `f.vhr18.pdas.prism.eox.at`, `g.vhr18.pdas.prism.eox.at`, `h.vhr18.pdas.prism.eox.at`) && PathPrefix(`/ows`, `/opensearch`, `/admin`)" + - "traefik.http.routers.vhr18-renderer.middlewares=auth@file,compress@file" + - "traefik.http.routers.vhr18-renderer.tls=true" + - "traefik.http.routers.vhr18-renderer.tls.certresolver=default" + - "traefik.http.routers.vhr18-renderer.entrypoints=https" + # router for basic auth based access (http) + - "traefik.http.routers.vhr18-renderer-redirect.rule=Host(`vhr18.pdas.prism.eox.at`, `a.vhr18.pdas.prism.eox.at`, `b.vhr18.pdas.prism.eox.at`, `c.vhr18.pdas.prism.eox.at`, `d.vhr18.pdas.prism.eox.at`, `e.vhr18.pdas.prism.eox.at`, `f.vhr18.pdas.prism.eox.at`, `g.vhr18.pdas.prism.eox.at`, `h.vhr18.pdas.prism.eox.at`) && PathPrefix(`/ows`, `/opensearch`, `/admin`)" + - "traefik.http.routers.vhr18-renderer-redirect.middlewares=redirect@file" + - "traefik.http.routers.vhr18-renderer-redirect.entrypoints=http" + # router for referrer based access (https) + - "traefik.http.routers.vhr18-renderer_referer.rule=Host(`vhr18.pdas.prism.eox.at`, `a.vhr18.pdas.prism.eox.at`, `b.vhr18.pdas.prism.eox.at`, `c.vhr18.pdas.prism.eox.at`, `d.vhr18.pdas.prism.eox.at`, `e.vhr18.pdas.prism.eox.at`, `f.vhr18.pdas.prism.eox.at`, `g.vhr18.pdas.prism.eox.at`, `h.vhr18.pdas.prism.eox.at`) && PathPrefix(`/ows`, `/opensearch`, `/admin`) && HeadersRegexp(`Referer`, `(https?://)?(panda.copernicus.eu|panda.cdsv3.eu|panda-demo.ondaprism.eu|vhr18.pdas.prism.eox.at)/?`)" + - "traefik.http.routers.vhr18-renderer_referer.middlewares=compress@file" + - "traefik.http.routers.vhr18-renderer_referer.tls=true" + - "traefik.http.routers.vhr18-renderer_referer.tls.certresolver=default" + - "traefik.http.routers.vhr18-renderer_referer.entrypoints=https" + # router for referrer based access (http) + - "traefik.http.routers.vhr18-renderer_referer-redirect.rule=Host(`vhr18.pdas.prism.eox.at`, `a.vhr18.pdas.prism.eox.at`, `b.vhr18.pdas.prism.eox.at`, `c.vhr18.pdas.prism.eox.at`, `d.vhr18.pdas.prism.eox.at`, `e.vhr18.pdas.prism.eox.at`, `f.vhr18.pdas.prism.eox.at`, `g.vhr18.pdas.prism.eox.at`, `h.vhr18.pdas.prism.eox.at`) && PathPrefix(`/ows`, `/opensearch`, `/admin`) && HeadersRegexp(`Referer`, `(https?://)?(panda.copernicus.eu|panda.cdsv3.eu|panda-demo.ondaprism.eu|vhr18.pdas.prism.eox.at)/?`)" + - "traefik.http.routers.vhr18-renderer_referer-redirect.middlewares=redirect@file" + - "traefik.http.routers.vhr18-renderer_referer-redirect.entrypoints=http" + # general + - "traefik.http.services.vhr18-renderer.loadbalancer.sticky=false" + - "traefik.http.services.vhr18-renderer.loadbalancer.server.port=80" + - "traefik.docker.network=pdas_extnet" + - "traefik.docker.lbswarm=true" + - "traefik.enable=true" + resources: + limits: + memory: 12G #TODO 4G ended up with many processes in D state, supposedly because of swapping + networks: + - extnet + cache: + configs: + - source: mapcache-ops + target: /mapcache-template.xml + deploy: + labels: + - "traefik.http.middlewares.cache-stripprefix.stripprefix.prefixes=/cache" + # router for basic auth based access (https) + - "traefik.http.routers.vhr18-cache.rule=Host(`vhr18.pdas.prism.eox.at`, `a.vhr18.pdas.prism.eox.at`, `b.vhr18.pdas.prism.eox.at`, `c.vhr18.pdas.prism.eox.at`, `d.vhr18.pdas.prism.eox.at`, `e.vhr18.pdas.prism.eox.at`, `f.vhr18.pdas.prism.eox.at`, `g.vhr18.pdas.prism.eox.at`, `h.vhr18.pdas.prism.eox.at`) && PathPrefix(`/cache`)" + - "traefik.http.routers.vhr18-cache.middlewares=auth@file,cache-stripprefix,compress@file" + - "traefik.http.routers.vhr18-cache.tls=true" + - "traefik.http.routers.vhr18-cache.tls.certresolver=default" + - "traefik.http.routers.vhr18-cache.entrypoints=https" + # router for basic auth based access (http) + - "traefik.http.routers.vhr18-cache-redirect.rule=Host(`vhr18.pdas.prism.eox.at`, `a.vhr18.pdas.prism.eox.at`, `b.vhr18.pdas.prism.eox.at`, `c.vhr18.pdas.prism.eox.at`, `d.vhr18.pdas.prism.eox.at`, `e.vhr18.pdas.prism.eox.at`, `f.vhr18.pdas.prism.eox.at`, `g.vhr18.pdas.prism.eox.at`, `h.vhr18.pdas.prism.eox.at`) && PathPrefix(`/cache`)" + - "traefik.http.routers.vhr18-cache-redirect.middlewares=redirect@file" + - "traefik.http.routers.vhr18-cache-redirect.entrypoints=http" + # router for referrer based access (https) + - "traefik.http.routers.vhr18-cache_referer.rule=Host(`vhr18.pdas.prism.eox.at`, `a.vhr18.pdas.prism.eox.at`, `b.vhr18.pdas.prism.eox.at`, `c.vhr18.pdas.prism.eox.at`, `d.vhr18.pdas.prism.eox.at`, `e.vhr18.pdas.prism.eox.at`, `f.vhr18.pdas.prism.eox.at`, `g.vhr18.pdas.prism.eox.at`, `h.vhr18.pdas.prism.eox.at`) && PathPrefix(`/cache`) && HeadersRegexp(`Referer`, `(https?://)?(panda.copernicus.eu|panda.cdsv3.eu|panda-demo.ondaprism.eu|vhr18.pdas.prism.eox.at)/?`)" + - "traefik.http.routers.vhr18-cache_referer.middlewares=cache-stripprefix,compress@file" + - "traefik.http.routers.vhr18-cache_referer.tls=true" + - "traefik.http.routers.vhr18-cache_referer.tls.certresolver=default" + - "traefik.http.routers.vhr18-cache_referer.entrypoints=https" + # router for referrer based access (http) + - "traefik.http.routers.vhr18-cache_referer-redirect.rule=Host(`vhr18.pdas.prism.eox.at`, `a.vhr18.pdas.prism.eox.at`, `b.vhr18.pdas.prism.eox.at`, `c.vhr18.pdas.prism.eox.at`, `d.vhr18.pdas.prism.eox.at`, `e.vhr18.pdas.prism.eox.at`, `f.vhr18.pdas.prism.eox.at`, `g.vhr18.pdas.prism.eox.at`, `h.vhr18.pdas.prism.eox.at`) && PathPrefix(`/cache`) && HeadersRegexp(`Referer`, `(https?://)?(panda.copernicus.eu|panda.cdsv3.eu|panda-demo.ondaprism.eu|vhr18.pdas.prism.eox.at)/?`)" + - "traefik.http.routers.vhr18-cache_referer-redirect.middlewares=redirect@file" + - "traefik.http.routers.vhr18-cache_referer-redirect.entrypoints=http" + # general + - "traefik.http.services.vhr18-cache.loadbalancer.sticky=false" + - "traefik.http.services.vhr18-cache.loadbalancer.server.port=80" + - "traefik.docker.network=pdas_extnet" + - "traefik.docker.lbswarm=true" + - "traefik.enable=true" + networks: + - extnet + registrar: + environment: + INSTALL_DIR: "/var/www/pdas/ops/" + # redis-manager: + # environment: + # INSTALL_DIR: "/var/www/pdas/ops/" + client: + configs: + - source: client-ops + target: /usr/share/nginx/html/index.html + deploy: + labels: + # router for basic auth based access (https) + - "traefik.http.routers.vhr18-client.rule=Host(`vhr18.pdas.prism.eox.at`)" + - "traefik.http.routers.vhr18-client.middlewares=auth@file,compress@file" + - "traefik.http.routers.vhr18-client.tls=true" + - "traefik.http.routers.vhr18-client.tls.certresolver=default" + - "traefik.http.routers.vhr18-client.entrypoints=https" + # router for basic auth based access (http) + - "traefik.http.routers.vhr18-client-redirect.rule=Host(`vhr18.pdas.prism.eox.at`)" + - "traefik.http.routers.vhr18-client-redirect.middlewares=redirect@file" + - "traefik.http.routers.vhr18-client-redirect.entrypoints=http" + # general + - "traefik.http.services.vhr18-client.loadbalancer.sticky=false" + - "traefik.http.services.vhr18-client.loadbalancer.server.port=80" + - "traefik.docker.network=pdas_extnet" + - "traefik.docker.lbswarm=true" + - "traefik.enable=true" + networks: + - extnet + preprocessor: + volumes: + - type: bind + source: /var/vhr + target: /tmp +networks: + extnet: + name: vhr18-extnet + external: true diff --git a/docker-compose.vhr18.yml b/docker-compose.vhr18.yml new file mode 100644 index 0000000000000000000000000000000000000000..9a4f3388edd820ea383490c106e08cf99b22130d --- /dev/null +++ b/docker-compose.vhr18.yml @@ -0,0 +1,171 @@ +version: "3.6" +services: + database: + image: mdillon/postgis:10 + volumes: + - db-data:/var/lib/postgresql/data + env_file: + - env/vhr18.env + - env/vhr18_db.env + environment: + INSTANCE_ID: "prism-data-access-server_database" + deploy: + placement: + constraints: [node.role == manager] + networks: + - intnet + redis: + image: redis + volumes: + - redis-data:/data + deploy: + placement: + constraints: [node.role == manager] + networks: + - intnet + renderer: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_core:latest + volumes: + - type: tmpfs + target: /tmp + - type: volume + source: cache-db + target: /cache-db + - type: volume + source: instance-data + target: /var/www/pdas + env_file: + - env/vhr18.env + - env/vhr18_db.env + - env/vhr18_django.env + - env/vhr18_obs.env + environment: + INSTANCE_ID: "prism-data-access-server_renderer" + INSTALL_DIR: "/var/www/pdas/dev/" + deploy: + replicas: 1 + networks: + - intnet + command: + ["/wait-for-database.sh", "/run-httpd.sh"] + cache: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_cache:latest + volumes: + - type: tmpfs + target: /tmp + - type: volume + source: cache-db + target: /cache-db + env_file: + - env/vhr18.env + - env/vhr18_obs.env + environment: + INSTANCE_ID: "prism-data-access-server_cache" + RENDERER_HOST: renderer + deploy: + replicas: 1 + networks: + - intnet + command: + ["/run-httpd.sh"] + seeder: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_cache:latest + volumes: + - type: tmpfs + target: /tmp + - type: volume + source: cache-db + target: /cache-db + env_file: + - env/vhr18.env + - env/vhr18_obs.env + - env/vhr18_redis.env + environment: + INSTANCE_ID: "prism-data-access-server_seeder" + RENDERER_HOST: renderer + deploy: + replicas: 0 + networks: + - intnet + command: + ["/run-seeder.sh"] + preprocessor: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_preprocessor:latest + env_file: + - env/vhr18.env + - env/vhr18_obs.env + - env/vhr18_redis.env + environment: + INSTANCE_ID: "prism-data-access-server_preprocessor" + deploy: + replicas: 1 + networks: + - intnet + command: + ["/run-preprocessor.sh"] + registrar: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_core:latest + volumes: + - type: tmpfs + target: /tmp + - type: volume + source: instance-data + target: /var/www/pdas + env_file: + - env/vhr18.env + - env/vhr18_db.env + - env/vhr18_obs.env + - env/vhr18_redis.env + environment: + INSTANCE_ID: "prism-data-access-server_registrar" + INSTALL_DIR: "/var/www/pdas/dev/" + SCALEFACTOR: "1" + IN_MEMORY: "false" + deploy: + replicas: 1 + networks: + - intnet + command: + ["/wait-for-database.sh", "/run-registrar.sh"] + # redis-manager: + # image: registry.gitlab.eox.at/esa/prism/vs/pdas_core:latest + # volumes: + # - type: tmpfs + # target: /tmp + # - type: volume + # source: cache-db + # target: /cache-db + # env_file: + # - env/vhr18.env + # - env/vhr18_db.env + # - env/vhr18_redis.env + # environment: + # INSTANCE_ID: "prism-data-access-server_redis-manager" + # INSTALL_DIR: "/var/www/pdas/dev/" + # CACHE_DB_PATH: "/cache-db/vhr18_mapcache_cache.sqlite" + # deploy: + # replicas: 0 + # networks: + # - intnet + # command: + # ["/wait-for-database.sh", "/run-redis-manager.sh"] + client: + image: registry.gitlab.eox.at/esa/prism/vs/pdas_client:latest + deploy: + replicas: 1 +configs: + mapcache-dev: + file: ./config/vhr18_mapcache-dev.xml + mapcache-ops: + file: ./config/vhr18_mapcache-ops.xml + client-dev: + file: ./config/vhr18_index-dev.html + client-ops: + file: ./config/vhr18_index-ops.html +volumes: + db-data: + redis-data: + cache-db: + instance-data: +networks: + intnet: diff --git a/env/emg.env b/env/emg.env new file mode 100644 index 0000000000000000000000000000000000000000..75b1cd21157bbc350b10c8586afe561b1a939936 --- /dev/null +++ b/env/emg.env @@ -0,0 +1,4 @@ +COLLECTION=Emergency + +GDAL_DISABLE_READDIR_ON_OPEN=TRUE +CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.TIF,.tif,.xml diff --git a/env/emg_redis.env b/env/emg_redis.env new file mode 100644 index 0000000000000000000000000000000000000000..45dcfdf80c5dbf4b1dcdfccaba2671ee2b57d7ef --- /dev/null +++ b/env/emg_redis.env @@ -0,0 +1,10 @@ +REDIS_HOST=redis +REDIS_PORT=6379 + +REDIS_QUEUE_KEY=seed_queue + +REDIS_PREPROCESS_QUEUE_KEY=preprocess_queue +REDIS_REGISTER_QUEUE_KEY=register_queue +REDIS_REGISTERED_SET_KEY=registered_set +REDIS_SET_KEY=registered_set +REDIS_SEED_QUEUE_KEY=seed_queue diff --git a/env/vhr18.env b/env/vhr18.env new file mode 100644 index 0000000000000000000000000000000000000000..8c04b00bf71965ffbbdfcbebfe83df770577fdcb --- /dev/null +++ b/env/vhr18.env @@ -0,0 +1,4 @@ +COLLECTION=VHR_IMAGE_2018 + +GDAL_DISABLE_READDIR_ON_OPEN=TRUE +CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.TIF,.tif,.xml diff --git a/env/vhr18_redis.env b/env/vhr18_redis.env new file mode 100644 index 0000000000000000000000000000000000000000..45dcfdf80c5dbf4b1dcdfccaba2671ee2b57d7ef --- /dev/null +++ b/env/vhr18_redis.env @@ -0,0 +1,10 @@ +REDIS_HOST=redis +REDIS_PORT=6379 + +REDIS_QUEUE_KEY=seed_queue + +REDIS_PREPROCESS_QUEUE_KEY=preprocess_queue +REDIS_REGISTER_QUEUE_KEY=register_queue +REDIS_REGISTERED_SET_KEY=registered_set +REDIS_SET_KEY=registered_set +REDIS_SEED_QUEUE_KEY=seed_queue diff --git a/traefik-dynamic.yml b/traefik-dynamic.yml new file mode 100644 index 0000000000000000000000000000000000000000..ba98c73d32af893942e58a2fb8432848dde2fc80 --- /dev/null +++ b/traefik-dynamic.yml @@ -0,0 +1,27 @@ +http: + routers: + api: + rule: Host(`traefik.pvs.prism.eox.at`) + entrypoints: + - https + service: api@internal + middlewares: + - apiauth + tls: + certResolver: default + middlewares: + apiauth: + basicAuth: + realm: "PRISM View Service (PVS)" + users: + - "admin:$apr1$yMS.cUYq$OPndZ1FdVJOcMPJWMUyH31" + auth: + basicAuth: + realm: "PRISM View Service (PVS)" + users: + - "pvs:$apr1$9rZwIkiK$DefOrsMTP70vKagihFsyO1" + compress: + compress: {} + redirect: + redirectScheme: + scheme: https diff --git a/traefik.yml b/traefik.yml new file mode 100644 index 0000000000000000000000000000000000000000..e0c90fffffa7ab724ec5ed02ec3025fba758100c --- /dev/null +++ b/traefik.yml @@ -0,0 +1,31 @@ +global: + checkNewVersion: false + sendAnonymousUsage: false +entryPoints: + http: + address: :80 + https: + address: :443 +providers: + providersThrottleDuration: 5s + file: + filename: /etc/traefik/traefik-dynamic.yml + docker: + watch: true + endpoint: unix:///var/run/docker.sock + swarmMode: true + swarmModeRefreshSeconds: 15s + exposedByDefault: false + network: pdas_extnet +api: + dashboard: true +log: + level: WARN +accessLog: {} +certificatesResolvers: + default: + acme: + email: office@eox.at + storage: /etc/traefik/acme/acme.json + httpChallenge: + entryPoint: http