FAQ
バーテックスでポリラインを分割する方法

ナレッジ番号:5463 | 登録日:2023/07/27 | 更新日:2024/12/02

【概要】

このサンプルはバーテックスでポリラインを分割し、
セグメントごとのラインフィーチャを作成する方法を示すArcObjectsコードです。


【手順】

  1. ArcMapを起動します。

  2. Visual Basic Editorを開きます。

  3. プロジェクト・エクスプローラ・ウィンドウで、Projectの下にあるArcMap Objects > ThisDocumentをダブルクリックし、コード・ウィンドウを開きます。

  4. コード・モジュールに次のコードをペーストします。

    
    Sub SplitAtVertex()
      Dim pMxDoc As IMxDocument
      Dim pFeatureClass As IFeatureClass
      Dim pFeatureLayer As IFeatureLayer
      Dim pFeatureCursor As IFeatureCursor
      Dim pOutFeatureCursor As IFeatureCursor
      Dim pFeature As IFeature
      Dim pOutFeatureBuffer As IFeatureBuffer
      Dim pSegmentCollection As ISegmentCollection
      Dim pSegment As ISegment
      Dim pPointCollection As IPointCollection
      Dim i As Integer
    
      'TOCで選択したレイヤのラインを分割します。
      Set pMxDoc = ThisDocument
      If Not pMxDoc.SelectedLayer Is Nothing Then
        Set pFeatureLayer = pMxDoc.SelectedLayer
      Else
        MsgBox "分割するレイヤを選択してください"
        Exit Sub
      End If
    
      Set pFeatureClass = pFeatureLayer.FeatureClass
      Set pFeatureCursor = pFeatureClass.Update(Nothing, False)
      Set pOutFeatureCursor = pFeatureClass.Insert(True)
      Set pFeature = pFeatureCursor.NextFeature
    
      '全フィーチャをループ処理します。バーテックスで各フィーチャを分割し、
      '属性と図形を新規フィーチャにコピーします。
      Do While Not pFeature Is Nothing
        Set pSegmentCollection = pFeature.Shape
        For i = 0 To pSegmentCollection.SegmentCount - 1
          Set pSegment = pSegmentCollection.Segment(i)
          Set pOutFeatureBuffer = pFeatureClass.CreateFeatureBuffer
          AddFields pOutFeatureBuffer, pFeature
          Set pPointCollection = New Polyline
          pPointCollection.AddPoint pSegment.FromPoint
          pPointCollection.AddPoint pSegment.ToPoint
          Set pOutFeatureBuffer.Shape = pPointCollection
          pOutFeatureCursor.InsertFeature pOutFeatureBuffer
        Next i
        pFeatureCursor.DeleteFeature
        Set pFeature = pFeatureCursor.NextFeature
        pOutFeatureCursor.Flush
      Loop
      pFeatureCursor.Flush
      'Refresh
      pMxDoc.ActiveView.Refresh
    End Sub
    
    Private Sub AddFields(pFeatureBuffer As IFeatureBuffer, pFeature As IFeature)
      '元フィーチャから新規フィーチャに属性をコピーします。
      Dim pRowBuffer As IRowBuffer
      Dim pNewFields As IFields
      Dim pNewField As IField
      Dim pFields As IFields
      Dim pField As IField
      Dim i As Integer
      Dim NewFieldIndex As Long
    
      Set pRowBuffer = pFeatureBuffer
      Set pNewFields = pRowBuffer.Fields
    
      Set pFields = pFeature.Fields
      For i = 0 To pFields.FieldCount - 1
        Set pField = pFields.Field(i)
        If Not pField.Type = esriFieldTypeGeometry And Not pField.Type = _
        esriFieldTypeOID And pField.Editable Then
          NewFieldIndex = pNewFields.FindField(pField.Name)
          If Not NewFieldIndex = -1 Then
            pFeatureBuffer.Value(NewFieldIndex) = pFeature.Value(i)
          End If
        End If
      Next
    End Sub
    
    
  5. Visual Basic Editorを閉じます。

  6. 分割するレイヤ(ジオデータベースのラインフィーチャクラス)をArcMapのTOCから選択します。

  7. コードを実行します。

    A:ArcMapで、ツール > マクロ > マクロと選択し、マクロ・ダイアログを表示します。

    B:マクロを選択し、実行をクリックします。

    ※分割するレイヤがシェープファイルの場合は編集を開始してからコードを実行してください。

メタデータ

種類

機能

製品