system: [SYSTEM]

user: 5. 系统功能 5.1. ETL功能 ETL分别是“Extract”、“Transform”、“Load”三个单词的首字母缩写也就是“抽取”、“转换”、“装载”，但我们日常往往简称其为数据抽取。ETL是BI/DW(商务智能/数据仓库)的至关重要的一步，按照不同的业务规则提炼并提升数据的价值，完成数据源向目标数据仓库的转化，是搭建数据仓库的关键。 图6说明了气象及大气污染数据库ETL流程。 由于气象及大气污染数据来源广泛、种类繁多、数据量庞大、数据格式不一、无效值空值较多，所以本系统并没有采用Informatics等ETL工具，利用了更为灵活多变的方法，比如本系统对于气象及大气污染数据文件和气象及大气污染信息网站的ETL过程主要由Java语言实现，而气象及大气污染数据库的ETL过程主要由PL/SQL和Java实现。具体来说，对于txt文本类型的气象及大气污染数据文件主要利用Java的BufferedReader类来完成，excel文件类型的气象及大气污染数据库文件主要利用Java的POI 3.13 [ 5 ] 组件来处理，而气象及大气污染信息网站上的信息主要通过Java的Jsoup 1.8.3 [ 6 ] 组件来进行抓取；对于其他气象及大气污染数据库中的气象及大气污染数据，如果同样是ORACLE数据库并且能建立dblink无疑是最快的方式，如果不能建立dblink的话，expdp、impdp和SQL脚本的导入导出都是可用的方法，如果是不同的数据库sql脚本的导入导出是最常用的方法，以上过程就是Extract过程。气象及大气污染数据文件和气象及大气污染信息网站得到的数据在项目中将会以数组的方式呈现，而对于其他气象及大气污染数据库中得到的气象及大气污染数据在项目中将会以expdp文件和SQL脚本的方式呈现，这一转换过程称之为Transform。以数组方式呈现的数据由Java调用ORACLE数据库中的存储过程并传递数组到PL/SQL运行环境中，传入到存储过程中的数组在PL/SQL运行环境中利用forall语法执行整体大批量插入，不用在PL/SQL运行环境和SQL运行环境之间进行来回切换，而且自动使用绑定变量，比for语 图6. 气象及大气污染数据ETL流程图 法遍历执行insert语句的速度快10倍以上，大大提高Load效率；而对于dblink的方式用create table t1_name as select * from t2_name@dblink_name即可，方便快捷，那么expdp文件和SQL脚本在SQLPLUS下面运行impdp命令和执行SQL脚本即可，这一过程称之为Load。 针对于遥感数据、卫星云图、数据预报产品等二进制大文件类型的数据，从硬件层面进行数据迁移无疑是效率最高的方式。 5.2. 相似分析 ETL过程中对空值的处理尤为重要，本系统对空值的处理方法就是利用相似分析。 以空气污染数据为例，进行相似分析，并将相似分析整合到系统中去。在空气环境自动站检测过程中，由于仪器故障、系统故障、操作失误、停电等各种各样的原因，数据的缺失是一个长时间以来一直存在的问题。 假设样本的x因子和y因子分别可以用平面直角坐标系的x轴和y轴完全表示，那么一个样本集合在该坐标系中就可以以一条样本曲线的方式呈现，很明显，如果将两条曲线进行比较，影响这两条曲线相似度的不仅仅是两条曲线的相近程度(值相似)，还有两条曲线的形似程度(形相似) [ 7 ] 。 空气污染检测系统通常都是一天24个时次，每小时产生一个值，这样的话，如果数据完整，我们就可以把一天24个值放在直角坐标系中，描绘成一条曲线，即污染数据日曲线。查找最近几年完整的日污染数据，提炼出样本，组成样本集合。若某一天的空气污染数据有k个缺测值，那么由余下的24-k个值也可以绘制成一条曲线，根据相似分析原理，可以在样本集合中找出一个完整的样本，其日变化曲线与缺测曲线相应部分形状类似并且贴近，那么该完整样本的值可以代替缺测的值。 本系统利用已有完整数据样本，利用Java语言实现了相似分析，利用相似离度 [ 8 ] 对缺测值进行合理的插值。图7显示的是南京在2014年11月02号的Line Chart，红色是AQI，蓝色是PM2.5，绿色是PM10，横坐标是一天24小时，纵坐标是污染物浓度的大小范围。其中，05时和14时的AQI、PM2.5和PM10等污染物的值因为某种原因缺测，所以值为零。在ETL过程中，利用相似分析完成对缺测值的插值，如图8，可以看到缺失数据拟合状况良好，能够反应出当天的空气污染变化趋势。 图7. 插补之前空气污染数据线状图 图8. 插补之后空气污染数据线状图 5.3. WebGIS展示 本系统将OpenLayer的OSM矢量图层地图作为地图底图，包括行政区划、河流、水库等要素，将气象站点作为专题图层来进行显示。输入网址到浏览器中，登录后就可以直接访问该系统。实现的功能主要有全国空气污染站点展示、空气污染详细信息展示、平均值和极值的求解、空气污染信息图表展示、气象信息图表展示、气象信息分析结果展示和等值线的实现等。系统实现的难点是如何使地图的空间数据和某种气象业务数据关联起来。也就是说，在地图上选择站点和须查询的气象数据类别，通过空间数据库得到站点号，然后通过站点号和类别在业务数据库中选择相应的数据 [ 9 ] 。 本系统的前台显示主要利用OpenLayer框架，采用OpenLayers作为客户端不存在浏览器依赖性。由于OpenLayers采用JavaScript语言实现，而应用于Web浏览器中的DOM(文档对象模型)由JavaScript实现，同时，Web浏览器(比如IE，FF等)都支持DOM。OpenLayersAPIs采用动态类型脚本语言JavaScript编写，实现了类似与Ajax功能的无刷新更新页面，能够带给用户丰富的桌面体验(它本身就有一个Ajax类，用于实现Ajax功能)。目前，OpenLayers所能够支持的Format有：XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS、WKT(Well-KnownText)。在OpenLayers.Format名称空间下的各个类里，实现了具体读写这些Format的解析器。 地图的操作包括放大、缩小、漫游和复位等，放大可以通过鼠标双击、滚轮、点击放大控件来实现，缩小可以通过滚轮和点击缩小控件来实现，漫游可以通过鼠标拖动来实现，复位可以通过点击复位按钮实现。 以带有经纬度坐标的大气污染数据为例，空气污染信息显示主要包括在地图上显示站点的位置和污染数据信息，站点图标大小根据AQI的大小分为五个不同等级(0~100、100~200、200~300、300~400、400~无穷大)，可参考图例；站点经纬度坐标根据服务器端通过查询数据库中的经纬度表获得，图9显示的是2014年8月1号10点的全国气象站点的图标位置，点击其中一图标后，比如北京市的图标，显示出北京市的污染数据信息(北京污染程度：五级AQI：204 PM2.5：153 PM10：161 CO：1.508 SO 2 ：4 NO 2 ：50 O 3 臭氧一 图9. 空气污染站点信息显示情况和操作界面 小时平均：24 O 3 臭氧8小时平均：41)，在显示出全国空气污染情况之后，还可以看到该时刻AQI极大值城市为邯郸，AQI为249.0，AQI极小值城市为太仓，AQI为11.0，所有城市今日平均AQI为：67.52。用户可以输入时间，来查看不同时期的空气污染数据。用户还可以点击跳转到图表页面的按钮(在选中某一城市后才会显示出该按钮)，图表有线状图，表示的是当天00点到23点AQI、PM2.5和PM10的波动情况。 同样的，带有经纬度坐标的气象数据和等值线可以以同样的原理展示的WebGIS地图上，只不过是前端框架OpenLayers搭载的数据不同。