AE之FeatureClass(转)

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要素类。
RasterCatalog Geodatabase表中的栅格数据集合。
RelQueryTable       用于连接有相同数据的两个数据集。
RouteEventSource(Location)Route event source对象。
TemporalFeatureClass(TrackingAnalyst)控制时态要素类的设置。
XYEventSource     XY event source对象。
[C#]
//e.g., nameOfFeatureClass=”states”;
//on ArcSDE 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));
}

  更多GIS开发相关问题请加入 GIS开发学习QQ交流群 192251607 共同交流学习!

猜你喜欢

转载自www.cnblogs.com/hl137510705/p/9266705.html
AE