GIS面向对象模型设计

来源:互联网 发布:淘宝商品采集软件 编辑:程序博客网 时间:2024/05/01 21:49

 

李泉 陈玉进 (南京跬步科技有限公司http://www.creable.cn )

13.1 GIS对象模型设计思路

       地理信息系统(Geographic Information SystemGIS)是能够收集、管理、查询、分析、操作以及表现与地理相关的数据信息的计算机信息系统,能够为分析、决策提供重要的支持平台。

       GIS引擎的内核设计目标

1.良好的体系结构,可从内核组件扩展更多样化的数据组织结构、分析部件和调度算法。

2.完全基于ANSI C++,提供OS层相关的抽象策略表示,不依赖任何平台相关技术。

3.采用嵌入式结构单元,可同时嵌入Internet和移动计算平台,当然也包括Desktop应用。

4.在海量数据处理、实时显示、高性能检索等性能敏感指标提供足够的技术投入。

5.大量应用模板等类型的复用技术,将引擎内核心部分代码压缩在15k以下。

6.考虑直接从内核数据结构上结合三维仿真引擎的需要,完整融合二维、三维空间数据的存储、表现和分析。

       地理信息系统软件整体思路就是将各个地理要素按照一定的规律存储到计算机中(可以是文件、数据库等),再由显示子系统将这些数据读入内存,并展现在窗口中,供用户观看、编辑、分析等操作。由于地理要素数据的多样性,数据管理部分的设计尤为复杂,需要再次分解为多个模块,数据管理部分与操作系统无关,基本上不存在移植的问题。显示子系统由于其特殊性,在不同的操作系统平台下API(应用程序接口)不同(虽然使用javaC#这类语言编写的代码可以跨平台使用,但是效率低下,在对计算要求比较高的地理信息系统中一般不能采用),故应该当然封装成一个模块,便于降低系统移植时的难度和风险。

       如图1所示,首先把地图抽象为一个类,那么这个地图类可以包括若干个图层,每个图层又包含若干个地图要素,每个图层需要知道自己该如何渲染,抽象的渲染类又需要知道用什么符号来画,故数据管理部分设计为一个树状结构。其中MapLayer应各自形成一个模块,ReandererSymbol与显示子系统有关,他们应处于display模块中。

 

       图层可以分为若干个种类,比如:用于存放矢量地图要素的要素层,用于快速绘制的临时层,用于显示栅格图像的栅格层等等。所以需要定义个抽象图层类供各种子类继承,这样也方便地图类统一管理所有图层。管理如何渲染的类、符号类也是如此。地图要素的几何形态采用OGC标准,在前面的章节介绍过,下面的小节将详细介绍如何实现OGC标准定义的空间几何形态。

13.2 参考模型介绍

南京跬步科技有限公司(http://www.creable.cn )自主研发的嵌入式GIS平台--GridGIS Mobile具有结构设计巧妙,扩展方便,效率高,内存占用低等特点,特别适合在嵌入式设备(如PDA、手机等)上快速建立起GIS系统,支持丰富的二次开发接口。能够运用在GPS车辆或人员监控系统、工程安全监控、环保行业的监控与数据采集、 电力或通信的巡检系统、交通、公安、消防、城市管理、物流、公共卫生、农业、旅游等众多行业中。

基于上一节介绍的GIS引擎设计思路,我们将GridGIS设计为8个模块,分别实现不能的功能,模块与模块之间无相互依赖关系,可以安全的拆分替换。Controls模块包含GridGIS定义的前台控件以及供控件使用的工具组件;Display模块包含用于总管地图符号显示与自动标注的Display组件类、用于描述符号样式的一系列组件类;Geodatabase模块负责地图要素数据的读取和管理,包含DataProvider(数据提供类)、Feature(要素)、FeatureClass(要素类)等组件类的定义;Geometry模块负责对地图要素位置几何形状的描述,包含Geometry(几何形状)、Envelope(范围)、Point(点)、Polyline(折线)、Polygon(多边形)等组件类的定义;GridMap模块负责电子地图的统一管理,包含Map组件类;MapLayer模块负责电子地图中多种图层的描述与管理,目前仅包含Layer(图层)、FeatureLayer(要素图层)、ImageLayer(栅格图像图层)组件类的定义。Indexing模块负责实现电子地图空间索引的功能,加速地图的显示与处理速度。Util模块包含一些专用的工具类。目前我们已经完成基于Windows CEWindows Mobile平台,采用C++语言编写的嵌入式GIS引擎并封装为可供二次开发的组件包。完成采用基于J2ME,采用java编写的手机GIS引擎,能够在当今具有java虚拟机的手机上运行(读取本地数据采用JSR75标准,需要手机能够支持JSR75)。

全局上本引擎的优势在于:

1.采用缓冲技术在后台预先读取下次可能显示的地图要素到内存缓冲区,这样能最大限度的利用处理器,提升地图绘制的速度。这样的设计主要体现在Geodatabase模块和Indexing模块中。

2.利用多线程技术来控制绘图请求的响应、缓冲区容量的控制等。除主线程之外,还采用画图线程、缓冲区整理线程。

3.采用网格索引硬裁切技术配合多层次网格索引结构来加速图形的绘制。在地图处理阶段,我们使用自制的切图工具将地图切为若干个小块,使用网格索引来管理这些小块,并按照Hilbert顺序写入这个小块到文件中,提升小块地图在空间上的连续性。网格索引也写入文件。在运行时,引擎将网格索引在内存中快速还原,然后查询网格索引得到需要加载的小块,再使用Geodatabase模块装载地图要素的内存。

4.我们采用将地图要素附加属性与地图图形及标注属性分离的形式管理地图,极大的降低了系统加载地图的数据量。

一些重点结构的说明:

1.本引擎采用两层过滤的方式快速过滤需要绘制和标注的图元。DataProvider类通过使用GridIndex来进行第一次过滤,FeatureLayer类对第一次过滤的结果再次过滤。

2.数据装载过程说明:①DataProvider类查询GridIndex获得当前需要加载的GridNodeDataProviderGridNode所属Feature从文件中读取到内存,并关联到GridNode下。

模块间层次关系如图1

 

原创粉丝点击