基于COM技术的分布式栅格数据引擎设计方案与应用[日期:2005-02-18]来源:99'中国GIS年会论文集作者:[字体:大中小]王尔琪(中科院遥感应用研究所、中科院地理信息产业发展中心)程新荣赵东(中科院地理信息产业发展中心)宋关福(中科院遥感应用研究所、中科院地理信息产业发展中心)摘要:本文在回顾传统地理分析方式的基础上,探讨基于COM技术的分布式栅格数据引擎的理论框架与应用模式,提出了一个基于COM技术的栅格数据引擎实现方案,并在实践中得到成功应用。使用该方案将改变传统的地理分析方式,使地理分析人员可以使用自己熟悉的语言快速建立分析模型,大大提高协同工作效率,使地理分析更加容易与实际应用相结合,从而使地理分析得到更加广泛的应用。关键词:栅格数据引擎COM技术分布式结构地理信息的应用可以大致分为三个不同的方面:地图制作,地理信息管理,地理信息分析。在GIS发展的早期阶段,由于受到软硬件条件的限制,GIS主要用于地图制作或地图信息的管理;随着工作的积累,数据量不断增加,软硬件水平的提高,相应地要求将大量的空间数据实现一体化管理与查询;当软硬件条件进一步发展,对大量的空间数据分析成为可能,地理信息的分析处理得到快速发展,使地理信息应用不再局限于对空间数据的查询浏览,而可以进一步研究地理现象的更深层次的规律性,GIS的分析功能成为人们了解地理空间的重要工具。目前的地理分析工具主要有两大类:一类基于矢量数据结构,另一类基于栅格数据结构。两种结构适应于不同地理问题的解决,具有各自的优缺点。由于栅格数据结构更加适应于计算机的处理,速度较快,因此目前的很多地理分析模型都基于栅格数据结构。由于地理分析需要有相应的软硬件条件的支持,而其问题本身相当复杂,目前只有少数的软件才提供栅格数据模型分析功能,而这些软件的价格相当昂贵,影响了地理信息分析功能的普遍应用。由于地理问题的复杂性,各个行业对于地理信息的处理方法和要求也有非常大的差别,需要建立各种不同的模型进行分析,应该说目前的软件的分析功能还远远不能满足实际应用的要求。笔者尝试采用目前的先进的COM技术来解决这一问题,提出了一个基于COM技术的栅格数据引擎实现方案,并成功应用于SuperMap的开发实践中,取得了良好效果。通过使用COM技术,采用规范的接口和一致的数据访问方式将数据管理与数据分析相隔离,旨在提供一个易于使用、易于扩展的地理栅格数据分析方案。该方案具有以下一些优点:1、分析者不必关心数据处理的细节,只需要专注于应用模型的建立;2、分析者可以使用熟悉的任何支持COM技术的编程工具建立地理分析模型,不需要学习特定的编程语言,即可快速高效地完成地理分析功能;3、可以直接存取多种地理数据,给地理分析带来极大的便捷性;4、栅格数据引擎通过COM接口实现与其它软件的紧密集成和互操作;5、内置多种分析模型和函数运算功能,极大提高处理效率,同时可以方便地创建自己的分析模型,不受内置模型的限制;6、可以提供与分析无关的多种数据存取引擎,如内存、文件、数据库等;7、基于多层结构设计,可以部署于单机、局域网甚至Internet上,满足不同应用规模的需求。一、栅格数据引擎的基本结构栅格数据引擎由数据存储引擎、栅格化引擎、数据分析引擎、数据可视化引擎四个主要部分组成。数据存储引擎负责数据的存储管理,但一般情况不需要用户直接访问。栅格化引擎负责矢量数据的栅格化,可以接受各种外部格式的数据,支持的数据类型主要为点、线、面。数据分析引擎使用数据存储引擎和内置的分析模型进行分析,可以组合使用几种模型进行分析,用户也可以直接存取数据存储引擎来创建自己的分析模型。数据可视化引擎对栅格数据和分析结果提供可视化表达或输出结果。几个部分的关系如图一所示:图一栅格数据引擎结构关系示意图二、栅格数据存储引擎1.栅格数据存储引擎基本接口栅格数据存储引擎是整个栅格数据引擎的基础,为其它分析模型提供数据存储与管理服务。栅格数据存储引擎提供与存储方式、存储介质、存储位置无关的一致的访问接口。主要提供以下几个常用接口:SetPixel,GetPixel:读写象素值,转换为RGB值。SetValue,GetValue:读写点阵值,转换为整型值。SetValueF,GetValueF:读写点阵值,转换为浮点值。SetScanline,GetScanline:读写一个扫描行数据。2、数据存储引擎实现方案的比较由于计算机的内存有限,而磁盘的随机访问速度较慢,在具体实现需要综合考虑到速度和功能的平衡,通过实现不同的存储引擎来适应不同的要求。第一种方式使用完全的内存模式,将数据全部载入内存,运算速度较快,访问数据方便,但数据量较大时处理起来较为困难。第二种方式使用文件,被访问的数据动态载入内存,可以处理海量数据,但由于需要处理磁盘数据交换,因此速度比第一种方式要慢。由于需要处理内存数据交换,因此需要实现一个智能的调度方案,以最大限度提高性能。笔者在实践中,实现了几种不同的调度方案,以适应不同处理方式的要求。第三种方式使用数据库,可以容易地实现索引和事务处理,很容易扩展到网络环境,而且能够方便地实现数据共享。但直接使用目前的商用DBMS存储栅格数据,还存在许多困难:主流DBMS使用关系型索引,能够较好地处理一维数据,对于二维的栅格数据处理效率较低;传统的事务处理很难处理大型事务的提交或撤消;由于栅格数据处理往往需要访问全部数据而非其中的子集,导致网络负荷较重,需要快速网络才能实现;当数据量较大时,DBMS的效率急剧下降;主流DBMS使用BLOB来存储栅格数据,由于数据库按照记录来存取数据,当单个记录数据量达到一定程度时,处理起来相当困难。虽然存在这些困难,由于数据库技术发展较早,技术成熟,如果采取一些措施扬长避短,采用数据库作为栅格数据存储形式具有其特殊的优势,下面将会具体讨论采取的技术措施。3、空间索引与多分辨率如果不建立空间索引,海量栅格数据的处理效率将会相当之低。目前常用的建立空间索引的方式主要有两种:一种采用四叉树结构,一种采用Tiles结构,即空间分块索引结构。四叉树结构目前的理论研究已经较多,有了一些试验性的系统,但由于各种原因,商业应用还较少。Tiles结构具有结构简单,编程容易的特点,被很多商业软件所才采用,在TIFF6.0的标准中也定义了Tiles结构存储规范,很多数据压缩算法也基于Tiles结构。栅格数据采用TILES结构可以有效加快显示的速度和减少在每一次刷新操作中数据的传输量,以及极大地减少数据处理和显示所需要的内存消耗。但当数据量较大时,缩小显示由于仍然需要访问大量数据所以速度较慢,这是目前一些大型软件中都存在的问题。通过建立多分辨率的索引,可以大大加快小比例尺显示时的速度。但是多分辨率索引会增大存储空间要求,而且建立多分辨率索引时需要访问全部数据(当数据更新时,需要重建索引),因此第一次保存时速度将会比不建索引慢,如果数据频繁修改,这种方式反而降低速度,在数据不是频繁改动的情况下,这种方式将会带来显示速度的大幅度提高。这种方式已经被不少软件所采用。应该提出的是,除非采用适应于这种结构的算法去优化,这种方式处理数据将会比采用平面结构要慢(这种优化并不复杂,但由于所有的算法都需要特殊处理,会加大编程的工作量和增加代码长度),但仍然可以减少内存消耗。笔者在栅格数据引擎的实现中,也采用了Tiles结构,建立多级的多分辨率索引,显示时自动适配最佳分辨率,修改数据后可以自动或批量更新多分辨率索引,允许数据分块进行压缩,可以采用不同的压缩方案。对于使用数据库的存储方式,在Database中建立CATALOG表,在CATALOG表中保存影像头和索引信息,包括影像头信息(标志、版本、数据压缩方案、长宽、宽度字节数、分块大小、色彩空间),抽样级别,调色板,统计信息(最大最小值、平均值、直方图),影像分块索引(记录分块大小,横竖分块数,每一块的大小和坐标,打开图层时将索引全部读入内存)。与传统DBMS不同的是,每一幅影像采用多个Table来记录,每一条记录对应一个Tiles,对每一个Tiles建立二维索引,根据空间位置生成一个索引码,查找时根据索引码来搜寻信息,可以有效地提高性能。图二数据存储引擎的多分辨率存储与数据处理流程示意图三、栅格化引擎栅格化引擎实现常用的矢量数据栅格化功能,采用熟悉的绘图指令方式使用户使用起来更加方便,支持点线面三种数据类型。采用这种方式可以通过编程来实现各种数据的输入,不象其它软件只能接受内部格式(详见图三)。除此之外,对于SuperMap格式可以不需编程以批量或交互式直接栅格化。实现的常用接口有:SetCurrentValue:设置当前栅格的点值。SetPoint:栅格化点,点可以具有大小。MoveTo:移动当前位置。LineTo:栅格化线段。Polyline:栅格化一条折线。PolyPolyline:栅格化多条折线。Polygon:栅格化一个多边形区域。PolyPolygon:栅格化多个子多边形区域,可以具有岛与洞关系。Rectangle:栅格化一个矩形区域。Circle:栅格化一个圆形区域。栅格化引擎使用栅格数据存储引擎来完成实际的数据存取工作,用户也可以自行调用栅格数据存储引擎的函数来完成特殊的栅格化功能。四、数据分析引擎数据分析引擎完成常用的数据分析功能,提供了一些常用的计算模型和函数,用户可以利用这些功能来构建自己的数据分析模型,通过编程可以交互式完成,也可以批量进行。目前内置的分析功能主要有:表面解析:根据等高线图或高程点快速解析生成DEM数字高程模型。距离生成:根据线划栅格生成距离栅格图,用于进行成本分析等。缓冲区生成:根据线划栅格生成缓冲区栅格图,用于叠加分析等。趋势分析:根据线划栅格生成趋势面栅格图,用于叠加,统计,预测等分析。叠加分析:多栅格层的叠加运算。四则运算:栅格的加、减、乘、除四则运算。函数运算:一些常用的三角、对数等函数运算。五、数据可视化引擎数据可视化引擎提供数据的多种可视化表达方式,目前提供的主要有三维显示、分层设色、正射晕渲、硬拷贝输出、文件输出等五种方式。三维可视化:栅格数据主要用于空间数据的表达,以三维可视化方式来显示数据尤为重要。数据可视化引擎基于OpenGL图形库提供栅格数据以三维方式进行放大、缩小、旋转、漫游等功能。分层设色:数据可视化引擎还提供传统地图的分层设色功能。用户只需定义需要的颜色集,即可自动生成分层设色地图,可以生成渐变色、固定色等多种效果,而且可以与其它的地理数据相结合,自行定义颜色生成的规则。正射晕渲:数据可视化引擎还提供传统地图制作的正射晕渲功能,可以根据栅格数据分析引擎生成的DEM生成复杂的正射晕渲图;用户可以自定义光照、材质等参数,甚至每一象素颜色产生的规则,将以前需要手工完成的工作全部自动化;可以产生高精度、大幅面的正射晕渲图与其它矢量要素进行叠加或直接用于制版输出,避免了手工方式的绘制、扫描、制作、叠加、输出的复杂工序,大幅度提高了工作效率和准确性。输出硬拷贝:数据可视化引擎也提供直接的硬拷贝输出到打印机或绘图仪。其它方式:数据可视化引擎可以将结果保存到多种影像文件格式或复制到剪裁板上,可以与MicrosoftWord、Excel、PowerPoint等Office工具紧密结合,制作报告或演示文档,也可以与CorelDraw、Photoshop等结合用于混合制版输出,或用于Arc/Info、MapInfo等GIS系统进行复合分析、用作地图显示的背景等。图三栅格化引擎的多源数据存取示意图六、栅格数据引擎基于多层结构的部署方案栅格数据分析模型较多,具有运算密集、数据量大的特点,适应GIS发展的趋势,为了满足高精度、大数据量的地理分析的需要,栅格数据处理必须建立一个网络化部署、基于多层结构的分布式处理框架。采用上面设计的栅格数据引擎,可以非常容易地扩展到局域网、广域网甚至Internet上,实现网络化、分布式处理的需要。下面简单介绍基于多层结构的分布式栅格数据处理引擎的实现与部署方案。整个方案框架由客户端程序、分析代理服务器、处