zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java 常用
    面试题目总结
    前端自动化构建工具gulp记录
    js面向对象学习笔记
    sass,compass学习笔记总结
    JS核心知识点:DOMBOMEVENT
    boost atomic
    boost thread
    boost function bind ref
    boost phoenix
  • 原文地址:https://www.cnblogs.com/holygis/p/1946633.html
Copyright © 2011-2022 走看看