2.2.5 水域分析


水域分析

水域分析是在选定的多边形区域内,进行水淹效果模拟的功能。使用水域分析功能,可以模拟区域内水流效果,同时计算出区域内水的体量。

主要包括添加(创建)、更新、显隐、删除和获取结果操作。

注意:可创建空的分析图层,也可创建预设的分析图层,如需创建预设分析图层,则IsLoad ,IsActive ,Points 三个参数需要同时配置

下图是水域分析效果:

  

参数说明

水域分析可配置的参数如下表所示:

配置项 配置说明 值类型 备注
LayerOptionsName 图层配置对象名称 string 分析图层需配置为:AnalysisLayerOptions
DataSourceTypeName 数据源类型 string as_waterflood代表水域分析
PointColor 点颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
PointSize 点大小 float 点大小取值范围在1-10之间
WaterColor 水面颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
SideColor 侧面颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
DrawLineColor 线颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
LineWidth 线宽度 float 线宽度取值范围在1-10之间
BumpDirection 水流角度 float 以朝东方向为0度,范围在0-360度之间。默认为0
BumpSpeed 水流速度 float 水流流动速度。默认为0
BumpScale 水浪比例 float 水域范围内形成的水浪比例。默认为0
BumpTextureUrl 水浪纹理路径 string 纹理图片绝对路径
LightDir 光照方向 x,y,z 需传入xyz三个方向上的向量
RaiseLevel 水淹高度 float 基于起始点位置向上形成的水面的高度
IsFlood 是否计算水体量 bool 默认为false,传true代表计算水域体积
TextVisible 是否显示文字 bool 默认为false。如为false,则TextLiftUpStyle配置都无效
TextLiftUp 文字抬高高度 float 默认为0.0
IsDepthTest 是否开启深度测试 bool 默认为false。false不开启,结果会浮在场景上,true实际显示位置
Style 添加样式 string 配置文字样式,配置信息参考文字样式配置
IsLoad 是否初始化加载点 bool 默认为false
IsActive 是否激活分析 bool 默认为true,表示是否可操作场景进行绘制
Points 坐标点集 x,y,z列表 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾
IsWorld 是否世界坐标点 bool 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true

获取结果说明

水域分析可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:

配置项 配置说明 值类型 备注
DataSourceTypeName 数据源类型 string as_waterflood代表水域分析
ClickPoints 点击点坐标 x,y,z列表 鼠标点击场景形成的关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾
RaiseLevel 水淹高度 float 基于起始点位置向上形成的水面的高度
Volume 水量 double 区域内包含水的总体积,单位:m

代码调用示例

Javascript调用

var waterFlood = null;
var FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//创建水域分析
function createWaterFlood(){
    if(waterFlood == null){
        var mlo = map.CreateLayerOptions("waterFlood");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_waterflood");//数据源类型,as_waterflood代表水域分析
        mlo.AddConfig("PointColor", "0,0,1,1.0");//点颜色
        mlo.AddConfig("PointSize", "5");//点大小
        mlo.AddConfig("WaterColor", "0.1,0.5,0.8,0.9");//水面颜色
        mlo.AddConfig("SideColor", "0.1,0.5,0.6,0.9");//侧面颜色
        mlo.AddConfig("DrawLineColor","0,1,0,0.5");//线颜色
        mlo.AddConfig("LineWidth", "2");//线宽(0-10)
        mlo.AddConfig("BumpDirection","0");//水流角度(以东西方向为0°)
        mlo.AddConfig("BumpSpeed","2");//水流速度
        mlo.AddConfig("BumpScale","2");//水浪比例
        mlo.AddConfig("BumpTextureUrl",gIconFolderPath + "/water_bump.jpg");//水浪纹理
        mlo.AddConfig("LightDir","1,1,1");//光照方向
        mlo.AddConfig("RaiseLevel","0.69");//水域高度
        mlo.AddConfig("TextLiftUp","0.2");//文字抬升高度
        mlo.AddConfig("TextVisible", "true");//文字显示控制
        mlo.AddConfig("IsFlood", "true");//水域计算(true表示计算水域体积,false仅模拟水效)
        //创建文字符号
        var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
        pSymbol.AddConfig("FillingColor", "0.93,0.93,0.93,1");//设置文字颜色(RGBA)
        pSymbol.AddConfig("Font", FontUrl);//文字字体路径,绝对路径
        pSymbol.AddConfig("Size", "40");//字体精度大小
        pSymbol.AddConfig("CharacterSize", "10");//文字大小
        pSymbol.AddConfig("CharacterMode", "1");//字符大小变化模式。0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
        pSymbol.AddConfig("AlignmentMode", "5");//文字对齐方式
        pSymbol.AddConfig("AxisAlignment", "6");//设置文字旋转模式。旋转轴0-7,6:自动
        pSymbol.AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注            
        pSymbol.AddConfig("IsEmbolden", "false");//字体是否加粗
        pSymbol.AddConfig("IsTransform", "false");//字体是否为斜体
        pSymbol.AddConfig("IsUnderline", "false");//字体是否有下划线
        pSymbol.AddConfig("IsBack", "true");//是否设置背景色
        pSymbol.AddConfig("BackColor", "0.42,0.47,0.85,1");//背景颜色,IsBack为true有效
        pSymbol.AddConfig("FieldPrecision","2");//显示精度
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
        //创建样式
        var pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
        waterFlood = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
        map.AddLayer(waterFlood);//添加分析图层
    }else{
        alert("请勿重复创建分析图层!");
    }
}
//更新水域分析
function updateWaterFlood(){
    if(waterFlood){
        //创建图层配置信息
        var mlo = map.CreateLayerOptions("waterFlood");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_waterflood");//数据源类型,as_waterflood代表水域分析
        mlo.AddConfig("WaterColor", "0,0.7,1.0,1.0");//水颜色
        mlo.AddConfig("DrawLineColor","0,1,0,0.5");//线颜色
        mlo.AddConfig("BumpDirection","180");//水流角度(以东西方向为0°)
        mlo.AddConfig("BumpSpeed","5");//水流速度
        mlo.AddConfig("BumpScale","5");//水浪比例
        mlo.AddConfig("LightDir","1,1,0");//光照方向
        mlo.AddConfig("RaiseLevel","10.0");//水域高度
        mlo.AddConfig("TextVisible", "true");//文字显示控制
        mlo.AddConfig("TextLiftUp","50.0");//文字抬升高度
        mlo.AddConfig("IsFlood", "true");//水域计算(true表示计算水域体积,false仅模拟水效)
        //创建文字符号
        var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
        pSymbol.AddConfig("FillingColor", "1.0,0.0,0.0,1.0");//设置文字颜色(RGBA)
        pSymbol.AddConfig("Font", FontUrl);//文字字体路径,绝对路径
        pSymbol.AddConfig("Size", "20");//字体精度大小
        pSymbol.AddConfig("CharacterSize", "6");//文字大小
        pSymbol.AddConfig("CharacterMode", "1");//字符大小变化模式。0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
        pSymbol.AddConfig("AlignmentMode", "5");//文字对齐方式
        pSymbol.AddConfig("AxisAlignment", "6");//设置文字旋转模式。旋转轴0-7,6:自动
        pSymbol.AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注            
        pSymbol.AddConfig("IsEmbolden", "false");//字体是否加粗
        pSymbol.AddConfig("IsTransform", "true");//字体是否为斜体
        pSymbol.AddConfig("IsUnderline", "false");//字体是否有下划线
        pSymbol.AddConfig("IsBack", "false");//是否设置背景色
        pSymbol.AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,IsBack为true有效
        pSymbol.AddConfig("FieldPrecision","4");//显示精度
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
        //创建样式
        var pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
        waterFlood.UpdateLayerOptions(mlo);//更新图层
    }else{
        alert("请创建分析图层再进行更新操作!");
    }
}
//获取水域分析结果
function getWaterFloodResult(){
    if(waterFlood){
        var opt = waterFlood.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_waterflood"){
            var Points = opt.GetConfigValueByKey("ClickPoints");//获取点击点坐标
            var RaiseLevel = opt.GetConfigValueByKey("RaiseLevel");//水面抬高高度
            var Volume = opt.GetConfigValueByKey("Volume");//水量
            alert("Points:" + Points + "\nRaiseLevel:" + RaiseLevel + "\nVolume:" + Volume);
        }
    }else{
        alert("不存在分析图层,无法获取结果);
    }
}
//删除水域分析
function removeWaterFlood(){
    if(waterFlood){
        map.RemoveLayer(waterFlood);//删除图层
        waterFlood = null;
    }else{
        alert("分析图层不存在,请勿重复删除!");
    }
}

C++调用

BaseObjectCOMLib::ILayerObjectPtr waterFlood;//水域分析图层对象
//创建水域分析
void Cf1c4WaterfloodDlg::OnBnClickedcreatewaterflood()
{
    if(waterFlood)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_waterflood");//数据源类型,as_waterflood代表水域分析
    tlo->AddConfig("PointColor", "0,0,1,1.0");//点颜色
    tlo->AddConfig("PointSize", "5");//点大小
    tlo->AddConfig("WaterColor", "0.1,0.5,0.8,0.9");//水面颜色
    tlo->AddConfig("SideColor", "0.1,0.5,0.6,0.9");//侧面颜色
    tlo->AddConfig("DrawLineColor","0,1,0,0.5");//线颜色
    tlo->AddConfig("LineWidth", "2");//线宽(0-10)
    tlo->AddConfig("BumpDirection","0");//水流角度(以东西方向为0°)
    tlo->AddConfig("BumpSpeed","2");//水流速度
    tlo->AddConfig("BumpScale","2");//水浪比例
    tlo->AddConfig("BumpTextureUrl", "..\\data\\images\\water_bump.jpg");//水浪纹理
    tlo->AddConfig("LightDir","1,1,1");//光照方向
    tlo->AddConfig("RaiseLevel","0.69");//水域高度
    tlo->AddConfig("TextLiftUp","0.2");//文字抬升高度
    tlo->AddConfig("TextVisible", "true");//文字显示控制
    tlo->AddConfig("IsFlood", "true");//水域计算(true表示计算水域体积,false仅模拟水效)
    //创建文字符号
    ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = (ConfigOptionsCOMLib::ISymbolObjectPtr)map->CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
    pSymbol->AddConfig("FillingColor", "0.93,0.93,0.93,1");//设置文字颜色(RGBA)
    pSymbol->AddConfig("Font", "C:\\WINDOWS\\Fonts\\simhei.ttf");//设置字体类型,字体文件一定要存在
    pSymbol->AddConfig("Size", "40");//字体精度大小
    pSymbol->AddConfig("CharacterSize", "10");//文字大小
    pSymbol->AddConfig("CharacterMode", "1");//取值 1 -- 始终朝向相机
    pSymbol->AddConfig("AlignmentMode", "5");//文字对齐方式
    pSymbol->AddConfig("AxisAlignment", "6");//旋转轴 0 - 7, 6: 自动
    pSymbol->AddConfig("RemoveDuplicateLabels", "false");//去重复            
    pSymbol->AddConfig("IsEmbolden", "false");//字体是否加粗
    pSymbol->AddConfig("IsTransform", "false");//字体是否为斜体
    pSymbol->AddConfig("IsUnderline", "false");//字体是否有下划线
    pSymbol->AddConfig("IsBack", "true");//是否设置背景色
    pSymbol->AddConfig("BackColor", "0.42,0.47,0.85,1");//背景颜色,是否设置背景色为true有效
    pSymbol->AddConfig("FieldPrecision","2");//显示精度
    pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
    //创建样式
    ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
    pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
    //将样式添加到图层配置里
    tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
    waterFlood = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
    map->AddLayer(waterFlood);//添加图层
}

//更新水域分析
void Cf1c4WaterfloodDlg::OnBnClickedupdatewaterflood()
{
    if(!waterFlood)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_waterflood");//数据源类型,as_waterflood代表水域分析
    tlo->AddConfig("WaterColor", "0,0.7,1.0,1.0");//水面颜色
    tlo->AddConfig("SideColor", "0.1,0.5,0.6,0.9");//侧面颜色
    tlo->AddConfig("DrawLineColor","0,1,0,0.5");//线颜色
    tlo->AddConfig("BumpDirection","180");//水流角度(以东西方向为0°)
    tlo->AddConfig("BumpSpeed","5");//水流速度
    tlo->AddConfig("BumpScale","5");//水浪比例
    tlo->AddConfig("LightDir","1,1,0");//光照方向
    tlo->AddConfig("RaiseLevel","10");//水域高度
    tlo->AddConfig("TextLiftUp","50");//文字抬升高度
    tlo->AddConfig("TextVisible", "true");//文字显示控制
    tlo->AddConfig("IsFlood", "true");//水域计算(true表示计算水域体积,false仅模拟水效)
    //创建文字符号
    ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = (ConfigOptionsCOMLib::ISymbolObjectPtr)map->CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
    pSymbol->AddConfig("FillingColor", "0.93,0.93,0.93,1");//设置文字颜色(RGBA)
    pSymbol->AddConfig("Font", "C:\\WINDOWS\\Fonts\\simhei.ttf");//设置字体类型,字体文件一定要存在
    pSymbol->AddConfig("Size", "20");//字体精度大小
    pSymbol->AddConfig("CharacterSize", "6");//文字大小
    pSymbol->AddConfig("CharacterMode", "1");//取值 1 -- 始终朝向相机
    pSymbol->AddConfig("AlignmentMode", "5");//文字对齐方式
    pSymbol->AddConfig("AxisAlignment", "6");//旋转轴 0 - 7, 6: 自动
    pSymbol->AddConfig("RemoveDuplicateLabels", "false");//去重复            
    pSymbol->AddConfig("IsEmbolden", "false");//字体是否加粗
    pSymbol->AddConfig("IsTransform", "false");//字体是否为斜体
    pSymbol->AddConfig("IsUnderline", "false");//字体是否有下划线
    pSymbol->AddConfig("IsBack", "false");//是否设置背景色
    pSymbol->AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,是否设置背景色为true有效
    pSymbol->AddConfig("FieldPrecision","4");//显示精度
    pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
    //创建样式
    ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
    pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
    //将样式添加到图层配置里
    tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
    waterFlood->UpdateLayerOptions(tlo);//更新图层
}

//获取水域分析结果
void Cf1c4WaterfloodDlg::OnBnClickedgetwaterfloodresult()
{
    if(!waterFlood)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = waterFlood->GetLayerResult();
    std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获取数据源类型
    if(DataSourceTypeName == "as_waterflood")
    {
        CString Points = opt->GetConfigValueByKey("ClickPoints");//获取点击点坐标
        CString RaiseLevel = opt->GetConfigValueByKey("RaiseLevel");//水面抬高高度
        CString Volume = opt->GetConfigValueByKey("Volume");//水量
        MessageBox(L"Points:"+ Points+ L"\r\nRaiseLevel:"+RaiseLevel+L"\r\nVolume: "+Volume);
    }
}

//删除水域分析
void Cf1c4WaterfloodDlg::OnBnClickedremovewaterflood()
{
    if(!waterFlood)
    {
        return;
    }
    map->RemoveLayer(waterFlood);//删除水域分析
    waterFlood = NULL;
}

C#调用

ILayerObject waterFlood;//水域分析对象
bool waterFloodVisble;//水域显隐控制
gIconFolderPath = E:\\data\\LocalData\\Other\\images
//加载水域分析
private void createWaterFlood_Click(object sender, EventArgs e)
{
    if (waterFlood == null)
    {
        ILayerOptions mlo = map.CreateLayerOptions("waterFlood");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_waterflood");//数据源类型, as_waterflood代表水域分析
        mlo.AddConfig("PointColor", "0,0,1,1.0");//点颜色
        mlo.AddConfig("PointSize", "5");//点大小
        mlo.AddConfig("WaterColor", "0.1,0.5,0.8,0.9");//水面颜色
        mlo.AddConfig("SideColor", "0.1,0.5,0.6,0.9");//侧面颜色
        mlo.AddConfig("DrawLineColor", "0,1,0,0.5");//线颜色
        mlo.AddConfig("LineWidth", "2");//线宽(0-10)
        mlo.AddConfig("BumpDirection", "0");//水流角度(以东西方向为0°)
        mlo.AddConfig("BumpSpeed", "2");//水流速度
        mlo.AddConfig("BumpScale", "2");//水浪比例
        mlo.AddConfig("BumpTextureUrl",  gIconFolderPath+"/water_bump.jpg");//水浪纹理
        mlo.AddConfig("LightDir", "1,1,1");//光照方向
        mlo.AddConfig("RaiseLevel", "0.69");//水域高度
        mlo.AddConfig("TextLiftUp", "0.2");//文字抬升高度
        mlo.AddConfig("TextVisible", "true");//文字显示控制
        mlo.AddConfig("IsFlood", "true");//水域计算(true表示计算水域体积,false仅模拟水效)
        //创建文字符号
        ISymbolObject pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
        pSymbol.AddConfig("FillingColor", "0.93,0.93,0.93,1");//设置文字颜色(RGBA)
        pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\simhei.ttf");//设置字体路径
        pSymbol.AddConfig("Size", "40");//字体精度大小
        pSymbol.AddConfig("CharacterSize", "10");//文字大小
        pSymbol.AddConfig("CharacterMode", "1");//字符大小变化模式。0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
        pSymbol.AddConfig("AlignmentMode", "5");//文字对齐方式
        pSymbol.AddConfig("AxisAlignment", "6");//设置文字旋转模式。旋转轴0-7,6:自动
        pSymbol.AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注            
        pSymbol.AddConfig("IsEmbolden", "false");//字体是否加粗
        pSymbol.AddConfig("IsTransform", "false");//字体是否为斜体
        pSymbol.AddConfig("IsUnderline", "false");//字体是否有下划线
        pSymbol.AddConfig("IsBack", "true");//是否设置背景色
        pSymbol.AddConfig("BackColor", "0.42,0.47,0.85,1");//背景颜色,IsBack为true有效
        pSymbol.AddConfig("FieldPrecision", "2");//显示精度
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
        //创建样式
        IStyle pStyle = map.CreateStyle("pStyl");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
        waterFlood = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
        map.AddLayer(waterFlood);//添加分析图层
    }
    else
    {
        MessageBox.Show("请勿重复创建分析图层!");
    }
}
//更新水域分析
private void updateWaterFlood_Click(object sender, EventArgs e)
{
    if (waterFlood !=null)
    {
        //创建图层配置信息
        ILayerOptions mlo = map.CreateLayerOptions("waterFlood");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_waterflood");//数据源类型, as_waterflood代表水域分析
        mlo.AddConfig("WaterColor", "0,0.7,1.0,1.0");//水颜色
        mlo.AddConfig("SideColor", "0.1,0.5,0.6,0.9");//侧面颜色
        mlo.AddConfig("DrawLineColor", "0,1,0,0.5");//线颜色
        mlo.AddConfig("BumpDirection", "180");//水流角度(以东西方向为0°)
        mlo.AddConfig("BumpSpeed", "5");//水流速度
        mlo.AddConfig("BumpScale", "5");//水浪比例
        mlo.AddConfig("LightDir", "1,1,0");//光照方向
        mlo.AddConfig("RaiseLevel", "10.0");//水域高度
        mlo.AddConfig("TextVisible", "true");//文字显示控制
        mlo.AddConfig("TextLiftUp", "50.0");//文字抬升高度
        mlo.AddConfig("IsFlood", "true");//水域计算(true表示计算水域体积,false仅模拟水效)
        //创建文字符号
        ISymbolObject pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
        pSymbol.AddConfig("FillingColor", "1.0,0.0,0.0,1.0");//设置文字颜色(RGBA)
        pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\simhei.ttf");//设置字体路径
        pSymbol.AddConfig("Size", "20");//字体精度大小
        pSymbol.AddConfig("CharacterSize", "6");//文字大小
        pSymbol.AddConfig("CharacterMode", "1");//字符大小变化模式。0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
        pSymbol.AddConfig("AlignmentMode", "5");//文字对齐方式
        pSymbol.AddConfig("AxisAlignment", "6");//设置文字旋转模式。旋转轴0-7,6:自动
        pSymbol.AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注            
        pSymbol.AddConfig("IsEmbolden", "false");//字体是否加粗
        pSymbol.AddConfig("IsTransform", "false");//字体是否为斜体
        pSymbol.AddConfig("IsUnderline", "false");//字体是否有下划线
        pSymbol.AddConfig("IsBack", "false");//是否设置背景色
        pSymbol.AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,IsBack为true有效
        pSymbol.AddConfig("FieldPrecision", "4");//显示精度
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
        //创建样式
        IStyle pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
        waterFlood.UpdateLayerOptions(mlo);//更新图层
    }
    else
    {
        MessageBox.Show("请创建分析图层再进行更新操作!");
    }
}
//获取水域分析结果
private void getWaterFloodResult_Click(object sender, EventArgs e)
{
    if (waterFlood!=null)
    {
        ILayerOptions opt = waterFlood.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_waterflood")
        {
            string Points = opt.GetConfigValueByKey("ClickPoints");//获取点击点坐标
            string RaiseLevel = opt.GetConfigValueByKey("RaiseLevel");//水面抬高高度
            string Volume = opt.GetConfigValueByKey("Volume");//水量
            MessageBox.Show("Points:" + Points + "\nRaiseLevel:" + RaiseLevel + "\nVolume:" + Volume);
        }
    }
    else
    {
        MessageBox.Show("不存在分析图层,无法获取结果);
    }
}
//删除水域分析
private void removeWaterFlood_Click(object sender, EventArgs e)
{
    if (waterFlood != null)
    {
        map.RemoveLayer(waterFlood);//删除图层
        waterFlood = null;
    }
    else
    {
        MessageBox.Show("分析图层不存在,请勿重复删除!");
    }
}

results matching ""

    No results matching ""