在线电子地图服务系统的研究与实现
2011-09-07姜占华余雪岗曲良东
李 哲, 姜占华+, 秦 俊, 余雪岗, 曲良东
(1.吉林大学计算机科学与技术学院,吉林长春130012;2.吉林大学符号计算与知识工程教育部重点实验室,吉林长春130012)
0 引 言
地理信息系统(geographic information system,GIS)应用涉及很广,例如交通、军事等许多领域,人们已经不满足单机操作的GIS系统,要求进行信息的交流[1]。如何实现在线电子地图传输,是实现GIS信息交流的核心问题之一。目前国内外对在线电子地图传输有一定研究成果,Buttenfield于2002年提出了一种传输单层矢量数据的方法,由于该方法只能处理简单曲线,所以该方法局限性很大。Bisheng Yang于2005年提出了一种用于电子地图数据传输的方法,但该算法的时间效率不高[2]。由于目前的研究,时间效率都不是很高,针对此问题笔者提出一种基于数据库预处理的在线电子地图传输方法。
1 在线电子地图系统的总体设计
1.1 系统结构
如图1所示,本系统主要包括两部分:电子地图数据库系统和多线程数据传输服务器。
(1)电子地图数据库系统:将电子地图以二进制数据的形式存入数据库,数据包括电子地图图元的经纬度坐标、图元的属性信息和图元的标注信息等。
(2)多线程数据传输服务器:接收和解析客户端请求[3],服务器根据请求从数据库提取数据传输给客户端。
1.2 电子地图预处理
图1 系统总体结构
电子地图数据库系统预处理的电子地图是Mapinfo格式的电子地图。这种格式的电子地图是由多个透明的图层叠加到一起的。每个图层包含了整个电子地图的一个不同方面。例如:第一个图层包含国道,第二个图层包含省道等等,把它们叠加到一起就形成一幅完整的电子地图[4]。在创建图层时,都要为其建立一张表,使表与电子地图建立起联系。每个表包含两部分:地图信息和属性信息。
电子地图预处理采用的数据库为SQL Server 2000。根据Mapinfo的MIF电子地图公开格式,电子地图的图元数据信息包括:图元的经纬度坐标、图元的属性(图元的样式、颜色等)、图元标注信息也就是图元的名称、图元标注信息的属性(标注的颜色、倾斜角等)。系统将整张电子地图分成多个块,每块为300m*300m。将该块内的图元数据信息提取出来,按照自定义协议将数据转化成二进制存储到数据库里。电子地图数据按照协议存储,服务器向客户发送电子地图数据时直接从数据库里读出数据传输给客户,不需要再进行协议转化,节省处理时间。数据库表字段定义如表1和表2所示。
表1 MapSummary(电子地图块集合)
表2 MapDataNum(电子地图数据信息集合)
表1存储的是电子地图分块的一些属性信息。表2存储的是电子地图分块内的图元数据信息,如果图元仅有部分内容在某一分块内,存储的信息则只包括在该分块内的信息。电子地图数据信息在数据库里以二进制形式存储,这样存储的原因是:电子地图数据里有些信息是无法以单字节形式存储的,例如-10,在单字符存储时显示为问号。当我们存入数据库时,数据库显示为问号,从数据库读出来时如果不经过转化也就成了问号,而转化数据需要花费比较多的时间,所以选择不进行转化而是将字符数组里的图元信息转化成二进制的形式直接存到数据库里,这样读出来就以二进制数据进行传输而不会发生解析错误。
1.3 在线电子地图传输协议
本协议基于TCP协议设计,因此,数据传输基本上认为是可靠的了。在应用层的协议设计过程中不再考虑可靠性问题。具体电子地图传输协议如下所示:
type标识,一个字节长,可以表示0~255,取3位数,个位、十位和百位赋予不同的含义。
type的个位:0表示一个图层或地图数据传输完毕;1表示传输数据类型为点图元;2表示传输数据类型为直线图元;3表示传输数据类型为折线图元;4表示传输数据类型为区域图元。
type的十位:0表示一个图层传完;1表示一个图层正在传送;2表示新传一个图层。
type的百位:0表示电子地图传完;1表示一个电子地图正在传送中;2表示新传电子地图。
len两个字节长,数据长度,表示数据的总长度为trilen的长度+dataxy的长度+propertydata的长度。
trilen两个字节长,属性数据的长度。
dataxy四个字节长,表示坐标,是由图元的经纬度坐标转化而得到的平面坐标,可以有多个坐标。
propertydata两个字节长,表示属性数据,例如图元的名称等。
2 系统的实现
本系统采用的软件平台为:MapX控件、VisualStudio2005和SQL Server 2000。MapX提供快速、易用、功能强大的电子地图化组件,只需要设计阶段将MapX控件加载到Visual Studio 2005,就可以对其编程,操作方便、简单[5]。
2.1 地图数据存入数据库系统
在VisualStudio2005里把MapX控件加载到项目里,这样我们就可以调用MapX里的函数对电子地图进行操作。通过调用MapX函数可以读出图元数据信息,其中图元的经纬度坐标需要转化成平面坐标,经纬度坐标为double类型,转化成unsignedshort类型,减少了存储数据量,可以提高传输效率[6]。将数据信息按照协议存储到字符数组里,之后将字符数组存储的数据转化成二进制形式存储数据库里。
下面主要介绍电子地图图元数据信息提取存入数据库的流程,如图2所示:
(1)取出地图起始点(xs,ys)和终点(xe,ye)经纬度坐标,令x1=xs,y1=ys。
(2)以(x1,y1)为起始点计算出大于x1且距x1为300m处的经度坐标设为x2,同理计算出纬度坐标为y2,(x1,y1)、(x2,y2)就构成了一个300m*300m的矩形,设为矩形A。
(3)选择图层,选择矩形A区域内的所有图元,包括任何部分在区域内的图元,得到一个图元集合。
(4)绑定数据源,使图层与属性数据库建立一个索引关系,通过图层里的图元,就可以读出图元所对应该的属性信息。画一个和矩形A一样经纬度的矩形图元。
(5)从图元集合中取出一个图元,判断是否为点图元,如果不是,则求这个图元与新画矩形图元的交集,并返回这个交集,其实是一个新图元,如果是点图元,什么也不操作。
(6)把由步骤(5)得到的图元的数据信息按协议放到缓冲区里,经纬度坐标需要转化成平面坐标,并判断图元集合内的全部图元数据信息是否放到缓冲区里,如果不是则跳到步骤(5)。
(7)删除在步骤(4)画的矩形图元。把缓冲区里的信息转化成二进制形式,之后把相应的信息存入数据库里。
(8)x1=x2,x1是否大于xe,如果不大于则转步骤(2)。
(9)y1=y2,y1是否大于ye,如果不大于则转步骤(2),否则结束。
图2 地图数据存入数据库系统流程
线图元和区域图元很有可能与新画矩形图元部分相交。如图3所示,区域图元A与矩形1和2都部分相交,如果矩形1存储图元A的信息,矩形2也存储了图元A的信息,图元A的信息被重复存储,有的区域图元面积很大,可能跨越很多矩形块,由于存在大量重复图元信息,传输时间会加长,所以将图元分割,只存储图元在矩形内的部分。因此需要求图元的交集,求图元的交集调用MapX控件里函数。
[Feature=]OBJECT.IntersectFeatures(feature1[feature2])函数。此方法取Feature或Features对象和另一个Feature或Features对象的交集,返回的结果对象作为独立的图元。在求图元交集时,遵循如下规则:
(1)如果区域重叠,则由此返回的图元也是区域;
(2)区域覆盖了线的一部分,则交集是由该区域覆盖的线的一部分,返回的图元为线图元。
图3 图元相交
(3)如果两个图元相交于一点,如图3中矩形图元1和线图元B,返回的图元为线图元,但是只有一组坐标点,也就相交点的经纬度坐标,线图元至少有两组坐标点,这样我们认为这是一个非法图元,对于这样的图元我们需要添加缺失的坐标点[7]。对于只有一个交点的两个图元求交,如果返回线图元则补齐一组和交点一样的经纬度坐标,如果返回区域图元则补齐3组和交点一样的经纬度坐标。
2.2 基于多线程的数据传输系统
传输系统主要是从数据库里读出电子地图的二进制数据,直接发送发客户端。具体如图4所示:
(1)由于电子地图数据在传送过程中要保证数据完整性,如果数据丢失客户端将无法解析,所以采用TCP协议,这样能保证数据的完整。首先创建SOCKET。
(2)当客户端连接服务器时,电子地图服务器产生一个子线程,在子线程里打开数据库。
(3)接收客户端数据,按照协议解析数据。
(4)如果是初始化电子地图,需要传送81小块电子地图,也就是9大块电子地图,每一大块电子地图为900m*900m。根据客户端传送汽车坐标来定位电子地图块号,再以这块为中心,根据块号来计算出它周围的80块的块号,把这81块地图数据从数据库中取出传送给客户端以画出电子地图,这81块的范围为2700m*2700m。如果是更新电子地图则同理算出9小块地图传送给客户端。之后跳到步骤(2)等待接收客户端数据。
图4 多线程数据传输系统流程
3 系统测试
3.1 测试环境
实验环境的搭建主要有两台PC机,它们都安装了Windows XP。硬件配置:CPU:Interl® Core™2 Dou CPU E7500,主频:2.93GHz,内存:2G。
3.2 数据预取时间测试
如表 3所示,第 2行到第 9行每一行表示 9块面积300m*300m电子地图(相当于一块900m*900m)的数据量、传输时间及由此得出的传输效率,第10行表示这8次传输的总数据量、总传输时间和平均传输效率。由于采用了基于数据库预处理方法,传输时间主要集中在读取数据库表,所以数据库的设计直接影响传输时间,而与电子地图本身基本无关。
表3 预取时间测试结果
3.3 与目前在线地图传输时间的比较
目前在线电子地图传输主要有两种方式:方法1,是把Mapinfo的.DAT格式电子地图转化为.MIF,.DAT电子地图格式是不公开的,所以有些电子地图信息我们是得不到的,而.MIF电子地图格式是公开的,通过这种格式我们可以得到我们想要的一些电子地图信息[8]。方法2,是直接从Mapinfo电子地图里读出图元数据信息传送给客户端。如表4所示:对于这两种方法我做了一下时间测试,这两种方我提取图元的数据信息是相同的,所以传输数据量是一样的。第2行到第9行每一行表示地图面积为900m*900m的数据量、传输时间及由此得出的传输效率,电子地图经纬度范围与表3对应行地图的经纬度范围相同,因为表3把面积为900m*900m的地图又分割成9块,每块面积为300m*300m,所以数据量是不同的,分割电子地图调用求图元交集函数时添加一些坐标和产生一部分新图元,数据量有所增加。由表3、表4比较可知,本文所写的方法虽然存储数据量有所增加,但其平均预取数据效率大约是方法1的700倍,是方法2的130倍。
表4 传统方法预取时间测试结果
从实验结果来看,与传统方法相比较,该方法有更好的性能,更高的数据提取效率,在保证了传输的实时性的前提下,提高了在线电子地图的传输效率。
4 结束语
本文提出的基于数据库预处理的在线电子地图数据库存储方法,与前人方法对比,时间效率有明显提高,达到预期效果。该方法已经在车载信息系统项目中获得应用,针对电子地图的预处理和电子地图传输达到良好的效果。随着研究的深入,今后还将在以下几方面做深入的研究:研究电子地图坐标系统,使经纬度坐标转化平面坐标更精确;压缩电子地图数据等。
[1]张立亭,祝国瑞,周世健.基于WebGIS的地图数据传输关键技术[J].测绘通报,2004(4):52-55.
[2]刘建忠,齐华.矢量地图数据渐进式传输的研究[J].铁路计算机应用,2007,16(3):5-7.
[3]霍佳,王英杰,王映辉,等.基于Web的统计电子地图发布系统设计[J].计算机工程,2009,35(4):258-264.
[4]李胜乐,陆远忠.MapInfo地理信息系统二次开发实例[M].北京:电子工业出版社,2004.
[5]杨必胜,李清泉.World Wide Web(WWW)上矢量地图数据的多分辨率传输算法[J].测绘学报,2005,34(4):355-360.
[6]胡钢,徐绪堪,沈波,等.基于mapinfo三层结构水利地理信息系统设计[J].计算机工程与设计,2006,27(22):4319-4321.
[7]王景存,陈彬,陈和平.GIS系统地图快速显示模型设计与实现[J].计算机工程与设计,2007,28(5):1179-1181.
[8]陈志军,王丹.基于MapX的WebGIS系统[J].沈阳航空工业学院学报,2005,22(1):49-51.