要生成.map文件,需要以下四步: (一)准备一个.ch文件,其中有需要的站点数据; (二)编写一个简单的程序把.ch中的数据写成二进制格式的.dat文件。(三)编写一个站点控制文件.ctl。(四)运行如下Grads命令:stnmap -i C:/Grads/rain.ctl,其中"C:/Grads/rain.ctl"指站点控制文件的路径及名称。

上面生成.map文件的例子在论坛中也有不少,大都是用fortran写的程序,也有少数用C写的。但是我自己写的到了第四步总是报错。我相信对刚学Grads而且非气象专业的人来说,也是常碰到的。可是对熟悉Grads的人来说可能这根本不算个问题吧,所有很少有人说,而且说到的说得也不够详细透彻。后来费了九牛二虎之力终于弄明白了。站点数据有非常严格的格式,格式是按如下规定的:

 站点资料采用二进制文件进行存储, 按每个时次一个报告的顺序直接记录各站资料, 每个时次的站点报告组又分成两部分: 地面报和高空报。站点报数据的排放顺序为:
  ① 提供站点经纬度的头记录
  ② 地面报变量
  ③ 高空报变量
  ④ 一个时次完成后加上一个特殊头记录 (没有数据组) , 表示本时次数据报结束。
      头记录共占28 个字节, 包括:
     STA T: 站点标识, 字符型 (st r ing 或char) , 占8个字节; 其赋值可以是任意数字, 也可以是字母。
     RLON: 经度, 单精度型 (single) , 占4 个字节。
     RLA T: 纬度, 单精度型 (single) , 占4 个字节。
     T I M : 本报的时次, 单精度型(single) , 占4 个字节,
     NL EV: 头记录后的数据组数, 单精度型 (single) ,占 4 个字节, 包括一个地面报组加上各高度层数, 取0 时标志一个时次报文的结束。
     N FLA G: 单精度型 (single) , 占4 个字节。取0 表示头记录的报文中没有地面变量, 取1 时则有。
  在头记录之后, 顺序记录本时次的各报文, 首先写入地面变量, 然后是高空变量。当本时次的所有报告写完后, 写出一个特别记录, 该记录没有数据组数, 以表明一个时间组的结束, 然后是下一时次记录。

不仅要求数据顺序,而且每个字段所占字节数都是固定的,所有不知道而任写很容易出错。.ch文件中的数据格式也要用空格和换行符严格控制,所有最好用UIEditor等编辑器来编辑。下面是我所使用的营口气象站的雨量数据:

L6001  40.674  122.328 144.0
 L6002  40.829  122.175 105.0
 L6016  40.530  122.621  44.0
 L6017  40.568  122.684  63.0
 L6019  40.481  122.864  32.0
 L6003  40.850  122.277 129.0
 L6004  40.861  122.434 124.0
 L6005  40.780  122.385 126.0
 L6006  40.690  122.561  96.0
 L6015  40.528  122.462  74.0
 L6020  40.493  122.796  38.0
 L6010  40.634  122.391 123.0
 L6000  40.674  122.273 126.0
 L6007  40.686  122.380 123.0
 L6009  40.596  122.266 138.0
 L6036  40.432  122.610  40.0
 L6011  40.599  122.516  75.0
 L6021  40.397  122.875  49.0
 L6082  40.184  122.018  50.0
 L6053  40.108  122.002  50.0
 L6047  40.139  122.187  51.0
 L6038  40.338  122.393  40.0
 L6042  40.217  122.144  82.0
 L6012  40.577  122.476 144.0
 L6008  40.338  122.526 101.0
 L6032  40.383  122.504  46.0
 L6041  40.256  122.734  68.0
 L6045  40.211  122.519  91.0
 L6046  40174   122.706  27.0
 L6050  40.095  122.109  50.0
 L6030  40.493  122.427  76.0
 L6031  40.416  122.655  82.0
 L6033  40.396  122.724  37.0
 L6034  40.343  122.236  97.0
 L6035  40.433  122.472  37.0
 L6044  40.243  122.439  86.0
 L6048  40.231  122.249  60.0
 L6049  40.134  122.545  94.0
 L6051  40.063  122.493 104.0
 L6052  40.101  122.248  48.0
 L6037  40.263  122.124  83.0
 L6040  40.269  122.186  70.0
 L6083  40.399  122.209 129.0

生成rain.dat文件的fortran代码如下:

program YKRain parameter (st=43) ! st means nums of station character stid(st)*8 integer nflag,nlev real std(st),tim real lat(st),lon(st) open(30,file='D:/YK/rain.ch') open(40,file='D:/YK/rain.dat',form='binary') do i=1,st read(30,'(a8,f8.3,f8.3,f7.1)')stid(i),lat(i),lon(i),std(i) write(*,*)stid(i),lat(i),lon(i),std(i) end do close(30) tim=0.0 nflag=1 nlev=1 do i=1,st write(40)stid(i),lat(i),lon(i),tim,nlev,nflag,std(i) end do nlev=0 write(40)stid(43),lat(43),lon(43),tim,nlev,nflag close(40) end

rain.ctl的文件如下:

dset D:/YK/rain.dat
                   dtype station
                   stnmap D:/YK/rain.map
                   undef -999.0
                   title rainfall
                   tdef 1 linear jan2010 1mo
                  vars 1
                  srainval 0 999.9 rainfall
                  endvars

如果生成map文件错误,反复查找,看看是不是数据格式的问题,相信一定可以正确生成。

用Grads画等值线(二)------.map生成相关推荐

  1. Grads画等值线(一)-----心得感言

    之前研究了如何用surfer画等值线,总体来说还算不错,在实际项目中得到了应用.但是在surfer等软件中使用的插值法都是纯数学差值法,在孤立点附近容易产生一些不合理区域.后来知道Grads中有在气象 ...

  2. surfer画等值线

    用了将近两周的时间来学习surfer画等值线,稍有点成果,拿来跟各位分享.做出的营口地图降雨量分布图: http://hi.csdn.net/cp.php?ac=album&op=editpi ...

  3. 【转】为了修复打码女神脸,他们提出二阶段生成对抗网络EdgeConnect

    当图像缺失部分太多的时候,结合多阶段方法和边缘先验信息,这个 GAN 实现了高还原度的图像修复,玩法还不止于此. 在过去几年中,深度学习技术在图像修复方面取得了显着进步.然而,许多这些技术无法重建合理 ...

  4. 集合 (二) ----- Map集合详解

    相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 Map集合详解 一.Map集合基 ...

  5. ROS系统MoveIt玩转双臂机器人系列(二)--生成MoveIt配置包

    ROS系统MoveIt玩转双臂机器人系列(二)--生成MoveIt配置包 注:本篇博文全部源码下载地址为:Git Repo. 1. 下载到本地后解压到当前文件夹然后运行:catkin_make 编译. ...

  6. Fortran进行t检验后使用GrADS画打点图

    前段时间写本科论文,使用到了对于海温sst差值场的显著性t检验,但苦于不会用GrADS画打点图,网上也找不到画打点的.gs代码,5月1放假自己在楼里硬憋出来一段代码,供大家参考,实测可以运行,输入数据 ...

  7. OpenCV C++案例实战二《生成蒙太奇图像》

    OpenCV C++案例实战二<生成蒙太奇图像> 前言 一.输入模板图像 二.读取素材图像 三.生成蒙太奇模板 四.生成蒙太奇图像 五.源码 总结 前言 本文将使用OpenCV C++ 生 ...

  8. k8s自定义controller三部曲之二:自动生成代码

    本文是<k8s自定义controller三部曲>的第二篇,上一篇我们在k8s环境注册了API对象Student,此时如果创建Student对象就会在etcd保存该对象信息: 三部曲所有文章 ...

  9. 运用canvas将两张图片画在一起,生成一张新的图片,然后实现点击下载图片

    运用canvas将两张图片img1,img2画在一起,生成一张新的图片img3,然后实现点击下载图片img3 代码如下: <!DOCTYPE html> <html lang=&qu ...

最新文章

  1. VOLTE parameter in Attach Request/Accept message
  2. Python实现:详解LRU缓存淘汰算法
  3. (19)Reactor Processors——响应式Spring的道法术器
  4. 福布斯2021年十大最佳人工智能硕士课程,清华、港大入选
  5. flink介绍:有界流和无界流
  6. Java的算法讲解以及案例!
  7. 基于Java NIO的Socket通信
  8. 气体管道管径及流量对照表_建筑用管道产品常见技术质量问答汇总
  9. 街景图像数据(UCF GoogleStreet View)
  10. VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
  11. 发动机压缩比怎么计算公式_发动机要多大的压缩比热效率才能达到达到60%?
  12. linux中支持gb18030的输入法,教程:智能的陈巧五笔输入法linux v1.1最新版本
  13. k8s-某视频课命令问题排查了解
  14. 捣乱姬使用说明 版本0.0.2
  15. Python 手把手教你爬取淘宝的笔记本电脑数据
  16. html怎么控制top值为0,关于vue滚动scrollTop 赋值一直为0问题
  17. 发现答案茶,真的不一样
  18. java 银联接口_银联支付接口整合开发(java)
  19. FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(三)
  20. 对于阿里云轻量应用服务器的介绍?它的优点?值得购买吗?

热门文章

  1. 新编C语言程序设计pdf
  2. 这个MT4指标代码哪里出问题了?
  3. MySQL事务隔离级别:可重复读、读已提交、读未提交。实操
  4. 『Halcon』基于Halcon的印刷图像质量检测系统
  5. python 教程之如何使用python中的四分位距统计数据查找数据中的异常值
  6. 华为快应用IDE:代码智能提示及自动补全
  7. gwb-crypto-1
  8. android备忘录教学_Android Studio-备忘录功能实现
  9. poi导出Excel之模板导出
  10. Android实现自定义字体