YouTube | Facebook | X(Twitter) | RSS

2 点間のライン作成

2016/9/1 (木)

Attribute VB_Name = "Module1"
Option Explicit
 
Sub test()
 
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
 
'始点ポイント(GPS)(1番目レイヤ)
Dim pFLayer0 As IFeatureLayer
Set pFLayer0 = pMxDoc.FocusMap.Layer(0)
 
Dim pFClass0 As IFeatureClass
Set pFClass0 = pFLayer0.FeatureClass
 
 
'終点ポイント(アドレスマッチング)(2番目レイヤ)
Dim pFLayer1 As IFeatureLayer
Set pFLayer1 = pMxDoc.FocusMap.Layer(1)
 
Dim pFClass1 As IFeatureClass
Set pFClass1 = pFLayer1.FeatureClass
 
 
'ライン(3番目レイヤ)
Dim pFLayer2 As IFeatureLayer
Set pFLayer2 = pMxDoc.FocusMap.Layer(2)
 
Dim pFClass2 As IFeatureClass
Set pFClass2 = pFLayer2.FeatureClass
 
 
'始点ポイントの取得
Dim pFCursor0 As IFeatureCursor
Set pFCursor0 = pFClass0.Search(Nothing, True)
 
 
'終点ポイント取得用検索条件
Dim pQFilter0 As IQueryFilter
Dim pFCursor1 As IFeatureCursor
Dim pFeature1 As IFeature
Dim pPCollection As IPointCollection    'ラインレイヤに挿入するジオメトリ
 
 
'Insertカーソルの作成
Dim pFCursor2 As IFeatureCursor
Set pFCursor2 = pFClass2.Insert(True)
 
'フィーチャバッファを使用
Dim pFeature2 As IFeature
Set pFeature2 = pFClass2.CreateFeatureBuffer
 
Dim i As Long   'ループ用
Dim q As Long   'ObjectID
Dim c As Long   'フィーチャ フラッシュ用
c = 0
 
 
'ベースポイント(1番目のレイヤ)の数だけループ
Dim pFeature0 As IFeature
Set pFeature0 = pFCursor0.NextFeature
 
Do Until pFeature0 Is Nothing
     
    '検索実行
    Set pQFilter0 = New QueryFilter
    pQFilter0.WhereClause = " ""基地局管理"" =  '" & pFeature0.Value(pFeature0.Fields.FindField("baseid")) & "'"
     
    Set pFCursor1 = pFClass1.Search(pQFilter0, True)
    Set pFeature1 = pFCursor1.NextFeature
     
    '検索によってひっかかった対応ポイント(2番目のレイヤ)
    If Not pFeature1 Is Nothing Then
                 
        'ラインジオメトリの作成
        Set pPCollection = New Polyline
         
        pPCollection.AddPoint pFeature0.Shape
        pPCollection.AddPoint pFeature1.Shape
         
        '属性の入力
        Set pFeature2.Shape = pPCollection  'ジオメトリ
        pFeature2.Value(pFeature2.Fields.FindField("基地局管理")) = pFeature0.Value(pFeature0.Fields.FindField("baseid"))   '属性
         
        'Featureの作成処理
        q = pFCursor2.InsertFeature(pFeature2)
        c = c + 1
         
        'フィーチャのフラッシュ
        If c = 1000 Then
            pFCursor2.Flush
            c = 0
        End If
         
         
    End If
         
    Set pFeature0 = pFCursor0.NextFeature
     
 
Loop
     
    'フィーチャのフラッシュ
    pFCursor2.Flush
     
    MsgBox "end"
 
End Sub
  • この記事を書いた人

羽田 康祐

伊達と酔狂のGISエンジニア。GIS上級技術者、Esri認定インストラクター、CompTIA CTT+ Classroom Trainer、潜水士、PADIダイブマスター、四アマ。WordPress は 2.1 からのユーザーで歴だけは長い。 代表著書『"地図リテラシー入門―地図の正しい読み方・描き方がわかる』 GIS を使った自己紹介はこちら。ESRIジャパン(株)所属、元青山学院大学非常勤講師を兼務。日本地図学会第31期常任委員。発言は個人の見解です。

-プログラミング, ArcGIS
-,