Laden Sie Sentinel-1- und Sentinel-2-Datenwürfel mit großem Umfang (größer als der Speicher) auf jeden Computer mit integrierter Wolkenerkennung, Schneemaskierung, Harmonisierung, Zusammenführung und zeitlichen Zusammensetzungen herunter.
Dieses Paket wurde mit Python 3.12.* getestet. Es kann mit anderen Versionen funktionieren oder auch nicht.
pip install sentle
oder
git clone [email protected]:cmosig/sentle.git
cd sentle
pip install -e .
Verfahren
Es gibt nur eine wichtige Funktion: process
. Hier legen Sie alle für den Download und die Verarbeitung notwendigen Parameter fest. Sobald diese Funktion aufgerufen wird, beginnt sie sofort mit dem Herunterladen und Verarbeiten der von Ihnen angegebenen Daten in einer Zarr-Datei.
from sentle import sentle
from rasterio.crs import CRS
sentle.process(
zarr_store="mycube.zarr",
target_crs=CRS.from_string("EPSG:32633"),
bound_left=176000,
bound_bottom=5660000,
bound_right=216000,
bound_top=5700000,
datetime="2022-06-17/2023-06-17",
target_resolution=10,
S2_mask_snow=True,
S2_cloud_classification=True,
S2_cloud_classification_device="cuda",
S1_assets=["vv", "vh"],
S2_apply_snow_mask=True,
S2_apply_cloud_mask=True,
time_composite_freq="7d",
num_workers=10,
)
Dieser Code lädt Daten für ein 40 km x 40 km großes Gebiet mit einem Jahr Sentinel-1 und Sentinel-2 herunter. Wolken und Schnee werden erkannt und durch NaNs ersetzt. Die Daten werden außerdem alle 7 Tage gemittelt.
Alles wird über 10 Worker parallelisiert und jeder Worker speichert seine Ergebnisse sofort im angegebenen Pfad zu einem zarr_store
. Dadurch wird sichergestellt, dass Sie Cubes herunterladen können, die größer als der Speicher sind.
Erläuterung:
zarr_store
: Pfad speichern.target_crs
: Gibt das Ziel-CRS an, auf das alle Daten neu projiziert werden.target_resolution
: Bestimmt die räumliche Auflösung, auf die alle Daten im target_crs
neu projiziert werden.bound_*
: Räumliche Grenzen in target_crs
des Bereichs, den Sie herunterladen möchten. Undefiniertes Verhalten, wenn die Differenz zwischen gegenüberliegenden Grenzen nicht durch target_resolution
teilbar ist.datetime
: Zeitbereich, der heruntergeladen wird.S2_mask_snow
: Ob die Schneemaske für Sentinel-2-Daten berechnet werden soll.S2_cloud_classification
: Ob eine Cloud-Klassifizierungsschicht für Sentinel-2-Daten durchgeführt werden soll.S2_cloud_classification_device
: Wo die Cloud-Klassifizierung ausgeführt werden soll. Wenn Sie eine Nvidia-GPU haben, übergeben Sie cuda
andernfalls cpu
(Standard).S2_apply_*
: Ob die entsprechende Maske angewendet werden soll, dh Werte durch NaN ersetzen.S1_assets
: Welche Sentinel-1-Assets heruntergeladen werden sollen. Deaktivieren Sie Sentinel-1, indem Sie dies auf None
setzen.time_composite_freq
: Rundungsintervall, über das die Daten gemittelt werden. Verwendet pandas.Timestamp.round(time_composite_freq)
. Wolken-/Schneemasken werden nach der Maskierung gelöscht, da sie nicht aggregiert werden können.num_workers
: Anzahl der zu verwendenden Kerne. Planen Sie etwa 2 GiB Speichernutzung pro Worker ein. -1 bedeutet alle Kerne.processing_spatial_chunk_size
: Größe der räumlichen Blöcke, die parallel verarbeitet werden. Der Standardwert ist 4000.overwrite
: Ob der Zarr-Speicher überschrieben werden soll, wenn er bereits vorhanden ist. Der Standardwert ist False.Visualisieren
Laden Sie die Daten mit xarray.
import xarray as xr
da = xr.open_zarr("mycube.zarr").sentle
da
Und visualisieren Sie mit dem fantastischen Lexcube-Paket. Hier wird Band B02 aus dem obigen Beispiel visualisiert. Im Winter erkennt man die Wolkenlücken und die fleckige Bedeckung.
import lexcube
lexcube.Cube3DWidget(da.sel(band="B02"), vmin=0, vmax=4000)
Erhöhen Sie die Anzahl der Worker mithilfe des Parameters num_workers
beim Einrichten der Sentle
-Klasse. Bei einer standardmäßigen räumlichen Blockgröße von 4000, angegeben durch processing_spatial_chunk_size
, sollten Sie mit 2 GB pro Worker planen.
Bitte reichen Sie Issues oder Pull Requests ein, wenn Sie das Gefühl haben, dass etwas fehlt oder behoben werden muss.
Dieses Projekt ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie in der Datei LICENSE.md.