加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab/NCL--提取nc文件中站点数据

(2020-07-23 12:08:01)
分类: MATLAB
NCL处理nc就是会更方便,但是避免不了一些用不了NCL的情况Matlab/NCL--提取nc文件中站点数据
写了一个简单用matlab提取nc文件站点数据的脚本,通过判断经纬度与格点经纬度距离,选取最近格点值。
后面也附上了提取wrfout中站点数据的NCL脚本,如果是再分析资料的话,wrf系列函数不知道是否可以,可能还是需要通过距离判断。

matlab code:
clc;         %清屏
clear all;   %清空
%%
%nc批量读取的数据
datadir1='C:\Users\sunxy\Desktop\';                                                    %指定批量数据所在的文件夹
filelist1=dir([datadir1,'200901.nc']);                      %指定批量数据的类型
%%
%读取数据
lat_station=32.5;lon_station=90.8;


  filename1=[datadir1,filelist1.name];
  ncid1=netcdf.open(filename1,'NC_NOWRITE');                                 %打开nc文件         
  
  lat=ncread(filename1,'latitude');                                         %读入变量lat
  lon=ncread(filename1,'longitude');                                        %读入变量lon
  [lat_2D lon_2D]=meshgrid(lat,lon);
  distance=sqrt((lat_2D-lat_station).^2+(lon_2D-lon_station).^2);          %算出站点与每个格点距离
  [ilon ilat]=find(distance==min(min(distance)));                          %寻找距离最近格点
  lat_back=lat(ilat);                                                      %输出经纬度检查是否为希望读取站点
  lon_back=lon(ilon,:);

  blh= ncread(filename1,'blh');
  blh_station=blh(ilon,ilat,:);
  netcdf.close(ncid1);                                                      %关闭nc文件
 
% % ncdisp('C:\Users\sunxy\Desktop\200901.nc','/','full')


NCL code:
    row = numAsciiRow("/datadir1/station.txt")
    col = numAsciiCol("/datadir1/station.txt")
    f_h = asciiread("/datadir1/station.txt",(/row,col/),"float")
    station=f_h(:,0)
    lon=f_h(:,1)
    lat=f_h(:,2)
    station_num=dimsizes(station)

    ;read wrfout  u v data
    DATADir=(/"/datadir1/zhuyan/wrfout/2020/expt1/18/"/) 
    FILE= systemfunc (" ls -1 " + DATADir + "wrfout_d01_2019*")
    filenum=dimsizes(FILE)
    a = addfiles(FILE + ".nc", "r")
    = wrf_user_getvar(a,"U10",-1)

    output_u=new((/station_num,filenum+5/), float)
    output_u(:,0)=station
    output_u(:,1)=lon
    output_u(:,2)=lat
    do istation=0,station_num-1
        loc  = wrf_user_ll_to_ij(a,lon(istation), lat(istation), True)-1
        output_u(istation,3)=loc(0)
        output_u(istation,4)=loc(1)
        output_u(istation,5::)=u(:,loc(1),loc(0))
    end do 

    opt       =True
    M=filenum+5
    fWidth = 7     ; specify the format width
    fDec   = 2     ; specify the number to the right of decimal point
    fmtf   = M + "f" + fWidth + "." + fDec        ; same as "7f7.2"
    opt@fout  ="output_u_202001.txt"
    write_matrix (output_u, fmtf, opt)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有