整理了点代码,从栅格数据集返回指针、数组等。 public float[,] GetDemDataArray(IRasterDataset pRasterDataset) { int Rows = GetRows(pRasterDataset); int Cols = GetColumns(pRasterDataset); //int DemSize = Rows * Cols; float[,] pDemDataArray = new float[Rows, Cols]; IRaster2 pRaster = pRasterDataset.CreateDefaultRaster() as IRaster2; float pVal = -9999; //StreamWriter streamw = File.CreateText(@"F:/5002350010/Raster/ttt.txt"); //string pStr = ""; for (int i = 0; i < Rows; i++) { for (int j = 0; j < Cols; j++) { object obj_PixValue = pRaster.GetPixelValue(0, j, i); if (obj_PixValue != null) { pVal = Convert.ToSingle(pRaster.GetPixelValue(0, j, i)); pDemDataArray[i, j] = pVal; } else { pDemDataArray[i, j] = -9999f; } } } return pDemDataArray; } unsafe public float[,] GetSlopeLengthArray() { int Cols = pEroTerrainAly.mCols; int Rows = pEroTerrainAly.mRows; if (Cols < 0 || Rows < 0) return null; float* SlopeLength = stackalloc float[Rows * Cols];//栈上分配 float[,] SlopeLengthArray = new float[Rows, Cols];//堆上分配 float pVal; unsafe { SlopeLength = (float*)pEroTerrainAly.get_mSlopeLength(); } float* pSlopeLengthPtr = SlopeLength; for (int i = 0; i < Rows; i++) { for (int j = 0; j < Cols; j++) { pVal = *pSlopeLengthPtr++; SlopeLengthArray[i, j] = pVal; } } return SlopeLengthArray; }