【二次开发】CityMaker常见分析——水淹分析

**

水淹分析

**

一:技术原理:

水淹分析是地形分析的拓展,根据地形的高度,分析水平面上升后覆盖的空间范围,从而达到辅助决策、辅助救援等目的。
水淹分析主要分为三步:确定水源点,构建水淹半径,进行水淹分析。
【二次开发】CityMaker常见分析——水淹分析_第1张图片

二:实现水淹分析

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常见分析——水淹分析_第2张图片

三:注意事项

1.本节示例代码中使用了terrain.ted数据,可以在SDK安装目录下的Samples\Media文件夹中找到。
2.球面不能进行水淹分析,经纬度不能计算体积,面积。这种分析只接受unk和投影坐标系。 。
3.更多示例请参考SDK中级篇Flood。

你可能感兴趣的:(SDK开发入门教程)