|
r)、记录集(Recordset)等,这些类的大部分函数定义为纯虚函数,比如打开工程、关闭工程、创建数据集、读写空间数据、读写属性数据、查询、建立空间索引等等。由于有纯虚函数,因此虚拟空间数据引擎中的数据访问类不可实例化。每个数据引擎动态库继承虚拟空间数据引擎中的类,并且实现所有的虚函数(否则无法实例化)。为了实现C++类库的动态挂接,在每个空间数据引擎中还需要实现一个API函数来创建相应的数据源或者工程。假设虚拟空间数据引擎中的数据源类为CDataSource,该类在SQL Server引擎中的继承类为CSqlDataSource,那么这个API函数可以这样实现:
CDataSource *CreateDataSource()
{
CSqlDataSource *pDataSource = new CSqlDataSource;
return (CDataSource *)pDataSource;
}
该函数负责创建相应的数据源派生类,主调函数可以在不知道CDataSource的子类名(此例中为CSqlDataSource)的情况下创建该类的实例。其他的类如数据集、记录集等由数据源创建。一旦对象被创建,所有的操作均使用虚基类定义的函数接口进行,但是实际的运行将会自动调用子类的函数。
这种方式可以充分利用C++的优点,如继承,多态、封装等,而且不影响系统响应速度。尽管从概念模型上看,数据提供者总是通过虚拟空间数据引擎(数据代理)传递给消费者,实际上并没有任何多余的内存拷贝和数据转换,所谓的数据传递变成了调用接口的传递,这种传递通过C++类库的虚函数机制实现,不影响效率。因此,SIMS采用的是紧凑三层结构,与Web三层体系不同。
四、SIMS技术在GIS软件开发中的应用
中国科学院地理信息产业发展中心研制的新一代组件式GIS软件—SuperMap 2000采用了SIMS技术。为了适应不同层次应用的需要,SuperMap创造性地实现了以多种方式存储、管理GIS数据。除了支持其他GIS软件的一些文件格式(如:Oracle Spatial和ESRI SDE)外,SuperMap自定义的数据结构也提供了多种方式,包括: Access MDB数据库、SQL Server数据库和OLE复合文档(SuperMap SDB文件)。
这几种存储方式适合于建立不同层次的应用。MDB和SDB数据一般存储在本地、SQL Server、Oracle、SDE数据库一般存放在网络服务器。因此,SuperMap通过SIMS技术进行分析和数据处理时,不仅实现了数据格式无关,而且实现了存储位置无关。
SuperMap 2.0提供的引擎包括:SDB、MDB、SQL Server、Oracle、SDE。其中SDB、MDB、SQL Server使用了SuperMap的内部格式,Oracle、SDE基于相应的API开发工具实现。在以后的版本中,将会逐步提供Arc/Info Coverage、MicroStation DGN、ArcView Shape、AutoCAD DWG等引擎以直接访问其他GIS/CAD软件的数据格式(图2)。
1、SDB引擎
SDB(SuperMap Spatial Database)引擎是SuperMap 2.0中唯一的文件型空间数据引擎。这种引擎采用传统的文件+数据库混合存储方式。SDB引擎的一个数据工程包括两个文件,扩展名为SDB的文件存储空间数据,采用OLE复合文档技术;扩展名为SDD的文件为属性数据库,采用Access 的MDB数据库格式。由于SDB文件采用了复合文档技术,因此提供了在一个SDB工程中存储多个数据集的能力。这一点与Arc/Info Coverage、MapInfo Table文件等技术不同。SDB主要面向中、小型系统和桌面应用,目的在于提高效率,弥补纯数据库引擎在这方面的不足。
2、MDB引擎
MDB引擎是一种纯数据库引擎,采用Access的MDB数据库作为数据存储介质。基于Microsoft的Jet数据引擎实现。MDB引擎把空间数据和非空间数据存储在同一个MDB数据库中,真正实现了空间数据和非空间数据的无缝组织,同时便于维护数据。一个MDB文 |