IFeatureClass--2

 

IFeatureClass.GetFeatures Method

[Visual Basic.NET]        Public Function GetFeatures(ByVal fids As Object,ByVal Recycling As Boolean) As IFeatureCursor

[C#]                             public IFeatureCursor GetFeatures(object fids,bool Recycling)

GetFeatures返回包含要素类所有要素OIDIFeatureCursor。这个方法可以用来遍历已知OID的要素集。

调用IFeatureClassGetFeatures方法和调用ITableGetRows方法效果相同,只是返回IFeatureCursor接口。

[C#]

//e.g,nameOfField=”Symbol”

public void IFeatureClass_GetFeatures(IFeatureClass featureClass,string nameOfField)

{

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

       int fieldIndexValue=featureClass.FindField(nameOfField);

      

       System.Collections.Generic.List<int> constructoidList=new System.Collections.Generic.List<int>();

       constructoidList.Add(1);

       constructoidList.Add(2);

       constructoidList.Add(3);

       constructoidList.Add(4);

       constructoidList.Add(10);

       int[] oidList=constructoidList.ToArray();

       IFeatureCursor featureCursor=featureClass.GetFeatures(oidList,false);

       IFeature feature=featureCursor.NextFeature();

       //loop through the returned features and get the value for the field

       while(feature!=null)

       {

              //do something with each feature(ie update geometry or attribute)

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

              feature=featureCursor.NextFeature();

       }

}

IFeatureClass.Search Method

返回搜索的对象指针。

[Visual Basic.NET]        Public Function Search(ByVal filter As IQueryFilter, ByVal Recycling As Boolean) As IFeatureCursor

[C#]                             public IFeatureCursor Search(IQueryFilter filter, bool Recycling);

Search返回满足条件的IFeatureCursor。如果IQueryFilter没有给定值,feature cursor返回要素类的所有要素。

Recycling参数控制rowallocation行为。每次调用简单要素对象时,Recycling cursors可以rehydrate该对象,并可以最优化只读访问,例如在绘图时。多次调用cursorNextFeature,维持recycling cursor返回的引用并不合法。不能修改要素对象返回的recycling cursor。使用Non-recycling cursor每次返回一个单独的要素。non-recycling返回的要素可以修改、存储各种行为。Geodatabase保证在编辑阶段non-recycling要素的唯一语义。如果搜索的要素已经被应用程序引用,将返回一个要素的地址。

Search方法返回的non-recycling要素指针并不用来更新cursor中的要素。Update方法返回的feature cursor可以用来更新要素。

[C#]

//下面的例子使用属性查询和空间查询获得要素的子集。

//在要素类中,遍历所有要素,并计算它们的的总面积。

public void IFeatureClass_Search(IFeatureClass featureClass)

{

       //在这个函数中将使用空间过滤器,并结合属性查询进行搜索。

       //在搜索中不必执行两种过滤类型,可以单独使用每一种。

      

       //创建一个envelope在空间上限制搜索。

       //(注意:只有高级geometriesenvelopesgeometrybags可以使用)

       ESRI.ArcGIS.Geometry.IEnvelope envelope=new ESRI.ArcGIS.Geometry.EnvelopeClass();

       envelope.PutCoords(508786,681196,513033,684341);

      

       //创建一个空间查询

       ISpatialFilter spatialFilter=new SpatialFilterClass();

      

       //指定一个查询的的几何图形

       spatialFilter.Geometry=(ESRI.ArcGIS.Geometry.IGeometry)envelope;

      

       //确定在要素类上查询的几何字段

       string shpFld=featureClass.ShapeFieldName;

       spatialFilter.GeometryFiled=shpFld;

      

       //指定要使用的空间操作

       spatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;

      

       //创建where表达式,这里只要要素

       //envelope中有一个子类型"COM"

       spatialFilter.WhereClause="subtype='COM'";

      

       //spatial filter赋给IQueryFilter接口

       IQueryFilter queryFilter=new QueryFilterClass();

       queryFilter=IQueryFilterspatialFilter

      

       //在要素类上进行搜索,使用cursor保存结果

       IFeatureCursor featureCursor=featureClass.Search(queryFilter,false);

      

       //第一个返回的要素

       IFeature feature=featureCursor.NextFeature();

      

       //获得“Area”字段

       IFields fields=featCursor.Fields;

       int areaIndex=fields.FindField("Area");

      

       //保存总面积的变量

       double searchedArea=0;

      

       //遍历所有要素计算总面积

       while(feature!=null)

       {

              searchedArea=searcheArea+(double)feature.get_Value(areaIndex);

              feature=featureCursor.NextFeature();

       }

       Console.WriteLine("The total area of searched features is {0}",searchedArea);

       System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);

}

IFeatureClass.Select Method

返回包含对象IDs的选择。

[Visual Basic.NET]        Public Function Select(ByVal QueryFilter As IQueryFilter,ByVal selType As esriSelectionType, ByVal selOption As esriSelectonOption, ByVal selectionContainer As IWorkspace) As ISelectionSet

[C#]                             public ISelectionSet Select(IQueryFilter QueryFilter, esriSelectionType selType, esriSelectionOption selOption, IWorkspace selectionContainer);

Select返回一个满足条件的ISelectionSet。如果IQueryFilter中无值,将选择要素类的所有要素。调用IFeatureClassSelect方法同调用ITable中的相应方法效果相同。调用Select时,selectionContainer不需要参数。实参应为NullC#VB.Net)或者NothingVB6)。(注意:提供workspace类型的selectionContainer只读参数将会失败,因为Select会将选择的结果写入workspace

IFeatureClass Select Example

[Visual Basic 6.0]

下面的例子使用属性查询选择要素类的子集。

Dim pFeatcls As IFeatureClass

Dim pFeatLayer As IFeatureLayer

Dim pDoc As IMxDocumentDim pMap As IMap

Set pDoc=ThisDocument

Set pMap=pDoc.Maps.Item(0)

Set pFeatLayer=pMap.Layer(0)

Set pFeatcls=pFeatLayer.FeatureClass

'创建一个query过滤器,并赋予一个where从句。

Dim pQFilt As IQueryFilter

Set pQFilt=New QueryFilter

pQFilt.WhereClause="Shape_Area>77000"

'使用query过滤器选择要素

Dim pSelectionSet As ISelectionSet

'当调用Select时,不需要selectionContainer参数,在VB6中应赋nothing

Set pSelectionSet=pFeatcls.Select(pQFilt,esriSelectionTypeIDSet,esriSelectionOptionNormal,Nothing)

'计算选中的数目

MsgBox pSelectionSet.Count

[C#]

public void IFeatureClass_Select_Example(IFeatureClass featureClass)

{

       //创建查询过滤器并附予一个where从句

       IQueryFilter queryFilter=new QueryFilterClass();

       queryFilter.WhereClause="Shape_Area>77000";

       //使用query过滤器选择要素

       //调用Select时不需要selectionContainer参数。在C#VB.Net中赋给其Null

       ISelectionSet selectionSet=featureClass.Select(queryFilter,esriSelectionType.esriSelectionTypeIDSet,esriSelectionOption.esriSelectionOptionNormal,null);

       //计算选择的要素数目

       Console.WriteLine("{0}features where selected from{1} with where clause {2}",selectionSet.Count,featureClass.AliasName,queryFilter.WhereClause);

}

IObjectClass.RelationshipClasses Property

这个对象类参与的关系类。

[Visual Basic.NET]        Public Function get_RelationshipClasses(ByVal Role As esriRelRole) As IEnumRelationshipClass

[C#]                             public IEnumRelationshipClass get_RelationshipClasses(esriRelRole Role);

返回对象类参与的关系类的枚举。

geodatabase的对象类可能参与多个关系类。esriRelRole定义了对象类的角色(origindestination或两者都有),RelationshipClasses属性根据其角色获得关系类的列表。这个属性返回一个IEnumRelationshipClass接口,使用它可以遍历返回的关系类。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值