gisempire100
捉鬼专家
捉鬼专家
  • 注册日期2004-08-13
  • 发帖数552
  • QQ
  • 铜币2462枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1198回复:1

Engine中IFeatureClass.Search(filter, Recycling)方法中Recycling

楼主#
更多 发布于:2008-04-01 23:34
<DIV>ArcGIS Engine中总调用<FONT face=宋体>IFeatureClass.Search(filter, Recycling)方法,习惯中会把Recycling参数设置为False,但就是不理解为什么要设置为False,和True有什么差别。之前也看过Engine的帮助文档,但感觉越看越糊涂,前几天有自己看了一下,加上之前的使用经验和试验,大致领悟了其中的差异。</FONT></DIV>
<DIV> </DIV>
<DIV>
<P><FONT face=宋体> 参数Recycling为True的时候理解为传引用,为False的时候理解为传值。因此在应用的时候应该注意的“传值”和“传址”的差异。<BR> 我们知道引用传递(“传址”)效率较高,因此在绘画要素的时候可以采用<BR>True参数。但当要进行遍历后将Feature的Geometry加入某个集合或插入到其他<BR>FeatureClass的时候,必须使用传值调用,即参数为False,否则我们加入的都是最后<BR>一个变量中的Geometry(因为传地址嘛)。这个我们可以用如下VBA代码试验得出结<BR>论。<BR>Private Sub UISearch_Click()<BR>    Dim pDoc As IMxDocument<BR>    Set pDoc = ThisDocument<BR>    Dim pWS As IFeatureWorkspace<BR>    Dim pWSEdit As IWorkspaceEdit<BR>    Dim pDataset As IDataset<BR>   <BR>    Dim pMap As IMap<BR>    Set pMap = pDoc.FocusMap<BR>    Dim pFLayer As IFeatureLayer<BR>    Set pFLayer = pMap.Layer(0)<BR>   <BR>    Dim pFC As IFeatureClass<BR>    Dim pFeatureCursor As IFeatureCursor<BR>    Set pFC = pFLayer.FeatureClass<BR>       <BR>   <BR>    Dim pColl As Collection<BR>    Set pColl = New Collection<BR>   <BR>    Set pFeatureCursor = pFC.Search(Nothing, False) ',True) '</FONT></P>
<P><FONT face=宋体>    Dim pFeat As IFeature<BR>    Set pFeat = pFeatureCursor.NextFeature<BR>    Dim i As Long<BR>    i = 0<BR>    Dim dArea As Double<BR>    Dim pPolygon As IPolygon<BR>    Dim pArea As IArea<BR>   <BR>    dArea = 0<BR>    Set pFeat = pFeatureCursor.NextFeature<BR>    Do Until pFeat Is Nothing<BR>        i = i + 1<BR>        Set pPolygon = pFeat.Shape<BR>        Set pArea = pPolygon<BR>        'MsgBox pArea.Area<BR>        dArea = dArea + pArea.Area<BR>        Call pColl.Add(pPolygon)<BR>       <BR>        Set pFeat = pFeatureCursor.NextFeature<BR>    Loop<BR>    'MsgBox i ; ":" ; dArea<BR>   <BR>    Dim pPolygon2 As IPolygon<BR>    For i = 1 To pColl.Count<BR>        Set pPolygon2 = pColl.Item(i)<BR>        Set pArea = pPolygon2<BR>        'pFC.Search(Nothing, False)的时候,每次弹出面积信息不等,因为集合<BR>(pColl)中的每个Geometry是不一样的,原因在于参数设为False是传值调用<BR>        'pFC.Search(Nothing, True)的时候,每次弹出面积信息相等,是因为集合<BR>(pColl)中的每个Geometry是一样的,其实就是遍历的最后一个IGeometry,原因在于参数<BR>设为False是传地址调用<BR>        MsgBox pArea.Area<BR>    Next i<BR>End Sub<BR> 可以自己换一下Search方法的第二个参数就看出结果有所不同了,这个试验是<BR>加入VB的Collection集合,如果插入到其他FeatureClass也是一样的。</FONT></P></DIV>
<DIV> 原文地址:<FONT face=Verdana>http://blog.sina.com.cn/s/blog_4ad115cb01000a4i.html</FONT></DIV>
喜欢0 评分0
A friend is never known till a man has need. ...CL
xiangyu518
路人甲
路人甲
  • 注册日期2006-12-11
  • 发帖数5
  • QQ
  • 铜币115枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2008-04-06 14:04
<P>不错,涨见识了,我也是在学习AO,顶楼主</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部