用于访问控制要素类行为和属性的成员
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));
}