GISer

导航

AE开发-Geodatabase库-Core geodatabase (转)

Geodatabase库有以下12个子系统(或者12个OMD)组成:

1.Core Geodatabase
2.Geometric network
3.Topology
4.Data Elements
5.Tin
6.Data Transfer
7.Versioning
8.Name Objects
9.Relation Query Table
10.Raster
11.Metadata
12.Piug-in datasource
本节对第一部分进行简要说明和解释。

1.Core Geodatabase
该库是GeoDatabase的核心数据库,涵盖的接口和对象类型也最多,最复杂。对于该库的掌握难度也最大。

1.1 Workspace(Class)
包括空间和非空间的数据集(datasets)。
Workspace对象提供了方法可以实现对现存数据集的实例化,创建新的数据集。
主要分成三种类型:
esriFileSystemWorkspace(Shapefiel和ArcInfo Workspace)
esriLocalDatabaseWorkspace(personal geodatabase)
esriRemoteDatabaseWorkspace(enterprise geodatabase)
其他类型还有:
RasterWorkspace(Grids和Images)
TinWorkspace
CADWorkspace
VPFWorkspace

1.2Editing Data
使应用程序可利用Transaction(事务)管理数据的直接更新。
ITransaction接口用于管理Transaction
IWorkspaceEdit接口用于利用session管理长Transaction(主要方法有:StartEditing,StartEditOperation,AbortEditOperation,StopOperation等)
下面的例子显示了在一个工作空间中简单的编辑进程:

Public Sub WorkspaceEdit()
Dim pWorkspaceFactory As IWorkspaceFactory
Set pWorkspaceFactory = New esriDataSourcesGDB.AccessWorkspaceFactory
Dim pFeatureWorkspace As IFeatureWorkspace
Set pFeatureWorkspace = pWorkspaceFactory.OpenFromFile("D:\Usa.mdb", 0)
Dim pFeatureClass As IFeatureClass
Set pFeatureClass = pFeatureWorkspace.OpenFeatureClass("States")
Dim pWorkspaceEdit As IWorkspaceEdit
Set pWorkspaceEdit = pFeatureWorkspace
Dim pFeature As IFeature
Dim iResponse As Integer
Dim bHasEdits As Boolean
pWorkspaceEdit.StartEditing True
pWorkspaceEdit.StartEditOperation
Set pFeature = pFeatureClass.GetFeature(1)
pFeature.Delete
pWorkspaceEdit.StopEditOperation
iResponse = MsgBox("Undo operation?", vbYesNo)
If iResponse = vbYes Then
pWorkspaceEdit.UndoEditOperation
End If
pWorkspaceEdit.HasEdits bHasEdits
If bHasEdits Then
pWorkspaceEdit.StopEditing MsgBox("Save edits?", vbYesNo)
End If
End Sub

正确的对象编辑原则:
1.所有编辑对象都应当在编辑进程内
2.将改变在编辑操作中编成组
3.放弃所有在编辑进程边界上的row对象的参考
4.利用非循环的指针取回需要更新的编辑对象
5.取回编辑对象的所有属性
6.编辑row对象后要标注,且通知其他所有相关对象
7.保持数据库完整性

1.3Workspace Extension (Class)
在某些方面扩展Workspace的功能,例如管理自定义数据集的一个新类型,维护自定义数据字典。

1.4 Datasets(Abstract Class)
Datasets是一个abstract class,是工作空间(Workspace)中的数据集合,可以包括其他数据集,所有的数据集都支持IDataset,IDatasetEdit,IMetadata接口。
Datasets包括tables, feature class, relation classes, feature datasets, topologies, geometric networks等。
Feature Datasets是feature class的集合,也包括relationship classes, geometric networks, topologies.
存贮简单features的Feature classes,在feature dataset外部或内部组织。那些在feature dataset外部的被称作独立的feature classes;存贮topological features的Feature classes,必须包含在feature dataset内以保证公共的空间参考。
一个FeatureDataset是一个dataset,仅存在于一个geodatabase workspace中,在FeatureDataset中的所有datasets也是相同geodatabase中的部分。在geodatabase中的每一个dataset必须有唯一名称。

1.5 Table, object class, and feature class
1.5.1Table对象包含至少一列,对应字段(field)
一个Table就是一个Dataset,可以利用IDataset接口获取表名称,工作空间等属性。
ISqlsyntax接口ParseTableName方法可以分离不同数据库(SQL,ORCAL等)中文件名称到对应的部分。

1.5.2 object class是一个表格,他的行对应着实体,用属性和行为模拟成对象。
object对象通过IRow和IObject接口控制row对象。
一个FeatureClass是一个ObjectClass,其中的对象就是Feature,也就是说一个Feature class是一个空间实体的集合。

1.5.3Rows, objects and features
Row类产生自Table类,而Object类继承自Row类,Feature类又继承自Object类。
Row类的对象是一个表格的固定的一行,通过表格的指针获取。Row有一系列的Fields。
Object类的对象是一个表格,他的一行对应于一个实体。他的另一个名称是Entities Object。通过ObjectClass的IRow和IObject接口控制行中的对象。
Feature是一个空间对象,是Feature class一个成员。

1.5.4Query, cursors, and selection
1.5.4.1 Cursors是一个数据访问对象,有三种类型:
search
insert
update
下面是个简单的Cursors操作的例子:

Dim pCursor As ICursor
Dim pRow As IRow
Set pCursor = pTable.Search(Nothing, False)
Set pRow = pCursor.NextRow
Do Until pRow Is Nothing
Debug.Print pRow.Value(0)
Set pRow = pCursor.NextRow
Loop

1.5.4.2Query filters and spatial filters
Queryfilter是一个按照属性值过滤表格数据的类
Spatialfilters继承自Queryfilters,包括空间和属性两方面的限制。
ISpatialFilter 接口用于定义地理过滤标准。

1.5.4.3 Selection
SelectionSet对象可以让应用程序参考row选择集
ISelectionSet接口用于管理查询选择集

1.5.4.4 QueryDef
QueryDef对象表达在一个或多个表格(Table)和Feature class中定义数据集查询。
主要用于确定在arbitrary tables中计算数据集查询。
IQueryDef接口用于建立和定义查询,也可以提供一个计算方法用于计算查询并返回指针。

1.5.4.6Class Extensions
ClassExtension给了开发者定制和高级扩展Geodatabase功能的能力。
IClassExtension接口是执行ClassExtension的主要接口。

1.5.4.7Domains and validation rules
Rules与对象类关联,在对象类内的Validating对象处理过程中使用。
从Rule抽象类中产生三类型子类:
AttributeRule
RelationshipRule
ConnectivityRule(进一步拆分又有JunctionConnectivityRule和EdgeConnectivityRule)

1.5.4.7.1Attribute rules and domains
Attribute rule应用attribute domain产生一个对象类。
Domain是一个抽象类,用于定义RangeDomain和CodedValueDomain组件类使用的接口,去约束每一个丢失的值,这些丢失的值是与Object和Feature类中特定字段关联的。
Domain在自类型中指定。

1.5.4.7.2Relationship rules
RelationshipRule约束在RelationshipClass中参与的两个子类型间的cardinalities。

1.5.4.7.3Connectivity rules
Connectivity Rule约束网络连通性的类型。

5 TIN
Tin子系统包括访问和操作tin的对象。
TINs主要用于表面模拟。
三个主要的接口:
ITinAdvanced:提供对于基本属性的访问,获取基础数据结构开始点
ITinEdit:用于TIN构建和编辑
ISurface:用于提供表面分析函数,例如等值线,剖面和volumetrics

组成的基本元素:
Triangles
edges
nodes

10 Raster子系统
包括访问和操作rasters,rasters datasets, raster catalogs工作的对象。这些对象可以基于文件,也可以基于Geodatabase。
无论是基于文件还是基于geodatabase系统的类型,都有两个类型表达栅格数据:
raster dataset:表达已经存在的数据
raster catalog:将raster dataset集合看成一个整体进行管理。
一个raster dataset有一个或者多个波段组成。Raster dataset还可以包括pyramids,statistics,colormap.

10.1 Raster data access 对象
访问raster data,必须利用workspacefactory(RasterWorkspaceFactory)建立一个workspace.
AccessWorkspaceFactory用于初始化一个Access Workspace;
SdeWorkspaceFactory用于初始化一个database workspace.
上述两个类的对象用于访问不同存贮形式的Raster数据。

Public Function OpenRasterWorkspace(sPath As String) As IRasterWorkspace
Dim pWKSF As IWorkspaceFactory
Set pWKSF = New RasterWorkspaceFactory
Dim pRasterWs As IRasterWorkspace
Set pRasterWs = pWKSF.OpenFromFile(sPath, 0)
Set OpenRasterWorkspace = pRasterWs
End Function

Workspace对象提供了访问RasterDataset对象和RasterCatalog对象的三个接口:
1.IRasterWorkspace接口
2.IRasterWorkspace2接口
以上两个接口用于打开和建立基于文件的RasterDataset。


Dim pRasterDataset as IRasterdataset
Dim pRasterWs as IRasterWorkspace2
Set pRasterWs = OpenRasterWorkspace("D:\data")
Set pRasterDataset = pRasterWs.OpenRasterDataset("airphoto.img",0)
原点,宽,高和象元原始值可以通过参数进行修改。

3.IRasterWorkspaceEX接口
通过AccessWorkspace访问基于Personal geodatabase的;通过databaseWorkspace访问寄予enterprise geodatabase的。

Dim pWorkspace as IRasterWorkspaceEx
Dim pRasterDataset as IRasterDataset
Dim pRasterCatalog as IrasterCatalog
'From a personal geodatabase.
Set pWorkspace = OpenAccessWorkspace("D:\data\images.mdb")
'Or from an enterprise geodatabase
Set pWorkspace = OpenSDEWorkspace("myserver","5151","raster", "raster","raster
Set pRasterDataset = pWorkspace.OpenRasterDataset("airphoto")
Set pRasterCatalog = pWorkspace.OpenRasterCatalog("RedLandImages")

在geodatabase中建立一个raster dataset是建立一个没有dimension的空raster dataset,它具有基本的占位符,例如波段数,象元类

型,RASTER字段属性,GEOMETRY字段属性。一旦空的raster dataset 建立后,raster象元能够从其他raster data中追加,通过

mosaicking方法。例如:

Dim pWorkspace As IRasterWorkspaceEx
Set pWorkspace = OpenSDEWorkspace ("myserver","5151","raster", "raster","raster
' Create a RasterStorageDef object for storage parameters, define compression a
Dim pStorageDef As IRasterStorageDef
Set pStorageDef = New RasterStorageDef
pStorageDef.CompressionType = esriRasterSdeCompressionTypeJPEG2000
' Create a RasterDef object for the RASTER field
Dim pRasterDef As IRasterDef
Set pRasterDef = New RasterDef
Set pRasterDef.SpatialReference = New UnknownCoordinateSystem
' Create a GeometryDef object for the GEOMETRY field
Dim pGeoDef As IGeometryDef
Set pGeoDef = New GeometryDef
Set pGeoDef.SpatialReference = New UnknownCoordinateSystem
Dim pSDERasterDs As IRasterDataset
Set pSDERasterDs = pWorkspace .CreateRasterDataset("mydataset", 1, PT_UCHAR, pS

10.2 Raster datasets
一个RasterDataset有一个或多个连续的栅格波段组成。
RasterDataset对象可以执行基本的数据集管理功能,也可以用于获取数据集属性
可以利用ISaveAs接口存储成其他格式。
Dim pSaveAs as ISaveAs
Set pSaveAs = pRasterDataset
pSaveAs.SaveAs "MyImage.img", pRasterWs, "IMAGINE Image"
pSaveAs.SaveAs "MyRaster", pWorkspace, "SDR"

RasterDataset支持IRasterBandColoection接口,除了添加,删除波段对于RasterDataset没有影响。
RasterDataset对象可以利用初始化Raster或者RasterBand对象描绘数据的其他方面。

两个方法可以用于从RasterDataset建立Raster对象。
CreateFullRaster:建立一个Raster,带有全属性
CreateDefaultRaster:建立一个Raster,拥有方形的cell,仅包含三个波段。

除了通过workspace可以访问之外,RasterDataset还可以利用RasterDataset属性从波段中获得。

10.3 Raster Bands
这个对象描绘一个Raster dataset的现有波段。
下面的代码显示了如何从Raster或者RasterDataset对象访问RasterBand。

Dim pBandCol as IRasterBandCollection
Set pBandCol = pRasterPtr 'May be a Raster or a RasterDataset
' Get the first band of the raster
Dim pRasterBand as IRasterBand
Set pRasterBand = pBandCol.Item(0)

有一些接口只支持基于文件的RasterBand,不支持Database RasterBand.
一个Raster波段包括像元值,可以通过RasterBand访问。
下面代码是访问raster colormap:

Dim pColormap As IRasterColormap
Dim HasColormap As Boolean
HasColormap = pRasterBand.HasColormap
If HasColormap = True Then Set pColormap = pRasterBand.Colormap

RasterBand支持IRawPixel接口,可以读取和写波段的像元值。

10.4 Raster
该对象与RasterDataset和RasterBand对象相比,能够改变而不影响原数据。
允许Raster表达成你想要的,你可以定义特殊投影,幅度等。这可以使Raster更加有利于显示和分析。

因为Raster的Transient nature,

IRasterProps是一个重要的接口,用于控制Raster的属性,例如幅度,宽度,高度,空间参考,像元类型,Nodata value等。

Dim pRasterProps as IRasterProps
Set pRasterProps = pRaster
pRaster.ResampleMethod = RSP_BilinearInterpolation
pRasterProps.SpatialReference = pNewSpatialReference
Dim pSaveAs as ISaveAs
Set pSaveAs = pRaster
pSaveAs.SaveAs "MyRaster", pRasterWs, "GRID"

Raster对象能够利用IPixelFilterOperation建立PixelBlock和通过像元filter修改像元值。也可以利用IrasterEdit接口直接修改Raster的

像元值。

Raster能够利用RasterLayer对象显示,这个对象是esriCarto库对象。Raster可以在RasterDataset中建立,也以从RasterLayer中获

取。
Set pRaster = pRasterLayer.Raster

10.5 Pixel blocks
这个对象包含像元队列能够从Raster 和Raster band中读取。
这个对象能够从Raster和RasterBand中创建。在创建的手需要定义pixel block,一旦建立,pixel block的大小就不能改变了。
你可以获取像元值从pixel block,改变像元值。
PixelBlockCursor或者RasterCursor两个对象允许你分割一个大的image成为许多小pixel blocks。
这个对象在9.0中得到了加强。

10.6 Raster catalogs
这个对象是9.0中新的数据类型,
这个对象用于管理raster datasets集合作为一个整体。
建立Raster catalogs,首先要建立空的Raster catalog,然后添加包含raster值的rows到raster catalog.
RasterCatalog能够利用在esriCarto库中的GdbRasterCatalogLayer对象显示。

转自http://blog.sina.com.cn/s/blog_53fc3ca10100db4h.html~type=v5_one&label=rela_nextarticle

 

posted on 2011-01-28 09:34  于小栋  阅读(707)  评论(0编辑  收藏  举报