|
阅读:1193回复:1
Engine中IFeatureClass.Search(filter, Recycling)方法中Recycling
<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> |
|
|
|
1楼#
发布于:2008-04-06 14:04
<P>不错,涨见识了,我也是在学习AO,顶楼主</P>
|
|