diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c151941..7ae22734 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,8 @@ - Add new "Biology/Vegetation/Vegetation classification map (1km)" layer from the Raster Circumpolar Arctic Vegetation Map produced by Raynolds et al., 2019. +- Add new "Oceanography/Seawater salinity (25km)" layers from the World Ocean + Atlas 2023. ### Updated diff --git a/qgreenland/ancillary/styles/seawater_salinity.qml b/qgreenland/ancillary/styles/seawater_salinity.qml new file mode 100644 index 00000000..63c0a575 --- /dev/null +++ b/qgreenland/ancillary/styles/seawater_salinity.qml @@ -0,0 +1,222 @@ + + + + 1 + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + None + WholeRaster + Estimated + 0.02 + 0.98 + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + resamplingFilter + + 0 + diff --git a/qgreenland/config/cfg-lock.json b/qgreenland/config/cfg-lock.json index 34dfe2f7..742f4acd 100644 --- a/qgreenland/config/cfg-lock.json +++ b/qgreenland/config/cfg-lock.json @@ -2029,6 +2029,33 @@ "title": "World Digital Magnetic Anomaly Map" } }, + "woa_salinity": { + "assets": { + "seasonal_summer": { + "id": "seasonal_summer", + "urls": [ + "https://www.ncei.noaa.gov/thredds-ocean/fileServer/woa23/DATA/salinity/netcdf/decav91C0/0.25/woa23_decav91C0_s15_04.nc" + ], + "verify_tls": true + }, + "seasonal_winter": { + "id": "seasonal_winter", + "urls": [ + "https://www.ncei.noaa.gov/thredds-ocean/fileServer/woa23/DATA/salinity/netcdf/decav91C0/0.25/woa23_decav91C0_s13_04.nc" + ], + "verify_tls": true + } + }, + "id": "woa_salinity", + "metadata": { + "abstract": "The World Ocean Atlas (WOA) is a collection of objectively\nanalyzed, quality controlled temperature, salinity, oxygen,\nphosphate, silicate, and nitrate means based on profile data from\nthe World Ocean Database (WOD). It can be used to create boundary\nand/or initial conditions for a variety of ocean models, verify\nnumerical simulations of the ocean, and corroborate satellite\ndata.", + "citation": { + "text": "Reagan, J. R., D. Dukhovskoy, D. Seidov, T. P. Boyer,\nR. A. Locarnini, O. K. Baranova, A. V. Mishonov, H. E. Garcia,\nC. Bouchard, S. Cross, C. R. Paver, and Z. Wang (2023). World\nOcean Atlas 2023, Volume 2: Salinity. A. Mishonov Technical\nEd. NOAA Atlas NESDIS (in preparation).", + "url": "https://www.ncei.noaa.gov/products/world-ocean-atlas" + }, + "title": "World Ocean Atlas 2023, Volume 2: Salinity" + } + }, "woa_temperature": { "assets": { "seasonal_summer": { @@ -24864,7 +24891,7 @@ "children": [ { "layer_cfg": { - "description": "Average Seawater temperature at surface depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "description": "Average seawater temperature at surface depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", "id": "woa_0m_temperature_winter", "in_package": true, "input": { @@ -24960,7 +24987,7 @@ }, { "layer_cfg": { - "description": "Average Seawater temperature at surface depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "description": "Average seawater temperature at surface depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", "id": "woa_0m_temperature_summer", "in_package": true, "input": { @@ -25056,7 +25083,7 @@ }, { "layer_cfg": { - "description": "Average Seawater temperature at 50m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "description": "Average seawater temperature at 50m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", "id": "woa_50m_temperature_winter", "in_package": true, "input": { @@ -25152,7 +25179,7 @@ }, { "layer_cfg": { - "description": "Average Seawater temperature at 50m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "description": "Average seawater temperature at 50m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", "id": "woa_50m_temperature_summer", "in_package": true, "input": { @@ -25248,7 +25275,7 @@ }, { "layer_cfg": { - "description": "Average Seawater temperature at 200m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "description": "Average seawater temperature at 200m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", "id": "woa_200m_temperature_winter", "in_package": true, "input": { @@ -25344,7 +25371,7 @@ }, { "layer_cfg": { - "description": "Average Seawater temperature at 200m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "description": "Average seawater temperature at 200m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", "id": "woa_200m_temperature_summer", "in_package": true, "input": { @@ -25440,7 +25467,7 @@ }, { "layer_cfg": { - "description": "Average Seawater temperature at 500m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "description": "Average seawater temperature at 500m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", "id": "woa_500m_temperature_winter", "in_package": true, "input": { @@ -25536,7 +25563,7 @@ }, { "layer_cfg": { - "description": "Average Seawater temperature at 500m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "description": "Average seawater temperature at 500m depth\nin \u00b0C for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", "id": "woa_500m_temperature_summer", "in_package": true, "input": { @@ -25647,6 +25674,793 @@ "show": false } }, + { + "children": [ + { + "layer_cfg": { + "description": "Average seawater salinity at surface depth\nin practical salinity scale (PSS) for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "id": "woa_0m_salinity_winter", + "in_package": true, + "input": { + "asset": { + "id": "seasonal_winter" + }, + "dataset": { + "id": "woa_salinity" + } + }, + "show": false, + "steps": [ + { + "args": [ + "gdal_translate", + "-b", + "1", + "NETCDF:{input_dir}/woa23_decav91C0_s13_04.nc:s_an", + "{output_dir}/extracted.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-t_srs", + "EPSG:3413", + "-r", + "bilinear", + "-tr", + "25000", + "25000", + "-te", + "-5774572.727594967", + "-5774572.727594967", + "5774572.727594967", + "5774572.727594967", + "{input_dir}/extracted.tif", + "{output_dir}/warped.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-cutline", + "{assets_dir}/latitude_shape_40_degrees.geojson", + "-crop_to_cutline", + "-co", + "COMPRESS=DEFLATE", + "{input_dir}/warped.tif", + "{output_dir}/warped_and_cut.tif" + ], + "type": "command" + }, + { + "args": [ + "gdal_translate", + "-co", + "TILED=YES", + "-co", + "COMPRESS=DEFLATE", + "-co", + "PREDICTOR=3", + "{input_dir}/warped_and_cut.tif", + "{output_dir}/compressed.tif" + ], + "type": "command" + }, + { + "args": [ + "cp", + "{input_dir}/compressed.tif", + "{output_dir}/final.tif", + "&&", + "gdaladdo", + "-r", + "average", + "{output_dir}/final.tif", + "2", + "4", + "8", + "16" + ], + "type": "command" + } + ], + "style": "seawater_salinity", + "tags": [], + "title": "Surface, Winter" + }, + "name": "woa_0m_salinity_winter" + }, + { + "layer_cfg": { + "description": "Average seawater salinity at surface depth\nin practical salinity scale (PSS) for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "id": "woa_0m_salinity_summer", + "in_package": true, + "input": { + "asset": { + "id": "seasonal_summer" + }, + "dataset": { + "id": "woa_salinity" + } + }, + "show": false, + "steps": [ + { + "args": [ + "gdal_translate", + "-b", + "1", + "NETCDF:{input_dir}/woa23_decav91C0_s15_04.nc:s_an", + "{output_dir}/extracted.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-t_srs", + "EPSG:3413", + "-r", + "bilinear", + "-tr", + "25000", + "25000", + "-te", + "-5774572.727594967", + "-5774572.727594967", + "5774572.727594967", + "5774572.727594967", + "{input_dir}/extracted.tif", + "{output_dir}/warped.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-cutline", + "{assets_dir}/latitude_shape_40_degrees.geojson", + "-crop_to_cutline", + "-co", + "COMPRESS=DEFLATE", + "{input_dir}/warped.tif", + "{output_dir}/warped_and_cut.tif" + ], + "type": "command" + }, + { + "args": [ + "gdal_translate", + "-co", + "TILED=YES", + "-co", + "COMPRESS=DEFLATE", + "-co", + "PREDICTOR=3", + "{input_dir}/warped_and_cut.tif", + "{output_dir}/compressed.tif" + ], + "type": "command" + }, + { + "args": [ + "cp", + "{input_dir}/compressed.tif", + "{output_dir}/final.tif", + "&&", + "gdaladdo", + "-r", + "average", + "{output_dir}/final.tif", + "2", + "4", + "8", + "16" + ], + "type": "command" + } + ], + "style": "seawater_salinity", + "tags": [], + "title": "Surface, Summer" + }, + "name": "woa_0m_salinity_summer" + }, + { + "layer_cfg": { + "description": "Average seawater salinity at 50m depth\nin practical salinity scale (PSS) for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "id": "woa_50m_salinity_winter", + "in_package": true, + "input": { + "asset": { + "id": "seasonal_winter" + }, + "dataset": { + "id": "woa_salinity" + } + }, + "show": false, + "steps": [ + { + "args": [ + "gdal_translate", + "-b", + "11", + "NETCDF:{input_dir}/woa23_decav91C0_s13_04.nc:s_an", + "{output_dir}/extracted.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-t_srs", + "EPSG:3413", + "-r", + "bilinear", + "-tr", + "25000", + "25000", + "-te", + "-5774572.727594967", + "-5774572.727594967", + "5774572.727594967", + "5774572.727594967", + "{input_dir}/extracted.tif", + "{output_dir}/warped.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-cutline", + "{assets_dir}/latitude_shape_40_degrees.geojson", + "-crop_to_cutline", + "-co", + "COMPRESS=DEFLATE", + "{input_dir}/warped.tif", + "{output_dir}/warped_and_cut.tif" + ], + "type": "command" + }, + { + "args": [ + "gdal_translate", + "-co", + "TILED=YES", + "-co", + "COMPRESS=DEFLATE", + "-co", + "PREDICTOR=3", + "{input_dir}/warped_and_cut.tif", + "{output_dir}/compressed.tif" + ], + "type": "command" + }, + { + "args": [ + "cp", + "{input_dir}/compressed.tif", + "{output_dir}/final.tif", + "&&", + "gdaladdo", + "-r", + "average", + "{output_dir}/final.tif", + "2", + "4", + "8", + "16" + ], + "type": "command" + } + ], + "style": "seawater_salinity", + "tags": [], + "title": "50m, Winter" + }, + "name": "woa_50m_salinity_winter" + }, + { + "layer_cfg": { + "description": "Average seawater salinity at 50m depth\nin practical salinity scale (PSS) for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "id": "woa_50m_salinity_summer", + "in_package": true, + "input": { + "asset": { + "id": "seasonal_summer" + }, + "dataset": { + "id": "woa_salinity" + } + }, + "show": false, + "steps": [ + { + "args": [ + "gdal_translate", + "-b", + "11", + "NETCDF:{input_dir}/woa23_decav91C0_s15_04.nc:s_an", + "{output_dir}/extracted.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-t_srs", + "EPSG:3413", + "-r", + "bilinear", + "-tr", + "25000", + "25000", + "-te", + "-5774572.727594967", + "-5774572.727594967", + "5774572.727594967", + "5774572.727594967", + "{input_dir}/extracted.tif", + "{output_dir}/warped.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-cutline", + "{assets_dir}/latitude_shape_40_degrees.geojson", + "-crop_to_cutline", + "-co", + "COMPRESS=DEFLATE", + "{input_dir}/warped.tif", + "{output_dir}/warped_and_cut.tif" + ], + "type": "command" + }, + { + "args": [ + "gdal_translate", + "-co", + "TILED=YES", + "-co", + "COMPRESS=DEFLATE", + "-co", + "PREDICTOR=3", + "{input_dir}/warped_and_cut.tif", + "{output_dir}/compressed.tif" + ], + "type": "command" + }, + { + "args": [ + "cp", + "{input_dir}/compressed.tif", + "{output_dir}/final.tif", + "&&", + "gdaladdo", + "-r", + "average", + "{output_dir}/final.tif", + "2", + "4", + "8", + "16" + ], + "type": "command" + } + ], + "style": "seawater_salinity", + "tags": [], + "title": "50m, Summer" + }, + "name": "woa_50m_salinity_summer" + }, + { + "layer_cfg": { + "description": "Average seawater salinity at 200m depth\nin practical salinity scale (PSS) for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "id": "woa_200m_salinity_winter", + "in_package": true, + "input": { + "asset": { + "id": "seasonal_winter" + }, + "dataset": { + "id": "woa_salinity" + } + }, + "show": false, + "steps": [ + { + "args": [ + "gdal_translate", + "-b", + "25", + "NETCDF:{input_dir}/woa23_decav91C0_s13_04.nc:s_an", + "{output_dir}/extracted.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-t_srs", + "EPSG:3413", + "-r", + "bilinear", + "-tr", + "25000", + "25000", + "-te", + "-5774572.727594967", + "-5774572.727594967", + "5774572.727594967", + "5774572.727594967", + "{input_dir}/extracted.tif", + "{output_dir}/warped.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-cutline", + "{assets_dir}/latitude_shape_40_degrees.geojson", + "-crop_to_cutline", + "-co", + "COMPRESS=DEFLATE", + "{input_dir}/warped.tif", + "{output_dir}/warped_and_cut.tif" + ], + "type": "command" + }, + { + "args": [ + "gdal_translate", + "-co", + "TILED=YES", + "-co", + "COMPRESS=DEFLATE", + "-co", + "PREDICTOR=3", + "{input_dir}/warped_and_cut.tif", + "{output_dir}/compressed.tif" + ], + "type": "command" + }, + { + "args": [ + "cp", + "{input_dir}/compressed.tif", + "{output_dir}/final.tif", + "&&", + "gdaladdo", + "-r", + "average", + "{output_dir}/final.tif", + "2", + "4", + "8", + "16" + ], + "type": "command" + } + ], + "style": "seawater_salinity", + "tags": [], + "title": "200m, Winter" + }, + "name": "woa_200m_salinity_winter" + }, + { + "layer_cfg": { + "description": "Average seawater salinity at 200m depth\nin practical salinity scale (PSS) for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "id": "woa_200m_salinity_summer", + "in_package": true, + "input": { + "asset": { + "id": "seasonal_summer" + }, + "dataset": { + "id": "woa_salinity" + } + }, + "show": false, + "steps": [ + { + "args": [ + "gdal_translate", + "-b", + "25", + "NETCDF:{input_dir}/woa23_decav91C0_s15_04.nc:s_an", + "{output_dir}/extracted.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-t_srs", + "EPSG:3413", + "-r", + "bilinear", + "-tr", + "25000", + "25000", + "-te", + "-5774572.727594967", + "-5774572.727594967", + "5774572.727594967", + "5774572.727594967", + "{input_dir}/extracted.tif", + "{output_dir}/warped.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-cutline", + "{assets_dir}/latitude_shape_40_degrees.geojson", + "-crop_to_cutline", + "-co", + "COMPRESS=DEFLATE", + "{input_dir}/warped.tif", + "{output_dir}/warped_and_cut.tif" + ], + "type": "command" + }, + { + "args": [ + "gdal_translate", + "-co", + "TILED=YES", + "-co", + "COMPRESS=DEFLATE", + "-co", + "PREDICTOR=3", + "{input_dir}/warped_and_cut.tif", + "{output_dir}/compressed.tif" + ], + "type": "command" + }, + { + "args": [ + "cp", + "{input_dir}/compressed.tif", + "{output_dir}/final.tif", + "&&", + "gdaladdo", + "-r", + "average", + "{output_dir}/final.tif", + "2", + "4", + "8", + "16" + ], + "type": "command" + } + ], + "style": "seawater_salinity", + "tags": [], + "title": "200m, Summer" + }, + "name": "woa_200m_salinity_summer" + }, + { + "layer_cfg": { + "description": "Average seawater salinity at 500m depth\nin practical salinity scale (PSS) for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "id": "woa_500m_salinity_winter", + "in_package": true, + "input": { + "asset": { + "id": "seasonal_winter" + }, + "dataset": { + "id": "woa_salinity" + } + }, + "show": false, + "steps": [ + { + "args": [ + "gdal_translate", + "-b", + "37", + "NETCDF:{input_dir}/woa23_decav91C0_s13_04.nc:s_an", + "{output_dir}/extracted.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-t_srs", + "EPSG:3413", + "-r", + "bilinear", + "-tr", + "25000", + "25000", + "-te", + "-5774572.727594967", + "-5774572.727594967", + "5774572.727594967", + "5774572.727594967", + "{input_dir}/extracted.tif", + "{output_dir}/warped.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-cutline", + "{assets_dir}/latitude_shape_40_degrees.geojson", + "-crop_to_cutline", + "-co", + "COMPRESS=DEFLATE", + "{input_dir}/warped.tif", + "{output_dir}/warped_and_cut.tif" + ], + "type": "command" + }, + { + "args": [ + "gdal_translate", + "-co", + "TILED=YES", + "-co", + "COMPRESS=DEFLATE", + "-co", + "PREDICTOR=3", + "{input_dir}/warped_and_cut.tif", + "{output_dir}/compressed.tif" + ], + "type": "command" + }, + { + "args": [ + "cp", + "{input_dir}/compressed.tif", + "{output_dir}/final.tif", + "&&", + "gdaladdo", + "-r", + "average", + "{output_dir}/final.tif", + "2", + "4", + "8", + "16" + ], + "type": "command" + } + ], + "style": "seawater_salinity", + "tags": [], + "title": "500m, Winter" + }, + "name": "woa_500m_salinity_winter" + }, + { + "layer_cfg": { + "description": "Average seawater salinity at 500m depth\nin practical salinity scale (PSS) for the 1991 - 2020 climate normal period.\n\nClimate normals, defined as 30-year averages of data by the World\nMeteorological Organization (WMO), provide long-term means for\ninitializing models, environmental studies, checking in situ\nobservations, etc.\n\nComparing new observations to the most recent climate normal allows\none to assess whether or not current observations are within the\nstatistical norm in the context of the most recent 30-year\nclimatological background. Additional applications, such as\ninitializing boundary conditions for climate models or assessing\nremotely sensed observations, also require a more recent\nclimatology.", + "id": "woa_500m_salinity_summer", + "in_package": true, + "input": { + "asset": { + "id": "seasonal_summer" + }, + "dataset": { + "id": "woa_salinity" + } + }, + "show": false, + "steps": [ + { + "args": [ + "gdal_translate", + "-b", + "37", + "NETCDF:{input_dir}/woa23_decav91C0_s15_04.nc:s_an", + "{output_dir}/extracted.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-t_srs", + "EPSG:3413", + "-r", + "bilinear", + "-tr", + "25000", + "25000", + "-te", + "-5774572.727594967", + "-5774572.727594967", + "5774572.727594967", + "5774572.727594967", + "{input_dir}/extracted.tif", + "{output_dir}/warped.tif" + ], + "type": "command" + }, + { + "args": [ + "gdalwarp", + "-cutline", + "{assets_dir}/latitude_shape_40_degrees.geojson", + "-crop_to_cutline", + "-co", + "COMPRESS=DEFLATE", + "{input_dir}/warped.tif", + "{output_dir}/warped_and_cut.tif" + ], + "type": "command" + }, + { + "args": [ + "gdal_translate", + "-co", + "TILED=YES", + "-co", + "COMPRESS=DEFLATE", + "-co", + "PREDICTOR=3", + "{input_dir}/warped_and_cut.tif", + "{output_dir}/compressed.tif" + ], + "type": "command" + }, + { + "args": [ + "cp", + "{input_dir}/compressed.tif", + "{output_dir}/final.tif", + "&&", + "gdaladdo", + "-r", + "average", + "{output_dir}/final.tif", + "2", + "4", + "8", + "16" + ], + "type": "command" + } + ], + "style": "seawater_salinity", + "tags": [], + "title": "500m, Summer" + }, + "name": "woa_500m_salinity_summer" + } + ], + "name": "Seawater salinity (25km)", + "settings": { + "expand": false, + "order": [ + ":woa_0m_salinity_winter", + ":woa_0m_salinity_summer", + ":woa_50m_salinity_winter", + ":woa_50m_salinity_summer", + ":woa_200m_salinity_winter", + ":woa_200m_salinity_summer", + ":woa_500m_salinity_winter", + ":woa_500m_salinity_summer" + ], + "show": false + } + }, { "children": [ { @@ -25757,6 +26571,7 @@ "order": [ "Undersea feature names", "Seawater temperature (25km)", + "Seawater salinity (25km)", "Bathymetry" ], "show": false diff --git a/qgreenland/config/datasets/woa.py b/qgreenland/config/datasets/woa.py new file mode 100644 index 00000000..da80b288 --- /dev/null +++ b/qgreenland/config/datasets/woa.py @@ -0,0 +1,82 @@ +from qgreenland.models.config.asset import HttpAsset +from qgreenland.models.config.dataset import Dataset + +TEMPERATURE_BASE_URL = "https://www.ncei.noaa.gov/thredds-ocean/fileServer/woa23/DATA/temperature/netcdf/decav91C0" + +_common_abstract = """The World Ocean Atlas (WOA) is a collection of objectively +analyzed, quality controlled temperature, salinity, oxygen, +phosphate, silicate, and nitrate means based on profile data from +the World Ocean Database (WOD). It can be used to create boundary +and/or initial conditions for a variety of ocean models, verify +numerical simulations of the ocean, and corroborate satellite +data.""" + +# Climatological mean temperature for the global ocean from in situ profile data +woa_temperature = Dataset( + id="woa_temperature", + assets=[ + HttpAsset( + id="seasonal_winter", + urls=[ + f"{TEMPERATURE_BASE_URL}/0.25/woa23_decav91C0_t13_04.nc", + ], + ), + HttpAsset( + id="seasonal_summer", + urls=[ + f"{TEMPERATURE_BASE_URL}/0.25/woa23_decav91C0_t15_04.nc", + ], + ), + ], + metadata={ + "title": "World Ocean Atlas 2023, Volume 1: Temperature.", + "abstract": _common_abstract, + "citation": { + "text": ( + """Locarnini, R. A., O. K. Baranova, A. V. Mishonov, + T. P. Boyer, J. R. Reagan, D. Dukhovskoy, D. Seidov, + H. E. Garcia, C. Bouchard, S. Cross, C. R. Paver, and Z. Wang, + 2023. World Ocean Atlas 2023, Volume 1: Temperature. A. Mishonov + Technical Ed. NOAA Atlas NESDIS (in preparation).""" + ), + "url": "https://www.ncei.noaa.gov/products/world-ocean-atlas", + }, + }, +) + + +SALINITY_BASE_URL = "https://www.ncei.noaa.gov/thredds-ocean/fileServer/woa23/DATA/salinity/netcdf/decav91C0" + + +# Climatological mean salinity for the global ocean from in situ profile data +woa_salinity = Dataset( + id="woa_salinity", + assets=[ + HttpAsset( + id="seasonal_winter", + urls=[ + f"{SALINITY_BASE_URL}/0.25/woa23_decav91C0_s13_04.nc", + ], + ), + HttpAsset( + id="seasonal_summer", + urls=[ + f"{SALINITY_BASE_URL}/0.25/woa23_decav91C0_s15_04.nc", + ], + ), + ], + metadata={ + "title": "World Ocean Atlas 2023, Volume 2: Salinity", + "abstract": _common_abstract, + "citation": { + "text": ( + """Reagan, J. R., D. Dukhovskoy, D. Seidov, T. P. Boyer, + R. A. Locarnini, O. K. Baranova, A. V. Mishonov, H. E. Garcia, + C. Bouchard, S. Cross, C. R. Paver, and Z. Wang (2023). World + Ocean Atlas 2023, Volume 2: Salinity. A. Mishonov Technical + Ed. NOAA Atlas NESDIS (in preparation).""" + ), + "url": "https://www.ncei.noaa.gov/products/world-ocean-atlas", + }, + }, +) diff --git a/qgreenland/config/datasets/woa_temperature.py b/qgreenland/config/datasets/woa_temperature.py deleted file mode 100644 index 42410948..00000000 --- a/qgreenland/config/datasets/woa_temperature.py +++ /dev/null @@ -1,44 +0,0 @@ -from qgreenland.models.config.asset import HttpAsset -from qgreenland.models.config.dataset import Dataset - -BASE_URL = "https://www.ncei.noaa.gov/thredds-ocean/fileServer/woa23/DATA/temperature/netcdf/decav91C0" - -woa_temperature = Dataset( - id="woa_temperature", - assets=[ - HttpAsset( - id="seasonal_winter", - urls=[ - f"{BASE_URL}/0.25/woa23_decav91C0_t13_04.nc", - ], - ), - HttpAsset( - id="seasonal_summer", - urls=[ - f"{BASE_URL}/0.25/woa23_decav91C0_t15_04.nc", - ], - ), - ], - metadata={ - "title": "World Ocean Atlas 2023, Volume 1: Temperature.", - "abstract": ( - """The World Ocean Atlas (WOA) is a collection of objectively - analyzed, quality controlled temperature, salinity, oxygen, - phosphate, silicate, and nitrate means based on profile data from - the World Ocean Database (WOD). It can be used to create boundary - and/or initial conditions for a variety of ocean models, verify - numerical simulations of the ocean, and corroborate satellite - data.""" - ), - "citation": { - "text": ( - """Locarnini, R. A., O. K. Baranova, A. V. Mishonov, - T. P. Boyer, J. R. Reagan, D. Dukhovskoy, D. Seidov, - H. E. Garcia, C. Bouchard, S. Cross, C. R. Paver, and Z. Wang, - 2023. World Ocean Atlas 2023, Volume 1: Temperature. A. Mishonov - Technical Ed. NOAA Atlas NESDIS (in preparation).""" - ), - "url": "https://www.ncei.noaa.gov/products/world-ocean-atlas", - }, - }, -) diff --git a/qgreenland/config/helpers/layers/woa.py b/qgreenland/config/helpers/layers/woa.py index 7d8dfa11..5aa4d850 100644 --- a/qgreenland/config/helpers/layers/woa.py +++ b/qgreenland/config/helpers/layers/woa.py @@ -1,5 +1,13 @@ from itertools import product +from qgreenland.config.helpers.steps.compress_and_add_overviews import ( + compress_and_add_overviews, +) +from qgreenland.config.helpers.steps.warp_and_cut import warp_and_cut +from qgreenland.config.project import project +from qgreenland.models.config.layer import Layer, LayerInput +from qgreenland.models.config.step import CommandStep + def depth_str(depth: int) -> str: if depth == 0: @@ -8,14 +16,13 @@ def depth_str(depth: int) -> str: return f"{depth}m" -def id_str(*, depth: int, season: str) -> str: - return f"woa_{depth}m_temperature_{season}" +def id_str(*, depth: int, season: str, variable: str) -> str: + return f"woa_{depth}m_{variable}_{season}" -SEASONS_FNS: dict[str, str] = { - "winter": "woa23_decav91C0_t13_04.nc", - "summer": "woa23_decav91C0_t15_04.nc", -} +SEASONS = ("winter", "summer") + +# Looks like these are the same for salinity. DEPTHS_BANDS: dict[int, int] = { 0: 1, 50: 11, @@ -24,10 +31,96 @@ def id_str(*, depth: int, season: str) -> str: } # Sort by season first, then by depth -COMBINATIONS = list(product(SEASONS_FNS.keys(), DEPTHS_BANDS.keys())) -COMBINATIONS.sort(key=lambda x: x[0], reverse=True) -COMBINATIONS.sort(key=lambda x: x[1]) +TEMPERATURE_COMBINATIONS = list(product(SEASONS, DEPTHS_BANDS.keys())) +TEMPERATURE_COMBINATIONS.sort(key=lambda x: x[0], reverse=True) +TEMPERATURE_COMBINATIONS.sort(key=lambda x: x[1]) -WOA_LAYER_ORDER = [ - id_str(depth=depth, season=season) for (season, depth) in COMBINATIONS +SALINITY_COMBINATIONS = list(product(SEASONS, DEPTHS_BANDS.keys())) +SALINITY_COMBINATIONS.sort(key=lambda x: x[0], reverse=True) +SALINITY_COMBINATIONS.sort(key=lambda x: x[1]) + +WOA_TEMPERATURE_LAYER_ORDER = [ + id_str(depth=depth, season=season, variable="temperature") + for (season, depth) in TEMPERATURE_COMBINATIONS +] +WOA_SALINITY_LAYER_ORDER = [ + id_str(depth=depth, season=season, variable="salinity") + for (season, depth) in SALINITY_COMBINATIONS ] + + +def get_fn(*, season, variable): + season_num = { + "winter": 13, + "summer": 15, + } + return f"woa23_decav91C0_{variable[0]}{season_num[season]}_04.nc" + + +def make_layer(*, dataset, depth, season, variable, units) -> Layer: + return Layer( + id=id_str(depth=depth, season=season, variable=variable), + title=f"{depth_str(depth)}, {season.title()}", + description=( + f"""Average seawater {variable} at {depth_str(depth).lower()} depth + in {units} for the 1991 - 2020 climate normal period. + + Climate normals, defined as 30-year averages of data by the World + Meteorological Organization (WMO), provide long-term means for + initializing models, environmental studies, checking in situ + observations, etc. + + Comparing new observations to the most recent climate normal allows + one to assess whether or not current observations are within the + statistical norm in the context of the most recent 30-year + climatological background. Additional applications, such as + initializing boundary conditions for climate models or assessing + remotely sensed observations, also require a more recent + climatology.""" + ), + tags=[], + style=f"seawater_{variable}", + input=LayerInput( + dataset=dataset, + asset=dataset.assets[f"seasonal_{season}"], + ), + steps=[ + CommandStep( + args=[ + "gdal_translate", + "-b", + DEPTHS_BANDS[depth], + "NETCDF:{input_dir}/" + + get_fn(season=season, variable=variable) + + f":{variable[0]}_an", + "{output_dir}/extracted.tif", + ], + ), + *warp_and_cut( + input_file="{input_dir}/extracted.tif", + output_file="{output_dir}/warped_and_cut.tif", + cut_file=project.boundaries["background"].filepath, + reproject_args=( + "-tr", + "25000", + "25000", + # A "target extent" bounding box is required to reproject + # this correctly, or we receive an error like: + # ERROR 1: Attempt to create 0x1 dataset is + # illegal,sizes must be larger than zero. + "-te", + *( + project.boundaries["background"].bbox.min_x, + project.boundaries["background"].bbox.min_y, + project.boundaries["background"].bbox.max_x, + project.boundaries["background"].bbox.max_y, + ), + ), + ), + *compress_and_add_overviews( + input_file="{input_dir}/warped_and_cut.tif", + output_file="{output_dir}/final.tif", + dtype_is_float=True, + ), + ], + ) diff --git a/qgreenland/config/layers/Oceanography/Seawater salinity (25km)/__settings__.py b/qgreenland/config/layers/Oceanography/Seawater salinity (25km)/__settings__.py new file mode 100644 index 00000000..997c8426 --- /dev/null +++ b/qgreenland/config/layers/Oceanography/Seawater salinity (25km)/__settings__.py @@ -0,0 +1,8 @@ +from qgreenland.config.helpers.layers.woa import WOA_SALINITY_LAYER_ORDER +from qgreenland.models.config.layer_group import LayerGroupSettings, LayerIdentifier + +settings = LayerGroupSettings( + order=[ + *[LayerIdentifier(layer_id) for layer_id in WOA_SALINITY_LAYER_ORDER], + ], +) diff --git a/qgreenland/config/layers/Oceanography/Seawater salinity (25km)/woa.py b/qgreenland/config/layers/Oceanography/Seawater salinity (25km)/woa.py new file mode 100644 index 00000000..d4231bc0 --- /dev/null +++ b/qgreenland/config/layers/Oceanography/Seawater salinity (25km)/woa.py @@ -0,0 +1,18 @@ +from qgreenland.config.datasets.woa import ( + woa_salinity, +) +from qgreenland.config.helpers.layers.woa import ( + SALINITY_COMBINATIONS, + make_layer, +) + +salinity_layers = [ + make_layer( + dataset=woa_salinity, + depth=depth, + season=season, + variable="salinity", + units="practical salinity scale (PSS)", + ) + for season, depth in SALINITY_COMBINATIONS +] diff --git a/qgreenland/config/layers/Oceanography/Seawater temperature (25km)/__settings__.py b/qgreenland/config/layers/Oceanography/Seawater temperature (25km)/__settings__.py index e9948041..47801b94 100644 --- a/qgreenland/config/layers/Oceanography/Seawater temperature (25km)/__settings__.py +++ b/qgreenland/config/layers/Oceanography/Seawater temperature (25km)/__settings__.py @@ -1,8 +1,8 @@ -from qgreenland.config.helpers.layers.woa import WOA_LAYER_ORDER +from qgreenland.config.helpers.layers.woa import WOA_TEMPERATURE_LAYER_ORDER from qgreenland.models.config.layer_group import LayerGroupSettings, LayerIdentifier settings = LayerGroupSettings( order=[ - *[LayerIdentifier(layer_id) for layer_id in WOA_LAYER_ORDER], + *[LayerIdentifier(layer_id) for layer_id in WOA_TEMPERATURE_LAYER_ORDER], ], ) diff --git a/qgreenland/config/layers/Oceanography/Seawater temperature (25km)/woa.py b/qgreenland/config/layers/Oceanography/Seawater temperature (25km)/woa.py index ea9bcb10..26a99b0b 100644 --- a/qgreenland/config/layers/Oceanography/Seawater temperature (25km)/woa.py +++ b/qgreenland/config/layers/Oceanography/Seawater temperature (25km)/woa.py @@ -1,85 +1,18 @@ -from qgreenland.config.datasets.woa_temperature import ( - woa_temperature as dataset, +from qgreenland.config.datasets.woa import ( + woa_temperature, ) from qgreenland.config.helpers.layers.woa import ( - COMBINATIONS, - DEPTHS_BANDS, - SEASONS_FNS, - depth_str, - id_str, + TEMPERATURE_COMBINATIONS, + make_layer, ) -from qgreenland.config.helpers.steps.compress_and_add_overviews import ( - compress_and_add_overviews, -) -from qgreenland.config.helpers.steps.warp_and_cut import warp_and_cut -from qgreenland.config.project import project -from qgreenland.models.config.layer import Layer, LayerInput -from qgreenland.models.config.step import CommandStep - -layers = [ - Layer( - id=id_str(depth=depth, season=season), - title=f"{depth_str(depth)}, {season.title()}", - description=( - f"""Average Seawater temperature at {depth_str(depth).lower()} depth - in °C for the 1991 - 2020 climate normal period. - - Climate normals, defined as 30-year averages of data by the World - Meteorological Organization (WMO), provide long-term means for - initializing models, environmental studies, checking in situ - observations, etc. - Comparing new observations to the most recent climate normal allows - one to assess whether or not current observations are within the - statistical norm in the context of the most recent 30-year - climatological background. Additional applications, such as - initializing boundary conditions for climate models or assessing - remotely sensed observations, also require a more recent - climatology.""" - ), - tags=[], - style="seawater_temperature", - input=LayerInput( - dataset=dataset, - asset=dataset.assets[f"seasonal_{season}"], - ), - steps=[ - CommandStep( - args=[ - "gdal_translate", - "-b", - DEPTHS_BANDS[depth], - "NETCDF:{input_dir}/" + f"{SEASONS_FNS[season]}:t_an", - "{output_dir}/extracted.tif", - ], - ), - *warp_and_cut( - input_file="{input_dir}/extracted.tif", - output_file="{output_dir}/warped_and_cut.tif", - cut_file=project.boundaries["background"].filepath, - reproject_args=( - "-tr", - "25000", - "25000", - # A "target extent" bounding box is required to reproject - # this correctly, or we receive an error like: - # ERROR 1: Attempt to create 0x1 dataset is - # illegal,sizes must be larger than zero. - "-te", - *( - project.boundaries["background"].bbox.min_x, - project.boundaries["background"].bbox.min_y, - project.boundaries["background"].bbox.max_x, - project.boundaries["background"].bbox.max_y, - ), - ), - ), - *compress_and_add_overviews( - input_file="{input_dir}/warped_and_cut.tif", - output_file="{output_dir}/final.tif", - dtype_is_float=True, - ), - ], +temperature_layers = [ + make_layer( + dataset=woa_temperature, + depth=depth, + season=season, + variable="temperature", + units="°C", ) - for season, depth in COMBINATIONS + for season, depth in TEMPERATURE_COMBINATIONS ] diff --git a/qgreenland/config/layers/Oceanography/__settings__.py b/qgreenland/config/layers/Oceanography/__settings__.py index 7baec0d5..a012673c 100644 --- a/qgreenland/config/layers/Oceanography/__settings__.py +++ b/qgreenland/config/layers/Oceanography/__settings__.py @@ -7,6 +7,7 @@ order=[ LayerGroupIdentifier("Undersea feature names"), LayerGroupIdentifier("Seawater temperature (25km)"), + LayerGroupIdentifier("Seawater salinity (25km)"), LayerGroupIdentifier("Bathymetry"), ], )