天天看點

【二次開發】CityMaker常見分析——水淹分析水淹分析

**

水淹分析

**

一:技術原理:

水淹分析是地形分析的拓展,根據地形的高度,分析水準面上升後覆寫的空間範圍,進而達到輔助決策、輔助救援等目的。

水淹分析主要分為三步:确定水源點,建構水淹半徑,進行水淹分析。

【二次開發】CityMaker常見分析——水淹分析水淹分析

二:實作水淹分析

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,該方法傳入的面必須是閉合的。

【二次開發】CityMaker常見分析——水淹分析水淹分析

三:注意事項

1.本節示例代碼中使用了terrain.ted資料,可以在SDK安裝目錄下的Samples\Media檔案夾中找到。

2.球面不能進行水淹分析,經緯度不能計算體積,面積。這種分析隻接受unk和投影坐标系。 。

3.更多示例請參考SDK中級篇Flood。