zoukankan      html  css  js  c++  java
  • 基于Geodatabase数据模型的数据归档

    基于Geodatabase数据模型的数据归档

    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
    2IHistoricalWorkspace pHistWorksapce =mWorkspace as IHistoricalWorkspace;
    3
    4IHistoricalVersion pHistVersion = pHistWorksapce.FindHistoricalVersionByName(“VersionName”);
    5

    2、  FeatureClass类与IHistoricalClass接口:

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

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

    3EnumHistoricalMarker类与HistoricalVersionMarker

    历史版本从本质上来讲是历史标识(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

  • 相关阅读:
    【codecombat】 试玩全攻略 第二章 边远地区的森林 一步错
    【codecombat】 试玩全攻略 第十八关 最后的kithman族
    【codecombat】 试玩全攻略 第二章 边远地区的森林 woodlang cubbies
    【codecombat】 试玩全攻略 第二章 边远地区的森林 羊肠小道
    【codecombat】 试玩全攻略 第十七关 混乱的梦境
    【codecombat】 试玩全攻略 第二章 边远地区的森林 林中的死亡回避
    【codecombat】 试玩全攻略 特别关:kithguard斗殴
    【codecombat】 试玩全攻略 第二章 边远地区的森林 森林保卫战
    【codecombat】 试玩全攻略 第二章 边远地区的森林
    实验3 类和对象||
  • 原文地址:https://www.cnblogs.com/3echo/p/716496.html
Copyright © 2011-2022 走看看