|
析、破解和转换其他GIS软件的二进制文件格式,SIMS提出了一种内置于GIS软件中的特殊数据访问体系结构。它需要实现不同格式数据的管理、调度、缓存(Cache),并提供不同格式数据之间的互操作能力。
三、SIMS的体系结构
SIMS技术体系是一种紧凑三层结构,包括:数据消费者(Customer)、数据代理(Agency)和数据提供者(Provider)。每一层有明确分工:数据提供者直接访问数据文件或者数据库,并通过数据代理提供给其他模块使用;数据消费者消费和使用数据的模块,通常负责对数据的各种分析、处理和表现;数据代理是维系数据消费者和数据提供者之间的纽带,来自提供者的数据通过代理这个中介传递给消费者,完成一次数据访问(或者数据消费),一次数据消费行为可能产生新的数据(如:迭加分析产生的新图层、缓冲区分析产生的缓冲区多边形等),这些新的数据也是通过代理传递给提供者,由提供者完成存盘动作。
1、数据消费者
数据消费者指GIS软件中使用或者消费数据的部分。它们包括:拓扑处理、地图显示、空间分析、三维表现、专题图制作、数据转换、制图输出等等模块。这些模块使用数据,是数据消费者。
数据消费者不直接与存储数据的文件或者数据库打交道,所有对数据的访问都通过数据代理完成。
2、数据代理
数据代理是联系数据消费者和数据提供者的中介,代理负责把来自提供者的数据传递给消费者使用,并把消费者产生的新数据传递给提供者存储。
SIMS技术中的数据代理是一个虚拟空间数据引擎(Virtual Spatialdata Engine)。该引擎定义了数据访问的框架,但并不实现具体的数据访问功能,因此该引擎是“虚拟”的。
3、数据提供者
数据提供者指直接访问数据文件或者数据库的模块,这些模块获取数据并通过代理提供给消费者使用,并且把传回来的数据存储到文件或数据库。
SIMS提供了访问多种格式数据的能力,对每一种数据格式的访问,最终通过空间数据引擎(Spatialdata Engine)实现。数据提供者由一组空间数据引擎组成,每个引擎负责访问一种数据格式。比如SQL Server引擎访问存储在SQL Server中的空间数据、Oracle引擎访问Oracle Spatial数据库、SDE引擎访问ESRI SDE支持的各种数据库、Arc/Info引擎存取Arc/Info Coverage等等。
为方便引擎的管理和调度,每个引擎具有统一的接口,封装成一个动态连接库—DLL(Dynamic Linking Library)。类似于一些软件的插件(Plug-in或Add-in)机制,引擎DLL存放在特定目录下,程序启动时自动搜索该目录,动态调入并注册。
一般而言,空间数据引擎只提供存储、读取、检索、管理数据和对数据的基本处理等功能,不负责进行空间分析和复杂处理。但是基于第三方API(如:Oracle Spatial和ESRI SDE)开发的引擎可以提供更多功能。
一般而言,空间数据引擎动态连接库的实现有三种方式,即:标准API函数DLL、C++类库DLL和OLE 自动化DLL。由于空间数据引擎结构复杂、函数接口多;标准API函数DLL中的函数缺乏层次性,不便使用,而且不符合面向对象程序设计的潮流,不适合空间数据引擎。OLE自动化DLL中可以实现一系列具有标准接口的二进制对象,对象层次清晰,接口标准,适合建立空间数据引擎。
为了达到更高的数据访问速度,本研究采用了C++类库DLL。但是,使用C++类的DLL只能使用编译连接,无法实现DLL的动态载入。
使用C++的虚函数机制可以较好地解决这个问题。虚拟空间数据引擎也是一个单独的动态连接库,这个动态连接库定义了数据访问需要的所有类,比如
undefined
undefined
数据源(DataSource)或工程(Project)、数据集(Dataset)或图层(Laye |