基于Geodatabase数据模型的数据归档 (转载)

http://www.cnblogs.com/dancingfeather/archive/2008/04/11/1148534.html

ArcGIS软件向用户提供了数据归档这样一个功能,不知大家是否体验过。最近由于工作的需要,我有幸接触了这一方面的知识。以前我常常为如何去实现历史数据的展示而苦恼,而现在通过Geodatabase模型提供的归档操作,就可以轻易地展现以前任意时刻的数据,并以当时的状态进行数据库操作,同时还可以查看任意特定要素在一个时间段里变化。这样一种变化让我有一些欣喜。下面让我们一起来了解一下数据归档的相关内容。(基于Geodatabase数据模型的版本机制

一、什么是数据归档?(What is Archiving ?)

Archiving provides the ability to store all temporal representations of a dataset, writing any changes made to an object to an associated archive table. This object model provides functionality to create historical versions which reference a specific moment in time.

归档操作向用户提供了这样一个功能:将对归档的要素集(要素类)所做的任何编辑操作保存到相关联的archive 表。这种对象模型同时也允许用户创建特定时间的历史版本。

二、归档-如何工作?

1、历史信息存储在Archive表中

我们允许对某要素集(要素类)进行归档时,将会创建相应的Archive表,并Copy一份原有的数据。打开Archive表,我们发现其数据结构与原表数据结构并没有什么太大的变化,只是多了三个字段GDB_FROM_DATE(起始时间)GDB_TO_DATE(终止时间)、GDB_ARCHIVE_OID(对象ID编号)

2、所有对Default版本所作的变更都被归档

理解这一句话很重要,数据归档针对的对象是Default版本,所有其子版本所做的变更只有通过提交之后才会被归档,否则不会有什么变化。

3、Archive表含有fromto日期属性

4、Archive表可直接使用日期属性查询(两种查询方式):

A、时间点查询(Moment in Time Query):显示某一时间点的所有记录.

B、时间段查询:

A时间点到B时间点的某一对象所有记录。

A时间点到B时间点的所有记录。

5、ArcDesktop中如何操作:

这篇文档中有详细的介绍,大家可以参考:体验ArcGIS9.2的历史库功能

三、AE类图与接口

1、IHistoricalWorkspace接口与IHistoricalVersion接口:

通过类图结构我们可以很清楚地了解它们之间的关系,Workspace实现了IHistoricalWorkspace接口,通过其方法按名称查找版本(FindHistoricalVersionByName())、按时间戳查找版本(FindHistoricalVersionByTimeStamp()),我们便可以得到VersionedWorkspace对象。通过VersionedWorkspace对象我们可以得到IHistoricalVersion的引用。下面是C#示例代码:

     
1 // assuming a reference to a SDE workspace exists
2 IHistoricalWorkspace pHistWorksapce = mWorkspace as IHistoricalWorkspace;
3
4 IHistoricalVersion pHistVersion = pHistWorksapce.FindHistoricalVersionByName(“VersionName”);
5

2、FeatureClass类与IHistoricalClass接口:

FeatureClass类继承了IHistoricalClass接口,通过IHistoricalClass接口我们可以很方便地得到该FeatureClass相应的归档对象。下面是C#示例代码:

3EnumHistoricalMarker类与HistoricalVersionMarker

1 IArchivableClass pArchivableClass = pFeatureClass as IArchivableClass;
2
3 // 得到归档文件
4 IFeatureLayer pNewFeatLayer = new FeatureLayerClass();
5
6 pNewFeatLayer.FeatureClass = pArchivableClass.Archive as IFeatureClass;
7
8

历史版本从本质上来讲是历史标识(HistoricalVersionMarker),其在数据工作空间中的存在相当于一个事务性版本。通过IHistoricalMarker接口提供的方法AddHistoricalMarker可以实现历史标识的添加。下面是C#代码示例:

1              // assuming a reference to a SDE workspace exists
2
3              IHistoricalWorkspace historicalWorkspace = (IHistoricalWorkspace)sdeWorkspace;
4
5              IEnumHistoricalMarker enumHistoricalMarker = historicalWorkspace.HistoricalMarkers;
6
7              IHistoricalMarker historicalMarker = enumHistoricalMarker.Next();
8
9              while (historicalMarker != null )
10
11              {
12
13                 System.Windows.Forms.MessageBox.Show(" Name:"+ historicalMarker.Name +" Time Referenced:"+ historicalMarker.TimeStamp);
14
15                 historicalMarker = enumHistoricalMarker.Next();
16
17          }

18

转载于:https://www.cnblogs.com/yangkai820008/archive/2008/07/16/1244086.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值