陈希球,周 波
(1.长江工程职业技术学院,武汉 430212;2.长江水利委员会水文局,武汉 430010)
众所周知,Google Map API是Google公司为开发者提供的Maps编程API。它允许开发者在不必建立自己的地图服务器的情况下,将Google Maps地图数据嵌入到网页中,从而实现嵌入Google Maps的地图服务应用,并借助Google Maps的地图数据为用户提供位置服务[1]。大部分情况下,利用Google Map API通常用于构建 Web应用程序,在Windows桌面应用程序中鲜有使用。近期,笔者在开发某个Windows应用程序中需实现轻量级桌面GIS功能,考虑到Google Map API的易用性、稳健性,遂采用其进行桌面GIS程序的开发。
某省水文局需利用比降面积法实现各水文站的流量自动计算,并对其计算结果进行实时显示,具体功能如下:
(1)自动检索数据库中最新的上、中、下比降断面水尺水位;
(2)根据上、中、下比降断面水位数据,自动优选水力学公式进行流量计算;
(3)在桌面应用中开发地图展示功能,并在地图上显示各水文站采集的最新水位、流量等信息。
前面两项功能为具体的流量计算过程,本文不进行详细展开,本文仅针对第三个需求进行探究。
根据上述需求分析,利用C#2010.Net开发WinForm应用程序,使用WebBrowser控件显示静态HTML网页,在网页中利用JavaScript语言调用Google Map API实现地图的显示。在WinForm应用程序通过.Net Framework调用Html Element对象实现信息的交互,达到实时显示水位、流量等信息的效果。
根据上述技术路线,进行了软件的设计,其总体架构见图1。主要包括Google Map服务、HTML静态网页、Web-Browser控件及WinForm应用界面等逻辑部件。各部分的主要功能为:
(1)Google Map服务:由Google公司提供,用户可利用JavaScript编写代码API函数,访问Google Map,生成各类地图,常用的地图有4类[2]:
①google.maps.Map TypeId.HYBRID:显示卫星图像的主要街道透明层;
②google.maps.Map TypeId.ROADMAP:显示普通的街道地图;
③google.maps.Map TypeId.SATELLITE:显示卫星图像;
④google.maps.Map TypeId.TERRAIN:显示带有自然特征(如地形和植被)的地图。
(2)HTML静态网页:需要用户利用 HTML标记语言编写,在该文件中编写JavaScript语句,访问Google Map API。
(3)WebBrowser控件:用于在桌面应用程序中显示HTML静态网页。
(4)WinForm应用界面:用于动态产生各水文站水位、流量实时信息,控制 WebBrowser控件进行信息的实时更新。
图1 软件总体架构图
(1)HTML脚本编写
①全局对象
为了实现信息的动态更新,利用JavaScript编写全局对象,主要包括用于地图显示的google.maps.Map对象、用于在地图上标志水文站地理位置的google.maps.Marker对象、用于在地图上实时显示水位、流量信息的google.maps.InfoWindow对象及自定义的包括水文站各类信息的Station对象。由于有多个水文站需实时显示水位、流量信息,因此需将上述各个全局对象(除了地图对象map以外)声明为全局数组。如下所示:
表1 Station类字段说明
②信息获取
新建名为myform的窗口,并在窗口中新建msg的文本框对象,用于从外部程序获取水位、流量信息,HTML代码如下:
上述代码中通过“html Msg=this.webBrowser1.Docu-ment.Get ElementById("msg")”语句获取 HTML文件中名为myfrom的窗体中的msg文本框对象,并通过“html Msg.Inner Text=str Line”语句将需要实时显示的str Line信息赋值给msg文本框对象。
同时,HTML文件中,在Timer事件的处理函数fn中定时访问msg文本框的内容,并对其进行解析,更新infoW-indow数组的显示窗口。
软件运行界面见图2。从图可见,在地图上根据提供的经纬度信息动态生成了水文站点的标志,并在其上方显示了最近时刻的水位、流量信息。当WinForm程序动态改变了msg文本框对象的内容时,HTML网页会自动更新各信息显示窗口。由于采用了事件驱动的设计原理,整个HTML文件无需重新进行加载或刷新,即可实现信息的自动更新,运行稳定可靠,效率较高。
图2 软件运行界面图
本文以开发一个简单的水文站实时信息展示软件为实例,旨在提供一种技术思路和模式,供读者参考。读者可利用Google Map众多的API函数构建各种功能强大的Windows桌面GIS应用软件。GIS应用可通过Google Map提供的免费功能实现,用户只需将主要精力放在WinForm程序开发和HTML文件的编制中,而无需考虑GIS功能的具体实现。同时也无需购置专业的GIS软件,一方面节约了投资,另一方面也提高了工作效率和降低了程序的维护难度,具有较好的参考价值。