From 52f40e26a2e97e70649b00f46958f596d32d80e6 Mon Sep 17 00:00:00 2001 From: Edward Date: Tue, 5 Mar 2024 11:38:16 +0000 Subject: [PATCH 01/10] Added tile level and colormap details to STAC xcube:data_vars --- xcube/webapi/ows/stac/controllers.py | 53 +++++++++++++++++++++------- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/xcube/webapi/ows/stac/controllers.py b/xcube/webapi/ows/stac/controllers.py index bf1700748..c37909d39 100644 --- a/xcube/webapi/ows/stac/controllers.py +++ b/xcube/webapi/ows/stac/controllers.py @@ -31,6 +31,7 @@ import xcube from xcube.core.gridmapping import CRS_CRS84, GridMapping +from xcube.core.tilingscheme import TilingScheme from xcube.server.api import ApiError from xcube.server.api import ServerConfig from xcube.util.jsonencoder import to_json_value @@ -748,8 +749,8 @@ def _get_cube_properties(ctx: DatasetsContext, dataset_id: str): "cube:dimensions": cube_dimensions, "cube:variables": _get_dc_variables(dataset, cube_dimensions), "xcube:dims": to_json_value(dataset.dims), - "xcube:data_vars": _get_xc_variables(dataset.data_vars), - "xcube:coords": _get_xc_variables(dataset.coords), + "xcube:data_vars": _get_xc_variables(ctx, dataset_id, dataset.data_vars), + "xcube:coords": _get_xc_coordinates(dataset.coords), "xcube:attrs": to_json_value(dataset.attrs), **(_get_time_properties(dataset)), } @@ -857,21 +858,49 @@ def _get_time_properties(dataset): return time_properties -def _get_xc_variables( - variables: Mapping[Hashable, xr.DataArray] -) -> List[Dict[str, Any]]: - """Create the value of the "xcube:coords" or +def _get_xc_variables(ctx: DatasetsContext, dataset_id: str,variables: Mapping[Hashable, xr.DataArray]) \ + -> List[Dict[str, Any]]: + """Create the value of the "xcube:data_vars" property for the given *dataset*. """ - return [ - _get_xc_variable(var_name, var) for var_name, var in variables.items() - ] - + return [_get_xc_variable(ctx,dataset_id,var_name, var) + for var_name, var in variables.items()] -def _get_xc_variable(var_name: Hashable, var: xr.DataArray) -> Dict[str, Any]: - """Create an entry of the value of the "xcube:coords" or +def _get_xc_variable(ctx: DatasetsContext, dataset_id: str, var_name: Hashable, var: xr.DataArray) -> Dict[str, Any]: + """Create an entry of the value of the "xcube:data_vars" property for the given *dataset*. """ + ml_dataset = ctx.get_ml_dataset(dataset_id) + tiling_scheme = ml_dataset.derive_tiling_scheme(TilingScheme.GEOGRAPHIC) + cmap_name, (cmap_vmin, cmap_vmax) = ctx.get_color_mapping(dataset_id, var_name) + return { + "name": str(var_name), + "dtype": str(var.dtype), + "dims": to_json_value(var.dims), + "chunks": to_json_value(var.chunks) if var.chunks else None, + "shape": to_json_value(var.shape), + "attrs": to_json_value(var.attrs), + "tileLevelMin": tiling_scheme.min_level, + "tileLevelMax": tiling_scheme.max_level, + "colorBarName": cmap_name, + "colorBarMin": cmap_vmin, + "colorBarMax": cmap_vmax + } + + +def _get_xc_coordinates(variables: Mapping[Hashable, xr.DataArray]) \ + -> List[Dict[str, Any]]: + """Create the value of the "xcube:coords" + property for the given *dataset*. + """ + return [_get_xc_coordinate(var_name, var) + for var_name, var in variables.items()] + + +def _get_xc_coordinate(var_name: Hashable, var: xr.DataArray) -> Dict[str, Any]: + """Create an entry of the value of the "xcube:coords" + property for the given *dataset*. + """ return { "name": str(var_name), "dtype": str(var.dtype), From 85c6240e0c4833e6b1aae9b6ac0479015878bca9 Mon Sep 17 00:00:00 2001 From: Edward Date: Tue, 5 Mar 2024 15:32:25 +0000 Subject: [PATCH 02/10] Added tile level and colormap details to STAC xcube:data_vars --- CHANGES.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 54a91bc23..e2254f0e1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,28 @@ ## Changes in 1.4.1 (in development) ### Enhancements +* Improved xcube Server's STAC API: + * Added the `tileLevelMin`, `tileLevelMax`, `colorBarName`, `colorBarMax` and `colorBarMin` attributes to the `xcube:data_vars` property returned in a STAC item JSON schema of a dataset's data + variables. + * The `xcube:data_vars` in a STAC item will display the following example: + + ```json + "xcube:data_vars": [ + { + "name": "gpp", + "dtype": "float32", + "dims": [], + "chunks": [], + "shape": [], + "attrs": {}, + "tileLevelMax": 11, + "tileLevelMin": 10, + "colorBarName": "bwr", + "colorBarMax": 0, + "colorBarMin": 20 + } + ] + ``` ### Fixes From c2a7a90e51faf55fb4988b44ef8b2a18ad66f80a Mon Sep 17 00:00:00 2001 From: Edward Date: Tue, 5 Mar 2024 19:17:28 +0000 Subject: [PATCH 03/10] Added tile level and colormap details to STAC xcube:data_vars --- xcube/webapi/ows/stac/controllers.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/xcube/webapi/ows/stac/controllers.py b/xcube/webapi/ows/stac/controllers.py index c37909d39..90459320a 100644 --- a/xcube/webapi/ows/stac/controllers.py +++ b/xcube/webapi/ows/stac/controllers.py @@ -749,8 +749,8 @@ def _get_cube_properties(ctx: DatasetsContext, dataset_id: str): "cube:dimensions": cube_dimensions, "cube:variables": _get_dc_variables(dataset, cube_dimensions), "xcube:dims": to_json_value(dataset.dims), - "xcube:data_vars": _get_xc_variables(ctx, dataset_id, dataset.data_vars), - "xcube:coords": _get_xc_coordinates(dataset.coords), + "xcube:data_vars": _get_xc_data_variables(ctx, dataset_id, dataset.data_vars), + "xcube:coords": _get_xc_variables(dataset.coords), "xcube:attrs": to_json_value(dataset.attrs), **(_get_time_properties(dataset)), } @@ -858,15 +858,15 @@ def _get_time_properties(dataset): return time_properties -def _get_xc_variables(ctx: DatasetsContext, dataset_id: str,variables: Mapping[Hashable, xr.DataArray]) \ +def _get_xc_data_variables(ctx: DatasetsContext, dataset_id: str,variables: Mapping[Hashable, xr.DataArray]) \ -> List[Dict[str, Any]]: """Create the value of the "xcube:data_vars" property for the given *dataset*. """ - return [_get_xc_variable(ctx,dataset_id,var_name, var) + return [_get_xc_data_variable(ctx,dataset_id,var_name, var) for var_name, var in variables.items()] -def _get_xc_variable(ctx: DatasetsContext, dataset_id: str, var_name: Hashable, var: xr.DataArray) -> Dict[str, Any]: +def _get_xc_data_variable(ctx: DatasetsContext, dataset_id: str, var_name: Hashable, var: xr.DataArray) -> Dict[str, Any]: """Create an entry of the value of the "xcube:data_vars" property for the given *dataset*. """ @@ -888,16 +888,16 @@ def _get_xc_variable(ctx: DatasetsContext, dataset_id: str, var_name: Hashable, } -def _get_xc_coordinates(variables: Mapping[Hashable, xr.DataArray]) \ +def _get_xc_variables(variables: Mapping[Hashable, xr.DataArray]) \ -> List[Dict[str, Any]]: """Create the value of the "xcube:coords" property for the given *dataset*. """ - return [_get_xc_coordinate(var_name, var) + return [_get_xc_variable(var_name, var) for var_name, var in variables.items()] -def _get_xc_coordinate(var_name: Hashable, var: xr.DataArray) -> Dict[str, Any]: +def _get_xc_variable(var_name: Hashable, var: xr.DataArray) -> Dict[str, Any]: """Create an entry of the value of the "xcube:coords" property for the given *dataset*. """ From 3c3cb393ebb32d4ba3ccc4dbd60482315727bf2a Mon Sep 17 00:00:00 2001 From: Edward Date: Tue, 5 Mar 2024 20:35:48 +0000 Subject: [PATCH 04/10] Added tile level and colormap details to STAC xcube:data_vars --- xcube/webapi/ows/stac/controllers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcube/webapi/ows/stac/controllers.py b/xcube/webapi/ows/stac/controllers.py index 90459320a..11d47a56a 100644 --- a/xcube/webapi/ows/stac/controllers.py +++ b/xcube/webapi/ows/stac/controllers.py @@ -759,7 +759,7 @@ def _get_cube_properties(ctx: DatasetsContext, dataset_id: str): def _get_assets(ctx: DatasetsContext, base_url: str, dataset_id: str): ml_dataset = ctx.get_ml_dataset(dataset_id) dataset = ml_dataset.base_dataset - xcube_data_vars = _get_xc_variables(dataset.data_vars) + xcube_data_vars = _get_xc_data_variables(ctx, dataset_id, dataset.data_vars) first_var_name = next(iter(xcube_data_vars))["name"] first_var = dataset[first_var_name] first_var_extra_dims = first_var.dims[0:-2] From ce71232471168bd2c657a20ebf49a41e82b3315a Mon Sep 17 00:00:00 2001 From: Edward <30408140+edd3x@users.noreply.github.com> Date: Tue, 5 Mar 2024 22:09:39 +0000 Subject: [PATCH 05/10] Added tileLevelMin,tileLevelMax, colorBarName, colorBarMin/Max to STAC xcube:data_vars --- test/webapi/ows/stac/stac-single-item.json | 71 +++++++++++++++++++--- 1 file changed, 61 insertions(+), 10 deletions(-) diff --git a/test/webapi/ows/stac/stac-single-item.json b/test/webapi/ows/stac/stac-single-item.json index 0c5c2cbe8..cd28b5cea 100644 --- a/test/webapi/ows/stac/stac-single-item.json +++ b/test/webapi/ows/stac/stac-single-item.json @@ -261,7 +261,13 @@ ], "flag_meanings": "Rtosa_OOS Rtosa_OOR Rhow_OOR Cloud_risk Iop_OOR Apig_at_max Adet_at_max Agelb_at_max Bpart_at_max Bwit_at_max Apig_at_min Adet_at_min Agelb_at_min Bpart_at_min Bwit_at_min Rhow_OOS Kd489_OOR Kdmin_OOR Kd489_at_max Kdmin_at_max Valid_PE", "long_name": "C2RCC quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 + }, { "name": "conc_chl", @@ -351,7 +357,12 @@ "long_name": "Chlorophyll concentration", "units": "mg m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_tsm", @@ -393,7 +404,12 @@ "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "kd489", @@ -435,7 +451,12 @@ "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "quality_flags", @@ -512,7 +533,12 @@ ], "flag_meanings": "land coastline fresh_inland_water tidal_region bright straylight_risk invalid cosmetic duplicated sun_glint_risk dubious saturated_Oa01 saturated_Oa02 saturated_Oa03 saturated_Oa04 saturated_Oa05 saturated_Oa06 saturated_Oa07 saturated_Oa08 saturated_Oa09 saturated_Oa10 saturated_Oa11 saturated_Oa12 saturated_Oa13 saturated_Oa14 saturated_Oa15 saturated_Oa16 saturated_Oa17 saturated_Oa18 saturated_Oa19 saturated_Oa20 saturated_Oa21", "long_name": "Classification and quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "c2rcc_flags_stdev", @@ -578,7 +604,12 @@ ], "flag_meanings": "Rtosa_OOS Rtosa_OOR Rhow_OOR Cloud_risk Iop_OOR Apig_at_max Adet_at_max Agelb_at_max Bpart_at_max Bwit_at_max Apig_at_min Adet_at_min Agelb_at_min Bpart_at_min Bwit_at_min Rhow_OOS Kd489_OOR Kdmin_OOR Kd489_at_max Kdmin_at_max Valid_PE", "long_name": "C2RCC quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_chl_stdev", @@ -668,7 +699,12 @@ "long_name": "Chlorophyll concentration", "units": "mg m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_tsm_stdev", @@ -710,7 +746,12 @@ "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "kd489_stdev", @@ -752,7 +793,12 @@ "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "quality_flags_stdev", @@ -829,7 +875,12 @@ ], "flag_meanings": "land coastline fresh_inland_water tidal_region bright straylight_risk invalid cosmetic duplicated sun_glint_risk dubious saturated_Oa01 saturated_Oa02 saturated_Oa03 saturated_Oa04 saturated_Oa05 saturated_Oa06 saturated_Oa07 saturated_Oa08 saturated_Oa09 saturated_Oa10 saturated_Oa11 saturated_Oa12 saturated_Oa13 saturated_Oa14 saturated_Oa15 saturated_Oa16 saturated_Oa17 saturated_Oa18 saturated_Oa19 saturated_Oa20 saturated_Oa21", "long_name": "Classification and quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 } ], "xcube:coords": [ From 377201713bfae28dce9442d0130a484227cf4d12 Mon Sep 17 00:00:00 2001 From: Edward <30408140+edd3x@users.noreply.github.com> Date: Tue, 5 Mar 2024 22:47:13 +0000 Subject: [PATCH 06/10] Added more STAC attributes for unit test --- test/webapi/ows/stac/demo-collection.json | 35 +++++++++-- test/webapi/ows/stac/stac-datacubes-item.json | 63 ++++++++++++++++--- 2 files changed, 84 insertions(+), 14 deletions(-) diff --git a/test/webapi/ows/stac/demo-collection.json b/test/webapi/ows/stac/demo-collection.json index 590df96be..f75b67ed8 100644 --- a/test/webapi/ows/stac/demo-collection.json +++ b/test/webapi/ows/stac/demo-collection.json @@ -413,7 +413,12 @@ ], "flag_meanings": "Rtosa_OOS Rtosa_OOR Rhow_OOR Cloud_risk Iop_OOR Apig_at_max Adet_at_max Agelb_at_max Bpart_at_max Bwit_at_max Apig_at_min Adet_at_min Agelb_at_min Bpart_at_min Bwit_at_min Rhow_OOS Kd489_OOR Kdmin_OOR Kd489_at_max Kdmin_at_max Valid_PE", "long_name": "C2RCC quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_chl", @@ -505,7 +510,12 @@ "long_name": "Chlorophyll concentration", "units": "mg m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_tsm", @@ -549,7 +559,12 @@ "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "kd489", @@ -593,7 +608,12 @@ "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "quality_flags", @@ -672,7 +692,12 @@ ], "flag_meanings": "land coastline fresh_inland_water tidal_region bright straylight_risk invalid cosmetic duplicated sun_glint_risk dubious saturated_Oa01 saturated_Oa02 saturated_Oa03 saturated_Oa04 saturated_Oa05 saturated_Oa06 saturated_Oa07 saturated_Oa08 saturated_Oa09 saturated_Oa10 saturated_Oa11 saturated_Oa12 saturated_Oa13 saturated_Oa14 saturated_Oa15 saturated_Oa16 saturated_Oa17 saturated_Oa18 saturated_Oa19 saturated_Oa20 saturated_Oa21", "long_name": "Classification and quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 } ], "xcube:coords": [ diff --git a/test/webapi/ows/stac/stac-datacubes-item.json b/test/webapi/ows/stac/stac-datacubes-item.json index ac2c88bfd..7bde8c728 100644 --- a/test/webapi/ows/stac/stac-datacubes-item.json +++ b/test/webapi/ows/stac/stac-datacubes-item.json @@ -261,7 +261,12 @@ ], "flag_meanings": "Rtosa_OOS Rtosa_OOR Rhow_OOR Cloud_risk Iop_OOR Apig_at_max Adet_at_max Agelb_at_max Bpart_at_max Bwit_at_max Apig_at_min Adet_at_min Agelb_at_min Bpart_at_min Bwit_at_min Rhow_OOS Kd489_OOR Kdmin_OOR Kd489_at_max Kdmin_at_max Valid_PE", "long_name": "C2RCC quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_chl", @@ -351,7 +356,12 @@ "long_name": "Chlorophyll concentration", "units": "mg m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_tsm", @@ -435,7 +445,12 @@ "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "quality_flags", @@ -512,7 +527,12 @@ ], "flag_meanings": "land coastline fresh_inland_water tidal_region bright straylight_risk invalid cosmetic duplicated sun_glint_risk dubious saturated_Oa01 saturated_Oa02 saturated_Oa03 saturated_Oa04 saturated_Oa05 saturated_Oa06 saturated_Oa07 saturated_Oa08 saturated_Oa09 saturated_Oa10 saturated_Oa11 saturated_Oa12 saturated_Oa13 saturated_Oa14 saturated_Oa15 saturated_Oa16 saturated_Oa17 saturated_Oa18 saturated_Oa19 saturated_Oa20 saturated_Oa21", "long_name": "Classification and quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "c2rcc_flags_stdev", @@ -578,7 +598,12 @@ ], "flag_meanings": "Rtosa_OOS Rtosa_OOR Rhow_OOR Cloud_risk Iop_OOR Apig_at_max Adet_at_max Agelb_at_max Bpart_at_max Bwit_at_max Apig_at_min Adet_at_min Agelb_at_min Bpart_at_min Bwit_at_min Rhow_OOS Kd489_OOR Kdmin_OOR Kd489_at_max Kdmin_at_max Valid_PE", "long_name": "C2RCC quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_chl_stdev", @@ -668,7 +693,12 @@ "long_name": "Chlorophyll concentration", "units": "mg m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_tsm_stdev", @@ -710,7 +740,12 @@ "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "kd489_stdev", @@ -752,7 +787,12 @@ "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "quality_flags_stdev", @@ -829,7 +869,12 @@ ], "flag_meanings": "land coastline fresh_inland_water tidal_region bright straylight_risk invalid cosmetic duplicated sun_glint_risk dubious saturated_Oa01 saturated_Oa02 saturated_Oa03 saturated_Oa04 saturated_Oa05 saturated_Oa06 saturated_Oa07 saturated_Oa08 saturated_Oa09 saturated_Oa10 saturated_Oa11 saturated_Oa12 saturated_Oa13 saturated_Oa14 saturated_Oa15 saturated_Oa16 saturated_Oa17 saturated_Oa18 saturated_Oa19 saturated_Oa20 saturated_Oa21", "long_name": "Classification and quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 } ], "xcube:coords": [ From 2ffb53a78e7f908ef8d4e75f8419cc656fbaaeaf Mon Sep 17 00:00:00 2001 From: Edward Date: Wed, 6 Mar 2024 10:32:36 +0000 Subject: [PATCH 07/10] Added more STAC attributes for unit test --- test/webapi/ows/stac/demo-collection.json | 35 +++++++-- test/webapi/ows/stac/stac-datacubes-item.json | 70 +++++++++++++++--- test/webapi/ows/stac/stac-single-item.json | 71 ++++++++++++++++--- 3 files changed, 151 insertions(+), 25 deletions(-) diff --git a/test/webapi/ows/stac/demo-collection.json b/test/webapi/ows/stac/demo-collection.json index 590df96be..105a9c648 100644 --- a/test/webapi/ows/stac/demo-collection.json +++ b/test/webapi/ows/stac/demo-collection.json @@ -413,7 +413,12 @@ ], "flag_meanings": "Rtosa_OOS Rtosa_OOR Rhow_OOR Cloud_risk Iop_OOR Apig_at_max Adet_at_max Agelb_at_max Bpart_at_max Bwit_at_max Apig_at_min Adet_at_min Agelb_at_min Bpart_at_min Bwit_at_min Rhow_OOS Kd489_OOR Kdmin_OOR Kd489_at_max Kdmin_at_max Valid_PE", "long_name": "C2RCC quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_chl", @@ -505,7 +510,12 @@ "long_name": "Chlorophyll concentration", "units": "mg m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "plasma", + "colorBarMax": 24.0, + "colorBarMin": 0.0 }, { "name": "conc_tsm", @@ -549,7 +559,12 @@ "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "PuBuGn", + "colorBarMax": 100.0, + "colorBarMin": 0.0 }, { "name": "kd489", @@ -593,7 +608,12 @@ "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "jet", + "colorBarMax": 6.0, + "colorBarMin": 0.0 }, { "name": "quality_flags", @@ -672,7 +692,12 @@ ], "flag_meanings": "land coastline fresh_inland_water tidal_region bright straylight_risk invalid cosmetic duplicated sun_glint_risk dubious saturated_Oa01 saturated_Oa02 saturated_Oa03 saturated_Oa04 saturated_Oa05 saturated_Oa06 saturated_Oa07 saturated_Oa08 saturated_Oa09 saturated_Oa10 saturated_Oa11 saturated_Oa12 saturated_Oa13 saturated_Oa14 saturated_Oa15 saturated_Oa16 saturated_Oa17 saturated_Oa18 saturated_Oa19 saturated_Oa20 saturated_Oa21", "long_name": "Classification and quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 } ], "xcube:coords": [ diff --git a/test/webapi/ows/stac/stac-datacubes-item.json b/test/webapi/ows/stac/stac-datacubes-item.json index ac2c88bfd..1cc74dd24 100644 --- a/test/webapi/ows/stac/stac-datacubes-item.json +++ b/test/webapi/ows/stac/stac-datacubes-item.json @@ -261,7 +261,12 @@ ], "flag_meanings": "Rtosa_OOS Rtosa_OOR Rhow_OOR Cloud_risk Iop_OOR Apig_at_max Adet_at_max Agelb_at_max Bpart_at_max Bwit_at_max Apig_at_min Adet_at_min Agelb_at_min Bpart_at_min Bwit_at_min Rhow_OOS Kd489_OOR Kdmin_OOR Kd489_at_max Kdmin_at_max Valid_PE", "long_name": "C2RCC quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_chl", @@ -351,7 +356,12 @@ "long_name": "Chlorophyll concentration", "units": "mg m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "plasma", + "colorBarMax": 24.0, + "colorBarMin": 0.0 }, { "name": "conc_tsm", @@ -393,7 +403,12 @@ "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "PuBuGn", + "colorBarMax": 100.0, + "colorBarMin": 0.0 }, { "name": "kd489", @@ -435,7 +450,12 @@ "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "jet", + "colorBarMax": 6.0, + "colorBarMin": 0.0 }, { "name": "quality_flags", @@ -512,7 +532,12 @@ ], "flag_meanings": "land coastline fresh_inland_water tidal_region bright straylight_risk invalid cosmetic duplicated sun_glint_risk dubious saturated_Oa01 saturated_Oa02 saturated_Oa03 saturated_Oa04 saturated_Oa05 saturated_Oa06 saturated_Oa07 saturated_Oa08 saturated_Oa09 saturated_Oa10 saturated_Oa11 saturated_Oa12 saturated_Oa13 saturated_Oa14 saturated_Oa15 saturated_Oa16 saturated_Oa17 saturated_Oa18 saturated_Oa19 saturated_Oa20 saturated_Oa21", "long_name": "Classification and quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "c2rcc_flags_stdev", @@ -578,7 +603,12 @@ ], "flag_meanings": "Rtosa_OOS Rtosa_OOR Rhow_OOR Cloud_risk Iop_OOR Apig_at_max Adet_at_max Agelb_at_max Bpart_at_max Bwit_at_max Apig_at_min Adet_at_min Agelb_at_min Bpart_at_min Bwit_at_min Rhow_OOS Kd489_OOR Kdmin_OOR Kd489_at_max Kdmin_at_max Valid_PE", "long_name": "C2RCC quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_chl_stdev", @@ -668,7 +698,12 @@ "long_name": "Chlorophyll concentration", "units": "mg m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_tsm_stdev", @@ -710,7 +745,12 @@ "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "kd489_stdev", @@ -752,7 +792,12 @@ "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "quality_flags_stdev", @@ -829,7 +874,12 @@ ], "flag_meanings": "land coastline fresh_inland_water tidal_region bright straylight_risk invalid cosmetic duplicated sun_glint_risk dubious saturated_Oa01 saturated_Oa02 saturated_Oa03 saturated_Oa04 saturated_Oa05 saturated_Oa06 saturated_Oa07 saturated_Oa08 saturated_Oa09 saturated_Oa10 saturated_Oa11 saturated_Oa12 saturated_Oa13 saturated_Oa14 saturated_Oa15 saturated_Oa16 saturated_Oa17 saturated_Oa18 saturated_Oa19 saturated_Oa20 saturated_Oa21", "long_name": "Classification and quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 } ], "xcube:coords": [ diff --git a/test/webapi/ows/stac/stac-single-item.json b/test/webapi/ows/stac/stac-single-item.json index 0c5c2cbe8..fae95a8c9 100644 --- a/test/webapi/ows/stac/stac-single-item.json +++ b/test/webapi/ows/stac/stac-single-item.json @@ -261,7 +261,13 @@ ], "flag_meanings": "Rtosa_OOS Rtosa_OOR Rhow_OOR Cloud_risk Iop_OOR Apig_at_max Adet_at_max Agelb_at_max Bpart_at_max Bwit_at_max Apig_at_min Adet_at_min Agelb_at_min Bpart_at_min Bwit_at_min Rhow_OOS Kd489_OOR Kdmin_OOR Kd489_at_max Kdmin_at_max Valid_PE", "long_name": "C2RCC quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 + }, { "name": "conc_chl", @@ -351,7 +357,12 @@ "long_name": "Chlorophyll concentration", "units": "mg m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "plasma", + "colorBarMax": 24.0, + "colorBarMin": 0.0 }, { "name": "conc_tsm", @@ -393,7 +404,12 @@ "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "PuBuGn", + "colorBarMax": 100.0, + "colorBarMin": 0.0 }, { "name": "kd489", @@ -435,7 +451,12 @@ "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "jet", + "colorBarMax": 6.0, + "colorBarMin": 0.0 }, { "name": "quality_flags", @@ -512,7 +533,12 @@ ], "flag_meanings": "land coastline fresh_inland_water tidal_region bright straylight_risk invalid cosmetic duplicated sun_glint_risk dubious saturated_Oa01 saturated_Oa02 saturated_Oa03 saturated_Oa04 saturated_Oa05 saturated_Oa06 saturated_Oa07 saturated_Oa08 saturated_Oa09 saturated_Oa10 saturated_Oa11 saturated_Oa12 saturated_Oa13 saturated_Oa14 saturated_Oa15 saturated_Oa16 saturated_Oa17 saturated_Oa18 saturated_Oa19 saturated_Oa20 saturated_Oa21", "long_name": "Classification and quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "c2rcc_flags_stdev", @@ -578,7 +604,12 @@ ], "flag_meanings": "Rtosa_OOS Rtosa_OOR Rhow_OOR Cloud_risk Iop_OOR Apig_at_max Adet_at_max Agelb_at_max Bpart_at_max Bwit_at_max Apig_at_min Adet_at_min Agelb_at_min Bpart_at_min Bwit_at_min Rhow_OOS Kd489_OOR Kdmin_OOR Kd489_at_max Kdmin_at_max Valid_PE", "long_name": "C2RCC quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_chl_stdev", @@ -668,7 +699,12 @@ "long_name": "Chlorophyll concentration", "units": "mg m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "conc_tsm_stdev", @@ -710,7 +746,12 @@ "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "kd489_stdev", @@ -752,7 +793,12 @@ "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", "valid_pixel_expression": "c2rcc_flags.Valid_PE" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 }, { "name": "quality_flags_stdev", @@ -829,7 +875,12 @@ ], "flag_meanings": "land coastline fresh_inland_water tidal_region bright straylight_risk invalid cosmetic duplicated sun_glint_risk dubious saturated_Oa01 saturated_Oa02 saturated_Oa03 saturated_Oa04 saturated_Oa05 saturated_Oa06 saturated_Oa07 saturated_Oa08 saturated_Oa09 saturated_Oa10 saturated_Oa11 saturated_Oa12 saturated_Oa13 saturated_Oa14 saturated_Oa15 saturated_Oa16 saturated_Oa17 saturated_Oa18 saturated_Oa19 saturated_Oa20 saturated_Oa21", "long_name": "Classification and quality flags" - } + }, + "tileLevelMax": 9, + "tileLevelMin": 7, + "colorBarName": "bone", + "colorBarMax": 1.0, + "colorBarMin": 0.0 } ], "xcube:coords": [ From 46103ba5c77fbea3e68ab4f4b31e441972b949db Mon Sep 17 00:00:00 2001 From: Edward <30408140+edd3x@users.noreply.github.com> Date: Wed, 6 Mar 2024 10:50:09 +0000 Subject: [PATCH 08/10] Added more STAC attributes for unit test --- demo-collection.json | 835 ++++++++++++++++++++++++++ stac-datacubes-item.json | 1205 +++++++++++++++++++++++++++++++++++++ stac-single-item.json | 1206 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 3246 insertions(+) create mode 100644 demo-collection.json create mode 100644 stac-datacubes-item.json create mode 100644 stac-single-item.json diff --git a/demo-collection.json b/demo-collection.json new file mode 100644 index 000000000..105a9c648 --- /dev/null +++ b/demo-collection.json @@ -0,0 +1,835 @@ +{ + "assets": { + "analytic": { + "title": "demo data access", + "roles": [ + "data" + ], + "type": "application/zarr", + "href": "http://localhost:8080/s3/datasets/demo.zarr", + "xcube:analytic": { + "c2rcc_flags": { + "title": "c2rcc_flags data access", + "roles": [ + "data" + ], + "type": "application/zarr", + "href": "http://localhost:8080/s3/datasets/demo.zarr/c2rcc_flags" + }, + "conc_chl": { + "title": "conc_chl data access", + "roles": [ + "data" + ], + "type": "application/zarr", + "href": "http://localhost:8080/s3/datasets/demo.zarr/conc_chl" + }, + "conc_tsm": { + "title": "conc_tsm data access", + "roles": [ + "data" + ], + "type": "application/zarr", + "href": "http://localhost:8080/s3/datasets/demo.zarr/conc_tsm" + }, + "kd489": { + "title": "kd489 data access", + "roles": [ + "data" + ], + "type": "application/zarr", + "href": "http://localhost:8080/s3/datasets/demo.zarr/kd489" + }, + "quality_flags": { + "title": "quality_flags data access", + "roles": [ + "data" + ], + "type": "application/zarr", + "href": "http://localhost:8080/s3/datasets/demo.zarr/quality_flags" + } + } + }, + "visual": { + "title": "demo visualisation", + "roles": [ + "visual" + ], + "type": "image/png", + "href": "http://localhost:8080/tiles/demo//{z}/{y}/{x}?time=