統合された雲検出、雪のマスキング、調和、マージ、および一時的なコンポジットを備えた大規模 (メモリを超える) Sentinel-1 および Sentinel-2 データ キューブを任意のマシンにダウンロードします。
このパッケージは Python 3.12.* でテストされています。他のバージョンでは動作する場合と動作しない場合があります。
pip install sentle
または
git clone [email protected]:cmosig/sentle.git
cd sentle
pip install -e .
プロセス
重要な関数は 1 つだけです: process
です。ここでは、ダウンロードと処理に必要なすべてのパラメータを指定します。この関数が呼び出されると、指定したデータの zarr ファイルへのダウンロードと処理が直ちに開始されます。
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,
)
このコードは、Sentinel-1 と Sentinel-2 の両方の 1 年分の 40 km × 40 km エリアのデータをダウンロードします。雲と雪は検出され、NaN に置き換えられます。データは 7 日ごとに平均化されます。
すべてが 10 個のワーカー間で並列処理され、各ワーカーはその結果を指定されたパスのzarr_store
に即座に保存します。これにより、メモリより大きなキューブをダウンロードできるようになります。
説明:
zarr_store
: 保存パス。target_crs
: すべてのデータが再投影されるターゲット CRS を指定します。target_resolution
: target_crs
ですべてのデータが再投影される空間解像度を決定します。bound_*
: ダウンロードする領域のtarget_crs
内の空間境界。反対側の境界間の差がtarget_resolution
で割り切れない場合の未定義の動作。datetime
: ダウンロードされる時間範囲。S2_mask_snow
: Sentinel-2 データのスノー マスクを計算するかどうか。S2_cloud_classification
: Sentinel-2 データに対してクラウド分類レイヤーを実行するかどうか。S2_cloud_classification_device
: クラウド分類を実行する場所。 Nvidia GPU を使用している場合はcuda
渡し、それ以外の場合はcpu
(デフォルト) を渡します。S2_apply_*
: それぞれのマスクを適用するかどうか、つまり値を NaN に置き換えるかどうか。S1_assets
: ダウンロードする Sentinel-1 アセット。これをNone
に設定して Sentinel-1 を無効にします。time_composite_freq
: データが平均化される丸め間隔。 pandas.Timestamp.round(time_composite_freq)
を使用します。雲/雪マスクは集約できないため、マスキング後に削除されます。num_workers
: 使用するコアの数。ワーカーあたりのメモリ使用量は約 2 GiB として計画します。 -1 はすべてのコアを意味します。processing_spatial_chunk_size
: 並列処理される空間チャンクのサイズ。デフォルトは 4000 です。overwrite
: zarr ストアが既に存在する場合に上書きするかどうか。デフォルトは False です。視覚化する
Xarrayでデータを読み込みます。
import xarray as xr
da = xr.open_zarr("mycube.zarr").sentle
da
そして、素晴らしい lexcube パッケージを使用して視覚化します。ここでは、上記の例からバンド B02 を視覚化します。冬の間は雲の隙間や斑点のある覆いを見つけることができます。
import lexcube
lexcube.Cube3DWidget(da.sel(band="B02"), vmin=0, vmax=4000)
Sentle
クラスを設定するときに、 num_workers
パラメーターを使用してワーカーの数を増やします。 processing_spatial_chunk_size
で指定されたデフォルトの空間チャンク サイズ 4000 では、ワーカーあたり 2GiB で計画する必要があります。
何かが足りない、または修正する必要があると思われる場合は、問題またはプルリクエストを送信してください。
このプロジェクトは MIT ライセンスに基づいてライセンスされています。詳細については、LICENSE.md ファイルを参照してください。