3 风玫瑰图的算法实现
通过分析上一节中对风玫瑰图的气象学定义和对风向平均和相对风向的平均风速的参数化表达式,我们就可以设计算法,对风玫瑰图的绘制功能加以实现。风玫瑰图的算法实现必须具备以下几个功能:1)实时风速风向数据采集,历史数据获取;2)自动将实时采集的各个风向(0 ~ 360°的实数)统计到16 个风向上;3)能够检查风向异常值并将之剔除,以免影响风玫瑰图的绘制;4)能按照统计出的风向频率和平均风速的取值范围动态的调整极坐标系的取值,自适应的绘制出风玫瑰图。所涉及的工作包括:1)选择合适的数据源获得实时的和历史的风速风向观测数据并设计合理的数据库表结构保存风速风向数据,可以方便地通过读库操作进行风向统计;2)实现可以进行异常值处理的风向频率和平均风速计算;3)实现坐标自适应的极坐标作图。
3.1 数据源和库表结构设计
参考气象学的统计实践,风玫瑰图的统计时间跨度通常最短为1 个月,常至1 年乃至数年。如果时间跨度过短,统计结果不具有规律性,数据没有实用价值。而跨度10 年以上的统计结果通常只作为分析气候变迁规律时使用。一旦确定了时间跨度,则采样频率即多长一段时间采样一次风速风向值参与计算成为另一个重要的参考量。单位时间内,获得的样本数越多,也就是采样空间越密,统计结果通常会更有意义。
自动气象站是由电子设备或计算机控制的自动进行气象观测和资料收集传输的气象站组成,按照现在工艺水平,广泛分布在我国各个地区的自动气象站可以按照10 ~ 15 分钟为时间间隔,定时采集发送其所观测到的气象六要素(温、湿、雨、压、风速、风向)数据。按照这个采样频率,月风玫瑰图可以获得平均4320 个样本点,基本满足统计计算的需要。因此自动气象站的数据可以作为风玫瑰图的有效数据源。
为了计算平均风速和风向频率,数据库表结构中至少需要包含时标,风速,风向3 个字段。对应月玫瑰图,可以直接取自动气象站保存在数据库中的原始采样数据。原始采样数据通常包含采样时刻的瞬时值和10 分钟、15 分钟的平均值,为了统计需要我们通常选择平均值作为源数据。对应年或者数年玫瑰图,为了方便地去除不合理结果和减少运算时间,可以对自动气象站的10 分钟平均值结果进行数据整编,首先获得按小时或者日平均风速、风向的整编统计结果,然后再进行统计计算。
3.2 风向频率和平均风速计算与风玫瑰图绘制
风向频率和平均风速计算的算法主要包含以下步骤:1)按照从数据库表中获得的10 分钟(15 分钟)平均风向d,通过取整计算将它归纳到16 个统计风向上(对任意风向d,如果0 ≤ d<22.5, 则将它统计到0°统计风向上,如果22.5 ≤ d<45,则将它统计到22.5°风向上,依次类推。);2)祛除d<0 和d/22.5>15 的不合理点;3)统计各个统计风向上风出现的次数,按照上节中描述的风向频率计算公式计算出风频值和其对应的统计风向n 一起保存在极坐标系二元组数据结构中,其中n 作为极坐标系中的极角,而作为极径;4)统计出各个统计风向上风速取值,按照上节中描述的平均风速计算公式计算平均风速和对应统计风向n 一起保存在极坐标系二元组数据结构中,其中n 作为极坐标系中的极角, 作为极径。
在分布式信息系统环境中,我们在实践中选择了java 作为主要开发平台,基于java 的JFreeChart,是科学图表的最好解决方案之一,成为一个可以实现的选择。它的java 包可以支持绘制饼图、曲线图、直方图、雷达图等等种类丰富的科学图形。其中雷达图支持用户以极坐标形式输入一个或多个参数序列,自动进行坐标自适应,绘制并以图片形式输出极坐标下的折线图。如果将风向频率和平均风速的统计计算结果作为参数序列输入到JFreeChart 的雷达图模块,则可以很方便的绘制出符合定义要求的风玫瑰图。图1 中展示了在西北某个地区2010 年3 月全月的风速玫瑰图,它被集成在该地区的电力气象信息系统中。