carmy
路人甲
路人甲
  • 注册日期2003-12-06
  • 发帖数86
  • QQ109807460
  • 铜币394枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1616回复:0

用JAVA开发WebGIS小应用程序[转帖]

楼主#
更多 发布于:2003-12-21 23:54
用JAVA开发WebGIS小应用程序(转贴)

作者:李青元 韦 淳 张福浩 来自:中国图象图形学报

引 言

   随着电信网、有线电视网、因特网三网融合步伐的加快和第二代因特网技术的日趋成熟,因特网速度正稳步而飞速地提高,可以预见,因特网的触手将无所不在.由此可见,因特网正在成为信息化社会人们进行联系、交流、获取信息的的重要工具.另外,更由于美国副总统戈尔所倡导的“数字地球”概念被人们所广泛接受与响应,从而使因特网环境下的空间信息处理技术也愈来愈受到重视[1].“数字地球”说穿了就是高速因特网+空间数据基础设施+GIS+RS+GPS+各行各业的应用.因特网上的GIS,也称WebGIS,是“数字地球”的支撑技术之一,目前正在成为各国争夺的一个制高点.美国ESRI公司、MapInfo公司、AutoDesk公司等GIS软件厂商都正在竞相研制WebGIS产品[2].国内主要的GIS软件厂家也都在积极研究WebGIS产品,以迎接“数字地球”的挑战.武汉测绘科技大学龚健雅、袁湘儒、韩海洋等人用JAVA语言实现了“吉奥之星”的Web版本,并对其技术路线、实现方法进行了介绍[3,4];北京大学李琦、杨超伟、王京傲等人对WebGIS的体系结构策略也进行了讨论[5],并基于AutoDesk公司的MapGuide实现了一个WebGIS系统.笔者所在的中国测绘科学研究院政府地理信息系统工程中心在为政府首脑服务的“9202工程”中,也开展了因特网GIS的研究[6,7].本文旨在阐述WebGISJAVA小应用程序的工作原理,以及研究中所采用的设计思想、技术路线、试验结果及一些经验与思考,以期对同行有所借鉴.

1 WebGIS小应用程序的工作模式

   在因特网上,用户只需用一个浏览器(Browser),如Netscape公司的Navigator或Microsoft公司的I.E.,键入网址,就能打开连在因特网服务器上的网页(Homepage),网页是用HTML语言(HyperTextMarketLanguage超文本标识语言)编写,而用JAVA语言编写的小应用程序(Applet)则可以嵌入到网页中.由于这些小应用程序可以完成GIS所需的各种交互式图形与数据库操作,因而,当用户用浏览器打开WebGIS服务器上的网页时,嵌在网页中的小应用程序就被浏览器装入浏览器所在的用户计算机的内存中,并自动启动,通过读取网页所在服务器站点上的空间数据与属性数据,就可在用户端的计算机屏幕上显示电子地图,并响应用户的放大、漫游、查询、空间量算等指令,以进行各种GIS操作.因特网GIS小应用程序工作模式与传统GIS程序的工作模式相比,其最大特点就是在最终用户手里没有它所要操作的GIS程序及数据,而这些程序及数据均放在WebGIS服务器一端.网上最终用户手里只有,也只需要有一个通用的浏览器就可以工作.JAVA小应用程序(Applet)之所以称之为小应用程序,是因为它的工作方式是嵌入在网页中,并由浏览器启动运行;与JAVA小应用程序相对应的是JAVA应用程序(Application),但它不是嵌在网页中,由JAVA驱动器直接启动,而是由JAVA虚拟机直接启动.JAVA小应用程序与JAVA应用程序相比,它有很多安全性方面的限制,例如它不能读取JAVA小应用程序所在目录(及其子目录)以外的任何目录下的数据,也不能在客户端进行任何读写操作,这些限制虽然制约了小应用程序的一些功能,但它保证了小应用程序不会对网络和客户端产生破坏行为.而JAVA应用程序则没有小应用程序在安全性上的诸多限制,它可以登录到别的目录和别的服务器上进行读写操作,因此在“浏览器/小应用程序/应用服务程序”的“三层架构”中,可用它作为应用服务程序.因特网上的GIS小应用程序和GIS应用服务程序及数据,都是放在因特网的Web服务器上,因此人们也常将因特网GIS称之为WebGIS.

2.1 界面及主要功能“地学之窗”

   界面的顶部为菜单条;左半部为地图主窗口;右上部为索引图,也称鹰眼图窗口,它在信息查询时,用于显示空间要素的文本、图片等多媒体信息(如图2右上部窗口所示).右下部窗口用于显示控制设置(如图1右下部窗口所示)和信息查询时属性数据库显示(如图2右下部窗口所示).“地学之窗”Web1.0具有如下功能:

    (1)图幅选择 可通过菜单选择,也可用鼠标在图上点取次一级的行政区划,例如在全国图上选省,在省图上选地区,但用户选择新的图幅后,需要重新装入新图幅的空间数据;

    (2)地图放大、缩小、漫游功能;

    (3)显示设置 即设置各逻辑层的显示与否,以及设置放大到多大的倍率时才显示(见图1右下角);

   (4)信息查询 查询与某层空间要素对应的属性数据库(见图2右下角)或文档图片等多媒体信息.

   (5)空间量算 可以用鼠标在图上量算距离和面积.

2.2 数据组织方式

   “地学之窗”Web1.0的数据组织方式与“地学之窗”VisualC++版的数据组织方式及格式基本一致.若以图幅为单元,其图形数据格式完全一致,均采用内部二进制文件,但在系统控制和属性数据库方面略有区别,而是采用Fox2.x格式的dbf库管理.其空间几何元素由面状、线状和点状要素组成,简称为面、线、点、注记,每一个空间几何要素都有一个层号(LayerNo).经过预处理之后,面、线、点数据存放在内存数组中;属性数据库存放在dbf文件中,当用户确定了查询哪一层的信息后,才从WebGIS服务器读取所对应的属性数据库.

2.3 数据调度策略

   “地学之窗”Web1.0数据调度策略是采取一次性调入与逐步调入相结合的策略,即在系统初始化时,将系统控制文件dict.dbf调入内存,缺省,则调第一幅图,以后随用户选图指令,调入相应图幅的数据.当调入一个图幅的数据时,空间数据和注记数据将一次性调入.这样,装载一幅图需要花费一定的初始化时间,但数据一旦装入,图形的放大、缩小、漫游就都在用户端进行,因而使系统的响应速度得以提高,但各层所挂的属性数据库是在用户确定对哪层进行信息查询后,再调入相应层的属性数据库,各空间要素所挂的文本、图片等多媒体信息是在用户查到该空间要素后才调入.

2.4 显示控制机制

    从GIS专业人员的角度来看,地图数据分为面、线、点、注记进行采集、管理是合理的,而传统的GIS产品的显示也确实是按面、线、点、注记,并分层控制的.但从非GIS专业用户的角度来看,就太烦琐、太复杂了.例如,用户常常搞不清二级河流是面状的,还是线状的.因此,从用户的角度考虑,不应将图面上的元素分为面、线、点和注记.例如用户只需关心一级或二级河流这样的逻辑概念,要显示一级河流,不管是面状、线状的一级河流以及注记都应显示出来,要关闭也同时关闭,而不应让用户再去分别设置一级河流的面要素、线要素、注记是否显示,以及显示比率等等.基于这样的认识,“地学之窗”Web1.0的显示控制机制作了重大改进,即对用户而言,不再区分面、线、点、注记,而只提供一个逻辑层的显示控制界面(如图1右下角所示).这不但使操作界面更加简洁,而且方便了用户.

2.5 运行效率测试

   经测试,“地学之窗”Web1.0在Windows98/NT、Unix操作系统上均可运行.“地学之窗”Web版在某100M的ATM内部网上运行时,程序装载和读2M数据量的文件时,所花时间不到1min,使进行图形放大、漫游、查询等操作,没有等待的感觉,用户认为这个速度完全可以接受.用33.6Kbps的Moden,通过电话线拨号上网调用“地学之窗”Web1.0时,装载程序(.class文件123K)约需1min;装载800K数据约需5min;装载2M数据需15min.数据装载之后,其进行图形放大、漫游、查询的响应速度都很快,没有等待的感觉,但其数据装载速度是难以为用户所接受的.因此,目前“地学之窗”Web1.0若在低速的广域网上使用,还有待于网络速度的大幅度提高,或者需改进体系架构与数据调度方式.

3 几点经验及思考

   作者在开发“地学之窗”Web版的过程中,积累了一些成功的经验与失败的教训,并对现在版本的不足之处也有所认识,对改进途径也有所思考,希望能与同行共享这些经验教训和思考.

3.1 “地学之窗”Web版的改进途径

   从笔者所作的试验和理论推算可知,用电话线拨号上网使用“地学之窗”Web1.0时,数据传输速率是一大瓶颈,解决这一瓶颈的方法有三:

(1)等待因特网的提速 

   在“三网融合”的大趋势下,可以预见不久的将来,国内因特网的速度将会大幅度提升,因为国内大中城市的有线电视网普及率很高,专家认为只要稍加改造,加上电缆调制解调器(CableModem)之后,用户共享速率可达10~30Mbps[8,9],是现在电话线拨号上网速率的500倍以上,在这样的网络速率下,一次性可调入1~10M的图形数据,这样用户将没有等待的感觉.

(2)改变程序的体系结构 

    采用“浏览器/JAVA/小应用程序/JAVA应用服务程序”这样的三层架构,即在Web服务器端始终运行一个GIS应用服务程序,用来为前端的小应用程序提供数据读取和数据组织服务.但如果仅仅采用三层架构,在数据的调度策略上,还是一次将一幅图的空间数据全部装载的“胖客户机”策略,则其数据在网络上的传输量与由小应用程序直接读是一样的.若这样的话,总体效率可能还不如“浏览器/JAVA小应用程序”这样的两层结构,因而还得改进数据调度策略.

(3)改进数据调度策略 

   即在小应用程序与服务程序之间实施一次只传输一帧绘图矢量数据的“瘦客户机”策略,这对程序与数据的结构设计提出了较高的要求,但这样的优点是不必一次把一个图幅的空间数据全部装载到用户端,其缺点是客户端的每一个请求(不论大小)都必须传到服务器端进行处理,结果再通过网络传到客户端,这样将使系统的响应速度受到一定影响,而且客户端的CPU与内存等资源由于大部分时间都处于空闲状态而未得到充分利用.

(4)“动态分配任务”的调度策略   

   动态分配任务就是根据网络速度、网络忙闲程度、图幅数据量大小、任务大小,动态地分配客户端与服务器端的任务.例如一个区域初次显示时,先由服务器组织第一幅画面的数据传给客户端显示.然后根据该图幅的数据量,确定是否传输整幅图形的数据,若数据量太大,则不传;若不是太大,则在客户端显示第一幅画面以及响应用户其它请求的同时,将该图幅的其它数据整理后传给客户端,以后的放大、漫游、查询等大部分操作就在客户端进行.这样,既不像胖客户机那样初始化时用户等待时间太长,又不像瘦客户机那样,客户的每一个操作都要通过网络传到服务器,再返回到客户端.由此可见,动态分配任务的调度策略融合了瘦客户机/胖客户机两者的优点,应该具有最高的效率,但它对程序的设计也提出了更高的要求.

3.2 JAVA语言在不同浏览器上的差别

  虽然JAVA语言号称具有跨平台功能,但即使是在Windows平台上,当使用不同的浏览器时,有的JAVA函数的工作情况是有所差异的,这就影响到程序的通用性,由于在因特网上是不好规定用户只能使用什么浏览器的,因此程序开发者应尽量避免使用在不同浏览器上会有不同表现的类和函数.例如:

  (1)PopupMenu类,按照语言规范,可以加到Button上去,如oneButton.add(onePopupMenu),但这只能在I.E.或AppletViewer上正常工作,而在Netscape下,则onePopupMenu的所有子菜单项都显示为oneButton的内容.改进的方法是采用onePanel.add(onePopupMenu)方式,则在任何浏览器下都可以工作.

  (2)创建字体的构造函数Font(Stringname,intstyle,intsize),其中的参数name,在I.E.下,可以是“System”或“楷体”,甚至任何字符串都能显示出汉字来,但这样设置的字体,在AppletViewer或Netscape下,则将汉字显示为方框.若将name设置为“宋体”、“Monospaced”、“SansSerif”、“Serif”之一,则在任何浏览器下都能正常显示汉字.

  (3)JDK1.2在Netscape下运行时,Frame或JFrame里有若干组件(Component)——Panel、Canvas、Button等,当改变JFrame大小,重新设置这些组件的位置与尺寸时,整个窗口和部件都会被多次重画,例如有15个组件,就会重画15次,因而产生非常强的闪烁感,令用户感觉非常不舒服.而这种现象在I.E.下,或Netscape使用JDK1.1.6下就没有.作者通过反复试验,发现只有采取如下的方法才能消除这种莫名其妙的闪烁,即用setVisible(false)先将这些组件设为不可见,然后用remove()将这些组件移出,然后用add()将这些部件加入,再用setBounds()设置这些部件的位置与尺寸,最后再用setVisible(true)将这些部件设为可见.

   (4)available()函数是DataInputStream、InputStream等类的一个函数.按照JAVA语言规范,它的功能是返回输入流,在没有阻塞的情况下,可以读出的字节数,即它应返回由DataInputStream打开的文件的字节数.但是用Netscape浏览器或在网络方式运行时,它的返回值常常小于DataInputStream打开的文件的字节数.因而不能用available()函数确定文件大小.一个较笨,但可行的方法是先分配一个很大的数组,一直读到InputStream抛出一个异常为止,记下读出的字节数,即可作为文件的字节数.

  (5)键盘消息响应在I.E.下,没有什么问题,但在Netscape下,只要响应过Button、Check、List、Choice等控件的消息,则各个Panel、Canvas上再也接收不到键盘消息,尽管这时还可以响应鼠标消息.这时必须用requestFocus()函数使Panel、Canvas等组件重新获得键盘输入焦点,以接收键盘消息.

  (6)J++6.0的错误捕捉和动态跟踪功能常常出错,例如在某处捕捉到数组越界,但实际上在这里并没有数组越界,而是在这之前的某个地方已经有数组越界,或使用了空指针,系统内存已经混乱了,因此在程序调试阶段,要尽可能多设错误捕获陷阱,以便及时准确地捕获错误.

3.3 HTML、JavaScript、JAVA合理集成

   因特网上的GIS应用是多种多样的,充分发挥好HTML、JavaScript、JAVA各自的优势非常重要.有的应用根本不需要用JAVA编程,因为用HTML语言制作的页面本身就具有很强的表现力,可以设置菜单、动态跳转,显示文本、图片、动画等.而且JavaScript语句可以直接嵌在HTML页面中,解释性执行,有点象VB,语法又与JAVA类似.因此JavaScript具有比JAVA的Applet多得多的网页控制能力和一定的编程能力,如函数定义、函数调用、条件判断、循环、动态获取系统日期、处理鼠标消息的等功能,很多功能的实现比用JAVA编程还来得简单,因此在构筑因特网GIS应用时,若充分利HTML页面中JavaScript的编程功能会使系统很多功能的实现更简单容易.JAVA编程能够实现各种复杂的图形与数据库操作以及更强的GUI控制能力,是因特网GIS应用的最高层次,但并不一定每一个系统都需要用JAVA来实现.笔者建议用JAVA开发因特网GIS应用的研究者,应花费一定时间了解JavaScript和HTML,这能收到事半功倍的效果.

4 结 论

   用JAVA开发“浏览器/小应用程序”架构的WebGIS——“地学之窗”Web1.0可跨平台运行,且在高速网上运行效果良好,但在低速网上运行初始化时间太长,应改进为“浏览器/小应用程序/应用服务器”架构,并采用“瘦客户机”的调度策略或“动态分配任务”的调度策略.
 
喜欢0 评分0
游客

返回顶部