以下是使用GDAL库重投影netCDF文件的代码示例:
from osgeo import gdal, osr
# 打开源文件
src_path = 'input.nc'
src_dataset = gdal.Open(src_path, gdal.GA_ReadOnly)
src_projection = src_dataset.GetProjection()
src_geotransform = src_dataset.GetGeoTransform()
# 设置目标投影
dst_projection = 'EPSG:4326'
# 创建输出文件
dst_path = 'output.nc'
driver = gdal.GetDriverByName('netCDF')
dst_dataset = driver.CreateCopy(dst_path, src_dataset, 0)
# 获取源文件的波段数量
num_bands = src_dataset.RasterCount
for i in range(1, num_bands+1):
# 获取源文件的波段
src_band = src_dataset.GetRasterBand(i)
# 创建目标文件的波段
dst_band = dst_dataset.GetRasterBand(i)
# 进行重投影
gdal.ReprojectImage(src_band, dst_band, src_projection, dst_projection, gdal.GRA_Bilinear)
# 关闭数据集
src_dataset = None
dst_dataset = None
上述代码中,首先使用gdal.Open
函数打开源文件,并获取源文件的投影和地理变换信息。然后,通过设置dst_projection
变量来指定目标投影。接下来,使用gdal.GetDriverByName
获取netCDF驱动程序,并使用driver.CreateCopy
函数创建输出文件的副本。
然后,使用src_dataset.RasterCount
获取源文件的波段数量,并使用一个循环来遍历每个波段。在每个循环中,使用src_dataset.GetRasterBand
获取源文件的波段,并使用dst_dataset.GetRasterBand
创建目标文件的波段。最后,使用gdal.ReprojectImage
函数将源文件的波段重投影到目标投影,并将结果保存在目标文件的波段中。
最后,记得在处理完成后关闭数据集,以释放资源。