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,则TextLiftUp 和Style 配置都无效 |
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("分析图层不存在,请勿重复删除!");
}
}