diff --git a/CHANGES.md b/CHANGES.md index 9a252cccd..6e415cc30 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,15 @@ +## Changes in 1.13.1 (under development) + +* Use `chunks="auto"` by default in `rioxarray.open_rasterio` within + `xcube.core.store.fs.impl.rasterio` when reading GeoTIFF and JPEG2000 files. + This enables efficient, storage-aware data access without forcing explicit + rechunking. +* Added the optional argument `band_as_variable`, which allows to preserve the + original dataset structure as returned by `rioxarray`, rather than splitting + raster bands into separate data variables. This improves data access patterns and + avoids unnecessary transformations. Defaults are set to `True`. + + ## Changes in 1.13.0 ### Enhancements diff --git a/test/core/store/fs/impl/test_rasterio.py b/test/core/store/fs/impl/test_rasterio.py index df30b7558..3c94997ac 100644 --- a/test/core/store/fs/impl/test_rasterio.py +++ b/test/core/store/fs/impl/test_rasterio.py @@ -153,6 +153,20 @@ def test_read_geotiff(self): dataset = ml_dataset.get_dataset(0) self.assertEqual((1387, 1491), dataset.band_1.shape) + def test_read_geotiff_single_dataarray(self): + fs, tiff_path = RasterIoMultiLevelDatasetTest.get_params(_GEOTIFF_TEST_FILE) + data_opener = MultiLevelDatasetGeoTiffFsDataAccessor() + + ml_dataset = data_opener.open_data( + tiff_path, fs=fs, root=None, tile_size=[512, 512], band_as_variable=False + ) + self.assertIsInstance(ml_dataset, RasterioMultiLevelDataset) + + self.assertEqual(1, ml_dataset.num_levels) + dataset = ml_dataset.get_dataset(0) + self.assertEqual((3, 1387, 1491), dataset.data.shape) + self.assertEqual(((3,), (512, 512, 363), (512, 512, 467)), dataset.data.chunks) + class MultiLevelDatasetJ2kFsDataAccessorTest(unittest.TestCase): """ @@ -243,6 +257,7 @@ def test_write_data(self): data_accessor.write_data(cube, "new_cube") self.assertEqual("Writing not yet supported", f"{nie.exception}") + class DatasetJ2kFsDataAccessorTest(unittest.TestCase): """ A Test class to test opening a JPEG 2000 as multilevel dataset or diff --git a/test/webapi/ows/stac/demo-collection.json b/test/webapi/ows/stac/demo-collection.json index b9bdf09fd..2b5468bfa 100644 --- a/test/webapi/ows/stac/demo-collection.json +++ b/test/webapi/ows/stac/demo-collection.json @@ -555,7 +555,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 20.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 76.29 MiB 488.28 kiB
Shape (5, 1000, 2000) (1, 250, 250)
Dask graph 160 chunks in 2 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 5\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 76.29 MiB 488.28 kiB
Shape (5, 1000, 2000) (1, 250, 250)
Dask graph 160 chunks in 2 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 5\n\n
", "attrs": { "color_table_blue_values": [ 128, @@ -634,7 +634,7 @@ "colorBarNorm": "lin", "colorBarMin": 0, "colorBarMax": 3, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 76.29 MiB 488.28 kiB
Shape (5, 1000, 2000) (1, 250, 250)
Dask graph 160 chunks in 2 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 5\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 76.29 MiB 488.28 kiB
Shape (5, 1000, 2000) (1, 250, 250)
Dask graph 160 chunks in 2 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 5\n\n
", "attrs": { "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", @@ -665,7 +665,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 6.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 76.29 MiB 488.28 kiB
Shape (5, 1000, 2000) (1, 250, 250)
Dask graph 160 chunks in 2 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 5\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 76.29 MiB 488.28 kiB
Shape (5, 1000, 2000) (1, 250, 250)
Dask graph 160 chunks in 2 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 5\n\n
", "attrs": { "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", @@ -696,7 +696,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 76.29 MiB 488.28 kiB
Shape (5, 1000, 2000) (1, 250, 250)
Dask graph 160 chunks in 2 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 5\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 76.29 MiB 488.28 kiB
Shape (5, 1000, 2000) (1, 250, 250)
Dask graph 160 chunks in 2 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 5\n\n
", "attrs": { "flag_coding_name": "c2rcc_flags", "flag_descriptions": "The input spectrum to the atmospheric correction neural net was out of the scope of the training range and the inversion is likely to be wrong\tThe input spectrum to the atmospheric correction neural net out of training range\tOne of the inputs to the IOP retrieval neural net is out of training range\tHigh downwelling transmission is indicating cloudy conditions\tOne of the IOPs is out of range\tApig output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tAdet output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tAgelb output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tBpart output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tBwit output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tApig output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tAdet output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tAgelb output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tBpart output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tBwit output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tThe Rhow input spectrum to IOP neural net is probably not within the training range of the neural net, and the inversion is likely to be wrong.\tKd489 is out of range\tKdmin is out of range\tKdmin is at max\tKdmin is at max\tThe operators valid pixel expression has resolved to true", @@ -751,7 +751,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 76.29 MiB 488.28 kiB
Shape (5, 1000, 2000) (1, 250, 250)
Dask graph 160 chunks in 2 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 5\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 76.29 MiB 488.28 kiB
Shape (5, 1000, 2000) (1, 250, 250)
Dask graph 160 chunks in 2 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 5\n\n
", "attrs": { "flag_coding_name": "quality_flags", "flag_descriptions": "", @@ -3832,4 +3832,4 @@ "datetime": null, "start_datetime": "2017-01-16T10:09:21Z", "end_datetime": "2017-01-30T10:46:33Z" -} +} \ No newline at end of file diff --git a/test/webapi/ows/stac/stac-datacubes-item.json b/test/webapi/ows/stac/stac-datacubes-item.json index dbe12047e..50c9b41e8 100644 --- a/test/webapi/ows/stac/stac-datacubes-item.json +++ b/test/webapi/ows/stac/stac-datacubes-item.json @@ -393,7 +393,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 20.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "color_table_blue_values": [ 128, @@ -472,7 +472,7 @@ "colorBarNorm": "lin", "colorBarMin": 0, "colorBarMax": 3, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", @@ -503,7 +503,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 6.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", @@ -534,7 +534,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "flag_coding_name": "c2rcc_flags", "flag_descriptions": "The input spectrum to the atmospheric correction neural net was out of the scope of the training range and the inversion is likely to be wrong\tThe input spectrum to the atmospheric correction neural net out of training range\tOne of the inputs to the IOP retrieval neural net is out of training range\tHigh downwelling transmission is indicating cloudy conditions\tOne of the IOPs is out of range\tApig output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tAdet output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tAgelb output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tBpart output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tBwit output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tApig output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tAdet output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tAgelb output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tBpart output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tBwit output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tThe Rhow input spectrum to IOP neural net is probably not within the training range of the neural net, and the inversion is likely to be wrong.\tKd489 is out of range\tKdmin is out of range\tKdmin is at max\tKdmin is at max\tThe operators valid pixel expression has resolved to true", @@ -589,7 +589,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "flag_coding_name": "quality_flags", "flag_descriptions": "", @@ -655,7 +655,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "flag_coding_name": "c2rcc_flags", "flag_descriptions": "The input spectrum to the atmospheric correction neural net was out of the scope of the training range and the inversion is likely to be wrong\tThe input spectrum to the atmospheric correction neural net out of training range\tOne of the inputs to the IOP retrieval neural net is out of training range\tHigh downwelling transmission is indicating cloudy conditions\tOne of the IOPs is out of range\tApig output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tAdet output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tAgelb output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tBpart output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tBwit output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tApig output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tAdet output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tAgelb output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tBpart output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tBwit output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tThe Rhow input spectrum to IOP neural net is probably not within the training range of the neural net, and the inversion is likely to be wrong.\tKd489 is out of range\tKdmin is out of range\tKdmin is at max\tKdmin is at max\tThe operators valid pixel expression has resolved to true", @@ -710,7 +710,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "color_table_blue_values": [ 128, @@ -789,7 +789,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", @@ -820,7 +820,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", @@ -851,7 +851,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "flag_coding_name": "quality_flags", "flag_descriptions": "", @@ -3924,7 +3924,7 @@ "Conventions": "CF-1.7" }, "attributions": [ - "\u00a9 by Brockmann Consult GmbH 2020, contains modified Copernicus Data 2019, processed by ESA" + "© by Brockmann Consult GmbH 2020, contains modified Copernicus Data 2019, processed by ESA" ] }, "datetime": null, @@ -4258,4 +4258,4 @@ "href": "http://localhost:8080/tiles/demo-1w/c2rcc_flags/0/0/0?time=2017-01-22T00:00:00.000000000" } } -} +} \ No newline at end of file diff --git a/test/webapi/ows/stac/stac-single-item.json b/test/webapi/ows/stac/stac-single-item.json index 7f6c651b9..992beb793 100644 --- a/test/webapi/ows/stac/stac-single-item.json +++ b/test/webapi/ows/stac/stac-single-item.json @@ -393,7 +393,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 20.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "color_table_blue_values": [ 128, @@ -472,7 +472,7 @@ "colorBarNorm": "lin", "colorBarMin": 0, "colorBarMax": 3, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", @@ -503,7 +503,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 6.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", @@ -534,7 +534,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "flag_coding_name": "c2rcc_flags", "flag_descriptions": "The input spectrum to the atmospheric correction neural net was out of the scope of the training range and the inversion is likely to be wrong\tThe input spectrum to the atmospheric correction neural net out of training range\tOne of the inputs to the IOP retrieval neural net is out of training range\tHigh downwelling transmission is indicating cloudy conditions\tOne of the IOPs is out of range\tApig output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tAdet output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tAgelb output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tBpart output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tBwit output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tApig output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tAdet output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tAgelb output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tBpart output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tBwit output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tThe Rhow input spectrum to IOP neural net is probably not within the training range of the neural net, and the inversion is likely to be wrong.\tKd489 is out of range\tKdmin is out of range\tKdmin is at max\tKdmin is at max\tThe operators valid pixel expression has resolved to true", @@ -589,7 +589,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 15 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "flag_coding_name": "quality_flags", "flag_descriptions": "", @@ -655,7 +655,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "flag_coding_name": "c2rcc_flags", "flag_descriptions": "The input spectrum to the atmospheric correction neural net was out of the scope of the training range and the inversion is likely to be wrong\tThe input spectrum to the atmospheric correction neural net out of training range\tOne of the inputs to the IOP retrieval neural net is out of training range\tHigh downwelling transmission is indicating cloudy conditions\tOne of the IOPs is out of range\tApig output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tAdet output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tAgelb output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tBpart output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tBwit output of the IOP retrieval neural net is at its maximum. This means that the true value is this value or higher.\tApig output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tAdet output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tAgelb output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tBpart output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tBwit output of the IOP retrieval neural net is at its minimum. This means that the true value is this value or lower.\tThe Rhow input spectrum to IOP neural net is probably not within the training range of the neural net, and the inversion is likely to be wrong.\tKd489 is out of range\tKdmin is out of range\tKdmin is at max\tKdmin is at max\tThe operators valid pixel expression has resolved to true", @@ -710,7 +710,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "color_table_blue_values": [ 128, @@ -789,7 +789,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "long_name": "Total suspended matter dry weight concentration", "units": "g m^-3", @@ -820,7 +820,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "long_name": "Irradiance attenuation coefficient at 489 nm", "units": "m^-1", @@ -851,7 +851,7 @@ "colorBarNorm": "lin", "colorBarMin": 0.0, "colorBarMax": 1.0, - "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", + "htmlRepr": "\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Array Chunk
Bytes 45.78 MiB 488.28 kiB
Shape (3, 1000, 2000) (1, 250, 250)
Dask graph 96 chunks in 18 graph layers
Data type float64 numpy.ndarray
\n
\n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 2000\n 1000\n 3\n\n
", "attrs": { "flag_coding_name": "quality_flags", "flag_descriptions": "", @@ -896,1015 +896,18 @@ ], "dimensions": [ { - "name": "lat", - "size": 1000, - "dtype": "float64", - "coordinates": [ - 52.49875, - 52.49625, - 52.49375, - 52.49125, - 52.48875, - 52.48625, - 52.48375, - 52.48125, - 52.47875, - 52.47625, - 52.47375, - 52.47125, - 52.46875, - 52.46625, - 52.463750000000005, - 52.46125, - 52.45875, - 52.456250000000004, - 52.45375, - 52.45125, - 52.448750000000004, - 52.44625, - 52.44375, - 52.441250000000004, - 52.43875, - 52.43625, - 52.43375, - 52.43125, - 52.42875, - 52.42625, - 52.42375, - 52.42125, - 52.41875, - 52.41625, - 52.41375, - 52.41125, - 52.40875, - 52.40625, - 52.40375, - 52.401250000000005, - 52.39875, - 52.39625, - 52.393750000000004, - 52.39125, - 52.38875, - 52.386250000000004, - 52.38375, - 52.38125, - 52.378750000000004, - 52.37625, - 52.37375, - 52.37125, - 52.36875, - 52.36625, - 52.36375, - 52.36125, - 52.35875, - 52.35625, - 52.35375, - 52.35125, - 52.34875, - 52.34625, - 52.34375, - 52.34125, - 52.338750000000005, - 52.33625, - 52.33375, - 52.331250000000004, - 52.32875, - 52.32625, - 52.323750000000004, - 52.32125, - 52.31875, - 52.316250000000004, - 52.31375, - 52.31125, - 52.30875, - 52.30625, - 52.30375, - 52.30125, - 52.29875, - 52.29625, - 52.29375, - 52.29125, - 52.28875, - 52.28625, - 52.28375, - 52.28125, - 52.27875, - 52.27625, - 52.27375, - 52.27125, - 52.268750000000004, - 52.26625, - 52.26375, - 52.261250000000004, - 52.25875, - 52.25625, - 52.253750000000004, - 52.25125, - 52.24875, - 52.24625, - 52.24375, - 52.24125, - 52.23875, - 52.23625, - 52.23375, - 52.23125, - 52.22875, - 52.22625, - 52.22375, - 52.22125, - 52.21875, - 52.21625, - 52.21375, - 52.21125, - 52.20875, - 52.206250000000004, - 52.20375, - 52.20125, - 52.198750000000004, - 52.19625, - 52.19375, - 52.191250000000004, - 52.18875, - 52.18625, - 52.18375, - 52.18125, - 52.17875, - 52.17625, - 52.17375, - 52.17125, - 52.16875, - 52.16625, - 52.16375, - 52.16125, - 52.15875, - 52.15625, - 52.15375, - 52.15125, - 52.14875, - 52.14625, - 52.143750000000004, - 52.14125, - 52.13875, - 52.136250000000004, - 52.13375, - 52.13125, - 52.128750000000004, - 52.12625, - 52.12375, - 52.12125, - 52.11875, - 52.11625, - 52.11375, - 52.11125, - 52.10875, - 52.10625, - 52.10375, - 52.10125, - 52.09875, - 52.09625, - 52.09375, - 52.09125, - 52.08875, - 52.08625, - 52.08375, - 52.081250000000004, - 52.07875, - 52.07625, - 52.073750000000004, - 52.07125, - 52.06875, - 52.066250000000004, - 52.06375, - 52.06125, - 52.05875, - 52.05625, - 52.05375, - 52.05125, - 52.04875, - 52.04625, - 52.04375, - 52.04125, - 52.03875, - 52.03625, - 52.03375, - 52.03125, - 52.02875, - 52.02625, - 52.02375, - 52.02125, - 52.01875, - 52.01625, - 52.01375, - 52.011250000000004, - 52.00875, - 52.00625, - 52.003750000000004, - 52.00125, - 51.99875, - 51.99625, - 51.99375, - 51.99125, - 51.98875, - 51.98625, - 51.98375, - 51.98125, - 51.97875, - 51.97625, - 51.97375, - 51.97125, - 51.96875, - 51.96625, - 51.96375, - 51.96125, - 51.95875, - 51.95625, - 51.95375, - 51.95125, - 51.948750000000004, - 51.94625, - 51.94375, - 51.941250000000004, - 51.93875, - 51.93625, - 51.93375, - 51.93125, - 51.92875, - 51.92625, - 51.92375, - 51.92125, - 51.91875, - 51.91625, - 51.91375, - 51.91125, - 51.90875, - 51.90625, - 51.90375, - 51.90125, - 51.89875, - 51.89625, - 51.89375, - 51.89125, - 51.88875, - 51.886250000000004, - 51.88375, - 51.88125, - 51.878750000000004, - 51.87625, - 51.87375, - 51.87125, - 51.86875, - 51.86625, - 51.86375, - 51.86125, - 51.85875, - 51.85625, - 51.85375, - 51.85125, - 51.84875, - 51.84625, - 51.84375, - 51.84125, - 51.83875, - 51.83625, - 51.83375, - 51.83125, - 51.82875, - 51.82625, - 51.823750000000004, - 51.82125, - 51.81875, - 51.816250000000004, - 51.81375, - 51.81125, - 51.80875, - 51.80625, - 51.80375, - 51.80125, - 51.79875, - 51.79625, - 51.79375, - 51.79125, - 51.78875, - 51.78625, - 51.78375, - 51.78125, - 51.77875, - 51.77625, - 51.77375, - 51.77125, - 51.76875, - 51.76625, - 51.76375, - 51.761250000000004, - 51.75875, - 51.75625, - 51.753750000000004, - 51.75125, - 51.74875, - 51.74625, - 51.74375, - 51.74125, - 51.73875, - 51.73625, - 51.73375, - 51.73125, - 51.72875, - 51.72625, - 51.72375, - 51.72125, - 51.71875, - 51.71625, - 51.71375, - 51.71125, - 51.70875, - 51.70625, - 51.70375, - 51.70125, - 51.698750000000004, - 51.69625, - 51.69375, - 51.691250000000004, - 51.68875, - 51.68625, - 51.68375, - 51.68125, - 51.67875, - 51.67625, - 51.67375, - 51.67125, - 51.66875, - 51.66625, - 51.66375, - 51.66125, - 51.65875, - 51.65625, - 51.65375, - 51.65125, - 51.64875, - 51.64625, - 51.64375, - 51.64125, - 51.63875, - 51.636250000000004, - 51.63375, - 51.63125, - 51.628750000000004, - 51.62625, - 51.62375, - 51.62125, - 51.61875, - 51.61625, - 51.61375, - 51.61125, - 51.60875, - 51.60625, - 51.60375, - 51.60125, - 51.59875, - 51.59625, - 51.59375, - 51.59125, - 51.58875, - 51.58625, - 51.58375, - 51.58125, - 51.57875, - 51.57625, - 51.57375, - 51.57125, - 51.56875, - 51.566250000000004, - 51.56375, - 51.56125, - 51.55875, - 51.55625, - 51.55375, - 51.55125, - 51.54875, - 51.54625, - 51.54375, - 51.54125, - 51.53875, - 51.53625, - 51.53375, - 51.53125, - 51.52875, - 51.52625, - 51.52375, - 51.52125, - 51.51875, - 51.51625, - 51.51375, - 51.51125, - 51.50875, - 51.50625, - 51.503750000000004, - 51.50125, - 51.49875, - 51.49625, - 51.49375, - 51.49125, - 51.48875, - 51.48625, - 51.48375, - 51.48125, - 51.47875, - 51.47625, - 51.47375, - 51.47125, - 51.46875, - 51.46625, - 51.46375, - 51.46125, - 51.45875, - 51.45625, - 51.45375, - 51.45125, - 51.44875, - 51.44625, - 51.44375, - 51.44125, - 51.43875, - 51.43625, - 51.43375, - 51.43125, - 51.42875, - 51.42625, - 51.42375, - 51.42125, - 51.41875, - 51.41625, - 51.41375, - 51.41125, - 51.40875, - 51.40625, - 51.40375, - 51.40125, - 51.39875, - 51.39625, - 51.39375, - 51.39125, - 51.38875, - 51.38625, - 51.38375, - 51.38125, - 51.37875, - 51.37625, - 51.37375, - 51.37125, - 51.36875, - 51.36625, - 51.36375, - 51.36125, - 51.35875, - 51.35625, - 51.35375, - 51.35125, - 51.34875, - 51.34625, - 51.34375, - 51.34125, - 51.33875, - 51.33625, - 51.33375, - 51.33125, - 51.32875, - 51.32625, - 51.32375, - 51.32125, - 51.31875, - 51.31625, - 51.31375, - 51.31125, - 51.30875, - 51.30625, - 51.30375, - 51.30125, - 51.29875, - 51.29625, - 51.29375, - 51.29125, - 51.28875, - 51.28625, - 51.28375, - 51.28125, - 51.27875, - 51.27625, - 51.27375, - 51.27125, - 51.26875, - 51.26625, - 51.26375, - 51.26125, - 51.25875, - 51.25625, - 51.25375, - 51.25125, - 51.24875, - 51.24625, - 51.24375, - 51.24125, - 51.23875, - 51.23625, - 51.23375, - 51.23125, - 51.22875, - 51.22625, - 51.22375, - 51.22125, - 51.21875, - 51.21625, - 51.21375, - 51.21125, - 51.20875, - 51.20625, - 51.20375, - 51.20125, - 51.19875, - 51.19625, - 51.19375, - 51.19125, - 51.18875, - 51.18625, - 51.18375, - 51.18125, - 51.17875, - 51.17625, - 51.17375, - 51.17125, - 51.16875, - 51.16625, - 51.16375, - 51.16125, - 51.15875, - 51.15625, - 51.15375, - 51.15125, - 51.14875, - 51.14625, - 51.14375, - 51.14125, - 51.13875, - 51.13625, - 51.13375, - 51.13125, - 51.12875, - 51.12625, - 51.12375, - 51.12125, - 51.11875, - 51.11625, - 51.11375, - 51.11125, - 51.10875, - 51.10625, - 51.10375, - 51.10125, - 51.09875, - 51.09625, - 51.09375, - 51.09125, - 51.08875, - 51.08625, - 51.08375, - 51.08125, - 51.07875, - 51.07625, - 51.07375, - 51.07125, - 51.06875, - 51.06625, - 51.06375, - 51.06125, - 51.05875, - 51.05625, - 51.05375, - 51.05125, - 51.04875, - 51.04625, - 51.04375, - 51.04125, - 51.03875, - 51.03625, - 51.03375, - 51.03125, - 51.02875, - 51.02625, - 51.02375, - 51.02125, - 51.01875, - 51.01625, - 51.01375, - 51.01125, - 51.00875, - 51.00625, - 51.00375, - 51.00125, - 50.99875, - 50.99625, - 50.99375, - 50.99125, - 50.98875, - 50.98625, - 50.98375, - 50.98125, - 50.97875, - 50.97625, - 50.97375, - 50.97125, - 50.96875, - 50.96625, - 50.96375, - 50.96125, - 50.95875, - 50.95625, - 50.95375, - 50.95125, - 50.94875, - 50.94625, - 50.94375, - 50.94125, - 50.93875, - 50.93625, - 50.93375, - 50.93125, - 50.92875, - 50.92625, - 50.92375, - 50.92125, - 50.91875, - 50.91625, - 50.91375, - 50.91125, - 50.90875, - 50.90625, - 50.90375, - 50.90125, - 50.89875, - 50.89625, - 50.89375, - 50.89125, - 50.88875, - 50.88625, - 50.88375, - 50.88125, - 50.87875, - 50.87625, - 50.87375, - 50.871249999999996, - 50.86875, - 50.86625, - 50.863749999999996, - 50.86125, - 50.85875, - 50.85625, - 50.85375, - 50.85125, - 50.84875, - 50.84625, - 50.84375, - 50.84125, - 50.83875, - 50.83625, - 50.83375, - 50.83125, - 50.82875, - 50.82625, - 50.82375, - 50.82125, - 50.81875, - 50.81625, - 50.81375, - 50.81125, - 50.808749999999996, - 50.80625, - 50.80375, - 50.801249999999996, - 50.79875, - 50.79625, - 50.79375, - 50.79125, - 50.78875, - 50.78625, - 50.78375, - 50.78125, - 50.77875, - 50.77625, - 50.77375, - 50.77125, - 50.76875, - 50.76625, - 50.76375, - 50.76125, - 50.75875, - 50.75625, - 50.75375, - 50.75125, - 50.74875, - 50.746249999999996, - 50.74375, - 50.74125, - 50.738749999999996, - 50.73625, - 50.73375, - 50.73125, - 50.72875, - 50.72625, - 50.72375, - 50.72125, - 50.71875, - 50.71625, - 50.71375, - 50.71125, - 50.70875, - 50.70625, - 50.70375, - 50.70125, - 50.69875, - 50.69625, - 50.69375, - 50.69125, - 50.68875, - 50.68625, - 50.683749999999996, - 50.68125, - 50.67875, - 50.676249999999996, - 50.67375, - 50.67125, - 50.66875, - 50.66625, - 50.66375, - 50.66125, - 50.65875, - 50.65625, - 50.65375, - 50.65125, - 50.64875, - 50.64625, - 50.64375, - 50.64125, - 50.63875, - 50.63625, - 50.63375, - 50.63125, - 50.62875, - 50.62625, - 50.62375, - 50.621249999999996, - 50.61875, - 50.61625, - 50.613749999999996, - 50.61125, - 50.60875, - 50.60625, - 50.60375, - 50.60125, - 50.59875, - 50.59625, - 50.59375, - 50.59125, - 50.58875, - 50.58625, - 50.58375, - 50.58125, - 50.57875, - 50.57625, - 50.57375, - 50.57125, - 50.56875, - 50.56625, - 50.56375, - 50.56125, - 50.558749999999996, - 50.55625, - 50.55375, - 50.551249999999996, - 50.54875, - 50.54625, - 50.54375, - 50.54125, - 50.53875, - 50.53625, - 50.53375, - 50.53125, - 50.52875, - 50.52625, - 50.52375, - 50.52125, - 50.51875, - 50.51625, - 50.51375, - 50.51125, - 50.50875, - 50.50625, - 50.50375, - 50.50125, - 50.49875, - 50.496249999999996, - 50.49375, - 50.49125, - 50.488749999999996, - 50.48625, - 50.48375, - 50.48125, - 50.47875, - 50.47625, - 50.47375, - 50.47125, - 50.46875, - 50.46625, - 50.46375, - 50.46125, - 50.45875, - 50.45625, - 50.45375, - 50.45125, - 50.44875, - 50.44625, - 50.44375, - 50.44125, - 50.43875, - 50.43625, - 50.433749999999996, - 50.43125, - 50.42875, - 50.426249999999996, - 50.42375, - 50.42125, - 50.41875, - 50.41625, - 50.41375, - 50.41125, - 50.40875, - 50.40625, - 50.40375, - 50.40125, - 50.39875, - 50.39625, - 50.39375, - 50.39125, - 50.38875, - 50.38625, - 50.38375, - 50.38125, - 50.37875, - 50.37625, - 50.37375, - 50.371249999999996, - 50.36875, - 50.36625, - 50.363749999999996, - 50.36125, - 50.35875, - 50.35625, - 50.35375, - 50.35125, - 50.348749999999995, - 50.34625, - 50.34375, - 50.34125, - 50.33875, - 50.33625, - 50.33375, - 50.33125, - 50.32875, - 50.32625, - 50.32375, - 50.32125, - 50.31875, - 50.31625, - 50.31375, - 50.31125, - 50.308749999999996, - 50.30625, - 50.30375, - 50.301249999999996, - 50.29875, - 50.29625, - 50.29375, - 50.29125, - 50.28875, - 50.286249999999995, - 50.28375, - 50.28125, - 50.27875, - 50.27625, - 50.27375, - 50.27125, - 50.26875, - 50.26625, - 50.26375, - 50.26125, - 50.25875, - 50.25625, - 50.25375, - 50.25125, - 50.24875, - 50.246249999999996, - 50.24375, - 50.24125, - 50.238749999999996, - 50.23625, - 50.23375, - 50.23125, - 50.22875, - 50.22625, - 50.223749999999995, - 50.22125, - 50.21875, - 50.21625, - 50.21375, - 50.21125, - 50.20875, - 50.20625, - 50.20375, - 50.20125, - 50.19875, - 50.19625, - 50.19375, - 50.19125, - 50.18875, - 50.18625, - 50.183749999999996, - 50.18125, - 50.17875, - 50.176249999999996, - 50.17375, - 50.17125, - 50.16875, - 50.16625, - 50.16375, - 50.161249999999995, - 50.15875, - 50.15625, - 50.15375, - 50.15125, - 50.14875, - 50.14625, - 50.14375, - 50.14125, - 50.13875, - 50.13625, - 50.13375, - 50.13125, - 50.12875, - 50.12625, - 50.12375, - 50.121249999999996, - 50.11875, - 50.11625, - 50.113749999999996, - 50.11125, - 50.10875, - 50.106249999999996, - 50.10375, - 50.10125, - 50.098749999999995, - 50.09625, - 50.09375, - 50.09125, - 50.08875, - 50.08625, - 50.08375, - 50.08125, - 50.07875, - 50.07625, - 50.07375, - 50.07125, - 50.06875, - 50.06625, - 50.06375, - 50.06125, - 50.058749999999996, - 50.05625, - 50.05375, - 50.051249999999996, - 50.04875, - 50.04625, - 50.043749999999996, - 50.04125, - 50.03875, - 50.036249999999995, - 50.03375, - 50.03125, - 50.02875, - 50.02625, - 50.02375, - 50.02125, - 50.01875, - 50.01625, - 50.01375, - 50.01125, - 50.00875, - 50.00625, - 50.00375, - 50.00125 - ] - }, - { - "name": "lon", - "size": 2000, + "name": "time", + "size": 3, + "dtype": "datetime64[ns]", + "coordinates": [ + "2017-01-22T00:00:00Z", + "2017-01-29T00:00:00Z", + "2017-02-05T00:00:00Z" + ] + }, + { + "name": "lon", + "size": 2000, "dtype": "float64", "coordinates": [ 0.00125, @@ -3910,13 +2913,1010 @@ ] }, { - "name": "time", - "size": 3, - "dtype": "datetime64[ns]", + "name": "lat", + "size": 1000, + "dtype": "float64", "coordinates": [ - "2017-01-22T00:00:00Z", - "2017-01-29T00:00:00Z", - "2017-02-05T00:00:00Z" + 52.49875, + 52.49625, + 52.49375, + 52.49125, + 52.48875, + 52.48625, + 52.48375, + 52.48125, + 52.47875, + 52.47625, + 52.47375, + 52.47125, + 52.46875, + 52.46625, + 52.463750000000005, + 52.46125, + 52.45875, + 52.456250000000004, + 52.45375, + 52.45125, + 52.448750000000004, + 52.44625, + 52.44375, + 52.441250000000004, + 52.43875, + 52.43625, + 52.43375, + 52.43125, + 52.42875, + 52.42625, + 52.42375, + 52.42125, + 52.41875, + 52.41625, + 52.41375, + 52.41125, + 52.40875, + 52.40625, + 52.40375, + 52.401250000000005, + 52.39875, + 52.39625, + 52.393750000000004, + 52.39125, + 52.38875, + 52.386250000000004, + 52.38375, + 52.38125, + 52.378750000000004, + 52.37625, + 52.37375, + 52.37125, + 52.36875, + 52.36625, + 52.36375, + 52.36125, + 52.35875, + 52.35625, + 52.35375, + 52.35125, + 52.34875, + 52.34625, + 52.34375, + 52.34125, + 52.338750000000005, + 52.33625, + 52.33375, + 52.331250000000004, + 52.32875, + 52.32625, + 52.323750000000004, + 52.32125, + 52.31875, + 52.316250000000004, + 52.31375, + 52.31125, + 52.30875, + 52.30625, + 52.30375, + 52.30125, + 52.29875, + 52.29625, + 52.29375, + 52.29125, + 52.28875, + 52.28625, + 52.28375, + 52.28125, + 52.27875, + 52.27625, + 52.27375, + 52.27125, + 52.268750000000004, + 52.26625, + 52.26375, + 52.261250000000004, + 52.25875, + 52.25625, + 52.253750000000004, + 52.25125, + 52.24875, + 52.24625, + 52.24375, + 52.24125, + 52.23875, + 52.23625, + 52.23375, + 52.23125, + 52.22875, + 52.22625, + 52.22375, + 52.22125, + 52.21875, + 52.21625, + 52.21375, + 52.21125, + 52.20875, + 52.206250000000004, + 52.20375, + 52.20125, + 52.198750000000004, + 52.19625, + 52.19375, + 52.191250000000004, + 52.18875, + 52.18625, + 52.18375, + 52.18125, + 52.17875, + 52.17625, + 52.17375, + 52.17125, + 52.16875, + 52.16625, + 52.16375, + 52.16125, + 52.15875, + 52.15625, + 52.15375, + 52.15125, + 52.14875, + 52.14625, + 52.143750000000004, + 52.14125, + 52.13875, + 52.136250000000004, + 52.13375, + 52.13125, + 52.128750000000004, + 52.12625, + 52.12375, + 52.12125, + 52.11875, + 52.11625, + 52.11375, + 52.11125, + 52.10875, + 52.10625, + 52.10375, + 52.10125, + 52.09875, + 52.09625, + 52.09375, + 52.09125, + 52.08875, + 52.08625, + 52.08375, + 52.081250000000004, + 52.07875, + 52.07625, + 52.073750000000004, + 52.07125, + 52.06875, + 52.066250000000004, + 52.06375, + 52.06125, + 52.05875, + 52.05625, + 52.05375, + 52.05125, + 52.04875, + 52.04625, + 52.04375, + 52.04125, + 52.03875, + 52.03625, + 52.03375, + 52.03125, + 52.02875, + 52.02625, + 52.02375, + 52.02125, + 52.01875, + 52.01625, + 52.01375, + 52.011250000000004, + 52.00875, + 52.00625, + 52.003750000000004, + 52.00125, + 51.99875, + 51.99625, + 51.99375, + 51.99125, + 51.98875, + 51.98625, + 51.98375, + 51.98125, + 51.97875, + 51.97625, + 51.97375, + 51.97125, + 51.96875, + 51.96625, + 51.96375, + 51.96125, + 51.95875, + 51.95625, + 51.95375, + 51.95125, + 51.948750000000004, + 51.94625, + 51.94375, + 51.941250000000004, + 51.93875, + 51.93625, + 51.93375, + 51.93125, + 51.92875, + 51.92625, + 51.92375, + 51.92125, + 51.91875, + 51.91625, + 51.91375, + 51.91125, + 51.90875, + 51.90625, + 51.90375, + 51.90125, + 51.89875, + 51.89625, + 51.89375, + 51.89125, + 51.88875, + 51.886250000000004, + 51.88375, + 51.88125, + 51.878750000000004, + 51.87625, + 51.87375, + 51.87125, + 51.86875, + 51.86625, + 51.86375, + 51.86125, + 51.85875, + 51.85625, + 51.85375, + 51.85125, + 51.84875, + 51.84625, + 51.84375, + 51.84125, + 51.83875, + 51.83625, + 51.83375, + 51.83125, + 51.82875, + 51.82625, + 51.823750000000004, + 51.82125, + 51.81875, + 51.816250000000004, + 51.81375, + 51.81125, + 51.80875, + 51.80625, + 51.80375, + 51.80125, + 51.79875, + 51.79625, + 51.79375, + 51.79125, + 51.78875, + 51.78625, + 51.78375, + 51.78125, + 51.77875, + 51.77625, + 51.77375, + 51.77125, + 51.76875, + 51.76625, + 51.76375, + 51.761250000000004, + 51.75875, + 51.75625, + 51.753750000000004, + 51.75125, + 51.74875, + 51.74625, + 51.74375, + 51.74125, + 51.73875, + 51.73625, + 51.73375, + 51.73125, + 51.72875, + 51.72625, + 51.72375, + 51.72125, + 51.71875, + 51.71625, + 51.71375, + 51.71125, + 51.70875, + 51.70625, + 51.70375, + 51.70125, + 51.698750000000004, + 51.69625, + 51.69375, + 51.691250000000004, + 51.68875, + 51.68625, + 51.68375, + 51.68125, + 51.67875, + 51.67625, + 51.67375, + 51.67125, + 51.66875, + 51.66625, + 51.66375, + 51.66125, + 51.65875, + 51.65625, + 51.65375, + 51.65125, + 51.64875, + 51.64625, + 51.64375, + 51.64125, + 51.63875, + 51.636250000000004, + 51.63375, + 51.63125, + 51.628750000000004, + 51.62625, + 51.62375, + 51.62125, + 51.61875, + 51.61625, + 51.61375, + 51.61125, + 51.60875, + 51.60625, + 51.60375, + 51.60125, + 51.59875, + 51.59625, + 51.59375, + 51.59125, + 51.58875, + 51.58625, + 51.58375, + 51.58125, + 51.57875, + 51.57625, + 51.57375, + 51.57125, + 51.56875, + 51.566250000000004, + 51.56375, + 51.56125, + 51.55875, + 51.55625, + 51.55375, + 51.55125, + 51.54875, + 51.54625, + 51.54375, + 51.54125, + 51.53875, + 51.53625, + 51.53375, + 51.53125, + 51.52875, + 51.52625, + 51.52375, + 51.52125, + 51.51875, + 51.51625, + 51.51375, + 51.51125, + 51.50875, + 51.50625, + 51.503750000000004, + 51.50125, + 51.49875, + 51.49625, + 51.49375, + 51.49125, + 51.48875, + 51.48625, + 51.48375, + 51.48125, + 51.47875, + 51.47625, + 51.47375, + 51.47125, + 51.46875, + 51.46625, + 51.46375, + 51.46125, + 51.45875, + 51.45625, + 51.45375, + 51.45125, + 51.44875, + 51.44625, + 51.44375, + 51.44125, + 51.43875, + 51.43625, + 51.43375, + 51.43125, + 51.42875, + 51.42625, + 51.42375, + 51.42125, + 51.41875, + 51.41625, + 51.41375, + 51.41125, + 51.40875, + 51.40625, + 51.40375, + 51.40125, + 51.39875, + 51.39625, + 51.39375, + 51.39125, + 51.38875, + 51.38625, + 51.38375, + 51.38125, + 51.37875, + 51.37625, + 51.37375, + 51.37125, + 51.36875, + 51.36625, + 51.36375, + 51.36125, + 51.35875, + 51.35625, + 51.35375, + 51.35125, + 51.34875, + 51.34625, + 51.34375, + 51.34125, + 51.33875, + 51.33625, + 51.33375, + 51.33125, + 51.32875, + 51.32625, + 51.32375, + 51.32125, + 51.31875, + 51.31625, + 51.31375, + 51.31125, + 51.30875, + 51.30625, + 51.30375, + 51.30125, + 51.29875, + 51.29625, + 51.29375, + 51.29125, + 51.28875, + 51.28625, + 51.28375, + 51.28125, + 51.27875, + 51.27625, + 51.27375, + 51.27125, + 51.26875, + 51.26625, + 51.26375, + 51.26125, + 51.25875, + 51.25625, + 51.25375, + 51.25125, + 51.24875, + 51.24625, + 51.24375, + 51.24125, + 51.23875, + 51.23625, + 51.23375, + 51.23125, + 51.22875, + 51.22625, + 51.22375, + 51.22125, + 51.21875, + 51.21625, + 51.21375, + 51.21125, + 51.20875, + 51.20625, + 51.20375, + 51.20125, + 51.19875, + 51.19625, + 51.19375, + 51.19125, + 51.18875, + 51.18625, + 51.18375, + 51.18125, + 51.17875, + 51.17625, + 51.17375, + 51.17125, + 51.16875, + 51.16625, + 51.16375, + 51.16125, + 51.15875, + 51.15625, + 51.15375, + 51.15125, + 51.14875, + 51.14625, + 51.14375, + 51.14125, + 51.13875, + 51.13625, + 51.13375, + 51.13125, + 51.12875, + 51.12625, + 51.12375, + 51.12125, + 51.11875, + 51.11625, + 51.11375, + 51.11125, + 51.10875, + 51.10625, + 51.10375, + 51.10125, + 51.09875, + 51.09625, + 51.09375, + 51.09125, + 51.08875, + 51.08625, + 51.08375, + 51.08125, + 51.07875, + 51.07625, + 51.07375, + 51.07125, + 51.06875, + 51.06625, + 51.06375, + 51.06125, + 51.05875, + 51.05625, + 51.05375, + 51.05125, + 51.04875, + 51.04625, + 51.04375, + 51.04125, + 51.03875, + 51.03625, + 51.03375, + 51.03125, + 51.02875, + 51.02625, + 51.02375, + 51.02125, + 51.01875, + 51.01625, + 51.01375, + 51.01125, + 51.00875, + 51.00625, + 51.00375, + 51.00125, + 50.99875, + 50.99625, + 50.99375, + 50.99125, + 50.98875, + 50.98625, + 50.98375, + 50.98125, + 50.97875, + 50.97625, + 50.97375, + 50.97125, + 50.96875, + 50.96625, + 50.96375, + 50.96125, + 50.95875, + 50.95625, + 50.95375, + 50.95125, + 50.94875, + 50.94625, + 50.94375, + 50.94125, + 50.93875, + 50.93625, + 50.93375, + 50.93125, + 50.92875, + 50.92625, + 50.92375, + 50.92125, + 50.91875, + 50.91625, + 50.91375, + 50.91125, + 50.90875, + 50.90625, + 50.90375, + 50.90125, + 50.89875, + 50.89625, + 50.89375, + 50.89125, + 50.88875, + 50.88625, + 50.88375, + 50.88125, + 50.87875, + 50.87625, + 50.87375, + 50.871249999999996, + 50.86875, + 50.86625, + 50.863749999999996, + 50.86125, + 50.85875, + 50.85625, + 50.85375, + 50.85125, + 50.84875, + 50.84625, + 50.84375, + 50.84125, + 50.83875, + 50.83625, + 50.83375, + 50.83125, + 50.82875, + 50.82625, + 50.82375, + 50.82125, + 50.81875, + 50.81625, + 50.81375, + 50.81125, + 50.808749999999996, + 50.80625, + 50.80375, + 50.801249999999996, + 50.79875, + 50.79625, + 50.79375, + 50.79125, + 50.78875, + 50.78625, + 50.78375, + 50.78125, + 50.77875, + 50.77625, + 50.77375, + 50.77125, + 50.76875, + 50.76625, + 50.76375, + 50.76125, + 50.75875, + 50.75625, + 50.75375, + 50.75125, + 50.74875, + 50.746249999999996, + 50.74375, + 50.74125, + 50.738749999999996, + 50.73625, + 50.73375, + 50.73125, + 50.72875, + 50.72625, + 50.72375, + 50.72125, + 50.71875, + 50.71625, + 50.71375, + 50.71125, + 50.70875, + 50.70625, + 50.70375, + 50.70125, + 50.69875, + 50.69625, + 50.69375, + 50.69125, + 50.68875, + 50.68625, + 50.683749999999996, + 50.68125, + 50.67875, + 50.676249999999996, + 50.67375, + 50.67125, + 50.66875, + 50.66625, + 50.66375, + 50.66125, + 50.65875, + 50.65625, + 50.65375, + 50.65125, + 50.64875, + 50.64625, + 50.64375, + 50.64125, + 50.63875, + 50.63625, + 50.63375, + 50.63125, + 50.62875, + 50.62625, + 50.62375, + 50.621249999999996, + 50.61875, + 50.61625, + 50.613749999999996, + 50.61125, + 50.60875, + 50.60625, + 50.60375, + 50.60125, + 50.59875, + 50.59625, + 50.59375, + 50.59125, + 50.58875, + 50.58625, + 50.58375, + 50.58125, + 50.57875, + 50.57625, + 50.57375, + 50.57125, + 50.56875, + 50.56625, + 50.56375, + 50.56125, + 50.558749999999996, + 50.55625, + 50.55375, + 50.551249999999996, + 50.54875, + 50.54625, + 50.54375, + 50.54125, + 50.53875, + 50.53625, + 50.53375, + 50.53125, + 50.52875, + 50.52625, + 50.52375, + 50.52125, + 50.51875, + 50.51625, + 50.51375, + 50.51125, + 50.50875, + 50.50625, + 50.50375, + 50.50125, + 50.49875, + 50.496249999999996, + 50.49375, + 50.49125, + 50.488749999999996, + 50.48625, + 50.48375, + 50.48125, + 50.47875, + 50.47625, + 50.47375, + 50.47125, + 50.46875, + 50.46625, + 50.46375, + 50.46125, + 50.45875, + 50.45625, + 50.45375, + 50.45125, + 50.44875, + 50.44625, + 50.44375, + 50.44125, + 50.43875, + 50.43625, + 50.433749999999996, + 50.43125, + 50.42875, + 50.426249999999996, + 50.42375, + 50.42125, + 50.41875, + 50.41625, + 50.41375, + 50.41125, + 50.40875, + 50.40625, + 50.40375, + 50.40125, + 50.39875, + 50.39625, + 50.39375, + 50.39125, + 50.38875, + 50.38625, + 50.38375, + 50.38125, + 50.37875, + 50.37625, + 50.37375, + 50.371249999999996, + 50.36875, + 50.36625, + 50.363749999999996, + 50.36125, + 50.35875, + 50.35625, + 50.35375, + 50.35125, + 50.348749999999995, + 50.34625, + 50.34375, + 50.34125, + 50.33875, + 50.33625, + 50.33375, + 50.33125, + 50.32875, + 50.32625, + 50.32375, + 50.32125, + 50.31875, + 50.31625, + 50.31375, + 50.31125, + 50.308749999999996, + 50.30625, + 50.30375, + 50.301249999999996, + 50.29875, + 50.29625, + 50.29375, + 50.29125, + 50.28875, + 50.286249999999995, + 50.28375, + 50.28125, + 50.27875, + 50.27625, + 50.27375, + 50.27125, + 50.26875, + 50.26625, + 50.26375, + 50.26125, + 50.25875, + 50.25625, + 50.25375, + 50.25125, + 50.24875, + 50.246249999999996, + 50.24375, + 50.24125, + 50.238749999999996, + 50.23625, + 50.23375, + 50.23125, + 50.22875, + 50.22625, + 50.223749999999995, + 50.22125, + 50.21875, + 50.21625, + 50.21375, + 50.21125, + 50.20875, + 50.20625, + 50.20375, + 50.20125, + 50.19875, + 50.19625, + 50.19375, + 50.19125, + 50.18875, + 50.18625, + 50.183749999999996, + 50.18125, + 50.17875, + 50.176249999999996, + 50.17375, + 50.17125, + 50.16875, + 50.16625, + 50.16375, + 50.161249999999995, + 50.15875, + 50.15625, + 50.15375, + 50.15125, + 50.14875, + 50.14625, + 50.14375, + 50.14125, + 50.13875, + 50.13625, + 50.13375, + 50.13125, + 50.12875, + 50.12625, + 50.12375, + 50.121249999999996, + 50.11875, + 50.11625, + 50.113749999999996, + 50.11125, + 50.10875, + 50.106249999999996, + 50.10375, + 50.10125, + 50.098749999999995, + 50.09625, + 50.09375, + 50.09125, + 50.08875, + 50.08625, + 50.08375, + 50.08125, + 50.07875, + 50.07625, + 50.07375, + 50.07125, + 50.06875, + 50.06625, + 50.06375, + 50.06125, + 50.058749999999996, + 50.05625, + 50.05375, + 50.051249999999996, + 50.04875, + 50.04625, + 50.043749999999996, + 50.04125, + 50.03875, + 50.036249999999995, + 50.03375, + 50.03125, + 50.02875, + 50.02625, + 50.02375, + 50.02125, + 50.01875, + 50.01625, + 50.01375, + 50.01125, + 50.00875, + 50.00625, + 50.00375, + 50.00125 ] } ], @@ -4258,4 +4258,4 @@ "href": "http://localhost:8080/tiles/demo-1w/c2rcc_flags/0/0/0?time=2017-01-22T00:00:00.000000000" } } -} +} \ No newline at end of file diff --git a/xcube/core/store/fs/impl/rasterio.py b/xcube/core/store/fs/impl/rasterio.py index 42211aac7..6203aa72d 100644 --- a/xcube/core/store/fs/impl/rasterio.py +++ b/xcube/core/store/fs/impl/rasterio.py @@ -35,6 +35,7 @@ from xcube.util.jsonencoder import to_json_value from xcube.util.jsonschema import ( JsonArraySchema, + JsonBooleanSchema, JsonIntegerSchema, JsonNumberSchema, JsonObjectSchema, @@ -53,6 +54,15 @@ ), default=[1024, 1024], ), + band_as_variable=JsonBooleanSchema( + title="Present raster bands as seperate data variables", + description=( + "If `True` (default), raster bands are exposed as separate data " + "variables. If `False`, the original data structure returned by " + "rioxarray is preserved." + ), + default=True, + ), overview_level=JsonIntegerSchema( default=None, nullable=True, @@ -71,6 +81,15 @@ ), default=[1024, 1024], ), + band_as_variable=JsonBooleanSchema( + title="Present raster bands as seperate data variables", + description=( + "If `True` (default), raster bands are exposed as separate data " + "variables. If `False`, the original data structure returned by " + "rioxarray is preserved." + ), + default=True, + ), ), additional_properties=False, ) @@ -107,35 +126,63 @@ def get_overview_count(self, file_url): # noinspection PyMethodMayBeStatic def open_dataset_with_rioxarray( - self, file_path, overview_level, tile_size + self, + file_path: str, + overview_level: int, + tile_size: tuple[int, int] | None = None, + band_as_variable: bool = True, ) -> rioxarray.raster_array: - return rioxarray.open_rasterio( + if tile_size is not None: + chunks = dict(zip(("x", "y"), tile_size)) + else: + chunks = "auto" + + array = rioxarray.open_rasterio( file_path, overview_level=overview_level, - chunks=dict(zip(("x", "y"), tile_size)), - band_as_variable=True, + chunks=chunks, + band_as_variable=band_as_variable, ) + if band_as_variable: + dataset = array + else: + dataset = xr.Dataset() + name = array.name or "data" + dataset[name] = array + dataset = dataset.squeeze(drop=True) + return dataset def open_dataset( self, file_path: str, - tile_size: tuple[int, int], *, overview_level: Optional[int] = None, + tile_size: tuple[int, int] | None = None, + band_as_variable: Optional[bool] = True, ) -> xr.Dataset: """ - A method to open a dataset using rioxarray, returns xarray.Dataset. + Open a raster dataset using rioxarray. Args: - file_path: path to the file - tile_size: tile size as tuple. - overview_level: the overview level of GeoTIFF, - 0 is the first overview and None means full resolution. + file_path: Path to the raster file. + overview_level: Overview level to read from the raster. + `0` refers to the first overview; `None` (default) + reads the full-resolution data. + tile_size: Optional tile size used for chunking, given as + `(x, y)`. + band_as_variable: If `True` (default), raster bands are exposed as + separate data variables. If `False`, the + original data structure returned by rioxarray is preserved. Returns: - The opened data as xarray.Dataset + The opened raster dataset as an xarray.Dataset """ - dataset = self.open_dataset_with_rioxarray(file_path, overview_level, tile_size) + dataset = self.open_dataset_with_rioxarray( + file_path, + overview_level, + tile_size=tile_size, + band_as_variable=band_as_variable, + ) if "spatial_ref" in dataset.coords: for data_var in dataset.data_vars.values(): data_var.attrs["grid_mapping"] = "spatial_ref" @@ -156,10 +203,10 @@ def _sanitize_dataset_attrs(cls, dataset): class RasterioMultiLevelDataset(LazyMultiLevelDataset): """A multi-level dataset for accessing files using rasterio. - fs: abstract file system - root: An optional root pointing to where the data is located - data_id: the data id - open_params: Any additional parameters to be considered when opening the data + fs: abstract file system + root: An optional root pointing to where the data is located + data_id: the data id + open_params: Any additional parameters to be considered when opening the data """ def __init__( @@ -182,10 +229,12 @@ def _get_num_levels_lazily(self) -> int: return len(overviews) + 1 def _get_dataset_lazily(self, index: int, parameters) -> xr.Dataset: - tile_size = self._open_params.get("tile_size", (1024, 1024)) self._file_url = self._get_file_url() return self._rio_accessor.open_dataset( - self._file_url, tile_size, overview_level=index - 1 if index > 0 else None + self._file_url, + overview_level=index - 1 if index > 0 else None, + tile_size=self._open_params.get("tile_size"), + band_as_variable=self._open_params.get("band_as_variable", True), ) def _get_file_url(self): @@ -220,13 +269,14 @@ def open_data(self, data_id: str, **open_params) -> xr.Dataset: file_path = protocol + "://" + root + fs.sep + data_id else: file_path = protocol + "://" + data_id - tile_size = open_params.get("tile_size", (1024, 1024)) - overview_level = open_params.get("overview_level", None) if fs not in self._rio_accessors.keys(): self._rio_accessors[fs] = RasterIoAccessor(fs) rio_accessor = self._rio_accessors[fs] return rio_accessor.open_dataset( - file_path, tile_size, overview_level=overview_level + file_path, + overview_level=open_params.get("overview_level"), + tile_size=open_params.get("tile_size"), + band_as_variable=open_params.get("band_as_variable", True), ) def get_write_data_params_schema(self) -> JsonObjectSchema: diff --git a/xcube/version.py b/xcube/version.py index ed4200913..923a44ea1 100644 --- a/xcube/version.py +++ b/xcube/version.py @@ -2,4 +2,4 @@ # Permissions are hereby granted under the terms of the MIT License: # https://opensource.org/licenses/MIT. -version = "1.13.0" +version = "1.13.1.dev0"