diff --git a/HLS_SuPER/HLS_PER.py b/HLS_SuPER/HLS_PER.py index feb02ab..bde9684 100644 --- a/HLS_SuPER/HLS_PER.py +++ b/HLS_SuPER/HLS_PER.py @@ -55,6 +55,9 @@ def open_hls( da_org = rxr.open_rasterio(url, chunks=chunk_size, mask_and_scale=False).squeeze( "band", drop=True ) + # (Add) 若未获取到数据, 则返回 None + if da_org is None: + return None # (Add) 复制源数据进行后续操作, 以便最后复制源数据属性信息 da = da_org.copy() @@ -215,13 +218,24 @@ def process_granule( if not os.path.isfile(output_file): # Open Asset da = open_hls(url, roi, clip, scale, chunk_size) + # (Add) 若返回的da为None, 则表示该url对应的文件不存在/无法访问, 再次尝试无果后将会跳过 + if da is None: + logging.warning( + f"Asset {url} not found in {output_dir}. Try again." + ) + # 再次尝试下载 + da = open_hls(url, roi, clip, scale, chunk_size) + if da is None: + logging.warning(f"Asset {url} still not found. Skipping.") + continue # Apply Quality Mask if Desired if quality_filter: da = da.where(~qa_mask) # Write Output - if "FMASK" in output_name: + if "FMASK" in output_name and not quality_filter: + # (Add) 若 quality_filter=False, 则需要将质量层文件另外保存 da.rio.to_raster(raster_path=output_file, driver="COG") else: # (Add) 固定输出为 float32 类型, 否则会默认 float64 类型