import pandas as pd
import xarray as xr
import numpy as np
import rasterio
from rasterio.transform import from_origin
from rasterio.enums import Resampling
# 尝试用nc裁剪多图层nc,并转为tiff
# 20240103 9:49 YMJ
# 被裁减的nc文件和掩膜nc文件,被裁减的nc文件有480个图层
nc_file_path = 'D:\\YRB\\Ma_ETa\\Ea_1982_2017_CR.nc'
mask_file_path = 'D:\\CMFD\\Data_ancillary\\mask_CMFD_V0106_B-01_010deg.nc'
ds = xr.open_dataset(nc_file_path)
mask_ds = xr.open_dataset(mask_file_path)
# 获取掩膜数据
mask_data = mask_ds["mask"].values # 替换成实际的变量名
# 遍历每个时间步
for time_idx in range(len(ds["time"])):
# 获取当前时间步的数据
data = ds["Ea"].isel(time=time_idx).values # 替换成实际的变量名
# 应用掩膜
masked_data = np.where(mask_data == 1, data, np.nan)
# 获取时间信息
time_info = pd.to_datetime(ds["time"].isel(time=time_idx).values)
# 保存为TIFF文件
output_path = "D:\\YRB\\Ma_ETa\\"
# tiff_filename = f"{output_path}{time_info.strftime('%Y%m%d')}.tif"
tiff_filename = f"{output_path}{time_info.strftime('%Y%m')}.tif"
# 删除维度为 1 的维度
masked_data = np.squeeze(masked_data)
# 设置TIFF文件的元数据
transform = from_origin(mask_ds.lon.min(), mask_ds.lat.min(), ds.lon[1] - ds.lon[0], ds.lat[0] - ds.lat[1])
# print(transform)
with rasterio.open(tiff_filename, 'w', driver='GTiff', height=masked_data.shape[0], width=masked_data.shape[1],
count=1, dtype=str(masked_data.dtype), crs='EPSG:4326', transform=transform) as dst:
dst.write(masked_data, 1)
# print(dst)
# 关闭数据集
ds.close()
mask_ds.close()
利用nc文件裁剪nc并转为tif的python代码
于 2024-01-26 12:15:13 首次发布