Engine中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://blog.sina.com.cn/s/blog_4ad115cb01000a4i.html
              白旭阳
              ESRI China
posted @ 2008-04-01 11:50 GIS云中飞鹏 阅读(587) 评论(6)  编辑 收藏 所属分类: ArcGIS Engine开发

  回复  引用  查看    
#1楼 2008-04-11 11:57 | 3echo      
明白作者的意思,但是觉得说得还是不够清楚和有些混乱.
  回复  引用    
#2楼 2008-04-13 09:47 | gislin [未注册用户]
有点混乱,能不能请楼主再说清楚一下呢?
  回复  引用    
#3楼 2008-04-15 10:24 | lsbocai [未注册用户]
终于明白了,原来区别是这样的、谢谢
  回复  引用    
#4楼 2008-05-07 20:12 | hsg77 [未注册用户]
同感!
  回复  引用    
#5楼 2008-05-18 15:26 | liddy [未注册用户]
非常不错 要博主学习 思考中前行!!

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: