寻找两线相交的点,并生成到新的图层中去(Engine)

Public Sub CreatePointsFromIntersectingPolylines()
    Dim pEditLayers As IEditLayers
    Dim pEditor As IEditor
    Dim pEnumFeature As IEnumFeature
    Dim pFeature As IFeature
    Dim pFeature2 As IFeature
    Dim pGeomColl As IGeometryCollection
    Dim pID As New UID
    Dim pInvalidArea As IInvalidArea
    Dim pPoint As IPoint
    Dim pTopoOptr As ITopologicalOperator
   
    Dim bInOperation As Boolean
    Dim Count As Integer
   
    On Error GoTo ErrorHandler
   
    'Get a handle to the Editor extension
    pID = "esriEditor.Editor"
    Set pEditor = Application.FindExtensionByCLSID(pID)
    Set pEditLayers = pEditor 'QI
   
    If (Not pEditor.SelectionCount = 2) Or (Not pEditLayers.CurrentLayer.FeatureClass.ShapeType = esriGeometryPoint) Then
        MsgBox "Must have exactly two polylines selected and Target Layer must be a point layer."
        Exit Sub
    End If
   
    'Loop through the selected features to make sure we have polylines only
    Set pEnumFeature = pEditor.EditSelection
    pEnumFeature.Reset
    Set pFeature = pEnumFeature.Next
    Do While Not pFeature Is Nothing
        If Not pFeature.Shape.GeometryType = esriGeometryPolyline Then
            MsgBox "Both seleted features must be a polyline."
            Exit Sub
        End If
        Set pFeature = pEnumFeature.Next
    Loop
   
    'Intersect the two polylines creating a multipoint
    pEnumFeature.Reset
    Set pFeature = pEnumFeature.Next
    Set pFeature2 = pEnumFeature.Next
    Set pTopoOptr = pFeature.Shape
    Set pGeomColl = pTopoOptr.Intersect(pFeature2.Shape, esriGeometry0Dimension)
   
    'If no intersection points, exit
    If pGeomColl.GeometryCount = 0 Then Exit Sub
   
    Set pInvalidArea = New InvalidArea
    Set pInvalidArea.Display = pEditor.Display
   
    'Create a new point features at each intersection
    pEditor.StartOperation
    bInOperation = True
    For Count = 0 To pGeomColl.GeometryCount - 1
        Set pPoint = pGeomColl.Geometry(Count)
        Set pFeature = pEditLayers.CurrentLayer.FeatureClass.CreateFeature
        Set pFeature.Shape = pGeomColl.Geometry(Count)
        pFeature.Store
        pInvalidArea.Add pFeature
    Next Count
    pEditor.StopOperation ("Create Points from Intersections")
    bInOperation = False
   
    'Refresh the display
    pInvalidArea.Invalidate esriAllScreenCaches
   
    Exit Sub 'Exit to avoid error handler
   
ErrorHandler:
    If bInOperation Then
        pEditor.AbortOperation
    End If
   
End Sub

 

http://www.gisall.com/?uid-5607-action-viewspace-itemid-3150

转载于:https://www.cnblogs.com/kaixin110/archive/2010/06/30/1768386.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值