爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10486|回复: 11

[讨论] matlab 读取ORAS5 global ocean reanalysis netcdf4数据问题?

[复制链接]

新浪微博达人勋

发表于 2022-4-8 16:59:08 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 小英子 于 2022-4-9 17:25 编辑

使用matlab,读取ORAS5 global ocean reanalysis 时出现nav_lat  的Size:  1442x1021,最后数据读出来后感觉数据不对。代码为:
clear all
clc;
cd C:\aa
ssss='sohtc700_control_monthly_highres_2D_196301_CONS_v0.1.nc';
ncdisp(ssss);
info = ncinfo(ssss);
lon = ncread(ssss,'nav_lon');
loncount = length(lon);      
lat = ncread(ssss,'nav_lat');
nc_var = ncread(ssss,'sohtc700');


nc文件说明为:
ource:
           C:\aa\sohtc700_control_monthly_highres_2D_196301_CONS_v0.1.nc
Format:
           netcdf4
Global Attributes:
           Conventions = 'CF-1.4'
           NCO         = 'netCDF Operators version 4.9.2 (Homepage = http://nco.sf.net, Code = http://github.com/nco/nco)'
           title       = 'Monthly mean 2D fields'
           source      = 'ORAS5 - backward extension (ECMWF)'
           institution = 'European Centre for Medium-Range Weather Forecasts (ECMWF) - https://www.ecmwf.int'
           reference   = 'https://www.ecmwf.int/en/research/climate-reanalysis/ocean-reanalysis'
Dimensions:
           time_counter = 1     (UNLIMITED)
           y            = 1021
           x            = 1442
Variables:
    nav_lat     
           Size:       1442x1021
           Dimensions: x,y
           Datatype:   single
           Attributes:
                       _FillValue          = NaN
                       standard_name       = 'latitude'
                       long_name           = 'Latitude'
                       units               = 'degrees_north'
                       _CoordinateAxisType = 'Lat'
    nav_lon     
           Size:       1442x1021
           Dimensions: x,y
           Datatype:   single
           Attributes:
                       _FillValue          = NaN
                       standard_name       = 'longitude'
                       long_name           = 'Longitude'
                       units               = 'degrees_east'
                       _CoordinateAxisType = 'Lon'
    sohtc700   
           Size:       1442x1021x1
           Dimensions: x,y,time_counter
           Datatype:   single
           Attributes:
                       _FillValue         = 9.969209968386869e+36
                       standard_name      = 'Heat content 700 m'
                       long_name          = 'Heat content 700 m'
                       units              = 'J/m2'
                       online_operation   = 'ave(x)'
                       interval_operation = 1200
                       interval_write     = 2678400
                       offline_operation  = 'ave(x)'
                       coordinates        = 'nav_lat nav_lon'
                       missing_value      = 9.969209968386869e+36
    time_counter
           Size:       1x1
           Dimensions: time_counter
           Datatype:   double
           Attributes:
                       _FillValue    = NaN
                       standard_name = 'time'
                       units         = 'seconds since 1963-01-16T00:00:00+00:00'
                       calendar      = 'gregorian'

最佳答案

查看完整内容

你好!这个问题我已经解决了,这是由于ORAS5采用非均匀网格造成的,就是你画出来的图是全球的,但是lat和lon也是一个二维网格,你需要对它进行特殊插值,matlab中gribdata这个函数可以帮你,我用的是python,所以matlab我可能不能帮上什么忙。附上我的python代码,希望能帮上你。 from scipy import interpolate data = xr.open_mfdataset('E:\data\ORAS5/').sosaline lat = sosaline.nav_lat.values.ravel() lon = sosaline.nav ...
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-4-8 16:59:09 | 显示全部楼层
你好!这个问题我已经解决了,这是由于ORAS5采用非均匀网格造成的,就是你画出来的图是全球的,但是lat和lon也是一个二维网格,你需要对它进行特殊插值,matlab中gribdata这个函数可以帮你,我用的是python,所以matlab我可能不能帮上什么忙。附上我的python代码,希望能帮上你。
from scipy import interpolate
data = xr.open_mfdataset('E:\data\ORAS5/').sosaline
lat = sosaline.nav_lat.values.ravel()
lon = sosaline.nav_lon.values.ravel()
time = sosaline.time_counter.values.ravel()
sos = sosaline.values.ravel()
lon[lon<0] = lon[lon<0]+360
XI = np.arange(1,360.)
YI = np.arange(-89.5,89.5)
XI, YI = np.meshgrid(XI,YI)
xi = np.c_[lon,lat]
xx = np.c_[XI.ravel(),YI.ravel()]
resampled_data = interpolate.griddata(xi ,sos,xx)
resampled_data = resampled_data.reshape(180,360)
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 成长值: 32430
发表于 2022-4-8 22:16:33 | 显示全部楼层
目前看都是对的,不知道是哪里不对
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-4-8 22:25:34 | 显示全部楼层
画张图看看,海温数据的陆地和海洋明显不同
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-9 11:26:27 | 显示全部楼层
膘膘 发表于 2022-4-8 22:25
画张图看看,海温数据的陆地和海洋明显不同

读出的数据  lat 、lon 以及变量都是 1442x1021的,经纬度数据看着也不对,数据时海洋热含量数据。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-9 11:31:04 | 显示全部楼层
二爷名声在外 发表于 2022-4-8 22:16
目前看都是对的,不知道是哪里不对

您好,数据时海洋热含量的数据,从https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-oras5?tab=overview 上下载的。看了说明是        NetCDF4  2D variables的数据,lat 、lon为1442x1021的。同样的函数读 netcdf4_classic 都没问题,且lat 、lon为一维数据。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-9 17:27:34 | 显示全部楼层
本帖最后由 小英子 于 2022-4-13 16:13 编辑

所处理的数据绘图
untitled.png
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-5-8 23:31:46 | 显示全部楼层
求教,楼主后面怎么处理的经纬度啊?
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-5-15 22:05:11 | 显示全部楼层
蹲,我也遇到了相同的问题
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-5-17 10:28:04 | 显示全部楼层
zhenghy 发表于 2022-5-17 10:22
你好!这个问题我已经解决了,这是由于ORAS5采用非均匀网格造成的,就是你画出来的图是全球的,但是lat和lon ...

如果有问题,可以V信联系我,我气象家园回复看的少,zhenghy2001
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表