技术总结
WebGIS雏形探讨和实践
hugos-疯狂老鼠
概要: 本论文针对如何在Internet上实现GIS电子地图浏览进行了有益的探讨,提出了设计思路和方法,并且最终完成了一个简易的WebGIS的雏形框架。
关键字:WebGIS GIS 电子地图 Java Applet CGI
1. 概述
WebGIS是一门新兴的技术。它的主要目的就是面向Internet用户,在用户无需安装专用客户端软件的情况下,为用户提供地图的浏览、查询等常规GIS功能。国际互联网已经在全世界范围内获得了迅猛的发展。通过浏览器和HTTP服务器,我们可以获取各种各样的信息。但是迄今为止,尚无一种流行的浏览器(包括Internet Explorer和Netscape Navigator)能够直接支持地图的显示和查询功能。然而通过WebGIS就可以在现有的情况下,让我们利用浏览器实现网上的地图浏览和查询。
本论文采用地图服务组件、CGI(公共网关界面)和JavaApplet技术实现了一个WebGIS的雏形框架。
该框架的开发和运行环境是:
操作系统: Microsoft Windows2000 Server
HTTP服务器:Apache1.3.14 Win32版
CGI开发工具:Visual C++
地图服务组件开发工具:Visual C++
浏览器: Internet Explorer,Java2 Runtime Environment
Applet开发工具:JDK1.3.1
2. WebGIS工作原理
WebGIS的系统结构框图如下:
系统工作流程和原理如下:
Internet用户启动浏览器,打开HTTP服务器上的网页。该网页包含Java applet。 Applet为用户提供地图操作功能和地图显示功能。用户每操作一次地图(包括放大、缩小、拖动),applet将向服务器上的CGI提交一次请求。CGI在收到请求后,自动调用地图组件。地图组件根据该请求的参数,自动生成一个JPG图片文件。然后CGI把该图片文件的URL地址发送到用户端的Applet。 Applet则把新的地图在浏览器中显示出来。这样用户就可以看到相应的地图视图。
综上所述,本系统运行的三个核心部件是地图服务组件、CGI程序和Applet。下面的章节将对这三个关键部件做更详细的说明。
3. 地图服务组件设计
地图服务组件包括两个dll(动态连接库)文件:MapEngine.dll和PicEngine.dll。它们分别提供以下功能:
4. CGI设计
CGI(Common Gateway Inferface)程序的主要作用是在服务器端运行,收集用户端发来的数据,然后根据这些数据产生相应的html页面发送给用户端的浏览器。CGI是用来为网站实现动态页面的方法之一。
在本系统中,CGI主程序是MyCGI.cgi . 该程序的工作原理流程图如下:
5. Applet设计
本系统有两个applets小程序组成:JAppToolsBar.class和JAppMapArea.class.下面是它们的结构描述表格。限于篇幅,applets各个方法的实现细节这里就不介绍了。
JAppToolsBar
成员或者方法 描述
javax.swing.ButtonGroup RadioGroup1
javax.swing.JRadioButton jRadioDrag
javax.swing.JRadioButton jRadioZoomIn
javax.swing.JRadioButton jRadioZoomOut
javax.swing.JRadioButton jRadioViewAll 单选按钮用于用户选择不同的地图操作方式:放大、缩小、拖动和察看全图
Cursor cursorZoomIn
Cursor cursorZoomOut
Cursor cursorDrag 用于设置JAppMapArea的光标:放大光标,缩小光标,拖动光标
JApplet mapJApplet JAppMapArea的引用
Init 作必要的初始化工作,调入光标
InitComponent 设置布局layout,添加事件处理映射函数
jRadioViewAllMouseClicked 使JAppMapArea显示全图
jRadioZoomInStateChanged 设置地图的操作方式是“放大”
jRadioZoomOutStateChanged 设置地图的操作方式是“缩小”
jRadioDragStateChanged 设置地图的操作方式是“拖动”
JAppMapArea
成员或者方法 描述
double Factor, Amount, X, Y 视图参数
String strJPG 存储MyCGI.cgi传回的jpg文件的URL
Image imageMap 指向jpg文件
String strHTML 存储MyCGI.cgi输出的html文件
Int W, H 地图的尺寸
int SelectedTools 地图操作方式
JApplet toolsbarJApplet JAppToolsBar的引用
boolean MouseDown 标志鼠标是否按下
boolean MouseDrag 标志鼠标是否正在拖动
Point oldPoint 鼠标按下的第一点
Point oldPointDrag 鼠标拖动的第一点
Rectangle oldRect 鼠标拖动矩形
Init 作必要的初始化工作
InitComponent 设置布局layout,添加事件处理映射函数
paint 小程序绘制函数
formMouseDragged 鼠标拖动消息处理函数
formMouseReleased 鼠标按键释放消息处理函数
formMousePressed 鼠标按键按下消息处理函数
zoomFromRect 矩形放大和缩小
zoomFromPoint 单点放大缩小
zoomToViewAll 察看全图
DPtoLP_X
DPtoLP_Y 屏幕坐标转换到地图坐标
LPtoDP_X
LPtoDP_Y 地图坐标转换到屏幕坐标
connectToServer 连接到服务器,提交4视图参数, 请求传回HTML数据流
getServerOutput 从服务器传回的HTML数据流中解析JPG文件路径和名字,解析4个视图参数
6. 系统配置及运行效果
系统运行前需要做好如下工作:
1. 配置Apache 服务器,设置CGI目录,允许CGI程序在该目录下可以执行。在本系统中该目录是主页所在目录下的cgi-bin子目录。
2. 把MapEngine.dll 和PicEngine.dll以及MyCGI.cgi程序拷贝到cgi-bin子目录下。
3. 在主页目录下新建一目录map, 把所有地图工程文件拷贝到该目录。
4. 新建一html文件,把两个applets插入到该文件。用jdk1.3.1附带的HtmlConverter工具,转换一下。把该html文件拷贝到主页目录下。在本系统中该文件名字是JAppHtml.html.
5. 把JAppToolsBar和JAppMapArea这两个Applets拷贝到主页目录下。
6. 到现在为止,已经大功告成了。需要提的一点是:用户端需要安装JRE,如果没有安装的话用户无法正确的察看该网页。JRE可以从Sun公司的网站上下载。
本系统的运行效果图如下:
用户第一次看到的效果图
经过几次放大后看到的效果图
7. 总结
当然,WebGIS本身的概念,范畴和功能是相当复杂的。实际上本论文实现的系统用“Web下的简易电子地图显示系统”来称呼它非常合适。因为它是WebGIS最原始的雏形,仅具备最基本的功能。但是,本系统毕竟为开发功能强大的WebGIS提供了一个可行的设计思想和设计方法。只要掌握了这种思路,要实现其他的功能和需求,都应该是触类旁通的。
另外,需要特别声明的是本系统目前还存在很多缺陷,没有任何实用价值。我设计这套系统是出于学习和实践的目的。其实就是想搞明白诸如此类的问题:WebGIS到底是怎么实现的?它需要哪些方面的技术支持?它的整个运行流程是怎样的?如果有可能,能否把它的技术应用到工程项目中去?当然了,它的优点是不容置疑的,这我就不多讲了。
最后,我要指出本系统最严重的缺陷是什么。最严重的缺陷就在服务器端那个CGI程序。用户每提交一次请求,那个CGI程序都要执行一次调入地图工程和关闭地图工程操作。这是非常耗时的。由于时间有限,没来得及改善。不过,解决方法已经有了。那就是伟大的COM技术。设计一个基于Windows NT服务(Service)的进程外COM服务器可以彻底解决这个缺陷。希望我能抽时间尽快解决这个问题。