使用matlab读取nc文件并保存为tif栅格

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的配准工具平移一下即可。

你可能感兴趣的:(学习随记,Matlab,相关,matlab,学习)