FAQ
ArcObjects でマップ上の位置を指定し、ラスターのセル値 (ピクセル値) を取得する方法

ナレッジ番号:5550 | 登録日:2023/07/27 | 更新日:2024/11/21

概要

このトピックでは、マップ上でクリックした位置にあるラスターのセル値を取得する方法について説明します。

 Image

クリックした座標値からラスターのセル値を取得する

クリックした地点の座標値はデータフ レームの空間参照上の位置です。この位置が背景にあるラスターの中の何行目の何列に相当するかに換算し、その場所にあるラスターのピクセル値を取得します。 以下に OnMouseDown イベントを使用したサンプルコードを示します。
        protected override void OnMouseDown(MouseEventArgs arg)
        {
            IActiveView pActiveView = (IActiveView)ArcMap.Document.FocusMap;
            //マップ上のXY座標を取得
            IPoint pt = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(arg.X, arg.Y);
            IRasterLayer pRasterLay = (IRasterLayer)ArcMap.Document.FocusMap.get_Layer(0);
            IdentifyPixelValue(pRasterLay.Raster, pt.X, pt.Y);
        }

        public static void IdentifyPixelValue(IRaster raster, double xMap, double yMap)
        {
            IRaster2 raster2 = (IRaster2)raster;
            int col = raster2.ToPixelColumn(xMap);
            int row = raster2.ToPixelRow(yMap);
            //ラスターのピクセル値を取得
            object pixelValue = (object)raster2.GetPixelValue(0, col, row);

            if (pixelValue == null)
            {
                //No Data 値を返す
                System.Windows.Forms.MessageBox.Show("No Data");
            }
            else
            {
                //ピクセル値を返す
                System.Windows.Forms.MessageBox.Show(pixelValue.ToString());
            }
        }
Protected Overrides Sub OnMouseDown(arg As ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs)
     Dim pActiveView As IActiveView = CType(My.ArcMap.Document.FocusMap, IActiveView)
     Dim pt As IPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(arg.X, arg.Y)
     Dim pRasterLay As IRasterLayer = CType(My.ArcMap.Document.FocusMap.Layer(0), IRasterLayer)
     IdentifyPixelValue(pRasterLay.Raster, pt.X, pt.Y)
End Sub

Public Sub IdentifyPixelValue(raster As IRaster, xMap As Double, yMap As Double)
    Dim raster2 As IRaster2 = CType(raster, IRaster2)
    Dim col As Int32 = raster2.ToPixelColumn(xMap)
    Dim row As Int32 = raster2.ToPixelRow(yMap)
    Dim pixelValue As Object = CType(raster2.GetPixelValue(0, col, row), Object)

    If (pixelValue = Nothing) Then
        System.Windows.Forms.MessageBox.Show("No Data")
    Else
        System.Windows.Forms.MessageBox.Show(pixelValue.ToString())
    End If
End Sub

参考情報

メタデータ

機能

種類

製品