**
水淹分析
**
一:技術原理:
水淹分析是地形分析的拓展,根據地形的高度,分析水準面上升後覆寫的空間範圍,進而達到輔助決策、輔助救援等目的。
水淹分析主要分為三步:确定水源點,建構水淹半徑,進行水淹分析。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP35EMRpmTzEFRPpHOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmLxczM1UTM0ATM5EjMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
二:實作水淹分析
1. .Net代碼
private void watersinkAnalysis()
{
AxRenderControl rendercontrol=getRenderControl();//擷取控件
//建立水源點
IPoint point=gfactory.CreateGeometry(gviGeometryType.gviGeometryPolyline,gviVertexAttribute.gviVertexAttributeZ);
point.SetCoords(21119.41,9487.6,1.32,0,0);
//設定水淹緩沖範圍
ITopologicalOperator2D to = point as ITopologicalOperator2D;
bufPolygon = to.Buffer2D(800, gviBufferStyle.gviBufferCapround) as IPolygon;//生成緩沖區
//水淹分析
TerrainAnalyse ta = new TerrainAnalyse();
IPolygon waterPoly=ta.FindWaterSinkBoundary(bufPolygon, 20, 25); //Polygon,采樣精度,水位高度
//建立線面符号
ISurfaceSymbol sf = new SurfaceSymbol();
ICurveSymbol cs = new CurveSymbol();
//緩沖範圍展示
sf.Color = 0xbbffff80;
cs.Color = 0xbbffff80;
sf.BoundarySymbol = cs;
renderBufPolygon = rendercontrol.ObjectManager.CreateRenderPolygon(bufPolygon, sf, rootId);//建立渲染面
renderBufPolygon.HeightStyle = gviHeightStyle.gviHeightOnTerrain; //渲染圖形貼地形顯示
//水淹範圍展示
sf.Color = 0xbbFF0000;
cs.Color = 0xbb0000cc;
sf.BoundarySymbol = cs;
rendercontrol.ObjectManager.CreateRenderMultiPolygon(waterPoly, sf, rootId);//建立渲染面
}
2. JS代碼
function watersinkAnalysis()
{
var __g=document.getElementById("__g");//擷取控件
//建立點,構造線段端點
var point=gfactory.createGeometry(gviGeometryType.gviGeometryPolyline,gviVertexAttribute.gviVertexAttributeZ);
point.setCoords(21119.41,9487.6,1.32,0,0);
//設定水淹緩沖範圍
var bufPolygon = point.buffer2D(800, gviBufferStyle.gviBufferCapround);//生成緩沖區
//水淹分析
var ta = __g.terrainAnalyse;
var waterPoly=ta.findWaterSinkBoundary(bufPolygon, 20, 25); //Polygon,采樣精度,水位高度
//建立線面符号
var sf = __g.new_SurfaceSymbol;
var cs = __g.new_CurveSymbol;
//緩沖範圍展示
sf.color = 0xbbffff80;
cs.color = 0xbbffff80;
sf.boundarySymbol = cs;
renderBufPolygon = __g.objectManager.createRenderPolygon(bufPolygon, sf, rootId);//建立渲染面
renderBufPolygon.heightStyle = gviHeightStyle.gviHeightOnTerrain;//渲染圖形貼地形顯示
//水淹範圍展示
sf.color = 0xbbFF0000;
cs.color = 0xbb0000cc;
sf.boundarySymbol = cs;
__g.objectManager.createRenderMultiPolygon(waterPoly, sf, rootId);//建立渲染面
}
重點解析
1.水淹分析采用了地形分析,是以必須加載地形資料。
2.水淹分析核心方法為findWaterSinkBoundary,該方法傳入的面必須是閉合的。
三:注意事項
1.本節示例代碼中使用了terrain.ted資料,可以在SDK安裝目錄下的Samples\Media檔案夾中找到。
2.球面不能進行水淹分析,經緯度不能計算體積,面積。這種分析隻接受unk和投影坐标系。 。
3.更多示例請參考SDK中級篇Flood。