قم بتنزيل مكعبات البيانات 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 كيلومترًا في 40 كيلومترًا لمدة عام واحد لكل من Sentinel-1 وSentinel-2. تم الكشف عن السحب والثلوج واستبدالها بـ NaNs. يتم أيضًا حساب متوسط البيانات كل 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، فقم بتمرير cuda
وإلا cpu
(افتراضي).S2_apply_*
: ما إذا كان سيتم تطبيق القناع المعني، أي استبدال القيم بـ NaN.S1_assets
: ما هي أصول Sentinel-1 التي سيتم تنزيلها. قم بتعطيل Sentinel-1 عن طريق تعيين هذا على None
.time_composite_freq
: الفاصل الزمني للتقريب الذي يتم من خلاله حساب متوسط البيانات. يستخدم pandas.Timestamp.round(time_composite_freq)
. يتم إسقاط أقنعة السحابة/الثلج بعد الإخفاء لأنه لا يمكن تجميعها.num_workers
: عدد النوى المراد استخدامها. خطط لحوالي 2 جيجا بايت من استخدام الذاكرة لكل عامل. -1 يعني جميع النوى.processing_spatial_chunk_size
: حجم القطع المكانية التي تتم معالجتها بالتوازي. الافتراضي هو 4000.overwrite
: ما إذا كان سيتم استبدال متجر 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
، يجب أن تخطط باستخدام 2 جيجا بايت لكل عامل.
يرجى إرسال المشكلات أو سحب الطلبات إذا كنت تشعر أن هناك شيئًا مفقودًا أو يحتاج إلى الإصلاح.
تم ترخيص هذا المشروع بموجب ترخيص MIT - راجع ملف LICENSE.md للحصول على التفاصيل.