Java多线程及多点连接技术在WebGIS
数据传输中的应用
武汉大学遥感信息工程学院,武汉市珞喻路129号,430079
摘要目前空间数据的传输效率低下已成为制约WebGIS发展的主要瓶颈之一。多线程技术以及多点连接在提高系统吞吐率、有效利用系统资源、改善用户任务之间的通信效率等方面有着显著作用。本文采用地图分层和图面分割的方法以及Java多线程和多点连接技术实现了WebGIS空间数据的高效传输。
关键词:WebGIS;Java;多线程技术;多点连接;数据传输
彭壮志虞欣
WebGIS的网上发布已成为地理信息系统研究的热点之一。地理信息系统的应用涉及农业、林业、水利、地矿、交通、通讯、城市建设、资源管理、环境监测、人口、海洋及军事等许多领域。这些应用的发展,使人们不再满足单机操作的GIS系统,迫切要求进行资源与信息的交流与共享,扩大GIS的应用范围,提高GIS的应用价值。利用网络可以实现这一要求,从而实现开放的、互操作的GIS系统。由于GIS涉及的地理数据非常巨大,并且这些地理数据的类型种类很多,通常包括栅格数据、
矢量数据以及与时间有关的时空数据等。实现地理数据的网上传输是GIS网上发布的关键技术,如何实现以地图为载体的地理信息网上传播正是WebGIS要解决的核心问题之一。网络是WebGIS赖以实现的基础设施,由于受到网络的传输协议、实时用户访问量、带宽占用等条件的限制,因此如何把用户的请求信息和返回的结果信息完整快速地传输成为影响系统性能的重要因素之一。多线程技术是将一个程序任务分成几个并行的任务来执行,它在提高系统吞吐率、有效利用系统资源、改善用户任务之间的通信效率以及发挥多处理机硬件性能等方面有着显著作用。多点连接技术是发挥一种团结一致的精神,一个线程执行完毕后会帮助未完成的线程执行,直到传输任务完成,这将进一步提高传输速度和资源利用率。本文首先运用地图分层和图面分割的数据组织方法,然后联合利用Java多线程和多点连接技术进行WebGIS的数据传输,大大提高了空间数据的传输速度。
1WebGIS数据传输方案
目前WebGIS的数据传输主要采取两种方式:
(1)将地图数据以GIF或JPEG的图像格式传输到客户端。用户在图像上移动鼠标时,程序得到鼠标的屏幕坐标位置,然后将其返回给服务器处理。服务器根据屏幕坐标计算出地图上的实际位置并确定用户的操作或选中的空间特征或对象(如一个点、一条线或一个多边形),然后完成用户指定的操作,最后将结果以图像的形式返回到客户端。如在地图上做查询操作时,用户在某一地物上单击鼠标并希望得到该地物名称及相关属性,而且希望该地物
1
改变颜色或以高亮度显示来表示选中的地物。实际的系统反应是:客户端程序得到鼠标在屏幕上的坐标,将屏幕坐标传送到服务器,服务器计算出该点在地图上的实际位置,查询到包含该点或距离该点最近的空间对象,改变该对象的颜色或亮度,生成一幅新的图像,将该图像传送到客户端,最后在客户端显示该图像。
(2)以矢量图形的方式传输地图数据。即客户端得到的是真正的矢量数据,而不是一幅图像。用户在图形上移动鼠标时,在客户端上即可实时地判断出鼠标所指的是哪一个点、线或多边形,即可改变其颜色或以高亮度显示,然后将代码或名称传给服务器。因此在客户端可以很快地响应用户,能够执行很复杂的操作(如放大、缩小和移动等),没有任何时间延迟,给人一种本地桌面GIS的感觉。
这两种数据传输方式各有特点,以图像方式传输地图数据的传输量通常较小,从操作的响应时间看,以矢量方式传输地图数据明显优于前者。采用矢量方式传输可以将一些简单的图形操作功能放在客户端来完成,而服务器则专注于完成一些难以在客户端进行的工作,如空间分析、属性查询等,这样既减轻了服务器的负载,又加强了用户操作数据的自由度,实现了真正意义上的分布式计算。由于现在通用的浏览器都不支持矢量格式数据的显示,因此必须扩展浏览器的功能,即在浏览器上安装插件。目前常用的方式有两种,ActiveX/DCOM插件和JavaApplet插件。同时由于空
间数据一般都很大,在首次下载时视网络状况不同肯定会或多或少占用一定时间,因此在首次的响应时间上会长于栅格数据的传输。为了提高传输速度,本文首先采取了地图分层和图面分割的方法,然后运用Java多线程及多点连接技术进行地图数据传输,实现了空间数据的高效传输。2基于Java多线程及多点连接技术的矢量数据传输
2.1Java多线程技术
在Java语言中提供了一个线程类(Thread)和一个界面(Runnable),用于实现用户线程编程。其中Thread类的最主要的方法是run(),通过对run()方法的覆盖,完成相应的操作任务。调用时使用start()方法,使线程完成特殊的初始化操作后开始执行run()操作,由此进入可运行状态(Runnable)。执行完所有操作后由系统调用exit()方法,这时线程进入死亡状态(dead)。系统中存在多个线程时,就需要保证线程的同步及相互通信,以期协调工作,避免发生死锁。Java提供了三个标准的Object类方法wait(),notify()和notifyAll(),以及三个Thread类方法sleep(),suspend()和resume(),用于中断或唤醒线程的执行。当线程调用sleep(),wait()或suspend()方法之后线程就会由可运行状态进入阻塞状态(blocked),一旦线程睡眠时间到或者是其它线程调用了notify()或resume()方法后,此线程才会由阻塞状态进入可运行状态中。线程状态转化图如图1所示:
图1Java线程状态转换图
2
第1期彭壮志虞欣:Java多线程及多点连接技术在WebGIS数据传输中的应用总第62期
图2总体数据传播输流程
2.2多点连接技术
多点连接技术是利用一种互帮互助的思想,当一个线程执行完毕后,立即帮助未完成的线程执行剩下的任务,即将剩余最多的任务分割成两份进行执行,直到传输任务完成。
2.3多线程及多点连接技术在矢量数据传输
中的实现
多线程设计一般比较复杂,但Java在语言级提供了对多线程的有效支持,通过语言和运行支持系统提供的复杂的同步机制,有效地减少了多线程并行程序设计的困难。
本文采用现在比较通用的客户机、网络服务器、数据库服务器3层结构体系设计,各层按具体功能不
同划分不同模块,以组件式形式实现。其原理是:在服务器端通过建立线程池处理用户并发访问,并调用数据压缩工具对用户请求的数据进行即时压缩以减小数据量;在客户端利用同步线程实现数据下载与用户接口响应并行以降低等待时间。虽然这样要增加压缩和解压的工作量,但无论服务器还是客户机都是本机运行,速度较快,从而减少了网络占用并加快了用户响应,因而在整体上提高了系统的性能。数据流程如图所示。
下面重点讨论单次的数据传输策略:(1)数据组织
针对矢量空间数据容量大,所需传输时间长的缺点。本文采用地图分层组织和图面分割的方法来减少单次的数据传输量。
图面分割的方式是先将用户需要的信息所在的图幅以小比例尺的形式传输到客户端,用户若需要更详细的图形信息,通过查看所需要信息的位置,确定信息区域,判断所确定的对象数据是否已经传输到客户端,对于没有传输到用户端的数据,用
户可再一次从服务器端获取。这样可以减少将冗余数据传到客户端,提高图形数据的传输速度。
(2)多线程及多点连接的实现原理单次数据传输的多线程实现是将待传输的矢量数据划分成N份(N可以根据待传输的矢量数据的大小进行动态调整)并相应的用
N个线程进行传输,结合多点连接技术,当某
个线程运行完毕后,判断剩下的线程中哪个剩余最多,然后将其分割成两个线程继续运行,直直到数据传输结束。其流程如下:
乱化
3
ApplicationofJavaMulti-threadand
Multi-pointsconnectingTechnologyfor
DataTransmissioninWebGIS
SchoolofRemoteSensingandInformationEngineering,WuhanUniversity,
129LuoyuRoad,Wuhan430079,China
AbstractEfficiencyofdatatransmissionisoneofthemainfactorsthataffectWebGISperformance,soh
鲁迅先生的伟大事迹owtooptimizeitisimportant.BasedontheanalysisofJavathreadtechnologyandWebGISarchitecture,thispaperdiscussthewaytoapplyJavaMulti-threadandMulti-pointsconnectingtechnologyforWebGISdatatransmission.
Keywords:WebGIS;Java;Multi-threadTechnology;Multi-pointsConnecting;DataTransmission
第一作者简介:彭壮志,硕士生,现从事GIS研究。E-mail:pengzhuangzhi@126.com
PengZhuangzhiYuXin
3结束语
空间数据传输是实现WebGIS的关键技术,在当前的网络状况下,从程序级对空间数据的传输进行优化是提高传输效率的主要途径。Java语言具有简单性、
纯面向对象、可移植性、稳健性、安全性、分布性等特点,已经逐渐成为网络程序开发的标准。基于
Java开发的WebGIS
系统由于Java本身的特点,具有平台无关、安全等优势,并且由于Java在语言级提供了对多线程的良好支持,为GIS数据的传输实现技术打开了一条新的思路。本文就此提出一种基于
Java多线程和多点连接技术的WebGIS数据
帅哥简笔画传输方法,通过实验测试,在同等网络条件下,本文提出的方法能显著提高传输速度。
参考文献
[1]卢俊岭,师军,基于Java的多线程机制,陕
西师范大学学报,2000,12。生活部工作计划
[2]王继周,李成名,付俊娥,Java多线程技术
在WebGIS空间数据传输中的应用,计算机应用研究,2004。朴组词组
[3]BruceEckel.Java编程思想[M].北京:机械工
业出版社,1999。个人发言稿
复制工作表[4]张少平,王映龙,Java的多线程机制及其应
用,江西农业大学学报,2001,12。
电脑电源线
[5]刘巍,唐学兵,利用Java的多线程技术实现
数据库的访问,计算机应用,2002,12。
第1期测绘科技情报总第62期
图3多线程及多点连接的实现流程
4