Unduh kubus data Sentinel-1 & Sentinel-2 berskala besar (lebih besar dari memori) di mesin apa pun dengan deteksi awan terintegrasi, penyembunyian salju, harmonisasi, penggabungan, dan komposit temporal.
Paket ini diuji dengan Python 3.12.*. Ini mungkin berfungsi atau tidak dengan versi lain.
pip install sentle
atau
git clone [email protected]:cmosig/sentle.git
cd sentle
pip install -e .
Proses
Hanya ada satu fungsi penting: process
. Di sini, Anda menentukan semua parameter yang diperlukan untuk pengunduhan dan pemrosesan. Setelah fungsi ini dipanggil, ia segera mulai mengunduh dan memproses data yang Anda tentukan ke dalam file 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,
)
Kode ini mengunduh data untuk area berukuran 40 km kali 40 km dengan satu tahun Sentinel-1 dan Sentinel-2. Awan dan salju terdeteksi dan diganti dengan NaN. Data juga dirata-ratakan setiap 7 hari.
Semuanya diparalelkan pada 10 pekerja dan setiap pekerja segera menyimpan hasilnya ke jalur yang ditentukan ke zarr_store
. Ini memastikan Anda dapat mengunduh kubus yang lebih besar dari memori.
Penjelasan:
zarr_store
: Simpan jalur.target_crs
: Menentukan target CRS di mana semua data akan diproyeksikan ulang.target_resolution
: Menentukan resolusi spasial tempat semua data diproyeksikan ulang di target_crs
.bound_*
: Batas spasial dalam target_crs
area yang ingin Anda unduh. Perilaku tidak terdefinisi jika perbedaan antara batas yang berlawanan tidak habis dibagi target_resolution
.datetime
: Rentang waktu yang akan diunduh.S2_mask_snow
: Apakah akan menghitung topeng salju untuk data Sentinel-2.S2_cloud_classification
: Apakah akan melakukan lapisan klasifikasi cloud untuk data Sentinel-2.S2_cloud_classification_device
: Tempat menjalankan klasifikasi cloud. Jika Anda memiliki GPU Nvidia, berikan cuda
jika tidak cpu
(default).S2_apply_*
: Apakah akan menerapkan mask masing-masing, yaitu mengganti nilai dengan NaN.S1_assets
: Aset Sentinel-1 mana yang akan diunduh. Nonaktifkan Sentinel-1 dengan menyetelnya ke None
.time_composite_freq
: Interval pembulatan di mana data dirata-ratakan. Menggunakan pandas.Timestamp.round(time_composite_freq)
. Masker awan/salju dihilangkan setelah ditutup karena tidak dapat digabungkan.num_workers
: Jumlah inti yang akan digunakan. Rencanakan penggunaan memori sekitar 2 GiB per pekerja. -1 berarti semua inti.processing_spatial_chunk_size
: Ukuran potongan spasial yang diproses secara paralel. Standarnya adalah 4000.overwrite
: Apakah akan menimpa zarr store jika sudah ada. Standarnya adalah Salah.Membayangkan
Muat data dengan xarray.
import xarray as xr
da = xr.open_zarr("mycube.zarr").sentle
da
Dan visualisasikan menggunakan paket lexcube yang mengagumkan. Di sini, band B02 divisualisasikan dari contoh di atas. Seseorang dapat melihat celah awan dan cakupan yang tidak merata selama musim dingin.
import lexcube
lexcube.Cube3DWidget(da.sel(band="B02"), vmin=0, vmax=4000)
Tingkatkan jumlah pekerja menggunakan parameter num_workers
saat menyiapkan kelas Sentle
. Dengan ukuran potongan spasial default sebesar 4000, yang ditentukan processing_spatial_chunk_size
, Anda harus merencanakan dengan 2GiB per pekerja.
Silakan kirimkan masalah atau tarik permintaan jika Anda merasa ada sesuatu yang hilang atau perlu diperbaiki.
Proyek ini dilisensikan di bawah Lisensi MIT - lihat file LICENSE.md untuk detailnya.