AE实现读取栅格数据的像元值

it2024-07-05  42

1 如何读取选中的栅格像元的值(单个像元的值)

思路:需要通过获取地图上点击的点映射的像元,然后获取像元值。

​ IRaster2接口中的方法有MapToPixel(Converts a location (x, y) in map space into pixel space)可以将map中的XY坐标转换为像元的行列号坐标。再通过IRaster2中的GetPixelValue的方法来获取像元行列号对应的值。

int row; int column; //获取像元值 private void button1_Click(object sender, EventArgs e) { IRasterLayer lyr = axMapControl1.Map.get_Layer(0) as IRasterLayer; IRaster rst = lyr.Raster; IRaster2 rst2 = rst as IRaster2; object value = rst2.GetPixelValue(0, column, row);//0表示波段索引位置 MessageBox.Show("当前像元的列数为:" + column + "当前像元的行数为:" + row+" value为:"+value.ToString()); } private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) { IRasterLayer lyr = axMapControl1.Map.get_Layer(0) as IRasterLayer; IRaster rst = lyr.Raster; IRaster2 rst2 = rst as IRaster2; //将点击地图上的点的位置转换成行列号存储在全局变量column和row中 rst2.MapToPixel(e.mapX,e.mapY,out column,out row); }

2 如何读取任意选中的像元N*N邻域像元的值(区域像元的值)

​ 思路:需要先找到选中的像元,然后获取N*N邻域的像元,遍历每个像元获取像元值。

private void button2_Click(object sender, EventArgs e) { //指定像元块为3*3 IPnt size = new PntClass(); size.X = 3; size.Y = 3; IRasterLayer lyr = axMapControl1.Map.get_Layer(0) as IRasterLayer; IRaster rst = lyr.Raster; IPixelBlock ipb = rst.CreatePixelBlock(size); IPnt itp = new PntClass(); itp.X = column - 1;//左上角X表示列 itp.Y = row - 1;//左上角Y表示行 rst.Read(itp,ipb);//从itp(鼠标点击的栅格行列号开始)读取的数据,将转移到IPixelBlock(ipb)中 IPixelBlock3 ipb3 = ipb as IPixelBlock3; //0参数表示的是波段索引,获得的是一个3*3的数组,返回一个object Array pixes = ipb3.get_PixelData(0); for (int i = 0; i < 3; i++)//列 { for (int j = 0; j < 3; j++)//行 { //string value = Convert.ToString(pixes.GetValue(i,j)); string value = pixes.GetValue(i, j).ToString(); MessageBox.Show(value); } } }
最新回复(0)