diff --git a/.gitignore b/.gitignore index 77d609d1d..c8a6a99ac 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ dist-electron dist-src-electron .vscode storage/**/*.zip +download +*.ipynb diff --git a/ci/cloudbuild-tiles-reproject.yaml b/ci/cloudbuild-tiles-reproject.yaml new file mode 100644 index 000000000..bfa68ecc8 --- /dev/null +++ b/ci/cloudbuild-tiles-reproject.yaml @@ -0,0 +1,46 @@ +steps: + - name: gcr.io/cloud-builders/gsutil + id: 'download-netcdfs' + entrypoint: '/bin/bash' + args: + - "-c" + - "mkdir /data/netcdfs && gsutil -m cp -r gs://esa-cfs-cate-data/${_LAYER_ID}/*.nc /data/netcdfs/" + + - name: gcr.io/esa-climate-from-space/cate:latest + id: 'cate-export-data-cube' + entrypoint: '/bin/bash' + args: + - "-c" + - "conda run -n cate-env python data/write-zarr.py --layer ${_LAYER_ID} --variable ${_VARIABLE_ID} --zoom-levels ${_ZOOM_LEVELS} --min ${_MIN} --max ${_MAX}" + + - name: geographica/gdal2:2.4.0 + id: 'gdal-generate-tiles' + entrypoint: '/bin/bash' + args: + - "./data/gdal-reproject.sh" + - "${_VARIABLE_ID}" + - "${_MIN_LON} ${_MIN_LAT} ${_MAX_LON} ${_MAX_LAT}" + - "${_ZOOM_LEVELS}" + + - name: gcr.io/esa-climate-from-space/tile-mover + id: 'prepare-upload' + entrypoint: '/bin/bash' + args: + - "./data/prepare-tile-upload.sh" + - "${_VARIABLE_ID}" + - "${_LAYER_ID}" + + - name: gcr.io/cloud-builders/gsutil + id: 'upload-to-storage' + args: + - "-m" + - "cp" + - "-r" + - "/data/upload/${_LAYER_ID}/*" + - "gs://esa-cfs-tiles/${_VERSION}/${_LAYER_ID}/" + +options: + diskSizeGb: 50 + volumes: + - name: 'vol1' + path: '/data' diff --git a/data/add-time-coordinate.py b/data/add-time-coordinate.py new file mode 100644 index 000000000..03765bf2a --- /dev/null +++ b/data/add-time-coordinate.py @@ -0,0 +1,17 @@ +import os +import xarray as xr +import pandas as pd +from argparse import ArgumentParser + +parser = ArgumentParser() +parser.add_argument("-f", "--file", dest="file") +parser.add_argument("-t", "--timestamp", dest="timestamp") +args = parser.parse_args() + +ds = xr.open_dataset(args.file, decode_cf=False) + +new_time = pd.to_datetime([args.timestamp]) +ds = ds.expand_dims(dim={'time': new_time}, axis=0) + +os.remove(args.file) +ds.to_netcdf(args.file, format='NETCDF4_CLASSIC', mode='w') diff --git a/data/downloads/odp-ftp-aerosol.sh b/data/downloads/odp-ftp-aerosol.sh new file mode 100755 index 000000000..4f7c3b05a --- /dev/null +++ b/data/downloads/odp-ftp-aerosol.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/aerosol/data/AATSR_SU/L3/v4.21/MONTHLY/" +START_DATE=2002-07-01 +OUTPUT_FODLER=./download + +for i in {0..24} +do + NEXT_YEAR=$(date +%Y -d "$START_DATE + $i month") + NEXT_MONTH=$(date +%Y%m -d "$START_DATE + $i month") + NEXT_DATE=$(date +%Y-%m-%d -d "$START_DATE + $i month") + FILENAME=$OUTPUT_FODLER/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FTP_URL=$BASE_URL$NEXT_YEAR/$NEXT_MONTH-ESACCI-L3C_AEROSOL-AER_PRODUCTS-AATSR_ENVISAT-SU_MONTHLY-v4.21.nc + echo $FTP_URL + + curl --silent $FTP_URL > $FILENAME + + python ./data/drop-unused-vars.py --file $FILENAME --variable AOD550_mean + python ./data/add-time-coordinate.py --file $FILENAME --timestamp $NEXT_DATE +done diff --git a/data/downloads/odp-ftp-cloud.sh b/data/downloads/odp-ftp-cloud.sh new file mode 100644 index 000000000..4838c403f --- /dev/null +++ b/data/downloads/odp-ftp-cloud.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/ocean_colour/data/v4.0-release/geographic/netcdf/chlor_a/monthly/v4.0/" +START_DATE=1997-09-01 +OUTPUT_FODLER=./download + +for i in {0..10} +do + NEXT_YEAR=$(date +%Y -d "$START_DATE + $i month") + NEXT_MONTH=$(date +%Y%m -d "$START_DATE + $i month") + FILENAME=$OUTPUT_FODLER/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FTP_URL=$BASE_URL$NEXT_YEAR/ESACCI-OC-L3S-CHLOR_A-MERGED-1M_MONTHLY_4km_GEO_PML_OCx-$NEXT_MONTH-fv4.0.nc + echo $FTP_URL + + curl --silent $FTP_URL > $FILENAME + + python ./data/drop-unused-vars.py --file $FILENAME --variable chlor_a +done diff --git a/data/downloads/odp-ftp-fire.sh b/data/downloads/odp-ftp-fire.sh new file mode 100755 index 000000000..5562fbe28 --- /dev/null +++ b/data/downloads/odp-ftp-fire.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/fire/data/burned_area/MODIS/grid/v5.1" +START_DATE=2001-01-01 +OUTPUT_FOLDER=./download + +for i in {0..4} +do + NEXT_YEAR=$(date +%Y -d "$START_DATE + $i month") + NEXT_DATE_SPACE=$(date +%Y%m%d -d "$START_DATE + $i month") + FILENAME=$OUTPUT_FOLDER/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FTP_URL=$BASE_URL/$NEXT_YEAR/$NEXT_DATE_SPACE"-ESACCI-L4_FIRE-BA-MODIS-fv5.1.nc" + echo $FTP_URL + + curl --silent $FTP_URL > $FILENAME + + python ./data/drop-unused-vars.py --file $FILENAME --variable burned_area +done diff --git a/data/downloads/odp-ftp-greenland-ice.sh b/data/downloads/odp-ftp-greenland-ice.sh new file mode 100755 index 000000000..754228c66 --- /dev/null +++ b/data/downloads/odp-ftp-greenland-ice.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/ice_sheets_greenland/data/greenland_surface_elevation_change/v1.2/RT_XO_" + +OUTPUT_FODLER=./download + +curl --silent $BASE_URL"1996_2000.nc" > $OUTPUT_FODLER/2000-01-01.nc +curl --silent $BASE_URL"1997_2001.nc" > $OUTPUT_FODLER/2001-01-01.nc +curl --silent $BASE_URL"1998_2002.nc" > $OUTPUT_FODLER/2002-01-01.nc +curl --silent $BASE_URL"2003_2007.nc" > $OUTPUT_FODLER/2007-01-01.nc +curl --silent $BASE_URL"2004_2008.nc" > $OUTPUT_FODLER/2008-01-01.nc +curl --silent $BASE_URL"2005_2009.nc" > $OUTPUT_FODLER/2009-01-01.nc +curl --silent $BASE_URL"2006_2010.nc" > $OUTPUT_FODLER/2010-01-01.nc + +python ./data/add-time-coordinate.py --file $OUTPUT_FODLER/2000-01-01.nc --timestamp 2000-01-01 +python ./data/add-time-coordinate.py --file $OUTPUT_FODLER/2001-01-01.nc --timestamp 2001-01-01 +python ./data/add-time-coordinate.py --file $OUTPUT_FODLER/2002-01-01.nc --timestamp 2002-01-01 +python ./data/add-time-coordinate.py --file $OUTPUT_FODLER/2007-01-01.nc --timestamp 2007-01-01 +python ./data/add-time-coordinate.py --file $OUTPUT_FODLER/2008-01-01.nc --timestamp 2008-01-01 +python ./data/add-time-coordinate.py --file $OUTPUT_FODLER/2009-01-01.nc --timestamp 2009-01-01 +python ./data/add-time-coordinate.py --file $OUTPUT_FODLER/2010-01-01.nc --timestamp 2010-01-01 diff --git a/data/downloads/odp-ftp-land-cover.sh b/data/downloads/odp-ftp-land-cover.sh new file mode 100755 index 000000000..2094edb90 --- /dev/null +++ b/data/downloads/odp-ftp-land-cover.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/land_cover/data/land_cover_maps/v2.0.7/ESACCI-LC-L4-LCCS-Map-300m-P1Y-" +START_DATE=1992-01-01 +OUTPUT_FODLER=./download + +for i in {0..2} +do + NEXT_YEAR=$(date +%Y -d "$START_DATE + $i year") + FILENAME=$OUTPUT_FODLER/$(date +%Y%m%d -d "$START_DATE + $i year").nc + FTP_URL=$BASE_URL$NEXT_YEAR-v2.0.7b.nc + echo $FTP_URL + + curl --silent $FTP_URL > $FILENAME + + python ./data/drop-unused-vars.py --file $FILENAME --variable lccs_class + python ./data/add-time-coordinate.py --file $FILENAME --timestamp $NEXT_DATE +done diff --git a/data/downloads/odp-ftp-ozone.sh b/data/downloads/odp-ftp-ozone.sh new file mode 100755 index 000000000..6b1dbc7c9 --- /dev/null +++ b/data/downloads/odp-ftp-ozone.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/ozone/data/total_columns/l3/merged/v0100" +START_DATE=2001-04-01 +OUTPUT_FODLER=./download + +for i in {0..10} +do + NEXT_YEAR=$(date +%Y -d "$START_DATE + $i month") + NEXT_MONTH=$(date +%Y%m%d -d "$START_DATE + $i month") + NEXT_DATE=$(date +%Y-%m-%d -d "$START_DATE + $i month") + FILENAME=$OUTPUT_FODLER/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FTP_URL=$BASE_URL/$NEXT_YEAR/ESACCI-OZONE-L3S-TC-MERGED-DLR_1M-$NEXT_MONTH-fv0100.nc + echo $FTP_URL + + curl --silent $FTP_URL > $FILENAME + + python ./data/drop-unused-vars.py --file $FILENAME --variable atmosphere_mole_content_of_ozone + python ./data/add-time-coordinate.py --file $FILENAME --timestamp $NEXT_DATE +done diff --git a/data/downloads/odp-ftp-permafrost.sh b/data/downloads/odp-ftp-permafrost.sh new file mode 100755 index 000000000..c20f9ab24 --- /dev/null +++ b/data/downloads/odp-ftp-permafrost.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/permafrost/data/permafrost_extent/L4/area4/pp/v01.0/ESACCI-PERMAFROST-L4-MODIS-PFR-AREA4_PP" +START_DATE=2003-01-01 +OUTPUT_FODLER=./download + +for i in {0..5} +do + NEXT_YEAR=$(date +%Y -d "$START_DATE + $i month") + NEXT_DATE=$(date +%Y-%m-%d -d "$START_DATE + $i month") + FILENAME=$OUTPUT_FODLER/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FTP_URL=$BASE_URL"-"$NEXT_YEAR"-fv01.0.nc" + echo $FTP_URL + + curl --silent $FTP_URL > $FILENAME + + python ./data/add-time-coordinate.py --file $FILENAME --timestamp $NEXT_DATE +done diff --git a/data/downloads/odp-ftp-sea-ice.sh b/data/downloads/odp-ftp-sea-ice.sh new file mode 100755 index 000000000..77dc50c5f --- /dev/null +++ b/data/downloads/odp-ftp-sea-ice.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +BASE_URL_SH="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/sea_ice/data/sea_ice_concentration/L4/amsr/25km/v2.1/SH" +BASE_URL_NH="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/sea_ice/data/sea_ice_concentration/L4/amsr/25km/v2.1/NH" +START_DATE=2002-06-01 +OUTPUT_FODLER=./download + +mkdir $OUTPUT_FODLER/NH +mkdir $OUTPUT_FODLER/SH + +for i in {0..5} +do + NEXT_YEAR=$(date +%Y/%m -d "$START_DATE + $i month") + NEXT_MONTH=$(date +%Y%m%d -d "$START_DATE + $i month") + FILENAME_SH=$OUTPUT_FODLER/SH/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FILENAME_NH=$OUTPUT_FODLER/NH/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FTP_URL_SH=$BASE_URL_SH/$NEXT_YEAR/ESACCI-SEAICE-L4-SICONC-AMSR_25.0kmEASE2-SH-$NEXT_MONTH-fv2.1.nc + FTP_URL_NH=$BASE_URL_NH/$NEXT_YEAR/ESACCI-SEAICE-L4-SICONC-AMSR_25.0kmEASE2-NH-$NEXT_MONTH-fv2.1.nc + echo $FTP_URL_SH + curl --silent $FTP_URL_SH > $FILENAME_SH + # python ./data/drop-unused-vars.py --file $FILENAME_SH --variable ice_conc + echo $FTP_URL_NH + curl --silent $FTP_URL_NH > $FILENAME_NH + # python ./data/drop-unused-vars.py --file $FILENAME_NH --variable ice_conc +done diff --git a/data/downloads/odp-ftp-sea-level.sh b/data/downloads/odp-ftp-sea-level.sh new file mode 100755 index 000000000..74784f6fa --- /dev/null +++ b/data/downloads/odp-ftp-sea-level.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/sea_level/data/L4/MSLA/v2.0/" +START_DATE=1994-01-15 +OUTPUT_FODLER=./download + +for i in {0..10} +do + NEXT_YEAR=$(date +%Y -d "$START_DATE + $i month") + NEXT_MONTH=$(date +%Y%m%d -d "$START_DATE + $i month") + NEXT_DATE=$(date +%Y-%m-%d -d "$START_DATE + $i month") + FILENAME=$OUTPUT_FODLER/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FTP_URL=$BASE_URL/$NEXT_YEAR/ESACCI-SEALEVEL-L4-MSLA-MERGED-$NEXT_MONTH"000000-fv02.nc" + echo $FTP_URL + + curl --silent $FTP_URL > $FILENAME + + python ./data/drop-unused-vars.py --file $FILENAME --variable sla + python ./data/add-time-coordinate.py --file $FILENAME --timestamp $NEXT_DATE +done diff --git a/data/downloads/odp-ftp-sea-state.sh b/data/downloads/odp-ftp-sea-state.sh new file mode 100755 index 000000000..e1350c976 --- /dev/null +++ b/data/downloads/odp-ftp-sea-state.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/sea_state/data/v1.1_release/l4/v1.1" +START_DATE=1993-01-01 +OUTPUT_FODLER=./download + +for i in {0..10} +do + NEXT_YEAR=$(date +%Y -d "$START_DATE + $i month") + NEXT_MONTH=$(date +%Y%m -d "$START_DATE + $i month") + NEXT_DATE=$(date +%Y-%m-%d -d "$START_DATE + $i month") + FILENAME=$OUTPUT_FODLER/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FTP_URL=$BASE_URL/$NEXT_YEAR/ESACCI-SEASTATE-L4-SWH-MULTI_1M-$NEXT_MONTH-fv01.nc + echo $FTP_URL + + curl --silent $FTP_URL > $FILENAME + + python ./data/drop-unused-vars.py --file $FILENAME --variable swh_mean +done diff --git a/data/downloads/odp-ftp-soil-moisture.sh b/data/downloads/odp-ftp-soil-moisture.sh new file mode 100755 index 000000000..362e3b20b --- /dev/null +++ b/data/downloads/odp-ftp-soil-moisture.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + + +ftp://anon-ftp.ceda.ac.uk/neodc/esacci/soil_moisture/data/daily_files/COMBINED/v04.5/1988/ESACCI-SOILMOISTURE-L3S-SSMV-COMBINED-198802000000-fv04.5.nc + + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/soil_moisture/data/daily_files/COMBINED/v04.5" +START_DATE=1987-11-01 +OUTPUT_FODLER=./download + +for i in {0..5} +do + NEXT_YEAR=$(date +%Y -d "$START_DATE + $i month") + NEXT_MONTH=$(date +%Y%m%d -d "$START_DATE + $i month") + FILENAME=$OUTPUT_FODLER/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FTP_URL="$BASE_URL/$NEXT_YEAR/ESACCI-SOILMOISTURE-L3S-SSMV-COMBINED-$NEXT_MONTH"000000-fv04.5.nc + echo $FTP_URL + + curl --silent $FTP_URL > $FILENAME + + python ./data/drop-unused-vars.py --file $FILENAME --variable sm +done diff --git a/data/downloads/odp-ftp-sss.sh b/data/downloads/odp-ftp-sss.sh new file mode 100755 index 000000000..dcfae3835 --- /dev/null +++ b/data/downloads/odp-ftp-sss.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +BASE_URL="ftp://anon-ftp.ceda.ac.uk/neodc/esacci/sea_surface_salinity/data/v01.8/30days" +START_DATE=2010-01-01 +OUTPUT_FODLER=./download + +for i in {0..3} +do + NEXT_YEAR=$(date +%Y -d "$START_DATE + $i month") + NEXT_DATE=$(date +%Y%m%d -d "$START_DATE + $i month") + FILENAME=$OUTPUT_FODLER/$(date +%Y%m%d -d "$START_DATE + $i month").nc + FTP_URL=$BASE_URL/$NEXT_YEAR/ESACCI-SEASURFACESALINITY-L4-SSS-MERGED_OI_Monthly_CENTRED_15Day_25km-$NEXT_DATE-fv1.8.nc + echo $FTP_URL + + curl --silent $FTP_URL > $FILENAME + + python ./data/drop-unused-vars.py --file $FILENAME --variable sss +done diff --git a/data/drop-unused-vars.py b/data/drop-unused-vars.py index 929efef74..9299a4e2d 100644 --- a/data/drop-unused-vars.py +++ b/data/drop-unused-vars.py @@ -7,11 +7,9 @@ parser.add_argument("-v", "--variable", dest="variable") args = parser.parse_args() -vars_to_keep = [args.variable, 'lat', 'lon', 'time'] - -ds = xr.open_dataset(args.file) -drop_vars = [v for v in ds.variables if v not in vars_to_keep] -ds_new = ds.drop_vars(drop_vars) +ds = xr.open_dataset(args.file, decode_coords=False, decode_cf=False) +ds_new = ds[args.variable].to_dataset() +ds_new.attrs = ds.attrs os.remove(args.file) ds_new.to_netcdf(args.file, format='NETCDF4_CLASSIC', mode='w') diff --git a/data/gdal-colors/colors-PFR.txt b/data/gdal-colors/colors-PFR.txt new file mode 100644 index 000000000..802ffabf8 --- /dev/null +++ b/data/gdal-colors/colors-PFR.txt @@ -0,0 +1,7 @@ +100 0 0 255 +80 0 155 100 +60 100 155 0 +40 255 255 0 +20 155 255 0 +1 0 255 0 +nv 0 255 255 0 diff --git a/data/gdal-colors/colors-SEC.txt b/data/gdal-colors/colors-SEC.txt new file mode 100644 index 000000000..6aa3ec3f8 --- /dev/null +++ b/data/gdal-colors/colors-SEC.txt @@ -0,0 +1,6 @@ +2 0 255 0 +1 255 255 0 +0 0 0 255 +-1 255 255 0 +-2 0 255 255 +nv 0 0 0 0 diff --git a/data/gdal-colors/colors-greenland.txt b/data/gdal-colors/colors-greenland.txt new file mode 100644 index 000000000..7746691ba --- /dev/null +++ b/data/gdal-colors/colors-greenland.txt @@ -0,0 +1,3 @@ +1.1 255 0 255 +-1.8 0 255 0 +nv 0 0 0 0 diff --git a/data/gdal-colors/colors-ice_conc.txt b/data/gdal-colors/colors-ice_conc.txt new file mode 100644 index 000000000..d08c07529 --- /dev/null +++ b/data/gdal-colors/colors-ice_conc.txt @@ -0,0 +1,3 @@ +10000 255 255 0 +0 255 0 0 +nv 0 255 255 0 diff --git a/data/gdal-colors/colors-lccs_class.txt b/data/gdal-colors/colors-lccs_class.txt new file mode 100644 index 000000000..6c8b78fbe --- /dev/null +++ b/data/gdal-colors/colors-lccs_class.txt @@ -0,0 +1,38 @@ +0.00000 0 0 0 +10.000000 255 255 100 +11.000000 255 255 100 +12.000000 255 255 0 +20.000000 170 240 240 +30.000000 220 240 100 +40.000000 200 200 100 +50.000000 0 100 0 +60.000000 0 160 0 +61.000000 0 160 0 +62.000000 170 200 0 +70.000000 0 60 0 +71.000000 0 60 0 +72.000000 0 80 0 +80.000000 40 80 0 +81.000000 40 80 0 +82.000000 40 100 0 +90.000000 120 130 0 +100.00000 140 160 0 +110.00000 190 150 0 +120.00000 150 100 0 +121.00000 120 75 0 +122.00000 150 100 0 +130.00000 255 180 50 +140.00000 255 220 210 +150.00000 255 235 175 +151.00000 255 200 100 +152.00000 255 210 120 +153.00000 255 235 175 +160.00000 0 120 90 +170.00000 0 150 120 +180.00000 0 220 130 +190.00000 195 20 0 +200.00000 255 245 215 +201.00000 220 220 220 +202.00000 255 245 215 +210.00000 0 70 200 +220.00000 255 255 255 diff --git a/data/gdal-colors/colors-sss.txt b/data/gdal-colors/colors-sss.txt new file mode 100644 index 000000000..802ffabf8 --- /dev/null +++ b/data/gdal-colors/colors-sss.txt @@ -0,0 +1,7 @@ +100 0 0 255 +80 0 155 100 +60 100 155 0 +40 255 255 0 +20 155 255 0 +1 0 255 0 +nv 0 255 255 0 diff --git a/data/gdal-reproject.sh b/data/gdal-reproject.sh new file mode 100755 index 000000000..9fe2012dd --- /dev/null +++ b/data/gdal-reproject.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +VARIABLE=$1 +BOUNDS=$2 +ZOOM_LEVELS=$3 +FOLDER=/data/netcdfs/ +counter=0 + +for file in $(find $FOLDER -name *.nc -type f | sort -n); do + echo "--------------" + echo $file + + gdalwarp \ + -t_srs EPSG:4326 \ + -te $BOUNDS \ + NETCDF:\"$file\":$VARIABLE \ + ./tmp.tif + + gdaldem\ + color-relief \ + ./tmp.tif \ + ./data/gdal-colors/colors-$VARIABLE.txt \ + -alpha ./colored.tif + + gdal2tiles.py \ + --profile geodetic \ + --zoom=$ZOOM_LEVELS \ + --tmscompatible \ + --no-kml \ + --webviewer=none \ + --resampling near \ + --s_srs EPSG:4326 \ + ./colored.tif /data/images/$VARIABLE/$counter + + rm ./tmp.tif + rm ./colored.tif + + counter=$((counter+1)) +done + + + diff --git a/data/layers-config.json b/data/layers-config.json index 79b73ed06..0415ff203 100644 --- a/data/layers-config.json +++ b/data/layers-config.json @@ -7,14 +7,6 @@ "day": "numeric" } }, - "soilmoisture.sm": { - "colorMap": "inferno", - "timeFormat": { - "year": "numeric", - "month": "long", - "day": "2-digit" - } - }, "sst.analysed_sst": { "colorMap": "jet", "timeFormat": { @@ -47,7 +39,7 @@ "day": "2-digit" } }, - "sea_level.local_msl_trend": { + "sea_level.sla": { "colorMap": "gist_rainbow", "timeFormat": { "year": "numeric", @@ -70,5 +62,61 @@ "month": "long", "day": "2-digit" } + }, + "ozone.atmosphere_mole_content_of_ozone": { + "colorMap": "jet", + "timeFormat": { + "year": "numeric", + "month": "long", + "day": "2-digit" + } + }, + "land_cover.lccs_class": { + "colorMap": "gist_rainbow", + "timeFormat": { + "year": "numeric", + "month": "long", + "day": "2-digit" + } + }, + "sea_state.swh_mean": { + "colorMap": "inferno", + "timeFormat": { + "year": "numeric", + "month": "long", + "day": "2-digit" + } + }, + "sea_ice_sh.ice_conc": { + "colorMap": "custom", + "timeFormat": { + "year": "numeric", + "month": "long", + "day": "2-digit" + } + }, + "sea_ice_nh.ice_conc": { + "colorMap": "custom", + "timeFormat": { + "year": "numeric", + "month": "long", + "day": "2-digit" + } + }, + "greenland_ice.sec": { + "colorMap": "custom", + "timeFormat": { + "year": "numeric", + "month": "long", + "day": "2-digit" + } + }, + "permafrost.pfr": { + "colorMap": "custom", + "timeFormat": { + "year": "numeric", + "month": "long", + "day": "2-digit" + } } } diff --git a/data/prepare-tile-upload.sh b/data/prepare-tile-upload.sh old mode 100644 new mode 100755 diff --git a/data/resize-images.sh b/data/resize-images.sh old mode 100644 new mode 100755 diff --git a/data/triggers/aerosol_aod550_mean.sh b/data/triggers/aerosol_aod550_mean.sh new file mode 100755 index 000000000..47121a63d --- /dev/null +++ b/data/triggers/aerosol_aod550_mean.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +TIMEOUT=8000 +LAYER_ID="aerosol.AOD550_mean" +VARIABLE_ID="AOD550_mean" +VERSION="test" +ZOOM_LEVELS="0-3" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX \ + . diff --git a/data/triggers/cloud_cfc.sh b/data/triggers/cloud_cfc.sh new file mode 100755 index 000000000..35d98057e --- /dev/null +++ b/data/triggers/cloud_cfc.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +TIMEOUT=8000 +LAYER_ID="cloud.cfc" +VARIABLE_ID="cfc" +VERSION="test" +ZOOM_LEVELS="0-4" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX \ + . diff --git a/data/triggers/fire_burned_area.sh b/data/triggers/fire_burned_area.sh new file mode 100755 index 000000000..43b672ea3 --- /dev/null +++ b/data/triggers/fire_burned_area.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +TIMEOUT=8000 +LAYER_ID="fire.burned_area" +VARIABLE_ID="burned_area" +VERSION="test" +ZOOM_LEVELS="0-3" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX \ + . diff --git a/data/triggers/greenland_ice_sec.sh b/data/triggers/greenland_ice_sec.sh new file mode 100755 index 000000000..2f867423d --- /dev/null +++ b/data/triggers/greenland_ice_sec.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +TIMEOUT=2000 +LAYER_ID="greenland_ice.sec" +VARIABLE_ID="SEC" +VERSION="0.4.1" +ZOOM_LEVELS="0-3" +MIN_LON="-90" +MAX_LON="7.594643368591434" +MIN_LAT="58.854580820213855" +MAX_LAT="84.00492144822202" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles-reproject.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX,_MIN_LON=$MIN_LON,_MAX_LON=$MAX_LON,_MIN_LAT=$MIN_LAT,_MAX_LAT=$MAX_LAT \ + . diff --git a/data/triggers/land_cover_lccs_class.sh b/data/triggers/land_cover_lccs_class.sh new file mode 100755 index 000000000..251b4de64 --- /dev/null +++ b/data/triggers/land_cover_lccs_class.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +TIMEOUT=8000 +LAYER_ID="land_cover.lccs_class" +VARIABLE_ID="lccs_class" +VERSION="0.4.1" +ZOOM_LEVELS="0-6" +MIN_LON="-180" +MAX_LON="180" +MIN_LAT="-90" +MAX_LAT="90" +MIN=0 +MAX=220 +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# Note! If process takes too long use "-ts 64800 32400 \" in gdalwarp command to +# output only a half-resolution image + +gcloud builds submit --config ./ci/cloudbuild-tiles-reproject.yaml \ + --machine-type=$MACHINE_TYPE \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX,_MIN_LON=$MIN_LON,_MAX_LON=$MAX_LON,_MIN_LAT=$MIN_LAT,_MAX_LAT=$MAX_LAT \ + . diff --git a/data/triggers/oc_chlor_a.sh b/data/triggers/oc_chlor_a.sh index e94be64a7..bd9d40a95 100755 --- a/data/triggers/oc_chlor_a.sh +++ b/data/triggers/oc_chlor_a.sh @@ -14,8 +14,8 @@ if [ ! -f ./package.json ]; then exit 1 fi +# --machine-type=$MACHINE_TYPE \ gcloud builds submit --config ./ci/cloudbuild-tiles.yaml \ - --machine-type=$MACHINE_TYPE \ --timeout=$TIMEOUT \ --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX \ . diff --git a/data/triggers/ozone_atmosphere_mole_content_of_ozone.sh b/data/triggers/ozone_atmosphere_mole_content_of_ozone.sh new file mode 100755 index 000000000..e0a9fc556 --- /dev/null +++ b/data/triggers/ozone_atmosphere_mole_content_of_ozone.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +TIMEOUT=8000 +LAYER_ID="ozone.atmosphere_mole_content_of_ozone" +VARIABLE_ID="atmosphere_mole_content_of_ozone" +VERSION="test" +ZOOM_LEVELS="0-3" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX \ + . diff --git a/data/triggers/permafrost_pfr.sh b/data/triggers/permafrost_pfr.sh new file mode 100755 index 000000000..a0a4fe341 --- /dev/null +++ b/data/triggers/permafrost_pfr.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +TIMEOUT=2000 +LAYER_ID="permafrost.pfr" +VARIABLE_ID="PFR" +VERSION="0.4.1" +ZOOM_LEVELS="0-4" +MIN_LON="-180" +MAX_LON="180" +MIN_LAT="-90" +MAX_LAT="90" +MIN=0 +MAX=100 +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +gcloud builds submit --config ./ci/cloudbuild-tiles-reproject.yaml \ + --machine-type=$MACHINE_TYPE \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX,_MIN_LON=$MIN_LON,_MAX_LON=$MAX_LON,_MIN_LAT=$MIN_LAT,_MAX_LAT=$MAX_LAT \ + . diff --git a/data/triggers/sea_ice_nh_ice_conc.sh b/data/triggers/sea_ice_nh_ice_conc.sh new file mode 100755 index 000000000..42c9ca337 --- /dev/null +++ b/data/triggers/sea_ice_nh_ice_conc.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +TIMEOUT=2000 +LAYER_ID="sea_ice_nh.ice_conc" +VARIABLE_ID="ice_conc" +VERSION="0.4.1" +ZOOM_LEVELS="0-4" +MIN_LON="-180" +MAX_LON="180" +MIN_LAT="16.62393" +MAX_LAT="90" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles-reproject.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX,_MIN_LON=$MIN_LON,_MAX_LON=$MAX_LON,_MIN_LAT=$MIN_LAT,_MAX_LAT=$MAX_LAT \ + . diff --git a/data/triggers/sea_ice_sh_ice_conc.sh b/data/triggers/sea_ice_sh_ice_conc.sh new file mode 100755 index 000000000..024736c64 --- /dev/null +++ b/data/triggers/sea_ice_sh_ice_conc.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +TIMEOUT=2000 +LAYER_ID="sea_ice_sh.ice_conc" +VARIABLE_ID="ice_conc" +VERSION="0.4.1" +ZOOM_LEVELS="0-3" +MIN_LON="-180" +MAX_LON="180" +MIN_LAT="-90" +MAX_LAT="-16.62393" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles-reproject.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX,_MIN_LON=$MIN_LON,_MAX_LON=$MAX_LON,_MIN_LAT=$MIN_LAT,_MAX_LAT=$MAX_LAT \ + . diff --git a/data/triggers/sea_level_sla.sh b/data/triggers/sea_level_sla.sh new file mode 100755 index 000000000..c00705d69 --- /dev/null +++ b/data/triggers/sea_level_sla.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +TIMEOUT=8000 +LAYER_ID="sea_level.sla" +VARIABLE_ID="sla" +VERSION="0.4.1" +ZOOM_LEVELS="0-3" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX \ + . diff --git a/data/triggers/sea_state_swh_mean.sh b/data/triggers/sea_state_swh_mean.sh new file mode 100755 index 000000000..2889cca5e --- /dev/null +++ b/data/triggers/sea_state_swh_mean.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +TIMEOUT=8000 +LAYER_ID="sea_state.swh_mean" +VARIABLE_ID="swh_mean" +VERSION="test" +ZOOM_LEVELS="0-3" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX \ + . diff --git a/data/triggers/sea_surface_salinity_sss.sh b/data/triggers/sea_surface_salinity_sss.sh new file mode 100755 index 000000000..3c21b8912 --- /dev/null +++ b/data/triggers/sea_surface_salinity_sss.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +TIMEOUT=8000 +LAYER_ID="sea_surface_salinity.sss" +VARIABLE_ID="sss" +VERSION="test" +ZOOM_LEVELS="0-3" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX \ + . diff --git a/data/triggers/soil_moisture_sm.sh b/data/triggers/soil_moisture_sm.sh new file mode 100755 index 000000000..c33de1e4c --- /dev/null +++ b/data/triggers/soil_moisture_sm.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +TIMEOUT=8000 +LAYER_ID="soil_moisture.sm" +VARIABLE_ID="sm" +VERSION="test" +ZOOM_LEVELS="0-3" +MIN="auto" +MAX="auto" +MACHINE_TYPE="N1_HIGHCPU_8" + +if [ ! -f ./package.json ]; then + echo "You have to be in the root folder of the project to run this script!" + exit 1 +fi + +# --machine-type=$MACHINE_TYPE \ +gcloud builds submit --config ./ci/cloudbuild-tiles.yaml \ + --timeout=$TIMEOUT \ + --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX \ + . diff --git a/data/triggers/sst_analysed_sst.sh b/data/triggers/sst_analysed_sst.sh index aea6b8af9..5e0d31bd2 100755 --- a/data/triggers/sst_analysed_sst.sh +++ b/data/triggers/sst_analysed_sst.sh @@ -14,8 +14,8 @@ if [ ! -f ./package.json ]; then exit 1 fi +# --machine-type=$MACHINE_TYPE \ gcloud builds submit --config ./ci/cloudbuild-tiles.yaml \ - --machine-type=$MACHINE_TYPE \ --timeout=$TIMEOUT \ --substitutions _LAYER_ID=$LAYER_ID,_VARIABLE_ID=$VARIABLE_ID,_ZOOM_LEVELS=$ZOOM_LEVELS,_VERSION=$VERSION,_MIN=$MIN,_MAX=$MAX \ . diff --git a/data/write-zarr.py b/data/write-zarr.py index 22c6066bf..5cf7a6709 100644 --- a/data/write-zarr.py +++ b/data/write-zarr.py @@ -49,22 +49,24 @@ # clip values here so that we don't have to pass min/max to xcube data_array = data_array.clip(min, max) -# re-chunk to full size chunks so that xcube automatically creates full size images -shape = data_array.shape -data_array = data_array.chunk({'lon': shape[2], 'lat': shape[1]}) +if args.output != None: + # re-chunk to full size chunks so that xcube automatically creates full size images + shape = data_array.shape + data_array = data_array.chunk({'lon': shape[2], 'lat': shape[1]}) -# write zarr file to disk -start_time = time.time() -print('Writing zarr file...') -data_array.to_dataset().to_zarr(args.output) -print(f'Written zarr in {time.time() - start_time}s') + # write zarr file to disk + start_time = time.time() + print('Writing zarr file...') + data_array.to_dataset().to_zarr(args.output) + print(f'Written zarr in {time.time() - start_time}s') -print('Writing style file...') -utility.write_style_file(args.layer_id, args.variable_id, min, max) + print('Writing world file...') + utility.write_world_file(shape) -print('Writing world file...') -utility.write_world_file(shape) + print('Writing style file...') + utility.write_style_file(args.layer_id, args.variable_id, min, max) +# always write metadata file print('Writing metadata file...') total_zoom_levels = int(zoom_levels[1]) + 1 utility.write_metadata_file( @@ -76,6 +78,3 @@ min, max ) - - - diff --git a/storage/layers/layers-de.json b/storage/layers/layers-de.json index defa06a76..15ca3dc51 100644 --- a/storage/layers/layers-de.json +++ b/storage/layers/layers-de.json @@ -1,158 +1,86 @@ [ { "id": "fire.burned_area", - "name": "Verbranntes Gebiet (aus Cate)", + "name": "Fire - Burned Area", "description": "Das ist das verbrannte Gebiet", "link": "http://..." }, { "id": "soilmoisture.sm", - "name": "Bodenfeuchtigkeit (aus Cate)", + "name": "Soil Moisture - SM", "description": "Das ist die Bodenfeuchtigkeit", "link": "http://..." }, { "id": "sst.analysed_sst", - "name": "SST (aus Cate)", + "name": "SST - Analysed SST", "description": "Das ist die Wasseroberflächentemperatur", "link": "http://..." }, { "id": "oc.chlor_a", - "name": "Ocean Color (aus Cate)", + "name": "Ocean Color - Chlor_a", "description": "Das ist die Ozean Farbe", "link": "http://..." }, { - "id": "clouds", - "name": "Wolken Konzentration", - "description": "Das ist der zweite SubLayer", + "id": "aerosol.AOD550_mean", + "name": "Aerosol AOD550_mean", + "description": "Das ist die Aerosol AOD550_mean", "link": "http://..." }, { - "id": "aerosol", - "name": "Aerosol", - "description": "Das ist der Aerosol Layer", + "id": "cloud.cfc", + "name": "Clouds - CFC", + "description": "Das ist die Clouds cfc", "link": "http://..." }, { - "id": "ais", - "name": "Antarktische Eisdecke", - "description": "Das ist der Antarctic Ice Sheet Layer", + "id": "sea_level.sla", + "name": "Sea Level - sla", + "description": "Das ist die ...", "link": "http://..." }, { - "id": "biomass", - "name": "Biomasse", - "description": "Das ist der dritte Layer", + "id": "ozone.atmosphere_mole_content_of_ozone", + "name": "Ozone - Atmosphere Mole", + "description": "Das ist die ...", "link": "http://..." }, { - "id": "fire", - "name": "Feuer", - "description": "Das ist der Fire Layer", + "id": "sea_state.swh_mean", + "name": "Sea State - swh mean", + "description": "Das ist die ...", "link": "http://..." }, { - "id": "glaciers", - "name": "Gletscher", - "description": "Das ist der Glaciers Layer", + "id": "sea_ice_sh.ice_conc", + "name": "Sea Ice SH - Ice Conc", + "description": "Das ist die Eis Konzentration", "link": "http://..." }, { - "id": "greenhouseGases", - "name": "Treibhausgase", - "description": " Das ist der Greenhouse Gases Layer", + "id": "sea_ice_nh.ice_conc", + "name": "Sea Ice NH - Ice Conc", + "description": "Das ist die Eis Konzentration (Norg)", "link": "http://..." }, { - "id": "gis", - "name": "Grönland Eisdecke", - "description": "Das ist der Greenland Ice Sheet Layer", + "id": "greenland_ice.sec", + "name": "Greenland Ice Sheet - SEC", + "description": "Das ist die Grönland Ice Decke", "link": "http://..." }, { - "id": "hrl", - "name": "HR Landabdeckung", - "description": "Das ist der Greenhouse Gases Layer", + "id": "permafrost.pfr", + "name": "Permafrost - PFR", + "description": "Das ist der Permafrost", "link": "http://..." }, { - "id": "lakes", - "name": "Seen", - "description": "Das ist der Lakes Layer", - "link": "http://..." - }, - { - "id": "landCover", - "name": "Landabdeckung", - "description": "Das ist der Land Cover Layer", - "link": "http://..." - }, - { - "id": "lst", - "name": "Temperatur der Landoberfläche", - "description": "Das ist der Land Surface Temperature Layer", - "link": "http://..." - }, - { - "id": "oceanColour", - "name": "Ozeanfarbe", - "description": "Das ist der Ocean Colour Layer", - "link": "http://..." - }, - { - "id": "ozone", - "name": "Ozon", - "description": "Das ist der Ozone Layer", - "link": "http://..." - }, - { - "id": "permafrost", - "name": "Permafrost", - "description": "Das ist der Permafrost Layer", - "link": "http://..." - }, - { - "id": "seaIce", - "name": "Meereis", - "description": "Das ist der Sea Ice Layer", - "link": "http://..." - }, - { - "id": "seaLevel", - "name": "Meeresspiegel", - "description": "Das ist der Sea Level Layer", - "link": "http://..." - }, - { - "id": "seaState", - "name": "Seegang", - "description": "Das ist der Sea State Layer", - "link": "http://..." - }, - { - "id": "seaSurfaceSalinity", - "name": "Salzgehalt der Meeresoberfläche", - "description": "Das ist der Sea Surface Salinity Layer", - "link": "http://..." - }, - { - "id": "snow", - "name": "Schnee", - "description": "Das ist der Snow Layer", - "link": "http://..." - }, - { - "id": "soilMoisture", - "name": "Bodenfeuchtigkeit", - "description": "Das ist der Soil Moisture Layer", - "link": "http://..." - }, - { - "id": "waterVapour", - "name": "Wasserdampf", - "description": "Das ist der Water Vapour Layer", + "id": "land_cover.lccs_class", + "name": "Land Cover - lccs_class", + "description": "Das ist der ...", "link": "http://..." } ] diff --git a/storage/layers/layers-en.json b/storage/layers/layers-en.json index fc5a2239d..ba0100374 100644 --- a/storage/layers/layers-en.json +++ b/storage/layers/layers-en.json @@ -1,152 +1,86 @@ [ { "id": "fire.burned_area", - "name": "Burned Area (from Cate)", - "description": "This is the Burned Area", + "name": "Fire - Burned Area", + "description": "This is the ...", "link": "http://..." }, { "id": "soilmoisture.sm", - "name": "Soil Moisture (from Cate)", - "description": "This is the Soil Moisture", + "name": "Soil Moisture - SM", + "description": "This is the ...", "link": "http://..." }, { "id": "sst.analysed_sst", - "name": "SST (from Cate)", - "description": "This is the Sea Surface Temperature", + "name": "SST - Analysed SST", + "description": "This is the ...", "link": "http://..." }, { "id": "oc.chlor_a", - "name": "Ocean Color (from Cate)", - "description": "This is the Ocean Color", + "name": "Ocean Color - Chlor_a", + "description": "This is the ...", "link": "http://..." }, { - "id": "clouds", - "name": "Cloud Concentration", - "description": "This is the second SubLayer", + "id": "aerosol.AOD550_mean", + "name": "Aerosol AOD550_mean", + "description": "This is the ...", "link": "http://..." }, { - "id": "aerosol", - "name": "Aerosol", - "description": "This is the Aerosol Layer", + "id": "cloud.cfc", + "name": "Clouds - CFC", + "description": "This is the ...", "link": "http://..." }, { - "id": "ais", - "name": "Antarctic Ice Sheet", - "description": "This is the Antarctic Ice Sheet Layer", + "id": "sea_level.sla", + "name": "Sea Level - sla", + "description": "This is the ...", "link": "http://..." }, { - "id": "biomass", - "name": "Biomass", - "description": "This is the dritte Layer", + "id": "ozone.atmosphere_mole_content_of_ozone", + "name": "Ozone - Atmosphere Mole", + "description": "This is the ...", "link": "http://..." }, { - "id": "fire", - "name": "Fire", - "description": "This is the Fire Layer", + "id": "sea_state.swh_mean", + "name": "Sea State - swh mean", + "description": "This is the ...", "link": "http://..." }, { - "id": "greenhouseGases", - "name": "Greenhouse Gases", - "description": "This is the Greenhouse Gases Layer", + "id": "sea_ice_sh.ice_conc", + "name": "Sea Ice SH - Ice Conc", + "description": "This is the ...", "link": "http://..." }, { - "id": "gis", - "name": "Greenland Ice Sheet", - "description": "This is the Greenland Ice Sheet Layer", + "id": "sea_ice_nh.ice_conc", + "name": "Sea Ice NH - Ice Conc", + "description": "This is the ...", "link": "http://..." }, { - "id": "hrl", - "name": "HR Landcover", - "description": "This is the Greenhouse Gases Layer", + "id": "greenland_ice.sec", + "name": "Greenland Ice Sheet - SEC", + "description": "This is the ...", "link": "http://..." }, { - "id": "lakes", - "name": "Lakes", - "description": "This is the Lakes Layer", + "id": "permafrost.pfr", + "name": "Permafrost - PFR", + "description": "This is the ...", "link": "http://..." }, { - "id": "landCover", - "name": "Land Cover", - "description": "This is the Land Cover Layer", - "link": "http://..." - }, - { - "id": "lst", - "name": "Land Surface Temperature", - "description": "This is the Land Surface Temperature Layer", - "link": "http://..." - }, - { - "id": "oceanColour", - "name": "Ocean Colour", - "description": "This is the Ocean Colour Layer", - "link": "http://..." - }, - { - "id": "ozone", - "name": "Ozone", - "description": "This is the Ozone Layer", - "link": "http://..." - }, - { - "id": "permafrost", - "name": "Permafrost", - "description": "This is the Permafrost Layer", - "link": "http://..." - }, - { - "id": "seaIce", - "name": "Sea Ice", - "description": "This is the Sea Ice Layer", - "link": "http://..." - }, - { - "id": "seaLevel", - "name": "Sea Level", - "description": "This is the Sea Level Layer", - "link": "http://..." - }, - { - "id": "seaState", - "name": "Sea State", - "description": "This is the Sea State Layer", - "link": "http://..." - }, - { - "id": "seaSurfaceSalinity", - "name": "Sea Surface Salinity", - "description": "This is the Sea Surface Salinity Layer", - "link": "http://..." - }, - { - "id": "snow", - "name": "Snow", - "description": "This is the Snow Layer", - "link": "http://..." - }, - { - "id": "soilMoisture", - "name": "Soil Moisture", - "description": "This is the Soil Moisture Layer", - "link": "http://..." - }, - { - "id": "waterVapour", - "name": "Water Vapour", - "description": "This is the Water Vapour Layer", + "id": "land_cover.lccs_class", + "name": "Land Cover - lccs_class", + "description": "This is the ...", "link": "http://..." } ]