将polyline图形的要素类转为polygon形式的要素类

本文介绍了一种将Polyline特征类转换为Polygon特征类的方法。通过遍历Polyline中的每个Path来构建新的Polygon,并确保生成的Polygon顺序正确。该方法适用于GIS数据处理场景。

 前一段时间写的,实现将polyline形式的FeatureClass转为polygon形式的FeatureClass,这部分相关的代码网上很多,采用Geoprocessor的方式使用DataManagementTools中的 FeatureToPolygon会简单一些,这里采用比较原始的方式,根据每个feature的Geometry转换而来,其中GetPathFromFeatureClass和CreatShapefile是另外写的函数。

 

Private Function FCCoventToPolygon(ByVal pFeatureClass As IFeatureClass) As IFeatureClass

      

       '通过featureclass找到shp文件的路径
        Dim SourceFileFullName As String
        SourceFileFullName = GetPathFromFeatureClass(pFeatureClass)

        Dim FilePath, FileName As String
        FilePath = IO.Path.GetDirectoryName(SourceFileFullName)
        FileName = IO.Path.GetFileNameWithoutExtension(SourceFileFullName)

      

        '创建一个空的shp文件
        Dim TempFeatureClass As IFeatureClass
        TempFeatureClass = CreatShapefile(FilePath, "Temp_" & FileName)

        '创建一个编辑工作区并启动编辑
        Dim pWorkspaceFactory As IWorkspaceFactory
        Dim pWorkspaceEdit As IWorkspaceEdit
        pWorkspaceFactory = New ShapefileWorkspaceFactory
        pWorkspaceEdit = pWorkspaceFactory.OpenFromFile(FilePath, 0)

        pWorkspaceEdit.StartEditOperation()
        pWorkspaceEdit.StartEditing(True)

        '取出featureclass中的一个feature
        Dim pFeatureCur As IFeatureCursor
        pFeatureCur = pFeatureClass.Search(Nothing, False)
        Dim pFeature As IFeature
        pFeature = pFeatureCur.NextFeature()

        Dim pPolyLine As IPolyline
        Dim pPolygon As IPolygon
        Dim pEndFeature As IFeature
        Dim pGeoms As IGeometryCollection
        Dim pClone As IClone
        Dim pSegs As ISegmentCollection
        Dim pGeometryCollection As IGeometryCollection

 

        '开始遍历
        While (Not pFeature Is Nothing)

            '把一个polyline转存到一个GeometryCollection,以便取得里面的path(polyline的子对象是path)
            pPolyLine = pFeature.ShapeCopy
            pGeometryCollection = New Polygon
            pClone = pPolyLine
            pGeoms = pClone.Clone

           

            '通过Polyline的每个Path创建为一个新的Ring,并把Ring增加到一个新的Polygon
            For i As Long = 0 To pGeoms.GeometryCount - 1

                pSegs = New Ring
                pSegs.AddSegmentCollection(pGeoms.Geometry(i))
                pGeometryCollection.AddGeometry(pSegs)

            Next i

           

           '生成的Polygon旋转的顺序可能不正确,为确保正确调用SimplifyPreserveFromTo
            pPolygon = pGeometryCollection
            pPolygon.SimplifyPreserveFromTo()

            '在featureclass中新建要素并将刚生成的polygon保存进去
            pEndFeature = TempFeatureClass.CreateFeature
            pEndFeature.Shape = pPolygon
            pEndFeature.Store()

            pFeature = pFeatureCur.NextFeature()

        End While

       

       '关闭编辑
        pWorkspaceEdit.StopEditOperation()
        pWorkspaceEdit.StopEditing(True)

        Return TempFeatureClass

    End Function

转载于:https://www.cnblogs.com/luspa/archive/2008/08/07/1263248.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值