1. 程式人生 > >洪澇淹沒分析輸出淹沒範圍圖、深度圖及面積體積

洪澇淹沒分析輸出淹沒範圍圖、深度圖及面積體積

[csharp] view plain copy

  1. /// <summary>  
  2.       /// 輸出洪澇淹沒範圍圖  
  3.       /// </summary>  
  4.       public void OutPutFloodRegion()  
  5.       {  
  6.   
  7.           //建立洪澇淹沒範圍影像  
  8.           string m_FloodRegionPath = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\FloodSimulation\\FloodedRegion.tif";  
  9.           if (System.IO.File.Exists(m_FloodRegionPath))  
  10.           {  
  11.               System.IO.File.Delete(m_FloodRegionPath);  
  12.           }  
  13.   
  14.           //在GDAL中建立影像,先需要明確待建立影像的格式,並獲取到該影像格式的驅動  
  15.           driver = Gdal.GetDriverByName("GTiff");  
  16.           //呼叫Creat函式建立影像  
  17.           m_FloodSimulationRegionDataSet = driver.Create(m_FloodRegionPath, m_XSize, m_YSize, 1, DataType.GDT_Float32, null);  
  18.           //設定影像屬性  
  19.           m_FloodSimulationRegionDataSet.SetGeoTransform(m_adfGeoTransform); //影像轉換引數  
  20.           m_FloodSimulationRegionDataSet.SetProjection(m_DEMDataSet.GetProjectionRef()); //投影  
  21.   
  22.           //輸出影像  
  23.           m_FloodSimulationRegionDataSet.GetRasterBand(1).WriteRaster(0, 0, m_XSize, m_YSize, m_FloodRegionBuffer, m_XSize, m_YSize, 0, 0);  
  24.           m_FloodSimulationRegionDataSet.GetRasterBand(1).FlushCache();  
  25.           m_FloodSimulationRegionDataSet.FlushCache();  
  26.   
  27.       }  
  28.   
  29.       /// <summary>  
  30.       /// 輸出洪澇淹沒深度圖  
  31.       /// </summary>  
  32.       public void OutPutFloodDepth()  
  33.       {  
  34.   
  35.           for (int i = 0; i < m_XSize; i++)  
  36.           {  
  37.               for (int j = 0; j < m_YSize; j++)  
  38.               {  
  39.                   Point m_point = new Point();  
  40.                   m_point.X = i;  
  41.                   m_point.Y = j;  
  42.                   if (m_FloodRegionBuffer[getIndex(m_point)] == 1)  
  43.                   {  
  44.                       int evaluation = m_DEMdataBuffer[getIndex(m_point)]; //淹沒格網高程值  
  45.                       int value = pFloodLevel - evaluation;  
  46.                       m_FloodDepthBuffer[getIndex(m_point)] = value;  
  47.                   }  
  48.               }  
  49.   
  50.           }  
  51.           //輸出洪澇淹沒深度圖  
  52.           string m_FloodDepthPath = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\FloodSimulation\\FloodedDepth.tif";  
  53.           if (System.IO.File.Exists(m_FloodDepthPath))  
  54.           {  
  55.               System.IO.File.Delete(m_FloodDepthPath);  
  56.           }  
  57.   
  58.           //在GDAL中建立影像,先需要明確待建立影像的格式,並獲取到該影像格式的驅動  
  59.           driver = Gdal.GetDriverByName("GTiff");  
  60.           
  61.           //呼叫Creat函式建立影像  
  62.           m_FloodSimulationDepthDateSet = driver.Create(m_FloodDepthPath, m_XSize, m_YSize, 1, DataType.GDT_Float32, null);  
  63.           //設定影像屬性  
  64.           m_FloodSimulationDepthDateSet.SetGeoTransform(m_adfGeoTransform); //影像轉換引數  
  65.           m_FloodSimulationDepthDateSet.SetProjection(m_DEMDataSet.GetProjectionRef()); //投影  
  66.    
  67.           //輸出影像  
  68.           m_FloodSimulationDepthDateSet.GetRasterBand(1).WriteRaster(0, 0, m_XSize, m_YSize, m_FloodDepthBuffer, m_XSize, m_YSize, 0, 0);  
  69.           m_FloodSimulationDepthDateSet.GetRasterBand(1).FlushCache();  
  70.           m_FloodSimulationDepthDateSet.FlushCache();  
  71.   
  72.       }  
  73.       /// <summary>  
  74.       /// 輸出洪澇淹沒面積及水量  
  75.       /// </summary>  
  76.       public void OutPutFloodInfo()  
  77.       {  
  78.           int count = 0;  
  79.           for (int i = 0; i < m_XSize; i++)  
  80.           {  
  81.               for (int j = 0; j < m_YSize; j++)  
  82.               {  
  83.                   Point m_point = new Point();  
  84.                   m_point.X = i;  
  85.                   m_point.Y = j;  
  86.                   if (m_FloodRegionBuffer[getIndex(m_point)] == 1)  
  87.                   {  
  88.                       count++;  
  89.                   }  
  90.               }  
  91.   
  92.           }  
  93.           //統計面積  
  94.           double S = count * 90; //平方米  
  95.           if (S > 10000)  
  96.           {  
  97.               S = S / 10000;  //公頃  
  98.           }  
  99.           MessageBox.Show("淹沒面積:" + S.ToString() + "公頃");  
  100.       }  

 

結果圖:範圍圖與深度圖