- 积分
- 546
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2018-9-17
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
怎么使用filedimdef函数?
打算提取MOD04_L2的数据,其中设置新的文件,重新编写nc文件。但是编写.nc文件时一直出错,也搞不懂官网上的filedimdef函数,希望大神指教一下。
load "$NCARG_ROOT/lib/ncarg/nclex/gsun/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
begin
diri="H:/MYD/china/MOD04_2L/20181124/"
fili = systemfunc("cd "+diri+" ; ls MOD04*.hdf");
nfil = dimsizes(fili)
print("nfil="+nfil)
; Time=new(dimsizes(fili(0)),string) ;/Time ->string
; header = (/" file aod"/)
; head = [/header/]
; write_table("./aod_L2_bj_combined.txt", "w", head, "%s")
m = 0
p = 0
; 设置AOD数组属性,lat2d,lon2d 经纬度属性
k = ispan(0,8019,1) ; 8020数组值多
q = ispan(0,4034,1)
lat2d = new((/8020,4035/),float)
lat2d!0 = "k"
lat2d!1 = "q"
lat2d&k = k
lat2d&q = q
lat2d@units = "Degrees_north"
lat2d@long_name = "Geodetic Latitude"
lat2d@_FillValue = -999
lon2d = new((/8020,4035/),float)
lon2d!0 = "k"
lon2d!1 = "q"
lon2d&k = k
lon2d&q = q
lon2d@long_name = "Degrees_east"
lon2d@units = "Geodetic Longitude"
lon2d@_FillValue = -999
AOD = new((/8020,4035/),double)
AOD!0 = "k"
AOD!1 = "q"
AOD&k = k
AOD&q = q
AOD@units = "None"
AOD@long_name = "Combined Dark Target, Deep Blue AOT at 0.55 micron for land and ocean."
AOD@_FillValue = -9999
do nf=0,nfil-1
f = addfile(diri+fili(nf), "r")
printVarSummary(f)
x = f->AOD_550_Dark_Target_Deep_Blue_Combined ;读取AOD变量
printVarSummary(x)
aod=x@scale_factor*1.d * (x-x@add_offset)
lat = f->Latitude
lon = f->Longitude
printVarSummary(lat)
printVarSummary(lon)
printVarSummary(aod)
do i=0,202
do j=0,134
if(ismissing(lat(i,j)))then
else
if(ismissing(lon(i,j)))then
else
if((lat(i,j).gt.24).and.(lat(i,j).lt.37).and.(lon(i,j).gt.107.5).and.(lon(i,j).lt.117.5))then
lat2d(p,m) = lat(i,j)
lon2d(p,m) = lon(i,j)
;print(lat2d)
if(ismissing(aod(i,j)))then
else
AOD(p,m) = aod(i,j) ;;让符合经纬度的数据写入AOD
print(AOD(p,m))
m = m+1
end if
end if
end if
end if
end do
p = p+1
end do
end do
printVarSummary(AOD)
outfile = "daymod04.nc"
if (isfilepresent(outfile))then
system("rm -f " + outfile)
end if
fout = addfile(outfile,"c")
nlat2d = dimsizes(lat2d)
nlon2d = dimsizes(lon2d)
print(dimsizes(AOD))
setfileoption(fout,"DefineMode",True) ; 写入nc的模式使用DefineMode,摘抄样本
fAtt = True ;-- assign file attributes
;设置fout文件的属性
fAtt@title = "A Day of MODIS04_L2"
fAtt@source_file = fili
fAtt@creation_date = systemfunc ("date")
fAtt@history = "modis04l2"
fAtt@platform = "MOD04_L2"
fileattdef(fout,fAtt) ;-- copy file attributes
dim_names = (/ "lat2d", "lon2d"/)
dim_sizes = (/ nlat2d, nlon2d/)
dimUnlim = (/ False, False/)
filedimdef(fout,dim_names,dim_sizes,dimUnlim)
filevardef(fout, "lat2d" ,typeof(lat2d), getvardims(lat2d))
filevardef(fout, "lon2d" ,typeof(lon2d), getvardims(lon2d))
filevardef(fout, "AOD" ,typeof(AOD), getvardims(AOD))
filevarattdef(fout,"lat2d" ,lat2d) ;-- copy lat attributes
filevarattdef(fout,"lon2d" ,lon2d) ;-- copy lon attributes
filevarattdef(fout,"AOD", AOD) ;-- copy AODattributes
setfileoption(fout,"DefineMode",False)
fout->lat2d = (/lat2d/) ;-- write lat to new netCDF file
fout->lon2d = (/lon2d/) ;-- write lon to new netCDF file
fout->AOD = (/AOD/) ;-- write variable to new netCDF file
end
运行后显示错误
|
|