地理信息系统绘图缓冲区技术设计与实现

2012-07-25 11:05
计算机工程与设计 2012年3期
关键词:缓冲区后台图层

郑 昊

(华北计算技术研究所,北京100083)

0 引 言

地理信息系统 (geographic information system,GIS)是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。地理信息系统最基础也是最重要的功能是以图形化的方式展示地图信息,同时提供放大、缩小、漫游等地图浏览功能。地图浏览速度将直接影响到使用者的用户体验,一套能够提供快速流畅地图漫游的地理信息系统将会为用户带来极大方便。地图浏览速度同时受到多方面因素的影响,如地图访问引擎的效率、地图符号化的速度、地图注记渲染水平等。根据影响绘图效率的因素的不同也存在多种提高地图绘图效率的方法,如在地理信息数据访问引擎中建立栅格金字塔和空间数据索引等。其中一个重要的手段就是通过绘图缓冲区技术来提高地图浏览效率。地理信息系统 (二期)(简称TerraMap)是一个大型的地理信息软件开发和应用平台。本文针对TerraMap所采用的绘图缓冲区技术就行论述,TerraMap通过采用绘图缓冲区技术解决了地图浏览、地图漫游、动目标显示、专题图制作等多种使用方式下的快速绘图的问题。

1 绘图缓冲区技术设计

1.1 双缓冲区

我们知道,如果窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。解决这一问题的有效方法就是双缓冲技术。因为窗体在刷新时,总要有一个擦除原来图像的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图像颜色的反差。当WM_PAINT的响应很频繁的时候,这种反差也就越发明显。于是我们就看到了闪烁现象。我们会很自然的想到,避免背景色的填充是最直接的办法。但是那样的话,窗体上会变的一团糟。因为每次绘制图像的时候都没有将原来的图像清除,造成了图像的残留,于是窗体重绘时,画面往往会变的乱七八糟。所以单纯的禁止背景重绘是不够的。我们还要进行重新绘图,但要求速度很快,于是我们想到了使用BitBlt函数。它可以支持图形块的复制,速度很快。我们可以先在内存中作图,然后用此函数将做好的图复制到前台,同时禁止背景刷新,这样就消除了闪烁,以上也就是双缓冲绘图的基本的思路。所谓 “双缓冲区”,顾名思义就是要有两个缓冲区,一个叫 “前台缓冲区”,一个叫 “后台缓冲区”,如图1所示。这两个缓冲区,总是一个用于屏幕显示,另一个用于后台绘图。当两个缓冲区都操作完,再进行一次切换,解决闪烁问题。

图1 双缓冲区

对于一个地理信息系统仅仅通过双缓冲区技术远远无法达到快速浏览目的。比如在地图上进行鼠标点击选取的时候,用户看到的效果应该是被点击选中的目标会突出显示。在这种情况下,如果只有双缓冲区技术,那么在 “后台绘图缓冲区”进行的操作是先把缓冲区用背景色 (如白色)填充,然后再把窗口中包含的全部要素 (植被、水系、交通、境界等)都重画一边,然后再把选中的目标用一个特殊的符号绘制,最后把绘制好的 “后台缓冲区”与 “前台缓冲区”进行交换。在这个过程中要把全部地理信息要素重新绘制一遍,这个过程是很耗时的。而对用户而言,看到的只是被选中目标进行了突出显示,整个背景地图完全没有变化,因此用户无法接受点击地图后花费很长时间进行地图背景重绘而又看不到地图背景的变化。

再比如在地图编辑的过程中,如果选中一个居民地层中的一个点目标,然后从已有的位置拖动到另一个位置。在拖动的过程中被拖动的目标的位置会不停的变化,在这个过程中如果只有双缓冲区,那么绘图过程将会很慢。每发生一次鼠标移动就会把 “后台缓冲区”重新用背景色填充,然后把窗口中的全部地图要素重绘绘制一边,当绘制被编辑目标的时候,将按照新的位置进行绘制,最后再把“后台缓冲区”和 “前台缓冲区”进行交换完成绘制。可以看到这个过程中窗口中的全部地图要素都会不停的重新绘制,因此绘图效率会非常低。对于用户来说,看到的只是一个目标在移动,显然无法接受全部要素重绘的情况。

从以上讨论可以看出对于地理信息系统而言,双缓冲区技术远远无法满足要求。为此,在TerraMap中采用了地图缓冲区技术。

1.2 地图缓冲区

地图缓冲区不是指某一个具体的缓冲区,而是一组分工明确,相互配合的缓冲区组合在一起,共同解决地图选择和编辑过程中地图快速绘制的技术。

从前面的讨论可以看出双缓冲区技术之所以效率低,是因为在很多情况下,地图只是改变很小一部分,确必须把整个地图重新绘制一遍。为此,我们想到通过创建一个“地图缓冲区”把所有绘制好的相对固定的地图数据放到新的 “地图缓冲区”中,如图2所示。

图2 地图缓冲区

在地图缓冲区结构下的绘图流程如下:

(1)每次绘制地图的时候,把交通、水系、军民地、境界等要素符号信息绘制到 “地图缓冲区”;

(2)然后把 “地图缓冲区”中的内容复制到 “后台缓冲区”,在 “后台缓冲区”绘制选中目标的符号;

(3)所有信息绘制好之后交换到 “前台缓冲区”完成一次绘图。

有了 “地图缓冲区”,当通过鼠标操作选中一个目标的时候,由于底图信息没有发生改变,因此 “地图缓冲区”中的内容没有变化。只要把 “地图缓冲区”中的内容重新复制到 “后台缓冲区”,然后在 “后台缓冲区”重新绘制选中目标,最后把绘制好的内容复制到 “前台缓冲区”完成一次绘制。这个过程中由于 “地图缓冲区中”的内容不再重新绘制,因此绘图速度会大幅度提高。

1.3 图层缓冲区

有了 “地图缓冲区”并没有完全解决问题,当需要进行数据编辑的时候,由于修改了地图本身的数据,因此“地图缓冲区”还需要重新绘制,因此绘图时间还是较长。为此,对 “地图缓冲区”结构进行修改,把 “地图缓冲区”分为多个 “图层缓冲区”,如图3所示,图层缓冲区的数量可以根据情况有所增减。

在 “图层缓冲区”的结构下,绘图流程如下:

图3 图层缓冲区

(1)根据图层的上下次序和是否是被编辑的图层可以把地图图层数据 (如境界、水系、居民地等)分别绘制到“图层缓冲区1”到 “图层缓冲区n”中,其中多个不被编辑的图层可以绘制到一个图层缓冲区 (也可以绘制到多个图层缓冲区),每个被编辑的图层绘制到一个缓冲区;

(2)然后至下而上把每个图层缓冲区中的内容复制到“后台缓冲区”,在 “后台缓冲区”绘制选中目标的符号;

(3)所有信息绘制好之后交换到 “前台缓冲区”完成一次绘图。

我们以编辑交通层为例描述在地图编辑过程中的绘图过程,假设有两个图层缓冲区 (“图层缓冲区1”和 “图层缓冲区2”)交通层之外的图层都绘制到 “图层缓冲区2”,交通层数据绘制到 “图层缓冲区1”。当编辑交通图层数据后绘图时,由于窗口显示范围没有发生改变,交通层之外的其它图层数据没有发生改变,因此,“图层缓冲区2”中的内容不必重画,直接拷贝到 “后台缓冲区”。修改后交通层的数据绘制到 “图层缓冲区1”,再拷贝到 “后台缓冲区”;最后交换到 “前台缓冲区”,完成绘制。这个绘制过程中,绘制工作量最大的 “图层缓冲区2”由于没有修改而没有进行实际绘制,因此绘图速度会大为提高。可以看出由于有了图层缓冲区的控制,解决了编辑过程中的绘图速度问题。

图层缓冲区的基本原理和地图缓冲区相同,可以看作是对地图缓冲区的扩展。而地图缓冲区的结构可以看作是只有一个图层缓冲区的特殊的图层缓冲区结构。

1.4 组件缓冲区

图层缓冲区技术解决了地图数据选择、地图数据编辑过程中的绘图速度问题,但是并没有解决全部问题。基于地理信息系统的应用中使用最多的模式是以地图为背景,在地图之上绘制各种业务专题数据 (如气象、水文、电磁等)。相对于地图而言,用户更为关心业务信息,会对业务信息进行选取、查询、编辑。在这种使用模式下,前面提到的图层缓冲区技术就不能完全胜任,业务数据要绘制在地图数据之上,显然业务数据不可能绘制在某一个图层缓冲区中和地图图层交织在一起。如果把业务数据绘制在“后台缓冲区”中,一个 “后台缓冲区”无法解决所有的业务数据专题绘图要求。为此,在现有的图层缓冲区之上,我们提出了组件缓冲区的技术,如图4所示。

图4 组件缓冲区

在原有的 “后台缓冲区”之上,增加了多个 “组件缓冲区”和一个 “屏幕缓冲区”,组件缓冲区用于分别存储不同种类的业务数据,组件缓冲区的数量可以根据实际情况进行增减。在组件缓冲区结构下的绘图流程如下:

(1)根据图层的上下次序和是否是被编辑的图层可以把地图图层数据 (如境界、水系、居民地等)分别绘制到“图层缓冲区1”到 “图层缓冲区n”中,其中多个不被编辑的图层可以绘制到一个图层缓冲区 (也可以绘制到多个图层缓冲区),每个被编辑的图层绘制到一个缓冲区;

(2)然后之下而上把每个图层缓冲区中的内容复制到“后台缓冲区”,在 “后台缓冲区”绘制选中目标的符号,完成地图数据的绘制;

(3)把每种专题数据 (或者说业务数据)分别绘制到不同的组件缓冲区,如气象数据绘制到 “组件缓冲区n”,水文数据绘制到 “组件缓冲区2”,电磁数据绘制到 “组件缓冲区1”;

(4)从下至上把 “后台缓冲区”和多个组件缓冲区的数据分别复制到 “屏幕缓冲区”;

(5)所有信息绘制好之后把 “屏幕缓冲区”中的位图信息交换到 “前台缓冲区”完成一次绘图。

我们以气象数据发生变化的绘制过程为例,说明系统的具体绘图机制:

(1)当气象数据发生变化后会触发一次地图绘图事件;

(2)由于地图数据没有发生任何变化,因此 “后台缓冲区”中的信息没有变化,不需要重新绘制,直接复制到屏幕缓冲区;

(3)气象数据发生了变化,重新绘制 “组件缓冲区n”,然后复制到屏幕缓冲区;

(4)水文数据没有发生变化,直接把 “组件缓冲去2”的位图信息复制到屏幕缓冲区;

(5)电磁数据没有发生变化,直接把 “组件缓冲去1”的位图信息复制到屏幕缓冲区;

(6)最后把 “屏幕缓冲区”中的位图信息复制到 “前台缓冲区”。

在这个过程中,只有数据发生修改的 “组件缓冲区n”进行了重绘工作,其它缓冲区中的数据都是直接复制,没有实际绘制工作,因此绘图速度会大大提高。

绘图缓冲区技术是一整套缓冲区技术的组合包括双缓冲区、地图缓冲区、图层缓冲区和组件缓冲区。不同种类缓冲区解决地图绘制过程中遇到的不同的问题。有了绘图缓冲区技术,可以有效提高不同使用方式下地图数据的绘图速度。下面,就绘图缓冲区技术的具体实现技术进行阐述。

2 绘图缓冲区技术实现

TerraMap地理信息系统中的绘图缓冲区的实现是通过3个接口来完成:缓冲区接口 (IGF_DispBitmapBuffer)、图层缓冲区控制接口 (IGIS_DispBitmapBufferController)和组件缓冲区控制接口 (IGF_DispComponentBitmap-BufferController),相互关系如图5所示。

图5 接口关系

2.1 缓冲区接口

缓冲区接口代表了位图缓冲区,可以代表图层缓冲区、后台缓冲区、组件缓冲区、屏幕缓冲区和前台缓冲区等一个具体的缓冲区。

通过 Create (int iWidth,int iHeight,int iColorBit-Count)可以创建一个缓冲区,并且设置缓冲区位图的宽度、高度和颜色位数,其中颜色位数可以使24位也可以是32位。

通过 Reset (int iWidth,int iHeight,int iColorBit Count=0)可以重新设置位图的宽度、高度和颜色位数。

通过GetBmpHandle()可以获取具体的位图句柄,拿到绘图句柄就可以在缓冲区中进行绘图,也可以获取已经绘制好的位图信息。

通过SetModified(bool bModified)可以设置缓冲区是否被修改过,前文提到的当地图数据没有发生改变的时候,就设置缓冲区为没有修改,这样就不必重新绘制缓冲区了。

通过SetTransparentColor(int iColor)可以设置图层的透明色。在缓冲区复制的时候,不能把整个缓冲区位图都复制到另一个缓冲区,否则会把已经绘制好的一些地图数据覆盖掉。为此在缓冲区中设置了透明色,当缓冲区中某个区域的颜色为透明色的时候,缓冲区复制的时候将不会绘制这块区域。

2.2 图层缓冲区控制接口

图层缓冲区控制接口描述了有多个图层缓冲区和一个后台缓冲区组成缓冲区集合,用于解决地图绘制中产生的绘图速度问题。

通过GetBackgoundBufferPtr()可以获取 “后台缓冲区”,“后台缓冲区”是一个IGF_DispBitmapBuffer接口。

通过GetBufferCount()可以获取图层缓冲区的数量。

通过GetBuffer(int iIndex)可以获取某一个具体的图层缓冲区,图层缓冲区是一个IGF_DispBitmapBuffer接口。

通过InsertBuffer(int iIndex,const char* szName)可以增加一个图层缓冲区。

通过DeleteBuffer(int iIndex)可以删除某一个具体的缓冲区。

2.3 组件缓冲区控制接口

组件缓冲区控制接口代表了由后台缓冲区、多个组件缓冲区和屏幕缓冲区组成的缓冲区集合,用于解决专题业务数据绘制过程中的速度问题。

通过GetScreenBufferPtr()可以获取 “屏幕缓冲区”,“屏幕缓冲区”是一个IGF_DispBitmapBuffer接口。

通过GetBufferCount()可以获取组件缓冲区的数量,组件缓冲区是一个IGF_DispBitmapBuffer接口。

通过GetBuffer(int iIndex)可以获取某一个具体的组件缓冲区。

3 成 果

TerraMap所采用的绘图缓冲区技术是针对地理信息系统中地图绘制过程中碰到的各种影响绘图速度问题,专门研制的一套技术并加以实现。由于绘图缓冲区技术的应用,TerraMap在各种应用场景中 (地图选取、编辑、专题数据选取、编辑等)都能够提供很好的地图绘制速度,满足不同业务应用对地图绘制的需求。绘图缓冲区技术也可以应用在其它地理信息平台的研制过程中。

4 结束语

对于地理信息系统这样的以图形处理为主要工作内容的软件系统,缓冲区技术是一个必不可少的关键技术。任何地理信息系统都会或多或少的利用到缓冲区技术,在TerraMap中为了满足各种具体应用的要求,对缓冲区技术进行了充分深入的研究,从多个层面解决不同层次的问题。本文提到的缓冲区技术的研究思路同样适用于其它图形处理软件,如CAD软件等,而不仅仅是地理信息系统中。只是其它系统中需要根据实际应用需求对缓冲区技术进行一定的调整,但是基本思路是一致的。

[1]NING Jinsheng,CHEN Junyong,LI Deren,et al.Introduction to surveying and mapping [M].Wuhan:Wuhan University Press,2009:9-17 (in Chinese). [宁津生,陈俊勇,李德仁,等.测绘学概论 [M].武汉:武汉大学出版社,2009:9-17.]

[2]LIN Aiwen.Physical geography [M].Wuhan:Wuhan University Press,2010:4-13 (in Chinese). [林爱文.自然地理学 [M].武汉:武汉大学出版社,2010:4-13.]

[3]GUO Qingsheng, HUANG Yuanlin,ZHENG Chunyan,et al.Spatial reasoning and incremental map generalization[M].Wuhan:Wuhan University Press,2007:7-17 (in Chinese).[郭庆胜,黄远林,郑春燕,等.空间推理与渐进式地图综合 [M].武汉:武汉大学出版社,2007:7-17.]

[4]ZHANG Xinchang,ZENG Guanghong,ZHANG Qingnian.Cities geographic information system [M].Beijing:Science Press,2006:25-74(in Chinese).[张新长,增广鸿,张青年.城市地理信息系统 [M].北京:科学出版社,2006:25-74.]

[5]ZHANG Hong,WEN Yongning,LIU Aili.Geographic information system based algorithm [M].Beijing:Science Press,2007:15-44(in Chinese).[张宏,温永宁,刘爱利.地理信息系统算法基础 [M].北京:科学出版社,2007:15-44.]

[6]HUA Yixin,WANG Fei,GUO Xinghua,et al.General principles and techniques of operational picture[M].Beijing:PLA Publishing House,2007:21-46 (in Chinese). [华一新,王飞,郭兴华,等.通用作战图原理与技术 [M].北京:解放军出版社,2007:21-46.]

[7]XU Xiru.Remote sensing physics[M].Beijing:Peking University Press,2006:20-25 (in Chinese).[徐希孺.遥感物理[M].北京:北京大学出版社,2006:20-25.]

[8]ZHANG Baogang.Topographical maps of the six space-time database construction time element[M].Beijing:Surveying and Mapping Press,2009:2-4(in Chinese).[张保钢.地形图时空数据库建设中的六个时间要素 [M].北京:测绘出版社,2009:2-4.]

[9]ZHANG Wei.Large scale digital topographic map database acquisition and construction of integrated system development[M].Beijing:Surveying and Mapping Press,2009:16-19(in Chinese).[张伟.大比例尺数字地形图采集与建库一体化系统研制 [M].北京:测绘出版社,2009:16-19.]

[10]DUAN Liqiong.Strengthen the universal conversion platform Forgeographical information systems reflections on the construction [M].Beijing:Surveying and Mapping Press,2009:28-30(in Chinese).[段丽琼.加强地理信息系统通用转换平台建设的几点思考 [M].北京:测绘出版社,2009:28-30.]

[11]YANG Yingwei.The public map service in the multi-scale spatial data production and maintenance [M].Beijing:Surveying and Mapping Press,2009:34-39 (in Chinese).[杨英伟.公众地图服务中多尺度空间数据生产与维护 [M].北京:测绘出版社,2009:34-39.]

[12]CHE Zhiqiang.GIS-based geological map spatial database[M].Beijing:Surveying and Mapping Press,2009:43-47(in Chinese).[车志强.基于GIS的地质图空间数据库建设[M].北京:测绘出版社,2009:43-47.]

[13]JIANG Botao.Ground sample distance map based on biopsy tissue model[M].Beijing:Surveying and Mapping Press,2009:804-807(in Chinese).[蒋波涛.基于地面采样距离的地图切片组织模型研究 [M].北京:测绘出版社,2009:804-807.]

[14]XU Yunhe.Plug-in design and implementation of GIS [M].Beijing:Surveying and Mapping Press,2009:816-823 (in Chinese). [徐云和.插件式GIS设计与实现 [M].北京:测绘出版社,2009:816-823.]

[15]BAO Nisha.Raster vector data and method of the process of selection of scale [M].Beijing:Surveying and Mapping Press,2009:823-828 (in Chinese). [包妮沙.矢量数据栅格化过程中尺度与方法选择研究 [M].北京:测绘出版社,2009:823-828.]

[16]TONG Ligui.3Genvironment,the mobile GIS industry[M].Beijing:Surveying and Mapping Press,2009:832-836(in Chinese). [童丽闺.3G环境下的移动GIS行业发展[M].北京:测绘出版社,2009:832-836.]

猜你喜欢
缓冲区后台图层
后台暗恋
基于网络聚类与自适应概率的数据库缓冲区替换*
嫩江重要省界缓冲区水质单因子评价法研究
巧用混合图层 制作抽象动感森林
前台、后台精彩花絮停不了
图层法在地理区域图读图中的应用
跟我学添加真实的光照效果
关键链技术缓冲区的确定方法研究
浅析“递层优化法”在矿井制图中的应用
电力调度中后台监控系统的应用