NetCDF(network Common Data Form)是一种存储多种特殊数据(变量)的文件格式,如温度、湿度、气压、风速、风向。各种变量可以通过一个维度显示。
NetCDF文件中有多个字段,lat为纬度,lon为经度。其他的字段中有径流量、降水量等数据。
使用Matlab转换
使用函数ncdisp(filename.nc)可以在命令窗口中以文本形式显示NetCDF数据源(source)中的所有组、维度、变量定义和所有属性。
每一个字段对应一个矩阵。类似JPEG形式的影像,每一个像元有一个属性值。使用函数ncread(filename,field)可以把某一字段的数据以字段的形式读取。这样以来,只需要根据lon和lat两个字段的经纬度,对这个矩阵添加地理配准,就能生成Geotiff格式的数据文件。
文件中的lon,lat两个字段储存经纬度数据是以两个一位数组的形式存储的。只需要经纬度的最大最小值就能确定影像的范围和地理位置。用函数georasterref添加地理配准,生成含地理配准的结构体数组R。最后用geotiffwrite函数把结构体数组R写入tiff文件。
完整Matlab代码如下:
clc
ncfiles = ncinfo('F:\data\GLDAS_NOAH025_3H.A20141230.2100.020\GLDAS_NOAH025_3H.A20141230.0300.020.nc4');
% ncfiles = dir('F:\data\GLDAS_NOAH025_3H.A20141230.2100.020\GLDAS_NOAH025_3H.A20141230.0300.020.nc4');
N = length(ncfiles.Variables) ;%Variables变量的数量
for i = 1:N
disp('成功转换');disp(i);
ncfile = ncfiles.Variables(i).Name ;
lat = ncread(ncfiles.Filename,'lat') ;%Filename是当前文件名字符型矩阵
lon = ncread(ncfiles.Filename,'lon') ;
%%Change lon and lat to double
lon = double(lon) ;
lat = double(lat) ;
A = ncread(ncfiles.Filename,ncfile) ;
% A=rot90(A);逆时针旋转90度
A=A';%由于生成的图像倒了,需要转置
% Write the .grd data into geotiff
R = georasterref('RasterSize',size(A),'LatitudeLimits',[min(lat),max(lat)],........
'LongitudeLimits',[min(lon),max(lon)]);
tiffile = strcat('F:\data\GLDAS_NOAH025_3H.A20141230.2100.020\GLDAS_NOAH025_3H.A20141230.0300.020.nc4',ncfile,'.tif') ;
geotiffwrite(tiffile,A,R);
使用python(Arcpy)转换
import arcpy
from arcpy import env
from arcpy.sa import *
# Input data source
arcpy.env.workspace = r'F:\seadata\2008peryear\core'#set the worksapce where NetCDF exist
arcpy.env.overwriteOutput = True #If the file has already existed, it'll overwrite.
# Set output folder
OutputFolder = r'F:\seadata\2008peryear\West_pacific\temperature\\'
# Loop through a list of files in the workspace
NCfiles = arcpy.ListFiles("*.nc")
for filename in NCfiles:
inNCfiles = arcpy.env.workspace + "/" + filename
fileroot = filename[11:17] +'temp'
TempLayerFile = "time"
outRaster = OutputFolder + "/" + fileroot
# Process: Make NetCDF Raster Layer
arcpy.MakeNetCDFRasterLayer_md(inNCfiles, "temp", "lon", "lat", TempLayerFile, "", "", "BY_VALUE")
# Process: Copy Raster
arcpy.CopyRaster_management(TempLayerFile, outRaster + ".tif", "", "", "", "NONE", "NONE", "")
print (filename+r" has successfully been processed")
print r'all have successfully been processed'
print arcpy.GetMessages()
使用ArcGIS转换
点击 Multidimension Tools toolbox ——Make net CDF Feature Layer,选择文件,再选择想要转换的变量字段,点击OK。
右击图层,点击Data—Export Data,选择保存的形式和位置,点击OK。
在Panoply中打开netCDF文件,以后更新
net CDF的详细介绍请参阅:
Physical Sciences Laboratory的官方网站
UCAR COMMUNITY PROGRAMS 官网
ArcGIS Resource Center