阅读:1501回复:1
[讨论]
<P>接触AO不很久。昨天帮别人写了个小程序:</P>
<P> 功能要求:对于数据量很大的点数据(10万左右个),删除其重叠的点。</P> <P>下面是我的代码。</P> <P> Dim pMxd As IMxDocument<BR> Dim pMap As IMap<BR> Dim pFL As IFeatureLayer<BR> Dim pFC As IFeatureClass<BR> Dim pEnum As IEnumFeature<BR> Dim pF As IFeature<BR> Dim pFcursor As IFeatureCursor<BR> Dim pFilter As ISpatialFilter<BR> Dim pF2 As IFeature<BR> Dim pp As IPoint<BR> Dim pL As IPolyline<BR> Dim pG As IPolygon<BR> Dim pSE As ISelectionEnvironment<BR> Set pMxd = Application.Document<BR> Set pMap = pMxd.FocusMap<BR> If pMap.LayerCount <= 0 Then<BR> MsgBox "请加载数据!"<BR> Exit Sub<BR> End If<BR> For i = 0 To pMap.LayerCount - 1<BR> Set pFL = pMap.Layer(i)<BR> Set pFcursor = pFL.Search(Nothing, False)<BR> Set pF = pFcursor.NextFeature<BR> </P> <P> Do While Not pF Is Nothing<BR> <BR> If pF.Shape.GeometryType = esriGeometryPoint Then<BR> Set pp = pF.ShapeCopy<BR> <BR> Set pSE = New SelectionEnvironment<BR> pSE.PointSearchDistance = 0<BR> pMap.SelectByShape pp, pSE, True<BR> If pMap.SelectionCount > 0 Then<BR> Set pEnum = pMap.FeatureSelection<BR> pEnum.Reset<BR> Set pF2 = pEnum.Next<BR> If pF2.OID <> pF.OID Then<BR> For j = 0 To pMap.SelectionCount - 1<BR> Set pF2 = pEnum.Next<BR> pF.Delete<BR> Next<BR> End If<BR> <BR> End If<BR> Set pF = pFcursor.NextFeature<BR> pMap.ClearSelection<BR> <BR> End If<BR> <BR> <BR> Loop<BR> Next<BR> MsgBox "完成!"</P> <P> 效率好像不行,望高手指点!急!(另外利用Ifeaturefilter速度好像也提高的不多)</P> |
|
1楼#
发布于:2008-09-03 19:12
不好意思写错了,最后那个是利用ISpatialFilter速度好像也提高的不多。
|
|