클라우드 감지, 스노우 마스킹, 조화, 병합 및 시간 합성 기능이 통합된 모든 시스템에서 대규모(메모리보다 큰) 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,
)
이 코드는 Sentinel-1과 Sentinel-2 모두 1년 동안 40km x 40km 지역의 데이터를 다운로드합니다. 구름과 눈이 감지되어 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
: 사용할 코어 수입니다. 작업자당 약 2GiB의 메모리 사용량을 계획합니다. -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)
Sentle
클래스 설정 시 num_workers
파라미터를 사용하여 워커 수를 늘려보세요. processing_spatial_chunk_size
로 지정된 기본 공간 청크 크기 4000을 사용하면 작업자당 2GiB로 계획해야 합니다.
뭔가 빠졌거나 수정해야 한다고 생각되면 이슈를 제출하거나 풀 요청을 제출하세요.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE.md 파일을 참조하세요.