好的,我理解了您的需求。我已经根据您提供的信息修改了之前的代码,能够将1961-2022年逐日降水数据集nc文件转换为逐年的TIFF文件。以下是修改后的代码:
```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=f'{year}').values
# Create output filename
output_file = f"{variable_name}_{year}_daily.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_daily"
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` 函数中的循环从 `var.time` 改为 `range(1961, 2023)`,这样可以逐年处理数据。
2. 将输出文件名中的日期格式改为 `{variable_name}_{year}_daily.tiff`,以体现每年的逐日数据。
3. 其他部分保持不变。
运行这个代码后,将会在 `E:/CN05.1/Daily/nc_to_tif_daily` 文件夹下生成1961到2022年每年的逐日降水数据的TIFF文件。