IFeatureWorkspace接口

版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
http://mxf-gis.blogbus.com/logs/30457468.html

 

提供創建和打開各種數據集和其他workspace級別對象的成員。

IFeatureWorkspace接口用於訪問和管理地理數據庫中的要素的重要成分數據集,如TablesObjectClassesFeatureClassesFeatureDatasets,和RelationshipClasses。所有的Open方法(例如OpenTable)都要以dataset的名稱作爲輸入。在企業數據庫上工作時,就需要使用完全限定名(例如,”database.owner.tablename””owner.tablename”.

處理地理數據庫時(personalfileArcSDE),workspace將運行一個實例datasets的對象表。不同的opendatasets的方法返回一個對其的引用。

IFeatureWorkspace是用workspace創建和打開對象、對象類的主接口。

成員

CreateFeatureClass,CreateFeatureDataset,CreateQueryDef,CreateRelationshipClass,CreateTable,OpenFeatureClass,OpenFeatureDataset,OpenFeatureQuery,OpenRelationshipClass,OPenRelationshipQuery,OpenTable.

若干個常用的成員

IFeatureWorkspace.CreateFeatureClass方法

[Visual Basic.NET]        Public Function CreateFeatureClass(ByVal Name As String,ByVal Fields As IFields,ByVal CLSID As UID,ByVal EXTCLSID As UID,ByVal FeatureType As esriFeatureType,ByVal ShapeFieldName As String,ByVal ConfigKeywork As String) As IFeatureClass

[C#]                             public IFeatureClass CreateFeatureClass(string Name,IFields Fields,UID CLSID,UID EXTCLSID,esriFeatureType FeatureType,string ShapeFieldName,string ConfigKeyword);

CreateFeatureClass方法可以用來創建獨立的要素類。除了CreateTable所需的參數外,還要指定FeatureType參數(如esriFTsimpleesriFTComplexEdgeFeature和其他)和shapeFieldNameShapeFieldName表示要素類幾何圖形字段的名稱。在調用CreateFeatureClass之前,設置好GeometryDef對象的空間參考以及空間索引。

Geodatabase wokspace中創建FeatureClass要包含一些必須的字段。從你要創建的對象類型的類描述中可以獲得所需字段(IObjectClassDescriptionRequiredFields字段)。

CLSID參數用來指定實例化對象的GUID。如果未傳入參數,地理數據庫將使用與esriGeoDatabase.Feature有關的CLSID。多數例子中該法可行。如果要素類有自定義的Feature而不是esriGeoDatabase.Feature,這時或以後調用要素類的IClassSchemaEdit接口傳入GUID

EXTCLSID可選參數指定實例化FeatureClassExtension對象的GUID。該對象至少要支持IClassExtension接口。使用configurationKeyword參數可以控制RDBMS中的表的物理佈局例如,在Oracle數據庫中,configuration keyword控制表創建的空間、初始化、next extents和其他屬性。ArcSDEconfigurationKeywordArcSDE data adimistrator設置。

9.2地理數據庫之前的workspace中,GeometryDef引用一個低精度的空間參考。9.1和之前的版本只支持低精度的空間參考,9.2要求高精度的空間參考。使用IControlPrecision2::IsHighRecision來管理空間參考的精度。使用IGeodatabaseRelease接口釋放geodatabase

注意:不支持下列表和要素名稱前綴:”gdb_”,”sde_”,”delta_”

Example

[Visual Basic 6.0]

Public Sub CreateShapefile()

       Const strFolder As String="D:/DATA"

       Const strName As String="MyShapeFile"     '不要包含.shp擴展

       Const strShapeFieldName As String="Shape"

      

       '打開包含shapefile的文件夾作爲workspace

       Dim pFWS As IFeatureWorkspace

       Dim pWorkspaceFactory As IWorkspaceFactory

       Set pWorkspaceFactory=New ShapefileWorkspaceFactory

       Set pFWS=pWorkspaceFactory.OpenFromFile(strFolder,0)

      

       Dim pFields As IFields

       Dim pFieldsEdit As IFieldsEdit

       Set pFields=New esriGeoDatabase.Fields

       Set pFieldsEdit=pFields

      

       Dim pField As IField

       Dim pFieldEdit As IFieldEdit

      

       Set pField=New esriGeoDatabase.Field

       Set pFieldEdit=pField

       pFieldEdit.Name=strShapeFieldName

       pFieldEdit.Type=esriFieldTypeGeometry

      

       Dim pGeomDef As IGeometryDef

       Dim pGeomDefEdit As IGeometryDefEdit

       Set pGeomdef=New GeometryDef

       Set pGeomDefEdit=pGeometryDef

       With pGeomDefEdit

              .GeometryType=esriGeometryPolygon

              Set.SpatialReference=New UnknownCoordinateSystem

       End With

       Set pFieldEdit.GeometryDef=pGeomDef

       pFieldsEdit.AddField pField

      

       Set pField=New esriGeoDatabase.Field

       Set pFieldEdit=pField

       With pFieldEdit

              .Length=30

              .Name="MiscText"

              .Type=esriFieldTypeString

       End With

       pFieldsEdit.AddField pField

      

       '創建shapefile

       Dim pFeatClass As IFeatureClass

       Set pFeatClass=pFWS.CreateFeatureClass(strName,pFields,Nothing,Nothing,esriFTSimple,strShapeFieldName,"")

End Sub

IFeatureWorkspace.OpenFeatureClass方法

[Visual Basic.NET]        Public Function OpenFeatureClass(ByVal Name As String) As IFeatureClass

[C#]                             public IFeatureClass OpenFeatureClass(string Name);

使用完全限定名可以打開workspace中任何已存在的要素類。地理數據庫中的每一個要素類都有唯一的完全限定名,使用OpenFeatureClass可以直接打開要素類。

使用IDatabaseConnectionInfo接口確定UserDatabaseISQLSyntax::QualifyTableName可以用來確定要素類的完全限定名。使用IWorkspace2接口的NameExists來確定geodatabase中的要素類是否有適當的名稱。

打開參與topologygeometric network的要素類將在內存中打開所有參與的要素類。

OpenFeatureClass名稱參數的一些例子。

Coverage要素類

building:polygon

Oracle 要素類(如果已經連接到要素類,則不需要owner前綴。

gdb.Buildings

SQLServer要素類

fdo_data.gdb.Buildings

Informix要素類

Bladetest2:gdb.Buildings

VPF要素類

Ks032193:veg:vgfarea(library:coverage:feature class)

VPF數據的library名稱區分大小寫,並且要和LAT中存儲的一致(Library Attribute Table

Topology有關的4個表格:T_#_DirtyAreas,T_#_PolyErrors,T_#_LineErrorsT_#_PointErrors可以直接編輯。由於這個原因他們不能打開,打開時返回一個地理數據庫的錯誤。

Example

[Visual Basic 6.0]

Public Sub OpenFeatureClass_Example()

       Dim pWorkspaceFactory As IWorkspaceFactory

       Set pWorkspaceFactory=New ShapefileWorkspaceFactory

       Dim pFeatureWorkspace As IFeatureWorkspace

       Set pFeatureWorkspace=pWorkspaceFactory.OpenFromFile("D:/Data/Esridata/USA",0)

       Dim pFeatureClass As IFeatureClass

       Set pFeatureClass=pFeatureWorkspace.OpenFeatureClass("States")

       MsgBox"There are " & pFeatureClass.FeatureCount(Nothing) & "states"

End Sub

[C#]

//e.g.,nameOfShapefile="States";

//            dataPath="D://Data//Esridata//USA"

public void IFeatureWorkspace_OpenFeatureClass_Example(string dataPath,string nameOfShapefile)

{

       IWorkspaceFactory workspaceFactory=new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();

       IFeatureWorkspace featureWorkspace=(IFeatureWorkspace)workspaceFactory.OpenFromFile(dataPath,0);

       IFeatureClass featureClass=featureWorkspace.OpenFeatureClass(nameOfShapefile);

       Console.WriteLine("There are {0} features in the {1} feature class",featureClass.FeatureCount(new QueryFilterClass()),featureClass.AliasName);

}

 

//適用於各種類型workspace的通用形式

//e.g.,nameOfFeatureClass="States"

//on ArcSDE use ISqlSyntax::QualifyTableName for qualified names

public IFeatureClass getIFeatureClass(IWorkspace workspace,string nameOfFeatureClass)

{

       //cast for the feature workspace from the workspace

       IFeatureWorkspace featureWorkspace=(IFeatureWorkspace)workspace;

       //open the featureclass

       return featureWorkspace.OpenFeatureClass(nameOfFeatureClass);

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章