WebGIS雏形探讨与实践----疯狂老鼠原作

hugos 2001-12-21 12:10:17
这里无法显示图片。 感兴趣的同志到我的主页看看吧。 下面是无图片的内容:
***************************************************************


WebGIS雏形探讨和实践

by疯狂老鼠

http://go1.163.com/crazimouse

hugos@21cn.com



概要: 本论文针对如何在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。它们分别提供以下功能:


PicEngine.dll (输出类:JpegEngine)
JpegEngine接口
描述

JpegEngine(int W, int H)
JpegEngine构造函数;

用于指定输出jpg文件的尺寸

BOOL ExportJpegFile(HBITMAP hBitmap, LPSTR lpFileName)
输入位图句柄和指定的jpg文件名;

本函数把位图句柄的内容转换成jpg文件并且按照指定的文件名保存



MapEngine.dll(输出类:CHugoMapXCtrl)
CHugoMapXCtrl接口
描述

BOOL AddLayer(LPCTSTR filename)
添加一个图层文件到当前的地图工程

BOOL LoadMapWorkSpace(LPCTSTR filename)
调入指定的地图工程

void UnloadMapProject()
关闭当前打开的地图工程

HBITMAP Draw()
在内存中显示地图工程,返回位图句柄

void ConvertProjection(double &lat,double &lon)
地图坐标转换

double GetDistance(long x1, long y1, long x2, long y2)
输入经纬度,计算两点之间的距离

void ZoomIn()
放大地图(以屏幕中心为基准)

void ZoomOut()
缩小地图(以屏幕中心为基准)

void ZoomInFromPoint(long xc, long yc)
放大地图(以指定点为基准)

void ZoomOutFromPoint(long xc, long yc)
缩小地图(以指定点为基准)

void ZoomToRect(long x1, long y1, long x2, long y2)
放大或缩小指定的地图区域(框选)

void ZoomToAll()
显示地图工程的全景

void MoveMap(long dx, long dy)
平移地图

void CenterAt(double x, double y)
把地图的中心定位到指定的点

void SetDimension(int width, int height)
设置地图显示的尺寸

void ControlMap(double ZoomFactor, double ZoomAmount, double OffsetX, double OffsetY)
通过视图参数,控制地图工程的显示

void GetControlMap(double &factor,double &amount,double &x, double &y)
返回地图工程当前的视图参数

void ExportBitmapFile(LPSTR lpFileName)
把地图工程的显示内容转换成bmp文件并且按照指定的文件名保存

void ExportJpegFile(LPSTR lpFileName)
把地图工程的显示内容转换成jpg文件并且按照指定的文件名保存



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服务器可以彻底解决这个缺陷。希望我能抽时间尽快解决这个问题。

...全文
190 点赞 收藏 20
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xpwang 2002-01-29
支持
回复
hugos 2002-01-12
i hate gis
回复
Jady 2002-01-11
如果在客户端设计个ActiveX控件,服务器与客户端传递数据流而不是图片,是不是可以提高效率?而且可以实现客户端的图形编辑,而不是不可变的图片。而且如果是图片,如果定位图形中的地图元素?而且它的刷新效率是否良好?

--Jady
回复
gjd111686 2002-01-11
是否尝试用MapX控件,好象不用如此费劲吧,用JavaScript控制属性与方法就可以了.
回复
hugos 2001-12-25

####
##### ##### ## ######### ########## ########
## # ## ### ## ## ## ## #
## ### ## ####### ## ###### ## # ## # # #
# #### ## ### ### ##### ### # ## ##
# ## # ## ## ## ### ## # ## #######
## ## ## ## ########### ## # # ###### ## ###
#### ## # ## ## # ## # ## ## ## #
#### ### ## ### ## ## # ## ## ##
### ### #### ### ####### ### #### ### ########## #### ###
## ## ####### #### ###### ####### ########## #########
#




回复
hugos 2001-12-25
NNNNNN""NF"" (N . `"""""""""NN"""""" .NF 4"""""""""" """""""""""""NNNN ()
(N . (NNNNNNNNNNNNNNNNN) (N) JN` . _NF`
(NNNNNNNNNNNNNNN (L. N (N. .NF .N` (N) (__F`
(N J. `NL N .NF .NFN) ` .NF.__________JNL N)
(NNNNNNNNNNNNNNNNNNNNN (N N .N` .NF N `N_ .NF " () N
.N) .. ______L___N__N____JNL .NF N 4N_ .NNN) () N
.NN""""""""4N` JNN`L JN` N `NN. (N`N) () N
.N4N (N JN4N (L .NF N `NN) .J` N) () N
JF (N""""""""4N JN (N 4L JF N `N) N) () N
JF (N (N .NF (N 4NL F (N N) () N
` (NNNNNNNNNNN JN` (N `NNN_ (N N) () N
(N (N .JF` (N "NN"` (N N) __ J) (NNNNN
(N""""""""4N " (N (N N) "4NN) `4NF
`` ` `` `



回复
haogui0 2001-12-24
强烈支持开gis斑。up。
回复
haogui0 2001-12-24
我也是做gis的。现在正准备做webgis,正无从下手。请多指教。haogui0@263.net
回复
halfdream 2001-12-24
我不是同行.来捧场可以否?
我倒有两个同事是做GIS的..

回复
hugos 2001-12-24
做GIS的同行们,来捧捧场啊
回复
lazecat 2001-12-24
不错。。。
回复
hugos 2001-12-22
人起步网
回复
ariso 2001-12-21
很高兴见到你
回复
TigerHu 2001-12-21
果真有两把刷子,不知道我什么时候可以达到这个境界......???????
回复
zxiaoer 2001-12-21
佩服
回复
hugos 2001-12-21
to  whiskers(胡子) :
能说一下你的思路吗?地图平台用什么?
回复
hugos 2001-12-21
说实在的,我早就烦gis了。没有意思,没有钱图。
赚钱的买卖又找不到。唉!真是苦命人啊
回复
whiskers 2001-12-21
hugos(疯狂老鼠):
我也搞GIS,正准备做WebGIS,请多指教、交流
hujf@sina.com
回复
hugos 2001-12-21
谁知道哪里能够提供免费的cgi权限?
回复
hugos 2001-12-21
谢谢网友的鼓励。
回复
相关推荐
发帖
非技术类
创建于2007-09-28

1621

社区成员

VC/MFC 非技术类
申请成为版主
帖子事件
创建了帖子
2001-12-21 12:10
社区公告
暂无公告