IFeatureClass.Search(filter, Recycling)方法中Recycling参数的含义简介

      在ArcGIS Engine中常用到IFeatureClass.Search(filter, Recycling)方法,习惯中会把Recycling参数设置为False,但不理解设置为False和True有什么区别。看了Engine的帮助文档,也是看不明白。后来才知道,参数Recycling为True的时候理解为传引用,为False的时候理解为传值。

      我们知道引用传递(“传址”)效率较高,因此在绘画要素的时候可以采用True参数。但当要进行遍历后将Feature的Geometry加入某个集合或插入到其他FeatureClass的时候,必须使用传值调用,即参数为False,否则我们加入的都是最后一个变量中的Geometry(因为传地址嘛)。这个我们可以用如下VBA代码试验得出结论。
Private Sub UISearch_Click()
    Dim pDoc As IMxDocument
    Set pDoc = ThisDocument
    Dim pWS As IFeatureWorkspace
    Dim pWSEdit As IWorkspaceEdit
    Dim pDataset As IDataset
   
    Dim pMap As IMap
    Set pMap = pDoc.FocusMap
    Dim pFLayer As IFeatureLayer
    Set pFLayer = pMap.Layer(0)
   
    Dim pFC As IFeatureClass
    Dim pFeatureCursor As IFeatureCursor
    Set pFC = pFLayer.FeatureClass
        
   
    Dim pColl As Collection
    Set pColl = New Collection
   
    Set pFeatureCursor = pFC.Search(Nothing, False) ',True) '
    Dim pFeat As IFeature
    Set pFeat = pFeatureCursor.NextFeature
    Dim i As Long
    i = 0
    Dim dArea As Double
    Dim pPolygon As IPolygon
    Dim pArea As IArea
   
    dArea = 0
    Set pFeat = pFeatureCursor.NextFeature
    Do Until pFeat Is Nothing
        i = i + 1
        Set pPolygon = pFeat.Shape
        Set pArea = pPolygon
        'MsgBox pArea.Area
        dArea = dArea + pArea.Area
        Call pColl.Add(pPolygon)
        
        Set pFeat = pFeatureCursor.NextFeature
    Loop
    'MsgBox i & ":" & dArea
   
    Dim pPolygon2 As IPolygon
    For i = 1 To pColl.Count
        Set pPolygon2 = pColl.Item(i)
        Set pArea = pPolygon2
        'pFC.Search(Nothing, False)的时候,每次弹出面积信息不等,因为集合(pColl)中的每个Geometry是不一样的,原因在于参数设为False是传值调用
        'pFC.Search(Nothing, True)的时候,每次弹出面积信息相等,是因为集合(pColl)中的每个Geometry是一样的,其实就是遍历的最后一个IGeometry,原因在于参数设为False是传地址调用
        MsgBox pArea.Area
    Next i
End Sub
可以自己换一下Search方法的第二个参数就看出结果有所不同了,这个试验是加入VB的Collection集合,如果插入到其他FeatureClass也是一样的。

 

参考:http://bbs.esrichina-bj.cn/ESRI/archiver/tid-13461.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值