前言
21世纪是信息的世纪,综合国力的竞争在很大程度上是信息的竞争,更是信息利用率的竞争。近年来,随着“数字地球”和“数字国土”战略的提出和实施,地学领域的海量数据飞速增长,数据的存储、分析、管理和处理变得日益复杂。随着Oracle技术的成熟,尤其是8.15本版后Oracle Spatial的出现,数据仓库在海量数据存储、分析和表达方面有着无可比拟的优势。同时,由于信息量的巨大,传统的数据存储和显示方式在大范围数据快速浏览方面显得力不从心,这样有必要改变空间数据的存储方式,加载需要的空间数据部分,避免不必要数据的反复加载和卸载。
分层管理器
1、分层管理器架构
分层管理器是实现大范围数据的快速浏览的关键部分,它控制了逐层细化表的结构和元数据的定义和赋值,定义了组件表中的关键信息,给出了空间数据的来源、数据挖掘规则、图层加载范围和图形编辑、输出和保存。分层管理器有两部分组成,分别为:
a) 一组存储于Oracle数据仓库中的空间数据表,用于逐层细化图层中的每个详细信息层,这些表称为组件表;
b) 一个空表,包含该表的结构定义和描述组件表的特殊元数据,该表称为逐层细化表。任何逐层细化应用程序均需要逐层细化表,从中可以了解逐层细化图层中各层的层次关键字描述,以及它们之间的层次关联方式。进行分层时,分层管理器作为程序的一部分,确定需要添加的子图元所在的图层及其关键字,以便确定在逐层细化图层中需要添加和删除的图元信息。
逐层细化图层是一种特殊的地图图层,它是有自己表结构的空白图层,并用元数据规定了所有加载图层的一些规则和限制,所显示出来的地图信息是按照元数据规定的规则从其它表或数据库中提取出来的。在地图中显示逐层细化图层时,分层管理器会创建一个临时表,然后将组件表中的图元复制到该临时表中。逐层细化图层中显示的图元实际上是组件表中图元的副本。这样就可以灵活的在图层上面加载需要的信息。在应用程序终止时,将丢弃该临时表,为了保存有用的专题图信息,可以对提取出来的图层进行保存。此时,如果用户查看图层信息时,逐层细化图层仍将是单个图层。
逐层细化表的要求作为分层管理器的组织核心部分,它定义了元数据关键字和三个标准列:关键字、层和标签。并有着自己的一套语法:
(1) 关键字 begin_metadata 标记逐层细化表中元数据部分的开头。
(2) 每行元数据包含两个元素:关键字和值。所有关键字和值均使用双引号引起来。
(3) 逐层细化表必须包含 \IsDrilldown 关键字,该关键字的值必须为 True。
(4) 每个关键字以“\”(反斜线)开头。
(5) 元数据关键字可以在层次结构中嵌套。层次结构中的每一层以反斜线 (\) 标记。
(6) 元数据包括 \DDMap\ComponentMaps\ 关键字层次结构。在该层次结构中为每个组件表指定四个元数据关键字。
分层管理器的分层原理图如图1所示,从图中可以看出,分层管理器有两部分组成:组件表和逐层细化表组成,分层管理器根据系统的要求以数据挖掘的方式从Oracle数据仓库中提取数据,形成组件表中的某个图层,然后确定需要加载图层的名称和图层中的部分,并加载到逐层细化表中。如果是第一次加载,此时的逐层细化表是空白图层,在加载过程中,逐层细化表不断的进行图元信息的增加和删除,这样会出现每个组件表中的部分信息显示在逐层细化表所示的图层中。这样输出所需要的图层,并对它进行编辑,由于逐层细化表中数据是个组件表中的副本,需要对编辑后的图层进行另存,形成专题图。
分层管理器首先形成空白图层,通过分层管理器用数据挖掘工具从Oracle数据仓库中提取数据,根据分层管理器的元数据规则形成一级的图层,在该图层中,通过响应事件,以确定加载二级图层的图层名称和该图层中的加载部分,相应的加载三级、四级图层数据,在加载的同时,就形成了各种专题图。当然,分层管理器功能的实现是通过GIS组件(MapX、MO、AO等)和编程语言(VB、VC、Delphi等)来实现的。
2、分层管理器开发步骤
分层管理器应用程序需要进行许多设置和准备。主要步骤汇总如下:
(1)获取多层逐层细化图层时要使用的各个表的数据。
(2)创建一个包含特殊列和特殊元数据的新的空逐层细化表(.tab 文件)。元数据为每个组件表指定一个层名,同时标识组件表中的重要列标识列和标题列。
(3)将逐层细化表加入地图。例如,将逐层细化表加入您使用的Geoset,或通过编码方法将逐层细化表加入地图。
(4)在应用程序中添加用户界面元素,响应逐层细化事件。
(5)添加代码,响应用户对逐层细化工具的使用(也就是说编写分层管理器)。
(6)该代码需要检测用户已选择的图元;确定需要添加的子图元和需要删除的图元;调用应用程序来实现分层或汇总地图图元。
实例分析
由于遥感影响数据量特别巨大,对于数据的存储、管理、分析和有用图形部分显示就显得非常困难,这需要用关系----对象数据库对数据进行存储。在图形显示时,为了使取得有用图层信息,减少加载时间和提高编辑效率,需要对图形进行分层显示,即用到了前面介绍的分层管理器技术。本文用VB作为编程语言,MapX作为GIS组件进行二次开发来实现分层管理技术。
1、构建分层管理器
构建逐层细化表,其表结构为:
Definition Table
Type Native Charset "WindowsLatin1"
Fields 3
Key Char (32);
Level Char (32);
Label Char (32) ;
元数据关键字和对应值为:
begin_metadata
"\IsDrilldown" = "TRUE"
"\DDMap\ComponentMaps\One\File" = " Tab_YNP.TAB"
"\DDMap\ComponentMaps\One\LevelID" = " Tab_YNP "
"\DDMap\ComponentMaps\One\FeatureIDCol" = "3"
"\DDMap\ComponentMaps\One\FeatureCaptionCol" = "1"
…(其他各组件层的关键字和值与此相同)
"\DDMap\HierarchyManager\IsDLL" = "TRUE"
"\DDMap\HierarchyManager\ID" = "SomeDLL.dll"
"\DDMap\HierarchyManager\InitialLevel" = " Tab_YNP "
end_metadata
2、分层管理器的实现
使用 CreateCustomTool 方法实现逐层细化工具,定义为:Map1.CreateCustomTool customDrilldownExpandTool, miToolTypePoint, miDrilldownExpandCursor, miDrilldownContractCursor, miDrilldownContractCursor
每次使用自定义逐层细化工具均会触发 ToolUsed 事件。在 ToolUsed 事件过程中,您将需要执行产生逐层细化行为的代码。该过程主要分为四个步骤:
(1)使用 SelectByPoint 或 SearchAtPoint 之类的方法确定用户单击的地图图元。
(2)确定应取代用户单击的图元的子图元集。例如,可以使用一个或多个嵌套的 Case 语句确定哪些子图元取代所选的父图元。
(3)提取空间数据。根据前述条件,用SQL语言从数据仓库中提取信息,如:select goloc form YN. Tab_HQ_KC where Prix=68
(4)调用 DrilldownAddFeatures 方法将子图元加入地图。
(5)调用 DrilldownRemoveFeatures 方法从地图中删除父图元(用户单击的图元)。
(6)对显示图层进行编辑,并把编辑结果保存。
3、结果分析
从实例的结果可以看出,Oracle数据仓库能够方便的对空间数据进行存储、分析、管理和输出,数据挖掘技术的应用能够灵活存取数据,而不需要加载整个数据表中的所有数据,分层管理器的应用实现了空间数据大范围快速浏览和不同主题图层的部分叠加,实际应用中有着非常方便的应用。
结论
高效地利用现有的海量数据是目前面临的难题之一。Oracle数据仓库技术是专门针对海量数据的管理和应用的技术,它在对象-关系型数据库、功能强大的DBMS和支持可视化检索方面有着非常明显的优势。地学数据仓库的理论在今年的时间应用中不断完善,本文在数据仓库的存储、分析和表达层方面把理论和实际应用相结合,结合分层管理GIS二次开发,开发出基于Oracle数据仓库的分层管理系统,它结合了数据仓库和分层管理的优点,在地学空间数据应用方面进行了有益的尝试。