构造一个多Ring的Polygon

Posted by 蒋波涛 18 January,2007 Views (0)Comment

在一些投影运算中,我们需要将Geometry的进行“点-点”形式的转换,这个操作可以通过IPointCollection来直接完成,但如果我们需要对付的是具有多个Path的Polyline或多个Ring的Polygon,则问题就比较复杂,不能再直接使用IPointCollection的方式来实现 ,而是需要考虑多个Ring甚至是岛的情况。  

下面的VBA代码,可以将一个任意的Polygon复制一份,保存到同一要素类中:

Dim pm As IMxDocument
    Set pm = ThisDocument
   
    Dim pEnumFeat As IEnumFeature
    Set pEnumFeat = pm.FocusMap.FeatureSelection
       
    Dim i As Long
    Dim pGonColl As IGeometryCollection
    Dim pExteriorRing() As IRing
    Dim pPolygon As IPolygon
   
    'Loop over all polygon
    Dim pFeature As IFeature
    Set pFeature = pEnumFeat.Next
   
    Dim pFL As IFeatureLayer
    Set pFL = pm.FocusMap.Layer(0)
    Dim pFC As IFeatureClass
    Set pFC = pFL.FeatureClass
   
    While Not pFeature Is Nothing
        Dim ps As IGeometryCollection-->它将用来装复制的Polygon
        If pFeature.Shape.GeometryType = esriGeometryPolygon Then
            Set ps = New Polygon
           
            Set pPolygon = pFeature.ShapeCopy-->源Polygon

            ReDim pExteriorRing(pPolygon.ExteriorRingCount - 1)
            pPolygon.QueryExteriorRings pExteriorRing(0)--->找到这个Polygon所有的外RING
            For i = 0 To pPolygon.ExteriorRingCount - 1
                ps.AddGeometry pExteriorRing(i)--->将这些外RING装入ps中,如果是投影的话,可以在这里处理
                Dim pInteriorRing() As IRing
                ReDim pInteriorRing(pPolygon.InteriorRingCount(pExteriorRing(i)) - 1)
                pPolygon.QueryInteriorRings pExteriorRing(i), pInteriorRing(0)-->找到每个外RING包含的内部RING
                Dim j As Long
                For j = 0 To pPolygon.InteriorRingCount(pExteriorRing(i)) - 1
                    ps.AddGeometry pInteriorRing(j)-->也将它们装入ps中
                Next
            Next
        End If
       
        Dim pF As IFeature
        Set pF = pFC.CreateFeature
        Set pF.Shape = ps
        pF.Store
       
        Set pFeature = pEnumFeat.Next
    Wend

Related Items

Categories : ArcObjects Tags : ArcObjects  
Comments
Leave a comment

Or, take a look at Archives and Categories

目录

存档