用Matlab读取NetCDF文件部分地区的数据

您所在的位置:网站首页 nc文件matlab 用Matlab读取NetCDF文件部分地区的数据

用Matlab读取NetCDF文件部分地区的数据

2024-01-26 09:06| 来源: 网络整理| 查看: 265

NetCDF文件的数据读取网上也有很多相应的教程,可以参考

利用MATLAB读取NetCDF文件

然而在我想提取 某个地区或者是某个范围(已知经纬度的情况下) 的数据时,网上的教程还挺少的。

然而还是给我在找一篇用R语言处理NetCDF文件的博客的评论找到了方法(怪我懒得用matlab的help来研究)

R语言处理气象数据:NetCDF格式数据的读写

结合两篇博客,我们知道可以用ncread来提取部分地区的数据

>> help ncread ncread Read variable data from a NetCDF source. VARDATA = ncread(FILENAME,VARNAME) reads data from the variable VARNAME in the NetCDF file FILENAME. VARDATA = ncread(OPENDAP_URL,VARNAME) reads data from the variable VARNAME from an OPeNDAP NetCDF data source. VARDATA = ncread(SOURCE,VARNAME,START, COUNT) VARDATA = ncread(SOURCE,VARNAME,START, COUNT, STRIDE) reads data from VARNAME beginning at the location given by START from SOURCE, which can either be a filename or an OPeNDAP URL. For an N-dimensional variable START is a vector of 1-based indices of length N specifying the starting location. COUNT is also a vector of length N specifying the number of elements to read along corresponding dimensions. If a particular element of COUNT is Inf, data is read until the end of that dimension. The optional argument STRIDE specifies the inter-element spacing along each dimension. STRIDE defaults to a vector of ones. The MATLAB datatype of VARDATA will be the closest type to the corresponding NetCDF datatype. VARDATA will be of type double, if at least one of '_FillValue', 'scale_offset' and 'add_offset' variable attribute is present. The following attribute conventions are applied in sequence to VARDATA if the corresponding attribute exists for this variable: 1. Values in VARDATA equal to the '_FillValue' attribute value are replaced with NaNs. If '_FillValue' attribute does not exist, ncread will query the library for the variable's fill value. 2. VARDATA is multiplied by the value of 'scale_factor' attribute. 3. The value of the 'add_offset' attribute is added to VARDATA. Example: Read and display the 'peaks' data in the example file. ncdisp('example.nc','peaks'); peaksData = ncread('example.nc','peaks'); peaksDesc = ncreadatt('example.nc','peaks','description'); surf(double(peaksData)); title(peaksDesc); Example: Subsample the 'peaks' data by a factor of 2. subsetdata = ncread('example.nc','peaks',... [1 1], [Inf Inf], [2 2]); surf(double(subsetdata)); See also ncdisp, ncreadatt, ncinfo, ncwrite, netcdf. ncread 的参考页 1. 用法 VARDATA = ncread(SOURCE,VARNAME,START, COUNT) SOURCE:文件名VARNAME:变量名START:从第几个开始数,具体看nc文件的数据而定COUNT:一共要数多少个 2. 例子 >> filename='sst.nc'; >> ncdisp(filename) Source: D:\test\sst.nc Format: classic Global Attributes: Title = 'Monthly version of HadISST sea surface temperature component' description = 'HadISST 1.1 monthly average sea surface temperature' institution = 'Met Office Hadley Centre' source = 'HadISST' reference = 'Rayner, N. A., Parker, D. E., Horton, E. B., Folland, C. K., Alexander, L. V., Rowell, D. P., Kent, E. C., Kaplan, A. Global analyses of sea surface temperature, sea ice, and night marine air temperature since the late nineteenth century J. Geophys. Res.Vol. 108, No. D14, 4407 10.1029/2002JD002670' Conventions = 'CF-1.0' history = '7/2/2020 converted to netcdf from pp format' supplementary_information = 'Updates and supplementary information will be available from http://www.metoffice.gov.uk/hadobs/hadisst' comment = 'Data restrictions: for academic research use only. Data are Crown copyright see (http://www.opsi.gov.uk/advice/crown-copyright/copyright-guidance/index.htm)' Dimensions: time = 1800 (UNLIMITED) latitude = 180 longitude = 360 nv = 2 Variables: time Size: 1800x1 Dimensions: time Datatype: single Attributes: units = 'days since 1870-1-1 0:0:0' calendar = 'gregorian' long_name = 'Time' standard_name = 'time' time_bnds Size: 2x1800 Dimensions: nv,time Datatype: single latitude Size: 180x1 Dimensions: latitude Datatype: single Attributes: units = 'degrees_north' long_name = 'Latitude' standard_name = 'latitude' longitude Size: 360x1 Dimensions: longitude Datatype: single Attributes: units = 'degrees_east' long_name = 'Longitude' standard_name = 'longitude' sst Size: 360x180x1800 Dimensions: longitude,latitude,time Datatype: single Attributes: _FillValue = -1.000000015047466e+30 standard_name = 'sea_surface_temperature' long_name = 'sst' units = 'C' cell_methods = 'time: lat: lon: mean' missing_value = -1.000000015047466e+30 test=ncread(filename,'sst',[90,1,1],[90,60,1]) filename:文件名'sst':变量名[90,1,1]:计数起始位置。分别对应longitude、latitude、time的起始位置,即经度从第90个数据开始,纬度从第1个数据开始,时间从第1个时间开始[90,60,1]:一共要数多少个。分别对应longitude、latitude、time的要提取的个数,即经度从第90个数据开始读90个,纬度从第1个数据开始读60个,时间从第1个数据开始读1个,即一个月的数据


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3