IFeatureClass相关的方法介绍

IFeatureClass

用于访问控制要素类行为和属性的成员

IFeatureClass接口是获取和设置要素类属性的主要接口。例如,使用IFeatureClass接口获取要素类类型、获取满足查询条件的要素数目或在要素类中创建新要素。IFeatureClass接口继承了IObjectClass接口。

成员

AddField        向这个类中添加一个字段。

AddIndex             向这个类中添加一个索引。

AliasName     这个类的别名。

AreaField       几何区域字段

CLSID          与这个对象类实例相关的组件类的GUID。

CreateFeature创建一个新要素,系统自动分配一个ID,没有属性值。

DeleteField     从对象类中删除字段。

DeleteIndex   从对象类中删除索引。

EXTCLSID   与这个要素类的扩展类相关的组件类的GUID。

Extension             这个对象类的扩展。

ExtensionProperties      这个对象类的扩展属性。

FeatureClassID     要素类的唯一标识符。

FeatureCount指定查询获得的要素数目。

FeatureDataset             包含要素类的要素数据集。

FeatureType   要素类中的要素类型。

Fields     要素类的字段集合。

FindField       指定名称的字段索引。

GetFeature     根据对象ID获得要素。

GetFeatures   由一系列ID获得Rows的指针。

HasOID  指出要素类是否是否有一个要素表示字段(OID)。

Indexes  要素类的索引集合。

Insert     返回一个可以插入新要素的指针。

LengthField    图形长度字段。

ObjectClassID       对象类的唯一标识符。

OIDFieldName      与OID相关的字段名称。

RelationshipClasses该类参与的关系类。

Search   根据指定的查询返回要素的指针。

Select     根据查询返回包含对象ID的选择集合。

ShapeFieldName    默认Shape字段的名称。

ShapeType     要素类中默认Shape的类型。

Update   按照查询返回一个更新要素的指针。

继承的接口

IObjectClass  获得对象类的信息。

IClass    获得类的信息和管理类。

实现IFeatureClass的类

FeatureClass  FeatureClass对象。

NAClass(NetworkAnalyst)网络分析中将要素输入,以及产生输出要素。

NetCDFFeatureClass(DataSourceNetCDF)内存中呈现的NetCDF要素类。

RasterCatalogGeodatabase表中的栅格数据集合。

RelQueryTable      用于连接有相同数据的两个数据集。

RouteEventSource(Location)Route event source对象。

TemporalFeatureClass(TrackingAnalyst)控制时态要素类的设置。

XYEventSource    XY event source对象。

[C#]

//e.g., nameOfFeatureClass=”states”;

//onArcSDE use ISqlSyntax::QualifyTableName的完全限定表名。

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);

}

几个常用的成员

IClass.AddField Method

[Visual Basic.NET]       Public Sub AddField(ByVal Field As IField)

[C#]                            public void AddField(IField Field)

返回的错误

-2147220649-FDO_E_TABLE_DUPLICATE_COLUMN

表中已存在指定名称的字段。

-2147220961-FDO_E_NO_SCHEMA_LICENSE

无权修改要素类的结构。使用ArcView的license,向参与集合网络、拓扑和混合关系类(feature-linked annotation)的要素类添加字段能引发这个错误。

IClass.DeleteField Method

[Visual Basic.NET]       Public Sub DeleteField(ByVal Field As IField)

[C#]                            public void DeleteField(IField Field);

返回的错误

-2147219878-FDO_E_FIELD_CANNOT_DELETE_WEIGHT_FIELD

不能删除geometric network中与权重相关的字段。

-2147219877-FDO_E_FIEID_CANNOT_DELETE_REQUIRED_FIELD

不能删除所要求的字段。如果字段设为required,可以使用IFieldEdit::Required属性移除required状态,然后就可以删除field了。

-2147220961-FDO_E_NO_SCHEMA_LICENSE

无权修改要素类的结构。使用ArcView的license,向参与集合网络、拓扑和混合关系类(feature-linked annotation)的要素类添加字段能引发这个错误。

-2147215862-FDO_E_SE_DBMS_DOES_NOT_SUPPORT

不能从DB2中删除字段。

DeleteField从从表、对象类或要素类中删除指定字段。Geodatabase需要的和不能删除的字段包括:OBJECTID字段、SHAPE和shape依赖的字段例如SHAPE_Length、网络要素类激活的AncillaryRole和Weight字段、亚字段-如果要删除一个subtype字段,必须以subtype字段删除。

[C#]

//e.g.,fieldName=”MyField”

Public void IClass_DeletField(IFeatureClass featureClass,string fieldname)

{

      //The following sample code demonstrates one methodology for deleting

      //a field using DeleteFields

      IFields fields=featureClass.Fields;

      IField field=fields.get_Field(fields.FindField(fieldname));

//IFeatureClass interface inherits from IClass

      featureClass.DeleteField(field);

}

IFeatureClass.CreateFeature Method

[Visual Basic.NET]       Public Function CreateFeature() As IFeature

[C#]                            public IFeature CreateFeature();

CreateFeature在要素类中创建一个新要素。这个要素仅分配一个唯一的对象ID(OID),没有其他属性值。使用IFeature::Store方法将这个要素存储到database中。当工作在版本要素类上时,CreateFeature应当在edit时期调用。调用IWorkspaceEdit::StartEditing可以开始edit session。对Topology或Geometric Network要素的编辑要在edit阶段进行,并且要包含edit operation。

调用CreateFeature之后,并不自动设置默认的子类型,也不初始化默认值。如果要素没有子类型,调用IRowSubtypes::InitDefaultValues来初始化默认值。可以调用IRowSubtypes::SubtypeCode来设置要素的要素的子类型。

在要素类上调用CreateFeature方法(通过IFeatureClass接口)同调用CreateRow方法(通过ITable接口)的效果相同,不过IFeatureClass的方法返回一个row对象昂的IFeature接口。

创建一个新要素的步骤是:

1)创建要素

2)为要素创建几何图形。

3)在要素中存储几何图形。

4)存储要素。

IFeatureClass.CreateFeatureBuffer Method

创建一个要素的缓冲区

[VisualBasic.NET]        Public Function CreateFeatureBuffer() As IFeatureBuffer

[C#]                            public IFeatureBuffer CreateFeatureBuffer();

CreateFeatureBuffer方法创建一个feature缓冲区,并返回IFeatureBuffer接口。结合insert cursor可以使用这个方法在要素类中创建新要素。调用IFeatureClass的CreateFeatureBuffer方法和调用ITable中的CreateRowBuffer的作用相同,只是IFeatureClass的方法返回一个row buffer的IFeatureClass指针。

IFeatureClass.FeatureCount Method

[Visual Basic.NET]       Public Function FeatureCount(ByVal QueryFilter As IQueryFilter) As Integer

[C#]                            public int FeatureCount(IQueryFilter QueryFilter);

FeatureCount返回满足某些属性或IQueryFilter指定的空间查询的要素的数量。如果没有指定IQueryFilter,返回要素类中所有要素的数量。

IFeatureClass.FeatureDataset Property

[Visual Basic.NET]       Public ReadOnly Property FeatureDataset As IFeatureDataset

这个只读属性返回包含该要素类的数据集的IFeatureDataset接口。如果要素类是一个独立的要素类(无dataset),那么这个动能将会返回一个null值。一个coverage要素类返回指向自身的IFeatureDataset接口。Shapefiles返回一个null指针。

IFeatureClass.GetFeature Method

[Visual Basic.NET]       Public Function GetFeature(ByVal ID As Integer) As IFeature

[C#]                            public IFeature GetFeature(int ID)

通过给定的对象ID(OID)返回要素的IFeature接口。适用于通过OID寻找提顶要素。使用cursor可以遍历要素类中所有要素。

调用要素类的GetFeature方法(使用IFeatureClass接口)同调用GetRow方法(使用要素类的ITable接口)的效果相同,只是IFeatureClass返回IFeature接口。

[C#]//e.g, nameOfField=”City_Name”

public void IFeatureClass_GetFeature(IFeatureClass featureClass,string nameOfField)

{

      //get the index of the field we are interested in

      int fieldIndexValue=featureClass.FindField(nameOfField);

      //get feature with OID 11,because it is known to exist

      //This method is typically used to get a feature by know OID

      //If you wish to loop through a series of features,use a Cursor.

      IFeature feature=featureClass.GetFeature(1);

      Console.WriteLine("The {0} field conains a value of{1}",nameOfField,feature.get_Value(fieldIndexValue));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值