単位当たりのピクセル幅を計算

 2016/9/1 (木)    

'データフレームの単位当たりのディスプレイ距離を計算
Sub fncCalculateDistance()
     
    'Applicationの取得
    Dim pMxApplication As IMxApplication
    Set pMxApplication = Application
     
    Dim pAppDisplay As IAppDisplay
    Set pAppDisplay = pMxApplication.Display
     
    Dim pDisplayTransformation As IDisplayTransformation
    Set pDisplayTransformation = pAppDisplay.DisplayTransformation
     
    'MapControlを使用する場合は,IMapControl2がFromMapPoint,ToMapPointメソッドを持っています
     
    'ディスプレイ単位の原点を作成
    Dim pDFromPoint As IPoint
    Set pDFromPoint = New Point
    pDFromPoint.PutCoords 0, 0
     
    'ディスプレイ単位の原点をデータフレームの座標系に準拠した座標値に変換
    Dim pFromPoint As IPoint
    Set pFromPoint = pDisplayTransformation.ToMapPoint(pDFromPoint.x, pDFromPoint.y)
    Debug.Print "ディスプレイ原点の空間座標", "X:" & pFromPoint.x, "Y:" & pFromPoint.y
     
    '移動量のシフト量を設定
    Dim lngUnit As Long
    lngUnit = 1
     
    'X方向へ設定単位X方向へシフトさせた空間座標値を取得
    Dim pToPoint As IPoint
    Set pToPoint = New Point
    pToPoint.PutCoords pFromPoint.x + lngUnit, pFromPoint.y
    Debug.Print "シフト先の空間座標", "X:" & pToPoint.x, "Y:" & pToPoint.y
     
    'ディスプレイ単位のシフト先ポイントを作成
    Dim lngToX As Long
    Dim lngToY As Long
    pDisplayTransformation.FromMapPoint pToPoint, lngToX, lngToY
     
    '単位はデータフレームで定義された座標系に準拠
    Debug.Print "単位当のディスプレイX距離", lngToX
 
End Sub

Copyright© WINGFIELD since1981 , 2018 All Rights Reserved.