fix(DEM_SuPER): 优化ALOSDEM文件检索匹配模式并优化裁剪逻辑.
This commit is contained in:
parent
418923f7df
commit
fcbfa1bf08
@ -231,7 +231,7 @@ def process_granule(
|
||||
dem_file_list = glob.glob(os.path.join(unzip_dir, f"*{name}.hgt"))
|
||||
out_tif_name = f"DEM.{mode_str}.{tile_id}.2000.{name}.tif"
|
||||
elif mode_str == "ALOSDEM":
|
||||
dem_file_list = glob.glob(os.path.join(unzip_dir, f"*{name}.tif"))
|
||||
dem_file_list = glob.glob(os.path.join(unzip_dir, "*.dem.tif"))
|
||||
out_tif_name = f"DEM.{mode_str}.{tile_id}.2011.{name}.tif"
|
||||
output_file = os.path.join(output_dir, out_tif_name)
|
||||
if not os.path.isfile(output_file):
|
||||
@ -250,12 +250,17 @@ def process_granule(
|
||||
raster.attrs["scale_factor"] = 1
|
||||
dem_raster_list.append(raster)
|
||||
if len(dem_raster_list) >= 1:
|
||||
# 先逐一裁剪再镶嵌合成(仅在提供ROI且要求裁剪时执行)
|
||||
if roi is not None and clip:
|
||||
clipped_list = []
|
||||
for raster in dem_raster_list:
|
||||
clipped = clip_image(raster, roi, clip_by_box=True)
|
||||
clipped_list.append(clipped)
|
||||
# 镶嵌合成
|
||||
if name == "slope" or name == "aspect":
|
||||
dem_mosaiced = mosaic_images(dem_raster_list, nodata=-9999)
|
||||
else:
|
||||
dem_mosaiced = mosaic_images(dem_raster_list, nodata=-32768)
|
||||
if roi is not None and clip:
|
||||
dem_mosaiced = clip_image(dem_mosaiced, roi, clip_by_box=True)
|
||||
dem_mosaiced.rio.to_raster(
|
||||
output_file, driver="COG", compress="DEFLATE"
|
||||
)
|
||||
@ -270,12 +275,13 @@ def process_granule(
|
||||
|
||||
def main(
|
||||
output_root_dir: str,
|
||||
region: list,
|
||||
region_file: str,
|
||||
asset_name: list,
|
||||
tile_id: str,
|
||||
mode_str: str = "NASADEM",
|
||||
):
|
||||
bbox = tuple(list(region.total_bounds))
|
||||
region = gpd.read_file(region_file)
|
||||
bbox = tuple(list(region.total_bounds)) # 最大外接矩形
|
||||
results_urls = []
|
||||
mode_str = mode_str.upper()
|
||||
output_root_dir = os.path.join(output_root_dir, mode_str)
|
||||
@ -297,9 +303,12 @@ def main(
|
||||
|
||||
# 默认覆盖上一次检索记录
|
||||
results_urls = earthdata_search(asset_name, roi=bbox)
|
||||
if mode_str == "ALOSDEM":
|
||||
# ALOSDEM 数据仅保存含 "FBS" 字符串的 URL
|
||||
results_urls = [url for url in results_urls if "FBS" in url[0]]
|
||||
with open(results_urls_file, "w") as f:
|
||||
json.dump(results_urls, f)
|
||||
logging.info(f"Found {len(results_urls)} {mode_str} granules.")
|
||||
logging.info(f"Found {len(results_urls)} {mode_str} granules after filtering.")
|
||||
if len(results_urls) == 0:
|
||||
return
|
||||
|
||||
@ -348,13 +357,13 @@ def main(
|
||||
|
||||
if __name__ == "__main__":
|
||||
earthaccess.login(strategy="netrc", persist=True)
|
||||
# region = gpd.read_file("./data/vectors/wuling_guanqu_polygon.geojson")
|
||||
# region_file = "./data/vectors/wuling_guanqu_polygon.geojson"
|
||||
# tile_id = "49REL"
|
||||
tile_id = "Wuhan"
|
||||
region = gpd.read_file(f"./data/vectors/{tile_id}.geojson")
|
||||
region_file = f"./data/vectors/{tile_id}.geojson"
|
||||
# asset_name = ["NASADEM_HGT", "NASADEM_SC"]
|
||||
# mode_str = "NASADEM"
|
||||
asset_name = ["ALOS_PSR_RTC_HIGH"]
|
||||
mode_str = "ALOSDEM"
|
||||
output_root_dir = ".\\data\\DEM"
|
||||
main(output_root_dir, region, asset_name, tile_id, mode_str)
|
||||
main(output_root_dir, region_file, asset_name, tile_id, mode_str)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user