Load the valid and quality data masks from a Planet scene.
Parameters:
-
fpath
(str | pathlib.Path
)
–
The file path to the Planet scene from which to derive the masks.
Raises:
Returns:
-
xarray.Dataset
–
xr.Dataset: A merged xarray Dataset containing two data masks:
- 'valid_data_mask': A mask indicating valid (1) and no data (0).
- 'quality_data_mask': A mask indicating high quality (1) and low quality (0).
Source code in darts-acquisition/src/darts_acquisition/planet.py
| @stopuhr.funkuhr("Loading Planet masks", printer=logger.debug, print_kwargs=True)
def load_planet_masks(fpath: str | Path) -> xr.Dataset:
"""Load the valid and quality data masks from a Planet scene.
Args:
fpath (str | Path): The file path to the Planet scene from which to derive the masks.
Raises:
FileNotFoundError: If no matching UDM-2 TIFF file is found in the specified path.
Returns:
xr.Dataset: A merged xarray Dataset containing two data masks:
- 'valid_data_mask': A mask indicating valid (1) and no data (0).
- 'quality_data_mask': A mask indicating high quality (1) and low quality (0).
"""
# Convert to Path object if a string is provided
fpath = fpath if isinstance(fpath, Path) else Path(fpath)
logger.debug(f"Loading data masks from {fpath.resolve()}")
# Get imagepath
udm_path = next(fpath.glob("*_udm2.tif"), None)
if not udm_path:
udm_path = next(fpath.glob("*_udm2_clip.tif"), None)
if not udm_path:
raise FileNotFoundError(f"No matching UDM-2 TIFF files found in {fpath.resolve()} (.glob('*_udm2.tif'))")
# See udm classes here: https://developers.planet.com/docs/data/udm-2/
da_udm = xr.open_dataarray(udm_path)
invalids = da_udm.sel(band=8).fillna(0) != 0
low_quality = da_udm.sel(band=[2, 3, 4, 5, 6]).max(axis=0) == 1
high_quality = ~low_quality & ~invalids
qa_ds = xr.Dataset(coords={c: da_udm.coords[c] for c in da_udm.coords})
qa_ds["quality_data_mask"] = (
xr.zeros_like(da_udm.sel(band=8)).where(invalids, 0).where(low_quality, 1).where(high_quality, 2)
)
qa_ds["quality_data_mask"].attrs = {
"data_source": "planet",
"long_name": "Quality data mask",
"description": "0 = Invalid, 1 = Low Quality, 2 = High Quality",
}
return qa_ds
|