YouTube | Facebook | X(Twitter) | RSS

クリックした地点からマップの縮尺に応じたバッファーを作成してフィーチャ検索用ジオメトリを作成

2016/9/1 (木)

VBA
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)
      
    Dim pMxApplication As IMxApplication
    Set pMxApplication = Application
      
    Dim pMxDocument As IMxDocument
    Set pMxDocument = ThisDocument
      
    Dim pAppDisplay As IAppDisplay
    Set pAppDisplay = pMxApplication.Display
      
    Dim pDisplayTransformation As IDisplayTransformation
    Set pDisplayTransformation = pAppDisplay.DisplayTransformation
      
    Dim pPoint As IPoint
    Set pPoint = pDisplayTransformation.ToMapPoint(x, y)
      
    Dim pTopologicalOperator As ITopologicalOperator
    Set pTopologicalOperator = pPoint
      
      
    Dim dblDistance As Double
    Const lngRate As Long = 100 '割合の逆数
      
    'マップの縦横サイズの平均を基に計算
    With pMxDocument.ActiveView.Extent
            dblDistance = ((.XMax - .XMin) + (.YMax - .YMin)) / 2 / lngRate
    End With
      
    'マップの縦横サイズ小さい方を基に計算
    With pMxDocument.ActiveView.Extent
        If (.XMax - .XMin) > (.YMax - .YMin) Then
            dblDistance = (.YMax - .YMin) / lngRate
        Else
            dblDistance = (.XMax - .XMin) / lngRate
        End If
    End With
  
    Dim pGeometry As IGeometry
    Set pGeometry = pTopologicalOperator.Buffer(dblDistance)
      
    Dim pArea As IArea
    Set pArea = pGeometry
      
    Debug.Print pArea.Area
End Sub
  • この記事を書いた人

羽田 康祐

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

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

S