1. nc文件简介
NetCDF全称为network Common Data Format,即“网络通用数据格式”;netcdf文件开始是用于存储气象数据,现许多数据采集软件生成文件也采用这种格式。
Netcdf文件包括以下对象:
变量(Variables) :变量对应着真实的物理数据;
维度(dimension):一个维度对应着函数中的某个自变量,或者说函数图象中的一个坐标轴;
属性(Attribute) :属性是对变量值和维的具体物理含义进行注释。
2. nc文件读取
先使用 ncinfo 查看文件包含内容,找到我们需要的变量(Variables);
nc_data=ncinfo('xxx.nc');
得到的 nc_data 是一个结构体,里面包含 filename(文件路径),Name,Dimensions(维度),Variable(变量),Groups(组),Format(格式)
打开Variable就可以看到nc中包含的变量以及变量的维度信息了,比如对于降雨量一般有“latitude(纬度)”、“longtitude(经度)”、“pre(降雨量矩阵)”、“time(时间)”等。(后面我们需要生成降雨量tif栅格,所以需要经纬度信息和降雨量矩阵)
再使用ncread读取需要的数据,根据上述的变量(Variables);
rain_lon=ncread(‘xxx.nc’,'longitude'); % 读取经度,假设是一个“m行1列”的矩阵
rain_lat=ncread(‘xxx.nc’,'latitude'); % 读取纬度,假设是一个“n行1列”的矩阵
rain_month=ncread('xxx.nc','pre'); % 读取降雨量矩阵,得到一个“n行m列”的矩阵(和经纬度维数对应)
使用 imagesc函数可以显示降雨量图像。
imagesc(rain_month)
3. 使用geotiffwrite生成tif降雨量栅格
对于nc文件,一般只知道经纬度信息而没有投影坐标信息,即没有地理信息,这时则可以通过以下方式生成tif栅格。(注:如果有地理坐标信息,就用geotiffread和geotiffinfo获取)。
R=georasterref('RasterSize',size(rain_month),'LatitudeLimits',[min(rain_lat),max(rain_lat)],...
'LongitudeLimits',[min(rain_lon),max(rain_lon)]);
% 为了防止生成tif栅格有存在颠倒的情况(和imagesc显示南北颠倒,原因是纬度添加了负号),有下面两种方式解决。
% 第一种,旋转矩阵
% rot90(rain_month‘) % 将矩阵倒置一下,即南北维度调换
% 第二种,指定georasterref中的ColumnsStartFrom参数
R.ColumnsStartFrom = 'north';
% 写出tif栅格
geotiffwrite('xxx.tif',rain_month,R);
可通过arcgis查看生成的tif图像,如果存在偏移,用arcgis的配准工具平移一下即可。