赵奎锋
(1.陕西省气象局秦岭和黄土高原生态环境气象重点实验室,西安 710016;2.陕西省气象科学研究所,西安 710016)
气象实况观测数据是站点离散数据,在气象预报服务和科研工作中,常常用到科学绘图技术对这些离散数据进行分析,勾画气象要素面上的分布情况,以便直观地呈现其分布特点。实际业务中,经常使用的科学绘图软件有Golden Surfer、NCL(the NCAR command language)、GrADS(grid analysis and display system,格点分析和显示系统)等[1-4],其中GrADS 是当今气象学科中广泛使用的数据处理和显示软件系统,可读取格点或站点气象资料(二进制或GRIB 码格式),并进行加工处理。可实现等值线、流线、填图、地图、曲线等多种图形显示。随着网络技术的发展,基于WEB技术的在线资料共享方式受到欢迎,但是多数共享采用的是资料后台处理成图表后的静态共享,较少采用网络在线交互出图。OpenGrADS是基于GrADS的扩展,提供CGI(common gate interface,公共网关接口)接口,支持WEB环境下的交互出图。本文介绍结合Python软件利用OpenGrADS进行观测数据在线交互绘图的技术及应用。
Python是一种解释脚本语言,类似 VBScript、JavaScript、Perl等脚本语言。如图1所示,Python的CGI编程,是利用WEB服务器和一个Python自定义的脚本之间交换信息。通过设立的HTTP服务器,在某个目录中的文件被请求作为一个程序执行,并将结果发送到浏览器来显示。这个函数被调用的通用网关接口或CGI程序称为CGI脚本[5-6]。
图1 Python CGI架构图
IIS(Internet information services,互联网信息服务)常常用来搭建WEB运行环境。对于一些简单的通用网关接口脚本,IIS使用windows scripting host来解析VBScript 和 JavaScript,而对于Python的CGI脚本语言,IIS使用配置的Python脚本解释程序来解析,其配置需要在IIS管理器中将扩展名为“.py”的程序映射到Python安装目录的执行程序,并赋予“全部动作”执行的权限即可。通过配置,给IIS运行python CGI程序搭建了运行环境。
OpenGrADS是一个致力于改进GrADS的界面和扩展性的项目。它通过改进用户定义命令和自定义功能,允许用户添加自己的动态链接插件,引入了PHP、Perl和Python等脚本语言,使其可以基于GrADS发展更多的扩展,并且十分方便地与WEB结合,应用于网络交互界面[7]。
从1.9 rc1版本开始,OpenGrADS增加了一项功能,即实现了对GIS的Shape地图文件的支持,通过调用Shape格式的地理信息数据库的数据非常简便地绘制出地图底图[8]。
服务器端存储了自动气象站、区域站的观测数据。由于设备故障或其他因素,可能存在一些奇异数据,尤其以区域站的奇异数据最多;因此,在从CIMISS(China intergrated meteorological information service system,全国综合气象信息共享系统)中通过MUSIC(meteorological unified service interface community,气象数据统一服务接口)提取站点离散数据后,需加以修正之后才可以用来绘图。
这里用到Python CGI程序处理数据。如图2左侧所示,通过表单用户选取起止时间,服务器端利用CGI程序从CIMISS共享系统中提取该时段的自动站、区域站数据,在线交互修改、消除奇异值后,提交给数据处理分析程序,将其加工成GrADS所支持的格式。上述经修正的数据为文本格式,要通过转换格式处理为GrADS所支持二进制数据[9]。
图2 网络交互GrADS绘图流程
如图2所示,在Python CGI程序中导入OpenGrADS模块,代码如下:
import grads
from grads.gacore import GaCore
导入OpenGrADS模块后,添加如下代码以打开ctl描述文件:
ga('openaws_mask.ctl', Quiet=True, Block=True)
ga('openaws.ctl')
利用“ga”命令可以运行桌面版GrADS的gs脚本,从而设置x坐标轴、y坐标轴、色斑图颜色、等值线间隔、色标标注方式、地图底图等[10]。
值得一提的是,自从GrADS2.0.a8版本开始,GrADS引入了对SHP地图的支持,可以非常方便地自定义绘制地域范围,通过地理信息系统定义好地图之后,在绘图时调用即可,代码如下:
ga('set mpdraw off'') #关闭默认地图
ga('draw shp shaanxi)#绘制以shaanxi.shp命名的地图
还可以根据需要将河流的SHP地图文件叠加绘制到图形中。绘制完成后,将图形存于WEB服务器的目录下,并在浏览器中显示,代码如下:
ga('printimaws.png x1000 y773 white')
在业务应用中,通过动态WEB页面的交互,可以提供多个选项以便绘制出符合业务服务需求的标准图形。如:起止时间段、数据类型(国家自动气象站、区域气象站或者两者混合输出)、色标类型(是否采用中国气象局规定的色标)、绘制地图的区域(全国或某省某市范围)、插值的分辨率、叠加的地图(地质灾害易发区、河流、交通信息等)。这些选择通过WEB以表单形式选择。由于GrADS对中文的支持不足,可以通过Python丰富的图形处理插件对图形进行后期处理,如标注图形名称、时间区间、数量单位等信息,减少了业务人员后期处理的工作量。
(1)交互环境下的快速实时绘图是气象业务服务不可或缺的技术,在交互环境下选择绘图起止时间段、行政区域、分辨率参数,叠加河流和地质灾害易发区等地理信息,业务人员还可以对奇异数据进行订正,能绘制出反映天气情况的真实图形。
(2)利用Python语言的扩展性和丰富的插件,便捷地部署CGI交互环境,同时由于OpenGrADS具有Python扩展库,使得GrADS能部署于服务器端,从而能提供快速绘图的网络环境。
(3)GrADS2.0.a8版本开始引入了对SHP地图的支持,极大地方便了自定义行政区域范围的绘图,采用中国气象局规定的色标绘制符合标准的图形,通过Python丰富的图形处理插件对图形进行后期处理,减少了业务人员后期处理的工作量。