|
阅读:1171回复:0
AE开发-Geodatabase库-Core geodatabase
<P>Geodatabase库有以下12个子系统(或者12个OMD)组成:</P>
<P>1.Core Geodatabase<BR>2.Geometric network<BR>3.Topology<BR>4.Data Elements<BR>5.Tin<BR>6.Data Transfer<BR>7.Versioning<BR>8.Name Objects<BR>9.Relation Query Table<BR>10.Raster<BR>11.Metadata<BR>12.Piug-in datasource<BR>本节对第一部分进行简要说明和解释。</P> <P>1.Core Geodatabase<BR>该库是GeoDatabase的核心数据库,涵盖的接口和对象类型也最多,最复杂。对于该库的掌握难度也最大。</P> <P>1.1 Workspace(Class)<BR>包括空间和非空间的数据集(datasets)。<BR>Workspace对象提供了方法可以实现对现存数据集的实例化,创建新的数据集。<BR>主要分成三种类型:<BR>esriFileSystemWorkspace(Shapefiel和ArcInfo Workspace)<BR>esriLocalDatabaseWorkspace(personal geodatabase)<BR>esriRemoteDatabaseWorkspace(enterprise geodatabase)<BR>其他类型还有:<BR>RasterWorkspace(Grids和Images)<BR>TinWorkspace<BR>CADWorkspace<BR>VPFWorkspace</P> <P>1.2Editing Data<BR>使应用程序可利用Transaction(事务)管理数据的直接更新。<BR>ITransaction接口用于管理Transaction<BR>IWorkspaceEdit接口用于利用session管理长Transaction(主要方法有:StartEditing,StartEditOperation,AbortEditOperation,StopOperation等)<BR>下面的例子显示了在一个工作空间中简单的编辑进程:</P> <P>Public Sub WorkspaceEdit()<BR>Dim pWorkspaceFactory As IWorkspaceFactory<BR>Set pWorkspaceFactory = New esriDataSourcesGDB.AccessWorkspaceFactory<BR>Dim pFeatureWorkspace As IFeatureWorkspace<BR>Set pFeatureWorkspace = pWorkspaceFactory.OpenFromFile("D:\Usa.mdb", 0)<BR>Dim pFeatureClass As IFeatureClass<BR>Set pFeatureClass = pFeatureWorkspace.OpenFeatureClass("States")<BR>Dim pWorkspaceEdit As IWorkspaceEdit<BR>Set pWorkspaceEdit = pFeatureWorkspace<BR>Dim pFeature As IFeature<BR>Dim iResponse As Integer<BR>Dim bHasEdits As Boolean<BR>pWorkspaceEdit.StartEditing True<BR>pWorkspaceEdit.StartEditOperation<BR>Set pFeature = pFeatureClass.GetFeature(1)<BR>pFeature.Delete<BR>pWorkspaceEdit.StopEditOperation<BR>iResponse = MsgBox("Undo operation?", vbYesNo)<BR>If iResponse = vbYes Then<BR>pWorkspaceEdit.UndoEditOperation<BR>End If<BR>pWorkspaceEdit.HasEdits bHasEdits<BR>If bHasEdits Then<BR>pWorkspaceEdit.StopEditing MsgBox("Save edits?", vbYesNo)<BR>End If<BR>End Sub</P> <P>正确的对象编辑原则:<BR>1.所有编辑对象都应当在编辑进程内<BR>2.将改变在编辑操作中编成组<BR>3.放弃所有在编辑进程边界上的row对象的参考<BR>4.利用非循环的指针取回需要更新的编辑对象<BR>5.取回编辑对象的所有属性<BR>6.编辑row对象后要标注,且通知其他所有相关对象<BR>7.保持数据库完整性</P> <P>1.3Workspace Extension (Class)<BR>在某些方面扩展Workspace的功能,例如管理自定义数据集的一个新类型,维护自定义数据字典。</P> <P>1.4 Datasets(Abstract Class)<BR>Datasets是一个abstract class,是工作空间(Workspace)中的数据集合,可以包括其他数据集,所有的数据集都支持IDataset,IDatasetEdit,IMetadata接口。<BR>Datasets包括tables, feature class, relation classes, feature datasets, topologies, geometric networks等。<BR>Feature Datasets是feature class的集合,也包括relationship classes, geometric networks, topologies.<BR>存贮简单features的Feature classes,在feature dataset外部或内部组织。那些在feature dataset外部的被称作独立的feature classes;存贮topological features的Feature classes,必须包含在feature dataset内以保证公共的空间参考。<BR>一个FeatureDataset是一个dataset,仅存在于一个geodatabase workspace中,在FeatureDataset中的所有datasets也是相同geodatabase中的部分。在geodatabase中的每一个dataset必须有唯一名称。</P> <P>1.5 Table, object class, and feature class<BR>1.5.1Table对象包含至少一列,对应字段(field)<BR>一个Table就是一个Dataset,可以利用IDataset接口获取表名称,工作空间等属性。<BR>ISqlsyntax接口ParseTableName方法可以分离不同数据库(SQL,ORCAL等)中文件名称到对应的部分。</P> <P>1.5.2 object class是一个表格,他的行对应着实体,用属性和行为模拟成对象。<BR>object对象通过IRow和IObject接口控制row对象。<BR>一个FeatureClass是一个ObjectClass,其中的对象就是Feature,也就是说一个Feature class是一个空间实体的集合。</P> <P>1.5.3Rows, objects and features<BR>Row类产生自Table类,而Object类继承自Row类,Feature类又继承自Object类。<BR>Row类的对象是一个表格的固定的一行,通过表格的指针获取。Row有一系列的Fields。<BR>Object类的对象是一个表格,他的一行对应于一个实体。他的另一个名称是Entities Object。通过ObjectClass的IRow和IObject接口控制行中的对象。<BR>Feature是一个空间对象,是Feature class一个成员。</P> <P>1.5.4Query, cursors, and selection<BR>1.5.4.1 Cursors是一个数据访问对象,有三种类型:<BR>search<BR>insert<BR>update<BR>下面是个简单的Cursors操作的例子:</P> <P>Dim pCursor As ICursor<BR>Dim pRow As IRow<BR>Set pCursor = pTable.Search(Nothing, False)<BR>Set pRow = pCursor.NextRow<BR>Do Until pRow Is Nothing<BR>Debug.Print pRow.Value(0)<BR>Set pRow = pCursor.NextRow<BR>Loop</P> <P>1.5.4.2Query filters and spatial filters<BR>Queryfilter是一个按照属性值过滤表格数据的类<BR>Spatialfilters继承自Queryfilters,包括空间和属性两方面的限制。<BR>ISpatialFilter 接口用于定义地理过滤标准。</P> <P>1.5.4.3 Selection<BR>SelectionSet对象可以让应用程序参考row选择集<BR>ISelectionSet接口用于管理查询选择集</P> <P>1.5.4.4 QueryDef<BR>QueryDef对象表达在一个或多个表格(Table)和Feature class中定义数据集查询。<BR>主要用于确定在arbitrary tables中计算数据集查询。<BR>IQueryDef接口用于建立和定义查询,也可以提供一个计算方法用于计算查询并返回指针。</P> <P>1.5.4.6Class Extensions<BR>ClassExtension给了开发者定制和高级扩展Geodatabase功能的能力。<BR>IClassExtension接口是执行ClassExtension的主要接口。</P> <P>1.5.4.7Domains and validation rules<BR>Rules与对象类关联,在对象类内的Validating对象处理过程中使用。<BR>从Rule抽象类中产生三类型子类:<BR>AttributeRule<BR>RelationshipRule<BR>ConnectivityRule(进一步拆分又有JunctionConnectivityRule和EdgeConnectivityRule)</P> <P>1.5.4.7.1Attribute rules and domains<BR>Attribute rule应用attribute domain产生一个对象类。<BR>Domain是一个抽象类,用于定义RangeDomain和CodedValueDomain组件类使用的接口,去约束每一个丢失的值,这些丢失的值是与Object和Feature类中特定字段关联的。<BR>Domain在自类型中指定。</P> <P>1.5.4.7.2Relationship rules<BR>RelationshipRule约束在RelationshipClass中参与的两个子类型间的cardinalities。</P> <P>1.5.4.7.3Connectivity rules<BR>Connectivity Rule约束网络连通性的类型。<BR></P> |
|
|