爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 19401|回复: 23

NCL代码分享-MICAPS第四类数据转NetCDF文件

[复制链接]

新浪微博达人勋

发表于 2019-7-24 19:11:03 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 liuxiaoyue 于 2019-7-26 10:50 编辑

直接上代码,以2017年10月8日20时海平面气压场(附件)为例。

begin

    ; read data
    lines = asciiread("17100820.000",-1,"string")
    delim = " "
    print("header:")
    print(lines(1:3))

    ; coordinate information
    dlon = tofloat(str_get_field(lines(2),1,delim))
    dlat = -tofloat(str_get_field(lines(2),2,delim))

    nlon = toint(str_get_field(lines(3),1,delim))
    nlat = toint(str_get_field(lines(3),2,delim))

    minlon = toint(str_get_field(lines(2),3,delim))
    maxlon = toint(str_get_field(lines(2),4,delim))

    minlat = toint(str_get_field(lines(2),6,delim))
    maxlat = toint(str_get_field(lines(2),5,delim))

    print("dlon   = " + dlon   + "; dlat   = " + dlat)
    print("nlon   = " + nlon   + "; nlat   = " + nlat)
    print("minlon = " + minlon + "; maxlon = " + maxlon)
    print("minlat = " + minlat + "; maxlat = " + maxlat)

    lat = fspan(maxlat, minlat, nlat)
    lat@units = "degrees_north"
    lon = fspan(minlon, maxlon, nlon)
    lon@units = "degrees_east"
   
    ; prepare array
    p0 = new((/dimsizes(lat),dimsizes(lon)/), float)
    p0!0 = "lat"
    p0&lat = lat
    p0!1 = "lon"
    p0&lon = lon
   
    ; convert
    do i = 0, nlat-1
        n = 8*i+4
        p0(i,{ispan(minlon, maxlon, 10)}) = tofloat(str_get_field(lines(n:n+7),1,delim))
        do j = 1, 9
            p0(i,{ispan(minlon+j, maxlon-10+j, 10)}) = tofloat(str_get_field(lines(n:n+6),j+1,delim))
        end do
    end do
   
    ; output
    system("/bin/rm -f p0.17100820.nc")
    ncdf = addfile("p0.17100820.nc","c")
    ncdf->p0 = p0

end









TIM截图20190724190935.png

MICAPS文件

MICAPS文件

17100820.000

20.09 KB, 下载次数: 103, 下载积分: 金钱 -5

micaps第四类数据

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-7-25 19:46:07 | 显示全部楼层
你真是太太优秀了!!!!{:5_213:}{:5_213:}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-7-26 10:48:44 | 显示全部楼层
Уēs、尜玉 发表于 2019-7-25 19:46
你真是太太优秀了!!!!

{:5_257:}{:5_257:}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-7-26 11:19:26 | 显示全部楼层
优秀,up可以继续研究下,其他的格式的数据转为NC的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-7-26 11:38:03 来自手机 | 显示全部楼层
超级棒!!!!!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2019-8-8 12:53:00 | 显示全部楼层
请问一下楼主,为什么dlon = tofloat(str_get_field(lines(2),1,delim)), 而dlat = -tofloat(str_get_field(lines(2),2,delim)) ,这是什么意思? dlat是负的?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-9 08:58:11 | 显示全部楼层
Summer0456 发表于 2019-8-8 12:53
请问一下楼主,为什么dlon = tofloat(str_get_field(lines(2),1,delim)), 而dlat = -tofloat(str_get_field ...

对的,dlat就是负的,micaps数据是由北至南,从高纬向低纬度的。
所以在定义纬度的时候:
lat = fspan(maxlat, minlat, nlat)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-10-31 21:41:27 | 显示全部楼层
yueyue真棒
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-12-31 12:06:11 | 显示全部楼层
请问楼主还在么。 p0(i,{ispan(minlon, maxlon, 10)}) = tofloat(str_get_field(lines(n:n+7),1,delim))这个语句,10是数据列数,7是行数是么?我直接改成了我自己数据的行列,n也改了,但是报错说等号左右不匹配,请问是什么原因呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-1-8 10:32:46 | 显示全部楼层
楼主,你这个没看到时间维度的设定呀
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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