洪涝模拟仿真的实现方法主要有两种:一种是基于水动力学的洪水演进模型;还有一种是基于DEM的洪水淹没分析。详细分析例如以下:
我是GIS从业者,从我们的专业角度出发,选择基于DEM的洪水淹没分析来做洪涝的模拟仿真。而基于DEM的洪水淹没分析方法主要分为有源淹没和无源淹没。
本篇博客採用有源淹没算法实现洪涝的模拟,算法为八领域种子扩散算法。
採用C#版本号GDAL编写了FloodSimulation类,以下给出所有源码:
class FloodSimulation
{
#region 类成员变量
//点结构体
public struct Point
{
public int X; //行号
public int Y; //列号
public int Elevation; //像素值(高程值)
public bool IsFlooded; //淹没标记
};
private bool[,] IsFlood; //淹没区域标记二维数组,用于标记淹没栅格
private List m_FloodBufferList; //淹没缓冲区堆栈
public Dataset m_DEMDataSet; //DEM数据集
public Dataset m_FloodSimulatedDataSet; //洪涝淹没范围数据集
public int m_XSize; //数据X方向栅格个数
public int m_YSize; //数据Y方向栅格个数
public OSGeo.GDAL.Driver driver; //影像格式驱动
public int[] m_FloodBuffer; //填充缓冲区(洪涝淹没范围)
public int[] m_DEMdataBuffer; //DEM数据(存储高程值)
public double m_AreaFlooded; //水面面积
public double m_WaterVolume; //淹没水体体积
/* 这里的GeoTransform(影像坐标变换參数)的定义是:通过像素所在的行列值得到其左上角点空间坐标的运算參数
比如:某图像上(P,L)点左上角的实际空间坐标为:
Xp = GeoTransform[0] + P * GeoTransform[1] + L * GeoTransform[2];
Yp = GeoTransform[3] + P * GeoTransform[4] + L * GeoTransform[5]; */
public double[] m_adfGeoTransform;
#endregion
//构造函数
public FloodSimulation()