我理解您需要将 1961-2022 年的逐日降水数据集 NC 文件转换为 GeoTIFF 格式,并按年输出。我已经修改了原有的 Python 代码,实现了这个功能。以下是修改后的代码:
```python
import xarray as xr
import numpy as np
from osgeo import gdal, osr
import os
import pandas as pd
def save_tiff(data, output_path, geotransform, projection):
driver = gdal.GetDriverByName('GTiff')
rows, cols = data.shape
dataset = driver.Create(output_path, cols, rows, 1, gdal.GDT_Float32)
dataset.SetGeoTransform(geotransform)
dataset.SetProjection(projection)
band = dataset.GetRasterBand(1)
band.WriteArray(data)
band.SetNoDataValue(-9999)
dataset.FlushCache()
del dataset
def process_netcdf_to_tiff(input_file, output_folder, variable_name, lat_name='lat', lon_name='lon'):
# Open the NetCDF file
ds = xr.open_dataset(input_file)
# Get the variable data
var = ds[variable_name]
# Get latitude and longitude
lat = ds[lat_name].values
lon = ds[lon_name].values
# Calculate geotransform
res_lat = (lat[-1] - lat[0]) / (len(lat) - 1)
res_lon = (lon[-1] - lon[0]) / (len(lon) - 1)
geotransform = (lon[0], res_lon, 0, lat[0], 0, res_lat)
# Set projection
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326) # WGS84
projection = srs.ExportToWkt()
# Process and save yearly data
for year in range(1961, 2023):
data = var.sel(time=str(year)).mean('time').values
# Create output filename
output_file = f"{variable_name}_{year}_daily_avg.tiff"
output_path = os.path.join(output_folder, output_file)
# Save as TIFF
save_tiff(data, output_path, geotransform, projection)
# Main execution
if __name__ == "__main__":
input_file = "E:/CN05.1/Daily/CN05.1_Pre_1961_2022_daily_025x025.nc"
output_folder = "E:/CN05.1/Daily/nc_to_tif_yearly"
variable_name = "pre"
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 处理NetCDF文件并生成TIFF文件
process_netcdf_to_tiff(input_file, output_folder, variable_name)
print("处理完成。TIFF文件已保存在指定的输出文件夹中。")
```
这个修改后的代码主要做了以下变更:
1. 修改了 `process_netcdf_to_tiff` 函数,改为按年度处理数据,而不是按月度。
2. 使用 `var.sel(time=str(year))` 来选择每个年度的数据。
3. 使用 `mean('time')` 计算每年的平均日降水量。
4. 输出文件名中增加了年份信息,格式为 `"{variable_name}_{year}_daily_avg.tiff"`。
现在,该代码可以将您提供的 1961-2022 年逐日降水数据集 NC 文件转换为逐年 GeoTIFF 格式,并保存在指定的输出文件夹中。请尝试运行这个修改后的代码,如有任何问题欢迎继续沟通。
免责声明:文中图片均来源于网络,如有版权问题请联系我们进行删除!
标签: