本帖最后由 ljh110011 于 2015-5-24 17:51 编辑
下面是lj1.gs脚本的命令:
*从海平面气压场(或1000hPa高度场)中搜寻台风中心位置,输出到文件 'reinit' '!rm moni-w.txt' ;*使用追加写入,所以要先删除旧数据文件 !是GRADS调用操作系统命令 'open /home/DATA/a/lj1.ctl' ;*打开经过ARWpost转换后WRF预报结果 只需要slp变量
i=1 while (i<8) ;*要搜索的dat文件中n个时刻的中心点 填写n+1 'set t ' i t=subwrd(result,4) ;*取得日期 result截取数据中第4个单词 tc=substr(t,6,7) ;*substr函数 变量 起始字符 字符长度 'd slp' ;*处理海平面气压变量 'definelocx=minloc(min(slp,lat=10,lat=20),lon=115,lon=140)' ;*搜索最低气压经度 可调节 'definelocy=minloc(min(slp,lon=115,lon=140),lat=10,lat=20)' ;*搜索最低气压纬度 可调节 'd locx' locxx=subwrd(result,4) 'd locy' locyy=subwrd(result,4) 'q gr2w 'locxx' 'locyy ;*GRADS坐标转换成经纬度坐标 x0=subwrd(result,3) y0=subwrd(result,6)
*控制输出数据有几个小数位 实在麻烦 其实可以用excel作数据处理 *保留一位小数设置
x=math_format('%3.1f',x0)
y=math_format('%2.1f',y0)
rc=write('moni-w.txt',x ' 'y ' ' tc,append) ;*将经纬度位置和时间存入文件
i=i+1 ;*这里灵活运用 根据dat文件是多少小时的数据设置 endwhile
close('moni-w.txt') ;*关闭输出文件 '!cp moni-w.txt moni.txt' ;*在GS里同一个文件不能既读又写,所以做1个拷贝
下面是lj2.gs脚本的命令:
'reinit' ;*从上述数据文件读出位置绘制台风路径 'open /home/DATA/a/lj1.ctl' 'set grads off' 'set mproj latlon' 'set poli on' ;*画出国界省界线 'set mpdset hires' ;*设置高分辨率地图
*定义设置排版要求 'set lon 105 145' ;*太宽纵坐标显示缺部分 'set lat 0 30' 'set cmax 0' ;*把显示最大值设小,是为了只出底图 'set xlint 5' ;*定义横坐标的标记间隔 'set ylint 5' ;*定义纵坐标的标记间隔 'set xlopts 1 4 0.15' ;*横坐标 颜色 线宽 大小 'set ylopts 1 4 0.15' ;*纵坐标 颜色 线宽 大小 'set clopts -1 -1 0.08' ;*等值线 颜色 线宽 标记大小 'd slp' ;*作出底图用
*开始画出模拟数据路径
'set string 2 bl 1 60' ;*设置字符串颜色 位置 粗细 旋转角度 'set strsiz 0.06 0.06' ;*时间标注的线宽 大小 'set line 2 1 0.1' ;*设置线条类型红色 实线 粗细 *使用以上定义,基本符合排版图约5*7CM大小时图中标注约为6号字大小
i=1 while(i<=15) ;*文件内容n行之内 read_file=read('moni.txt')
read_code=sublin(read_file,1) ;*读取文件打开代码 if(read_code>0); break; endif ;*读取正常为0,其他要么出错,要么结束
xbefore=x0 ybefore=y0
read_line=sublin(read_file,2) ;*读取文件行内容 lon0=subwrd(read_line,1) ;*取得第1部分 经度 lat0=subwrd(read_line,2) ;*取得第2部分 纬度 date0=subwrd(read_line,3) ;*取得第3部分 时间 'q w2xy ' lon0 ' ' lat0 ;*将经纬度坐标转换为GRADS坐标 x0=subwrd(result,3) ;*取得转换后的X坐标 y0=subwrd(result,6) ;*取得转换后的Y坐标 'draw mark 3 'x0' 'y0' 0.1' ;*作出各个坐标点
if(i>1) ;*第一个点作为起始点 'draw line 'xbefore' 'ybefore' 'x0''y0'' ; endif ;
'draw string 'x0+0.1' 'y0+0.1' 'date0'('lat0','lon0')' ;*标注点的坐标和信息
*if(math_mod(i,2));'draw string 'x0-0.1''y0+0.2' 'date0'';endif;
i=i+1 endwhile
*画出图样和注释 'draw mark 3 1 0.3 0.1' ;*第一个点 'draw mark 3 1.5 0.3 0.1' ;*第二个点 'draw line 1 0.3 1.5 0.3' ;*两点连线 'set font 2' ;*选择字形库 0到5 'set string 2 c 2 0' ;*设置字符串颜色 位置 粗细 旋转角度 'set strsiz 0.11 0.15' ;*设置字符串的水平大小和高度大小 'draw string 2.25 0.3 Analog track' ;*设置脚下标
*开始画出实况数据路径
'set string 4 br 1 60' ;*设置字符串颜色 位置 粗细 旋转角度 'set strsiz 0.06 0.06' ;*时间标注的线宽 大小 'set line 4 3 0.1' ;*设置线条类型蓝色 短虚线 粗细 *使用以上定义,基本符合排版图约5*7CM大小时图中标注约为6号字大小
i=1 while(i<=15) ;*文件内容n行之内 read_file=read('shikuang.txt')
read_code=sublin(read_file,1) ;*读取文件打开代码 if(read_code>0); break; endif ;*读取正常为0,其他要么出错,要么结束
xbefore=x0 ybefore=y0
read_line=sublin(read_file,2) ;*读取文件行内容 lon0=subwrd(read_line,1) ;*取得第1部分 经度 lat0=subwrd(read_line,2) ;*取得第2部分 纬度 date0=subwrd(read_line,3) ;*取得第3部分 时间 'q w2xy ' lon0 ' ' lat0 ;*将经纬度坐标转换为GRADS坐标 x0=subwrd(result,3) ;*取得转换后的X坐标 y0=subwrd(result,6) ;*取得转换后的Y坐标 'draw mark 3 'x0' 'y0' 0.1' ;*作出各个坐标点
if(i>1) ;*第一个点作为起始点 'draw line 'xbefore' 'ybefore' 'x0''y0'' ; endif ;
'draw string 'x0-0.1' 'y0-0.1' 'date0'('lat0','lon0')' ;*标注点的坐标和信息
*if(math_mod(i,2));'draw string 'x0-0.1''y0+0.2' 'date0'';endif;
i=i+1 endwhile
*画出图样和注释 'draw mark 3 5 0.3 0.1' ;*第一个点 'draw mark 3 5.5 0.3 0.1' ;*第二个点 'draw line 5 0.3 5.5 0.3' ;*两点连线 'set font 2' ;*选择字形库 0到5 'set string 4 c 2 0' ;*设置字符串颜色 位置 粗细 旋转角度 'set strsiz 0.11 0.15' ;*设置字符串的水平大小和高度大小 'draw string 6.25 0.3 Sence track' ;*设置脚下标
*设置标题,标注等 'set string 1 c 2 0' ;*设置字符串颜色 位置 粗细 旋转角度 'set font 2' ;*选择字形库 0到5 'set strsiz 0.11 0.15' ;*设置字符串的水平大小和高度大小 'draw string 9.8 0.3 2015-05-23ljh110011' ;*设置脚下标 'set strsiz 0.3 0.6' ;*设置字符串的水平大小和高度大小 'draw title 2013-08-09~2013-08-16\TyphoonUtor Track' ;*在图片顶部写字符串作为标题 'printim /home/DATA/a/l3.png white' ;*图形输出
至此,gs脚本程序贴出完毕,希望各位多多支持和指正,谢谢。
|