ดาวน์โหลดคิวบ์ข้อมูล Sentinel-1 และ Sentinel-2 ขนาดใหญ่ (ใหญ่กว่าหน่วยความจำ) บนเครื่องใดๆ ที่มีการตรวจจับคลาวด์แบบผสานรวม การมาสก์หิมะ การประสานกัน การผสาน และคอมโพสิตชั่วคราว
แพ็คเกจนี้ได้รับการทดสอบด้วย Python 3.12.* อาจทำงานร่วมกับเวอร์ชันอื่นหรือไม่ก็ได้
pip install sentle
หรือ
git clone [email protected]:cmosig/sentle.git
cd sentle
pip install -e .
กระบวนการ
มีฟังก์ชันสำคัญเพียงฟังก์ชันเดียว: 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,
)
รหัสนี้จะดาวน์โหลดข้อมูลสำหรับพื้นที่ 40 กม. x 40 กม. โดยมีทั้ง Sentinel-1 และ Sentinel-2 หนึ่งปี ตรวจพบเมฆและหิมะและแทนที่ด้วย 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_*
: จะใช้มาสก์ที่เกี่ยวข้องหรือไม่ เช่น แทนที่ค่าด้วย NaNS1_assets
: เนื้อหา Sentinel-1 ใดที่จะดาวน์โหลด ปิดการใช้งาน Sentinel-1 โดยการตั้งค่านี้เป็น None
time_composite_freq
: ช่วงเวลาการปัดเศษของข้อมูลที่มีค่าเฉลี่ย ใช้ pandas.Timestamp.round(time_composite_freq)
มาสก์คลาวด์/หิมะจะถูกทิ้งหลังจากการมาสก์ เนื่องจากไม่สามารถรวมเข้าด้วยกันได้num_workers
: จำนวนคอร์ที่จะใช้ วางแผนการใช้หน่วยความจำประมาณ 2 GiB ต่อพนักงาน -1 หมายถึงคอร์ทั้งหมดprocessing_spatial_chunk_size
: ขนาดของชิ้นส่วนเชิงพื้นที่ที่ถูกประมวลผลแบบขนาน ค่าเริ่มต้นคือ 4000overwrite
: ไม่ว่าจะเขียนทับที่เก็บ zarr หากมีอยู่แล้ว ค่าเริ่มต้นเป็นเท็จเห็นภาพ
โหลดข้อมูลด้วย 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)
เพิ่มจำนวนคนทำงานโดยใช้พารามิเตอร์ num_workers
เมื่อตั้งค่าคลาส Sentle
ด้วยขนาดก้อนเชิงพื้นที่เริ่มต้นที่ 4000 ระบุโดย processing_spatial_chunk_size
คุณควรวางแผนด้วย 2GiB ต่อผู้ปฏิบัติงาน
โปรดส่งปัญหาหรือดึงคำขอหากคุณรู้สึกว่ามีบางอย่างขาดหายไปหรือจำเป็นต้องได้รับการแก้ไข
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT - ดูรายละเอียดในไฟล์ LICENSE.md