使用 Python 将 NetCDF 转换为 GeoTiff 文件

介绍

我们将使用 Python 将 netCDF 文件转换为 GeoTIFF。GeoTIFF 基于 TIFF 格式,用作地理参考光栅图像的交换格式。

第三方库

netCDF4

gdal

numpy

geopandas

读取 netCDF 文件

我们将使用 netCDF.Dataset() 属性来读取 netCDF 文件:

#从osgeo导入必要的库import gdal 
import numpy as np 
from netCDF4 import Dataset 
import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1 import make_axes_locatable 

#读取netCDF文件
data = Dataset( r'\path\to\file.nc' )
print(data)

简单可视化

#Creating a vairable 'sic' to store the 2-D array variable 'z'
 sic = data.variables[ 'z' ][:] 

#翻转
asi_sic = np.flip( sic, 0 ) 

#显示变量 'z' 
 cmmap = plt.cm.get_cmap( "jet" ) 
cmmap.set_bad( 'dimgrey' , 1. ) 
fig, ax = plt.subplots() 
divider = make_axes_locatable( ax) 
cax = divider.append_axes( 'right' , size= '5%' , pad= 0.05 ) 

im = ax.imshow(asi_sic, cmap=cmmap, vmin= 0 ,vmax= 100 )

fig.colorbar(im, cax=cax, orientation= 'vertical' , label= '海冰浓度 (%)' ) 

ax.axes.xaxis.set_visible( False ) 
ax.axes.yaxis.set_visible( False ) 
plt.gcf ().set_size_inches( 15 , 15 ) 
ax.set_title( 'ASI Daily SIC 2020 年 2 月 1 日网格 6.25 km' , fontsize= 20 ) 
fig.set_dpi( 300.0 ) 
plt.show()

微信截图_20230130161330

我们之所以翻转sic变量是因为sic数组是倒排数组。

读取经纬度信息

国产的风云卫星NC文件,经纬度信息一般是提供一个数值范围和间隔大小(空间分辨率),然后根据这两个信息进行插值,得到影像的经纬度信息。

国外的部分NC文件,直接提供一个tiff,该tiff中直接包含了经纬度信息。

创建 GeoTIFF 文件

我们现在只剩下创建 GeoTIFF 文件,并使用gdal如下方法完成:

#Creating output file
 driver = gdal.GetDriverByName( "GTiff" ) #Getting GeoTIFF driver
 driver.Register() 

outds_asi = driver.Create ( "ASI_625km_SIC_1_Feb_2020.tif" , #输入文件的名称 xsize
                            = asi_sic.shape[ 1 ], #设置列数
                           ysize = asi_sic.shape[ 0 ], #设置行数
                           bands = 1 , #设置波段数
                           eType = gdal.GDT_Float32) #设置数据类型即float 32

outds_asi.SetGeoTransform( gt_asi)#设置地理信息
outds_asi.SetProjection(proj_asi) #设置投影信息
outband_asi = outds_asi.GetRasterBand( 1 ) #设置波段数
outband_asi.WriteArray(asi_sic) #在文件中写入二维asi_sic数组
outband_asi = None  #关闭文件
outds_asi = None #关闭 文件

结论

我们刚刚学习了如何使用 python 将 netCDF 文件转换为 GeoTIFF 文件。GeoTIFF 文件更容易处理,因为它包含地理参考栅格图像形式的空间参考信息。当然,我们可以使用 QGIS、ArcGIS 等 GIS 软件从 netCDF 创建 GeoTIFF 文件,但使用 python,我们可以深入了解整个过程是如何完成的。这是编写本文的必要性。