diff --git a/CHANGES.md b/CHANGES.md index 87bd4e3..4c4838c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,14 +3,17 @@ * Added support for **common band names** from the [STAC EO extension](https://github.com/stac-extensions/eo?tab=readme-ov-file#common-band-names) in **Sentinel-2 analysis mode**. The `variables` parameter now accepts standard spectral names such as `blue`, `green`, `red`, `nir`, and others. +* Fix: CRS information is missing in Sentinel-2 product data variables since + CPM v2.6.2. CRS is now correctly read from the datasetβs `other_metadata` + attributes in the datatree. ## Changes in 0.2.3 (from 2025-10-23) -- **Sentinel-3 SLSTR Level-1 RBT products** are now supported in analysis mode. This +* **Sentinel-3 SLSTR Level-1 RBT products** are now supported in analysis mode. This allows data from grids a, b, f, and i β in both nadir and oblique viewing geometries β to be represented on a unified grid within a single dataset. -- **Sentinel-3 SLSTR datasets** are now terrain-corrected using the elevation +* **Sentinel-3 SLSTR datasets** are now terrain-corrected using the elevation information provided within the product itself. diff --git a/examples/introduction_xarray_eopf_plugin.ipynb b/examples/introduction_xarray_eopf_plugin.ipynb index d6f10e3..38b190b 100644 --- a/examples/introduction_xarray_eopf_plugin.ipynb +++ b/examples/introduction_xarray_eopf_plugin.ipynb @@ -76540,7 +76540,7 @@ "source": [ "ds = xr.open_datatree(\n", " item.assets[\"product\"].href,\n", - " **item.assets[\"product\"].extra_fields[\"xarray:open_datatree_kwargs\"]\n", + " **item.assets[\"product\"].extra_fields[\"xarray:open_datatree_kwargs\"],\n", ")\n", "ds" ] @@ -82893,7 +82893,7 @@ "source": [ "ds = xr.open_dataset(\n", " item.assets[\"product\"].href,\n", - " **item.assets[\"product\"].extra_fields[\"xarray:open_datatree_kwargs\"]\n", + " **item.assets[\"product\"].extra_fields[\"xarray:open_datatree_kwargs\"],\n", ")\n", "ds" ] diff --git a/examples/open-sen2.ipynb b/examples/open-sen2.ipynb index 6ec5f54..a585243 100644 --- a/examples/open-sen2.ipynb +++ b/examples/open-sen2.ipynb @@ -50,8 +50,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 888 ms, sys: 111 ms, total: 999 ms\n", - "Wall time: 4.88 s\n" + "CPU times: user 930 ms, sys: 132 ms, total: 1.06 s\n", + "Wall time: 2.66 s\n" ] }, { @@ -72,7 +72,9 @@ "\n", "\n", "\n", - "
<xarray.DataTree>\n", - "Group: /\n", - "β Attributes: (3)\n", - "βββ Group: /conditions\n", - "β βββ Group: /conditions/geometry\n", - "β β Dimensions: (angle: 2, band: 13, y: 23, x: 23,\n", - "β β detector: 4)\n", - "β β Coordinates:\n", - "β β * angle (angle) <U7 56B 'zenith' 'azimuth'\n", - "β β * band (band) <U3 156B 'b01' 'b02' ... 'b11' 'b12'\n", - "β β * y (y) int64 184B 5000040 4995040 ... 4890040\n", - "β β * x (x) int64 184B 300000 305000 ... 410000\n", - "β β * detector (detector) int64 32B 1 2 3 4\n", - "β β Data variables:\n", - "β β mean_sun_angles (angle) float64 16B dask.array<chunksize=(2,), meta=np.ndarray>\n", - "β β mean_viewing_incidence_angles (band, angle) float64 208B dask.array<chunksize=(13, 2), meta=np.ndarray>\n", - "β β sun_angles (angle, y, x) float64 8kB dask.array<chunksize=(2, 23, 23), meta=np.ndarray>\n", - "β β viewing_incidence_angles (band, detector, angle, y, x) float64 440kB dask.array<chunksize=(7, 4, 2, 23, 23), meta=np.ndarray>\n", - "β βββ Group: /conditions/mask\n", - "β β βββ Group: /conditions/mask/detector_footprint\n", - "β β β βββ Group: /conditions/mask/detector_footprint/r10m\n", - "β β β β Dimensions: (y: 10980, x: 10980)\n", - "β β β β Coordinates:\n", - "β β β β * y (y) int64 88kB 5000035 5000025 5000015 ... 4890265 4890255 4890245\n", - "β β β β * x (x) int64 88kB 300005 300015 300025 300035 ... 409775 409785 409795\n", - "β β β β Data variables:\n", - "β β β β b02 (y, x) uint8 121MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - "β β β β b03 (y, x) uint8 121MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - "β β β β b04 (y, x) uint8 121MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - "β β β β b08 (y, x) uint8 121MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - "β β β βββ Group: /conditions/mask/detector_footprint/r20m\n", - "β β β β Dimensions: (y: 5490, x: 5490)\n", - "β β β β Coordinates:\n", - "β β β β * y (y) int64 44kB 5000030 5000010 4999990 ... 4890290 4890270 4890250\n", - "β β β β * x (x) int64 44kB 300010 300030 300050 300070 ... 409750 409770 409790\n", - "β β β β Data variables:\n", - "β β β β b05 (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β β β b06 (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β β β b07 (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β β β b11 (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β β β b12 (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β β β b8a (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β β βββ Group: /conditions/mask/detector_footprint/r60m\n", - "β β β Dimensions: (y: 1830, x: 1830)\n", - "β β β Coordinates:\n", - "β β β * y (y) int64 15kB 5000010 4999950 4999890 ... 4890390 4890330 4890270\n", - "β β β * x (x) int64 15kB 300030 300090 300150 300210 ... 409650 409710 409770\n", - "β β β Data variables:\n", - "β β β b01 (y, x) uint8 3MB dask.array<chunksize=(305, 305), meta=np.ndarray>\n", - "β β β b09 (y, x) uint8 3MB dask.array<chunksize=(305, 305), meta=np.ndarray>\n", - "β β β b10 (y, x) uint8 3MB dask.array<chunksize=(305, 305), meta=np.ndarray>\n", - "β β βββ Group: /conditions/mask/l1c_classification\n", - "β β βββ Group: /conditions/mask/l1c_classification/r60m\n", - "β β Dimensions: (y: 1830, x: 1830)\n", - "β β Coordinates:\n", - "β β * y (y) int64 15kB 5000010 4999950 4999890 ... 4890390 4890330 4890270\n", - "β β * x (x) int64 15kB 300030 300090 300150 300210 ... 409650 409710 409770\n", - "β β Data variables:\n", - "β β b00 (y, x) uint8 3MB dask.array<chunksize=(305, 305), meta=np.ndarray>\n", - "β βββ Group: /conditions/meteorology\n", - "β βββ Group: /conditions/meteorology/cams\n", - "β β Dimensions: (latitude: 9, longitude: 9)\n", - "β β Coordinates:\n", - "β β * latitude (latitude) float64 72B 45.13 45.0 44.88 ... 44.4 44.28 44.16\n", - "β β * longitude (longitude) float64 72B 6.457 6.634 6.811 ... 7.695 7.872\n", - "β β isobaricInhPa float64 8B ...\n", - "β β number int64 8B ...\n", - "β β step int64 8B ...\n", - "β β surface float64 8B ...\n", - "β β time datetime64[ns] 8B ...\n", - "β β valid_time datetime64[ns] 8B ...\n", - "β β Data variables:\n", - "β β aod1240 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β aod469 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β aod550 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β aod670 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β aod865 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β bcaod550 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β duaod550 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β omaod550 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β ssaod550 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β suaod550 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β z (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β β Attributes: (7)\n", - "β βββ Group: /conditions/meteorology/ecmwf\n", - "β Dimensions: (latitude: 9, longitude: 9)\n", - "β Coordinates:\n", - "β * latitude (latitude) float64 72B 45.13 45.0 44.88 ... 44.4 44.28 44.16\n", - "β * longitude (longitude) float64 72B 6.457 6.634 6.811 ... 7.695 7.872\n", - "β isobaricInhPa float64 8B ...\n", - "β number int64 8B ...\n", - "β step int64 8B ...\n", - "β surface float64 8B ...\n", - "β time datetime64[ns] 8B ...\n", - "β valid_time datetime64[ns] 8B ...\n", - "β Data variables:\n", - "β msl (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β r (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β tco3 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β tcwv (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β u10 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β v10 (latitude, longitude) float32 324B dask.array<chunksize=(9, 9), meta=np.ndarray>\n", - "β Attributes: (7)\n", - "βββ Group: /measurements\n", - "β βββ Group: /measurements/reflectance\n", - "β βββ Group: /measurements/reflectance/r10m\n", - "β β Dimensions: (y: 10980, x: 10980)\n", - "β β Coordinates:\n", - "β β * y (y) int64 88kB 5000035 5000025 5000015 ... 4890265 4890255 4890245\n", - "β β * x (x) int64 88kB 300005 300015 300025 300035 ... 409775 409785 409795\n", - "β β Data variables:\n", - "β β b02 (y, x) float64 964MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - "β β b03 (y, x) float64 964MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - "β β b04 (y, x) float64 964MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - "β β b08 (y, x) float64 964MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - "β βββ Group: /measurements/reflectance/r20m\n", - "β β Dimensions: (y: 5490, x: 5490)\n", - "β β Coordinates:\n", - "β β * y (y) int64 44kB 5000030 5000010 4999990 ... 4890290 4890270 4890250\n", - "β β * x (x) int64 44kB 300010 300030 300050 300070 ... 409750 409770 409790\n", - "β β Data variables:\n", - "β β b05 (y, x) float64 241MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β b06 (y, x) float64 241MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β b07 (y, x) float64 241MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β b11 (y, x) float64 241MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β b12 (y, x) float64 241MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β β b8a (y, x) float64 241MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - "β βββ Group: /measurements/reflectance/r60m\n", - "β Dimensions: (y: 1830, x: 1830)\n", - "β Coordinates:\n", - "β * y (y) int64 15kB 5000010 4999950 4999890 ... 4890390 4890330 4890270\n", - "β * x (x) int64 15kB 300030 300090 300150 300210 ... 409650 409710 409770\n", - "β Data variables:\n", - "β b01 (y, x) float64 27MB dask.array<chunksize=(305, 305), meta=np.ndarray>\n", - "β b09 (y, x) float64 27MB dask.array<chunksize=(305, 305), meta=np.ndarray>\n", - "β b10 (y, x) float64 27MB dask.array<chunksize=(305, 305), meta=np.ndarray>\n", - "βββ Group: /quality\n", - " βββ Group: /quality/l1c_quicklook\n", - " β βββ Group: /quality/l1c_quicklook/r10m\n", - " β Dimensions: (band: 3, y: 10980, x: 10980)\n", - " β Coordinates:\n", - " β * band (band) int64 24B 1 2 3\n", - " β * y (y) int64 88kB 5000035 5000025 5000015 ... 4890265 4890255 4890245\n", - " β * x (x) int64 88kB 300005 300015 300025 300035 ... 409775 409785 409795\n", - " β Data variables:\n", - " β tci (band, y, x) uint8 362MB dask.array<chunksize=(1, 1830, 1830), meta=np.ndarray>\n", - " βββ Group: /quality/mask\n", - " βββ Group: /quality/mask/r10m\n", - " β Dimensions: (y: 10980, x: 10980)\n", - " β Coordinates:\n", - " β * y (y) int64 88kB 5000035 5000025 5000015 ... 4890265 4890255 4890245\n", - " β * x (x) int64 88kB 300005 300015 300025 300035 ... 409775 409785 409795\n", - " β Data variables:\n", - " β b02 (y, x) uint8 121MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - " β b03 (y, x) uint8 121MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - " β b04 (y, x) uint8 121MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - " β b08 (y, x) uint8 121MB dask.array<chunksize=(1830, 1830), meta=np.ndarray>\n", - " βββ Group: /quality/mask/r20m\n", - " β Dimensions: (y: 5490, x: 5490)\n", - " β Coordinates:\n", - " β * y (y) int64 44kB 5000030 5000010 4999990 ... 4890290 4890270 4890250\n", - " β * x (x) int64 44kB 300010 300030 300050 300070 ... 409750 409770 409790\n", - " β Data variables:\n", - " β b05 (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - " β b06 (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - " β b07 (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - " β b11 (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - " β b12 (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - " β b8a (y, x) uint8 30MB dask.array<chunksize=(915, 915), meta=np.ndarray>\n", - " βββ Group: /quality/mask/r60m\n", - " Dimensions: (y: 1830, x: 1830)\n", - " Coordinates:\n", - " * y (y) int64 15kB 5000010 4999950 4999890 ... 4890390 4890330 4890270\n", - " * x (x) int64 15kB 300030 300090 300150 300210 ... 409650 409710 409770\n", - " Data variables:\n", - " b01 (y, x) uint8 3MB dask.array<chunksize=(305, 305), meta=np.ndarray>\n", - " b09 (y, x) uint8 3MB dask.array<chunksize=(305, 305), meta=np.ndarray>\n", - " b10 (y, x) uint8 3MB dask.array<chunksize=(305, 305), meta=np.ndarray>" - ], - "text/plain": [ - "