Welcome 微信登录

首页 / 操作系统 / Linux / 用Delphi写GrADS文件并在Linux操作系统下调用

任务描述:将高空报文的各层温度(已解码)用Delphi写成GrADS格式的dat和ctl文件,并将这些文件传输到Linux操作系统下调用,在Linux下绘制Arem预报结果时,添加实况用于比较预报和实况结果。难点:用Delphi写GrADS文件Delphi写GrADS文件的代码://写Dat文件(Data的数据格式是Single)
strTemp:=ExtractFileName(strFileName);
fn:=ExtractFilePath(strFileName)+strTemp+".dat";
fnCtl:=ExtractFilePath(strFileName)+strTemp+".ctl";
assignfile(fdat, fn);
rewrite(fdat, 1);
for i:=Low(Data) to High(data) do begin
blockwrite(fdat, Data[i].T, SizeOf(Data[i].T));
end;
closefile(fdat);//写控制文件
AssignFile(ftxt,fnctl);
Rewrite(ftxt);write(ftxt, "dset ^"+ExtractFileName(fn)+chr(10)); //直接用writeln的话,在Linux下会出错
write(ftxt, "title real data"+chr(10));
write(ftxt, "options little_endian"+chr(10));
write(ftxt, "undef -9999.9"+chr(10));
write(ftxt, "xdef 1 linear 1 1"+chr(10));
write(ftxt, "ydef 1 linear 1 1"+chr(10));
write(ftxt, "zdef "+inttostr(length(Data))+" levels "+chr(10));
strTemp:=" ";
for i:=0 to Length(Data)-1 do begin
strTemp:=strTemp+Floattostr(Data[i].H)+" ";
end;
Write(ftxt,strTemp+chr(10));
Write(ftxt, "tdef 1 linear 12z12JAN2008 1hr"+chr(10));
Write(ftxt,"vars 1"+chr(10));
Write(ftxt,"T "+inttostr(length(Data))+" 0 Temperature"+chr(10));
Write(ftxt,"endvars"+chr(10));
CloseFile(ftxt);
对Linux下gs脚本的修改:需要注意的是,GrADS下,可以使用不同文件的变量,但是,x,y,z,t这些量是公用的,如果两个文件的维数不一样,就需要对实况的维进行设置,而设置完成后,需要恢复预报场的维数设置。这里,Z维固定,如果设置不同,这绘制出来的图有位置偏移。***************************
"set lev 950 200" Z维不变"set vpage 0 11 0 8.5"
"set parea 0.7 3.7 4.3 8 "
"set lon "cslon
"set lat "cslat
"set xaxis -50 10 10"
"set yaxis 950 200 100" 设置刻度,运行时会报警,没关系
"d t-273.15"
"draw title cs hh cz "strymdhif ((substr(strymdh,9,2)="00" | substr(strymdh,9,2)="12"))
"open /home/disk3a/yaotest/frost/HFile/s57679"strymdh".ctl"
"set dfile 2"
"set x 1"
"set y 1"
"set t 1" 根据实况文件设置各维
"set xaxis -50 10 10"
"set yaxis 950 200 100"
"d t"
"close 2"
"set dfile 1"
"set t "t0Backup 恢复时间维的设置,而x,y维则在后面会再次设置,所以这里不需要恢复。
endif"set vpage 0 11 0 8.5"
"set parea 4.1 7.1 4.3 8 "
"set lon "hhlon
"set lat "hhlat
"set xaxis -50 10 10"
"set yaxis 950 200 100"
"d t-273.15"if ((substr(strymdh,9,2)="00" | substr(strymdh,9,2)="12")) Lasg编的中文手册没有逻辑语法的说明,在GrADS官方的英文版说明里有
"open /home/disk3a/yaotest/frost/HFile/s57749"strymdh".ctl"
"set dfile 2"
"set x 1"
"set y 1"
"set t 1"
"set xaxis -50 10 10"
"set yaxis 950 200 100"
"d t"
"close 2" 关闭文件2
"set dfile 1"
"set t "t0Backup 恢复时间维
endif