public static IRasterDataset createFileRasterDataset(IRasterWorkspace2 irasterWorkspace2_0, string string_0, int int_0, rstPixelType rstPixelType_0, ISpatialReference ispatialReference_0) { try { IRasterDataset dataset = null; IPoint origin = new Point(); origin.PutCoords(0.0, 0.0); if (ispatialReference_0 == null) { ispatialReference_0 = new UnknownCoordinateSystem() as ISpatialReference; } dataset = irasterWorkspace2_0.CreateRasterDataset(string_0, "IMAGINE Image", origin, 200, 100, 1.0, 1.0, int_0, rstPixelType_0, ispatialReference_0, true); IRawPixels pixels = null; IPixelBlock3 block = null; IPnt tlc = null; IPnt size = null; IRasterBandCollection bands = (IRasterBandCollection)dataset; pixels = (IRawPixels)bands.Item(0); IRasterProps props = (IRasterProps)pixels; tlc = new DblPnt(); tlc.SetCoords(0.0, 0.0); size = new DblPnt(); size.SetCoords((double)props.Width, (double)props.Height); block = (IPixelBlock3)pixels.CreatePixelBlock(size); pixels.Read(tlc, (IPixelBlock)block); object[,] objArray = (object[, ])block.get_PixelDataByRef(0); for (int i = 0; i < props.Width; i++) { for (int j = 0; j < props.Height; j++) { objArray[i, j] = (i * j) % 255; } } object cache = pixels.AcquireCache(); pixels.Write(tlc, (IPixelBlock)block); pixels.ReturnCache(cache); return(dataset); } catch (Exception exception) { Debug.WriteLine(exception.Message); return(null); } }
public static double GetPixelVal(IRaster pRaster, IPoint pPoint) { IPixelBlock pPixelBlock; IPnt pPnt; IPnt pCurrentPnt; ISpatialReference pSR; pSR = pPoint.SpatialReference; pPnt = new DblPnt(); pPnt.SetCoords(1.0, 1.0); pPixelBlock = pRaster.CreatePixelBlock(pPnt); pCurrentPnt = GetCurrPnt(pRaster, pPoint.X, pPoint.Y, pSR); pRaster.Read(pCurrentPnt, pPixelBlock); return(Convert.ToDouble(string.Format("{0,10:###0.0000}", pPixelBlock.GetVal(0, 0, 0)))); }
public void Reclassify() { InitColorRamp(); IRasterWorkspace pRWS; IWorkspaceFactory pWorkspaceFactory; pWorkspaceFactory = new RasterWorkspaceFactory(); String wsp; int r; int l; r = ComboBoxInLayer.Text.LastIndexOf("\\"); l = ComboBoxInLayer.Text.LastIndexOf("."); wsp = ComboBoxInLayer.Text.Substring(0, r); pRWS = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(wsp, 0); try { string ws = System.IO.Path.GetDirectoryName(ComboBoxInLayer.Text); string fbs = System.IO.Path.GetFileName(ComboBoxInLayer.Text); IWorkspaceFactory pWork = new RasterWorkspaceFactory(); IRasterWorkspace pRasterWs = pWork.OpenFromFile(ws, 0) as IRasterWorkspace; pRster = pRasterWs.OpenRasterDataset(fbs).CreateDefaultRaster(); IRasterBandCollection pRasterBandCol; pRasterBandCol = (IRasterBandCollection)pRster; IRawPixels pRawpixel; pRawpixel = (IRawPixels)pRasterBandCol.Item(0); IRasterProps pRasterProps; pRasterProps = (IRasterProps)pRawpixel; IPnt pSize; pSize = new DblPnt(); pSize.SetCoords(pRasterProps.Width, pRasterProps.Height); IPixelBlock pPixelBlock; pPixelBlock = pRawpixel.CreatePixelBlock(pSize); IPnt pPnt; pPnt = new DblPnt(); pPnt.X = 0; //the origin (top left corner) of the PixelBlock pPnt.Y = 0; pRawpixel.Read(pPnt, pPixelBlock); float PixelValue; minValue = 10000000; maxValue = 0; List <double> allValue = new List <double>(); for (int i = 0; i < pPixelBlock.Width; i++) { for (int j = 0; j < pPixelBlock.Height; j++) { PixelValue = (float)pPixelBlock.GetVal(0, i, j); allValue.Add(PixelValue); if (PixelValue != null) { if (PixelValue > maxValue) { maxValue = PixelValue; } if (PixelValue < minValue) { minValue = PixelValue; } } } } IRasterBand pRasterBand = new RasterBand(); pRasterBand = pRasterBandCol.Item(0); pRasterBand.ComputeStatsAndHist(); IRasterStatistics pRasterStatistic; //double[] amount = pRasterBand.Histogram.Counts; pRasterStatistic = pRasterBand.Statistics; maxValue = (float)pRasterStatistic.Maximum; minValue = (float)pRasterStatistic.Minimum; //if (comboBox1.Text.Trim() == "等间隔") //{//先求每个等分间距 float Tmpincrement; DataRow FilterRow; Tmpincrement = (maxValue - minValue) / Convert.ToInt16(CmbLineCount.Text); FilterDataTable.Rows.Clear(); for (int i = 1; i <= Convert.ToInt16(CmbLineCount.Text); i++) { FilterRow = FilterDataTable.NewRow(); FilterRow[0] = Convert.ToString(minValue + Tmpincrement * (i - 1)) + "~" + Convert.ToString(minValue + Tmpincrement * i); FilterRow[1] = i; FilterRow[2] = i; FilterDataTable.Rows.Add(FilterRow); } DataGridFilterData.DataSource = FilterDataTable; DataGridFilterData.Refresh(); // } //else // { ////allValue.Sort(); ////List<double> valuesort = new List<double>(); ////valuesort = BublleSort(allValue); //allValue.Sort(); //int amount = pPixelBlock.Width * pPixelBlock.Height; //int Tmpincrement; //DataRow FilterRow; //Tmpincrement = (amount) / Convert.ToInt16(CmbLineCount.Text); //FilterDataTable.Rows.Clear(); //for (int i = 1; i < Convert.ToInt16(CmbLineCount.Text); i++) //{ // FilterRow = FilterDataTable.NewRow(); // if (allValue[Tmpincrement * (i - 1)] == allValue[Tmpincrement * (i)]) // break; // FilterRow[0] = Convert.ToString(allValue[Tmpincrement * (i - 1)]) + "~" + Convert.ToString(allValue[Tmpincrement * (i)]); // FilterRow[1] = i; // FilterDataTable.Rows.Add(FilterRow); //} //if (allValue[Tmpincrement * Convert.ToInt16(CmbLineCount.Text)] != maxValue) //{ // FilterRow = FilterDataTable.NewRow(); // FilterRow[0] = Convert.ToString(allValue[Tmpincrement * Convert.ToInt16(CmbLineCount.Text)]) + "~" + Convert.ToString(maxValue); // FilterRow[1] = Convert.ToInt16(CmbLineCount.Text); // FilterDataTable.Rows.Add(FilterRow); //} //DataGridFilterData.DataSource = FilterDataTable; //DataGridFilterData.Refresh(); //} } catch (Exception ex) { MessageBox.Show(ex.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } }
public IRaster TINToDEM(ITin pTin) { IPoint pOrigin = pTin.Extent.LowerLeft; IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory(); ESRI.ArcGIS.Geodatabase.IWorkspaceName pworkspaceName = pworkspaceFactory.Create(null, "MyWorkspace", null, 0); ESRI.ArcGIS.esriSystem.IName pname = (IName)pworkspaceName; ESRI.ArcGIS.Geodatabase.IWorkspace inmemWor = (IWorkspace)pname.Open(); IPoint originpoint = pOrigin; IRasterWorkspace2 rasterws = (IRasterWorkspace2)inmemWor; int nCol, nRow; nCol = 500; nRow = 500; double cellsizeX, cellsizeY; cellsizeX = pTin.Extent.Width / nCol; cellsizeY = pTin.Extent.Height / nRow; //用于计算的 float型的栅格数据 IRasterDataset demdataset = rasterws.CreateRasterDataset("Dataset", "MEM", originpoint, nCol, nRow, (double)cellsizeX, (double)cellsizeY, 1, rstPixelType.PT_DOUBLE, null, true); try { System.Runtime.InteropServices.Marshal.ReleaseComObject(pname); System.Runtime.InteropServices.Marshal.ReleaseComObject(pworkspaceFactory); System.Runtime.InteropServices.Marshal.ReleaseComObject(pworkspaceName); System.Runtime.InteropServices.Marshal.ReleaseComObject(inmemWor); } catch { } //IRawPixels pRawPixels = GetRawPixels(pRDS, 0); IRaster pRaster = demdataset.CreateDefaultRaster(); IPnt pBlockSize = new DblPnt(); //nCol = 50; //nRow = 50; pBlockSize.X = nCol; pBlockSize.Y = nRow; IPixelBlock pPixelBlock = pRaster.CreatePixelBlock(pBlockSize); //IPixelBlock pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize); IPixelBlock3 pPixelBlock3 = pPixelBlock as IPixelBlock3; //object val = pPixelBlock.get_SafeArray(0); ITinSurface pTinSurf = pTin as ITinSurface; // IRasterProps pRasterProps = pRawPixels as IRasterProps; IRasterProps pRasterProps = pRaster as IRasterProps; object nodata; //pOrigin.X = pOrigin.X + (cellsize * 0.5); //pOrigin.Y = pOrigin.Y + (cellsize * nRow) - (cellsize * 0.5); pOrigin.X = pOrigin.X; pOrigin.Y = pOrigin.Y + (cellsizeY * nRow); nodata = pRasterProps.NoDataValue; IGeoDatabaseBridge2 pbridge2 = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass(); //这个pOrigin为栅格左上角 //pbridge2.QueryPixelBlock(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, esriRasterizationType.esriElevationAsRaster, nodata, ref val); //if (pTin.ProcessCancelled) // return null; //val.GetType(); CalPixelArray(pTinSurf, pOrigin.X, pOrigin.Y, cellsizeX, cellsizeY, ref pPixelBlock3); IPnt pOffset = new DblPnt(); pOffset.X = 0; pOffset.Y = 0; //pPixelBlock3.set_PixelData(0, val); //pRawPixels.Write(pOffset, (IPixelBlock)pPixelBlock3);//写入硬盘 IRasterEdit prasteredit = pRaster as IRasterEdit; prasteredit.Write(pOffset, (IPixelBlock)pPixelBlock3); //pRDS = OpenOutputRasterDataset(sDir, sName); //IPixelBlock pb = pRaster.CreatePixelBlock(pBlockSize); //pRaster.Read(pOffset,pb); return(pRaster); }
public IRasterDataset TinToRaster_new(ITinAdvanced pTin, esriRasterizationType eRastConvType, String sDir, String sName, rstPixelType ePixelType, Double cellsize, IEnvelope pExtent, bool bPerm) { IPoint pOrigin = pExtent.LowerLeft; //pOrigin.X = pOrigin.X - (cellsize * 0.5); //pOrigin.Y = pOrigin.Y - (cellsize * 0.5); pOrigin.X = pOrigin.X; pOrigin.Y = pOrigin.Y; int nCol, nRow; nCol = (int)Math.Round(pExtent.Width / cellsize); nRow = (int)Math.Round(pExtent.Height / cellsize); IGeoDataset pGDS = pTin as IGeoDataset; ISpatialReference2 pSR = pGDS.SpatialReference as ISpatialReference2; //这个pOrigin为栅格左下角 IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory(); IRasterWorkspace2 rasterws = pworkspaceFactory.OpenFromFile(sDir, 0) as IRasterWorkspace2; IPoint originpoint = pOrigin; //用于计算的 float型的栅格数据 IRasterDataset demdataset = rasterws.CreateRasterDataset(sName, "TIFF", originpoint, nCol, nRow, cellsize, cellsize, 1, rstPixelType.PT_DOUBLE, null, true); IRasterDataset pRDS = demdataset; //IRawPixels pRawPixels = GetRawPixels(pRDS, 0); IRaster pRaster = pRDS.CreateDefaultRaster(); IPnt pBlockSize = new DblPnt(); //nCol = 50; //nRow = 50; pBlockSize.X = nCol; pBlockSize.Y = nRow; IPixelBlock pPixelBlock = pRaster.CreatePixelBlock(pBlockSize); //IPixelBlock pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize); IPixelBlock3 pPixelBlock3 = pPixelBlock as IPixelBlock3; //object val = pPixelBlock.get_SafeArray(0); ITinSurface pTinSurf = pTin as ITinSurface; // IRasterProps pRasterProps = pRawPixels as IRasterProps; IRasterProps pRasterProps = pRaster as IRasterProps; object nodata; //pOrigin.X = pOrigin.X + (cellsize * 0.5); //pOrigin.Y = pOrigin.Y + (cellsize * nRow) - (cellsize * 0.5); pOrigin.X = pOrigin.X; pOrigin.Y = pOrigin.Y + (cellsize * nRow); nodata = pRasterProps.NoDataValue; IGeoDatabaseBridge2 pbridge2 = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass(); //这个pOrigin为栅格左上角 //pbridge2.QueryPixelBlock(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, esriRasterizationType.esriElevationAsRaster, nodata, ref val); //if (pTin.ProcessCancelled) // return null; //val.GetType(); CalPixelArray(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, ref pPixelBlock3); IPnt pOffset = new DblPnt(); pOffset.X = 0; pOffset.Y = 0; //pPixelBlock3.set_PixelData(0, val); //pRawPixels.Write(pOffset, (IPixelBlock)pPixelBlock3);//写入硬盘 IRasterEdit prasteredit = pRaster as IRasterEdit; prasteredit.Write(pOffset, (IPixelBlock)pPixelBlock3); //pRDS = OpenOutputRasterDataset(sDir, sName); //IPixelBlock pb = pRaster.CreatePixelBlock(pBlockSize); //pRaster.Read(pOffset,pb); // ISaveAs pSaveas = pRasterProps as ISaveAs2; // pSaveas.SaveAs(sDir + "\\" + sName, null, "TIFF"); prasteredit.Refresh(); return(pRDS); }
public string GetCellValueOrig_MayNotBeRight(string layerName, IPoint pLoc, IMap pMap) { try { IPnt pBlockSize = new DblPnt(); pBlockSize.SetCoords(1.0, 1.0); IRasterLayer pLayer = null; IPixelBlock pPixelBlock; object vValue; // string sPixelVals; // sPixelVals = "No Raster"; IRasterProps pRasterProps; double dXSize; double dYSize; IPnt pPixel; pPixel = new DblPnt(); pLayer = GetRasterLayer(pMap, layerName); if (pLayer == null) return ""; pPixelBlock = pLayer.Raster.CreatePixelBlock(pBlockSize); pRasterProps = pLayer.Raster as IRasterProps; dXSize = pRasterProps.Extent.XMax - pRasterProps.Extent.XMin; dYSize = pRasterProps.Extent.YMax - pRasterProps.Extent.YMin; dXSize = dXSize / pRasterProps.Width; dYSize = dYSize / pRasterProps.Height; pPixel.X = (pLoc.X - pRasterProps.Extent.XMin) / dXSize; pPixel.Y = (pRasterProps.Extent.YMax - pLoc.Y) / dYSize; pLayer.Raster.Read(pPixel, pPixelBlock); for (int j = 0; j < pPixelBlock.Planes; j++) { vValue = pPixelBlock.GetVal(j, 0, 0); if (vValue.ToString() != "No Raster") return vValue.ToString(); //= sPixelVals + ", "; } //if (sPixelVals != "No Raster") // return ""; //else return "No Raster"; } catch (Exception ex) { MessageBox.Show("GetView: " + ex.Message); return "No Raster"; } }
public string GetCellValue(string layerName, IPoint pLoc, IMap pMap) { try { IRasterLayer pLayer = null; double dblX = pLoc.X; double dblY = pLoc.Y; pLayer = GetRasterLayer(pMap, layerName); if (pLayer == null) return ""; TransformDataXYToPixelXY(pLayer.Raster, ref dblX, ref dblY); IPnt pBlockSize = new DblPnt(); pBlockSize.SetCoords(1.0, 1.0); IPixelBlock pPixelBlock; pPixelBlock = pLayer.Raster.CreatePixelBlock(pBlockSize); IPnt pPixel; pPixel = new DblPnt(); pPixel.X = dblX; pPixel.Y = dblY; pLayer.Raster.Read(pPixel, pPixelBlock); object vValue; for (int j = 0; j < pPixelBlock.Planes; j++) { vValue = pPixelBlock.GetVal(j, 0, 0); if (vValue.ToString() != "No Raster") return vValue.ToString(); //= sPixelVals + ", "; } //if (sPixelVals != "No Raster") // return ""; //else return "No Raster"; } catch (Exception ex) { MessageBox.Show("GetView: " + ex.Message); return "No Raster"; } }
public static IRasterDataset TinToRaster(ITinAdvanced itinAdvanced_0, esriRasterizationType esriRasterizationType_0, string string_0, string string_1, string string_2, rstPixelType rstPixelType_0, double double_0, IEnvelope ienvelope_0, bool bool_0) { object obj3; IPoint lowerLeft = ienvelope_0.LowerLeft; lowerLeft.X -= double_0 * 0.5; lowerLeft.Y -= double_0 * 0.5; int num = ((int)Math.Round((double)(ienvelope_0.Width / double_0))) + 1; int num2 = ((int)Math.Round((double)(ienvelope_0.Height / double_0))) + 1; IGeoDataset dataset = itinAdvanced_0 as IGeoDataset; ISpatialReference2 spatialReference = dataset.SpatialReference as ISpatialReference2; IRasterDataset dataset2 = CreateRasterSurf(string_0, string_1, string_2, lowerLeft, num, num2, double_0, double_0, 1, rstPixelType_0, spatialReference, bool_0); IRawPixels rawPixels = GetRawPixels(dataset2, 0); object cache = rawPixels.AcquireCache(); ITinSurface pSurface = itinAdvanced_0 as ITinSurface; IRasterProps o = rawPixels as IRasterProps; double zMin = itinAdvanced_0.Extent.ZMin; if (rstPixelType_0 == rstPixelType.PT_FLOAT) { obj3 = (float)(zMin - 1.0); } else { obj3 = (int)(zMin - 1.0); } o.NoDataValue = obj3; IPnt tlc = new DblPnt(); int num4 = 2048; if (num < 2048) { num4 = num; } int num5 = 2048; if (num2 < 2048) { num5 = num2; } IPnt size = new DblPnt { X = num4, Y = num5 }; IPixelBlock3 block = rawPixels.CreatePixelBlock(size) as IPixelBlock3; ITrackCancel cancel = new CancelTracker { CancelOnClick = false, CancelOnKeyPress = true }; int num6 = (int)(Math.Round((double)((num / num4) + 0.49)) * Math.Round((double)((num2 / num5) + 0.49))); if (num6 == 1) { itinAdvanced_0.TrackCancel = cancel; } IPoint point2 = new Point(); object obj4 = block.get_PixelDataByRef(0); for (int i = 0; i < num2; i += num5) { for (int j = 0; j < num; j += num4) { if ((num - j) < num4) { size.X = num - j; block = rawPixels.CreatePixelBlock(size) as IPixelBlock3; obj4 = block.get_PixelDataByRef(0); } point2.X = (lowerLeft.X + (j * double_0)) + (double_0 * 0.5); point2.Y = (lowerLeft.Y + ((num2 - i) * double_0)) - (double_0 * 0.5); IGeoDatabaseBridge2 bridge = new GeoDatabaseHelper() as IGeoDatabaseBridge2; bridge.QueryPixelBlock(pSurface, point2.X, point2.Y, double_0, double_0, esriRasterizationType_0, obj3, ref obj4); tlc.X = j; tlc.Y = i; block.set_PixelData(0, obj4); rawPixels.Write(tlc, block as IPixelBlock); } bool flag = false; if (size.X != num4) { size.X = num4; flag = true; } if ((num2 - i) < num5) { size.Y = num2 - i; flag = true; } if (flag) { block = rawPixels.CreatePixelBlock(size) as IPixelBlock3; obj4 = block.get_PixelDataByRef(0); } } rawPixels.ReturnCache(cache); Marshal.ReleaseComObject(cache); cache = null; Marshal.ReleaseComObject(rawPixels); rawPixels = null; Marshal.ReleaseComObject(block); block = null; Marshal.ReleaseComObject(o); o = null; obj4 = 0; GC.Collect(); return(dataset2); }
public static IRasterDataset TinToRaster(ITinAdvanced itinAdvanced_0, esriRasterizationType esriRasterizationType_0, string string_0, string string_1, rstPixelType rstPixelType_0, double double_0, IEnvelope ienvelope_0, bool bool_0) { IPoint lowerLeft = ienvelope_0.LowerLeft; lowerLeft.X -= double_0 * 0.5; lowerLeft.Y -= double_0 * 0.5; int num = (int)Math.Round((double)((ienvelope_0.Width / double_0) + 1.0)); int num2 = (int)Math.Round((double)((ienvelope_0.Height / double_0) + 1.0)); IGeoDataset dataset = itinAdvanced_0 as IGeoDataset; ISpatialReference2 spatialReference = dataset.SpatialReference as ISpatialReference2; IRasterDataset dataset2 = CreateRasterSurf(string_0, string_1, "GRID", lowerLeft, num, num2, double_0, double_0, rstPixelType_0, spatialReference, true); IRasterBandCollection bands = dataset2 as IRasterBandCollection; IRawPixels pixels = bands.Item(0) as IRawPixels; ITinSurface pSurface = itinAdvanced_0 as ITinSurface; pSurface.RasterInterpolationMethod = esriSurfaceInterpolationType.esriNaturalNeighborInterpolation; IRasterProps props = pixels as IRasterProps; object noDataValue = props.NoDataValue; IPnt tlc = new DblPnt(); int num3 = 2048; int num4 = 2048; if (num < 2048) { num3 = num; } if (num2 < num4) { num4 = num2; } IPnt size = new DblPnt { X = num3, Y = num4 }; IPixelBlock pxls = pixels.CreatePixelBlock(size); object block = pxls.get_SafeArray(0); IPoint point2 = new Point(); for (int i = 0; i < num2; i += num4) { for (int j = 0; j < num; j += num3) { if ((num - j) < num3) { size.X = num - j; pxls = pixels.CreatePixelBlock(size); block = pxls.get_SafeArray(0); } point2.X = (lowerLeft.X + (j * double_0)) + (double_0 * 0.5); point2.Y = (lowerLeft.Y + ((num2 - i) * double_0)) - (double_0 * 0.5); IGeoDatabaseBridge2 bridge = new GeoDatabaseHelper() as IGeoDatabaseBridge2; bridge.QueryPixelBlock(pSurface, point2.X, point2.Y, double_0, double_0, esriRasterizationType_0, noDataValue, ref block); tlc.X = j; tlc.Y = i; pxls.set_SafeArray(0, block); pixels.Write(tlc, pxls); } bool flag = false; if (size.X != num3) { size.X = num3; flag = true; } if ((num2 - i) < num4) { size.Y = num2 - i; } if (flag) { block = pixels.CreatePixelBlock(size).get_SafeArray(0); } } return(dataset2); }
private void ShowRasterInfo(IRasterLayer rLayer) { rtxbRasterInfo.Text = "Boand Number is " + rLayer.BandCount.ToString();// "\r\n" +"Resolution is " + rLayer.DisplayResolutionFactor.ToString() + "\r\n" + "Row number is " + rLayer.RowCount.ToString(); IRaster raster = rLayer.Raster; //Raster Data IRasterBandCollection rBandCon = raster as IRasterBandCollection; int numBands = rBandCon.Count; for (int i = 0; i < numBands; i++) { // IRasterBand rBand = rBandCon.Item(i); IRasterProps rasterData = rBand as IRasterProps; //Raster Height int height = rasterData.Height; //Raster Width int width = rasterData.Width; //Raster Cell Size IPnt cell = rasterData.MeanCellSize(); rstPixelType rType = rasterData.PixelType; MessageBox.Show(rType.ToString()); if (rType == rstPixelType.PT_LONG) { //Error code //Read Raster //Wrong QI //IRaster pRaster = rBand as IRaster; ITable rasterTable = rBand.AttributeTable; IQueryFilter qFilter = new QueryFilter(); for (int j = 0; j < rasterTable.Fields.FieldCount; j++) { IField aField = rasterTable.Fields.get_Field(j); qFilter.AddField(aField.ToString()); } ICursor cursor = rasterTable.Search(qFilter, true); IRow aRow = cursor.NextRow(); if (aRow != null) { //aRow.get_Value(0); MessageBox.Show(cell.X.ToString() + "x" + cell.Y + ":" + aRow.get_Value(0).ToString()); //Read Raster // rBand. } } // Create pixelblock IRawPixels rawPixels = rBand as IRawPixels; //cannot be used as follows //IRawPixels rawPixels = raster as IRawPixels; IPnt pixelBlockOrigin = new DblPnt(); pixelBlockOrigin.SetCoords(0, 0); IPnt pixelBlockSize = new DblPnt(); pixelBlockSize.SetCoords(rasterData.Width, rasterData.Height); IPixelBlock3 pixelBlock3 = (IPixelBlock3)rawPixels.CreatePixelBlock(pixelBlockSize); //Read rawPixels.Read(pixelBlockOrigin, (IPixelBlock)pixelBlock3); //GetVal( int brand, int X, int Y); brand=0 int x = 3600; int y = 800; object cellD = pixelBlock3.GetVal(0, x, y); //MessageBox.Show(cellD.ToString()); rtxbRasterInfo.Text = rtxbRasterInfo.Text + "\r\n" + rBand.Bandname.ToString() + ":" + width.ToString() + "x" + height.ToString() + ":(" + x.ToString() + "," + y.ToString() + ")=" + cellD.ToString(); } }
private void BtnInput_Click(object sender, EventArgs e) { OpenFileDialog OpenFileDlg = new OpenFileDialog(); String strPath; // '文件名 OpenFileDlg.FileName = ""; OpenFileDlg.Filter = "tif files (*.tif)|*.tif|All files (*.*)|*.*"; //过滤文件类型 OpenFileDlg.FilterIndex = 2; OpenFileDlg.ShowDialog(); strPath = OpenFileDlg.FileName.Trim(); layerpath.Text = strPath; //获取图层的栅格信息 IRasterWorkspace pRWS; IWorkspaceFactory pWorkspaceFactory; pWorkspaceFactory = new RasterWorkspaceFactory(); String wsp; int r; int l; r = layerpath.Text.LastIndexOf("\\"); l = layerpath.Text.LastIndexOf("."); wsp = layerpath.Text.Substring(0, r); pRWS = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(wsp, 0); try { string ws = Path.GetDirectoryName(layerpath.Text); string fbs = Path.GetFileName(layerpath.Text); IWorkspaceFactory pWork = new RasterWorkspaceFactory(); IRasterWorkspace pRasterWs = pWork.OpenFromFile(ws, 0) as IRasterWorkspace; pRster = pRasterWs.OpenRasterDataset(fbs).CreateDefaultRaster(); //pRster = pRWS.OpenRasterDataset(sp) IRasterBandCollection pRasterBandCol; pRasterBandCol = (IRasterBandCollection)pRster; IRawPixels pRawpixel; pRawpixel = (IRawPixels)pRasterBandCol.Item(0); IRasterProps pRasterProps; pRasterProps = (IRasterProps)pRawpixel; IPnt pSize; pSize = new DblPnt(); pSize.SetCoords(pRasterProps.Width, pRasterProps.Height); IPixelBlock pPixelBlock; pPixelBlock = pRawpixel.CreatePixelBlock(pSize); IPnt pPnt; pPnt = new DblPnt(); pPnt.X = 0; //the origin (top left corner) of the PixelBlock pPnt.Y = 0; pRawpixel.Read(pPnt, pPixelBlock); float PixelValue; minValue = 10000000; maxValue = 0; for (int i = 0; i < pPixelBlock.Width; i++) { for (int j = 0; j < pPixelBlock.Height; j++) { PixelValue = (float)pPixelBlock.GetVal(0, i, j); if (PixelValue != null) { if (PixelValue > maxValue) { maxValue = PixelValue; } if (PixelValue < minValue) { minValue = PixelValue; } } } } IRasterBand pRasterBand; pRasterBand = pRasterBandCol.Item(0); pRasterBand.ComputeStatsAndHist(); IRasterStatistics pRasterStatistic; pRasterStatistic = pRasterBand.Statistics; maxValue = (float)pRasterStatistic.Maximum; minValue = (float)pRasterStatistic.Minimum; //先求每个等分间距 float Tmpincrement; DataRow FilterRow; Tmpincrement = (maxValue - minValue) / Convert.ToInt16(CmbLineCount.Text); FilterDataTable.Rows.Clear(); for (int i = 1; i < Convert.ToInt16(CmbLineCount.Text); i++) { FilterRow = FilterDataTable.NewRow(); FilterRow[0] = Convert.ToString(minValue + Tmpincrement * (i - 1)) + "~" + Convert.ToString(minValue + Tmpincrement * i); FilterRow[1] = i; FilterDataTable.Rows.Add(FilterRow); } DataGridFilterData.DataSource = FilterDataTable; DataGridFilterData.Refresh(); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } }