WebGIS雏形探讨和实践

    技术2022-05-11  120

    技术总结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 ServerHTTP服务器:Apache1.3.14 Win32版CGI开发工具:Visual C++地图服务组件开发工具:Visual C++浏览器:  Internet Explorer,Java2 Runtime EnvironmentApplet开发工具: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 RadioGroup1javax.swing.JRadioButton jRadioDragjavax.swing.JRadioButton jRadioZoomInjavax.swing.JRadioButton jRadioZoomOutjavax.swing.JRadioButton jRadioViewAll 单选按钮用于用户选择不同的地图操作方式:放大、缩小、拖动和察看全图Cursor cursorZoomInCursor cursorZoomOutCursor cursorDrag 用于设置JAppMapArea的光标:放大光标,缩小光标,拖动光标JApplet mapJApplet JAppMapArea的引用Init 作必要的初始化工作,调入光标InitComponent 设置布局layout,添加事件处理映射函数jRadioViewAllMouseClicked 使JAppMapArea显示全图jRadioZoomInStateChanged 设置地图的操作方式是“放大”jRadioZoomOutStateChanged 设置地图的操作方式是“缩小”jRadioDragStateChanged 设置地图的操作方式是“拖动”

    JAppMapArea成员或者方法 描述double Factor, Amount, X, Y 视图参数String strJPG 存储MyCGI.cgi传回的jpg文件的URLImage 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_XDPtoLP_Y 屏幕坐标转换到地图坐标LPtoDP_XLPtoDP_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服务器可以彻底解决这个缺陷。希望我能抽时间尽快解决这个问题。


    最新回复(0)