2.2.4 控高分析
控高分析
控高分析是指限制高度控制分析。它是用于分析选定区域内的建筑是否超过特定高度的分析功能。控高分析支持选定多个区域进行分析。在分析时,会将选定区域内超过限高和未超过限高的部分分别用不同颜色标记出来,这样可直观地进行观察和统计建筑高度超限的情况。
主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。
注意:可创建空的分析图层,也可创建预设的分析图层,如需创建预设分析图层,则IsLoad
,IsActive
,Points
, PointsIndex
四个参数需要同时配置
下图是控高分析效果:
参数说明
控高分析可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
LayerOptionsName | 图层配置对象名称 | string | 分析图层需配置为:AnalysisLayerOptions |
DataSourceTypeName | 数据源类型 | string | as_heightcontrol代表控高分析 |
AreaNum | 绘制区域个数 | int | 表示一个图层中能绘制的分析体数量。默认为0 |
ModelLayersID | 图层ID列表 | int列表 | -1则代表分析所有图层,若为多个图层,可使用xx,xx,xx 此种格式。图层Id可以通过图层对象的GetLayerId()方法获取 |
ModelLayersIDEx | 排除图层ID列表 | int列表 | 将该参数列出的图层排除后,分析剩余的图层。若为多个图层,可使用xx,xx,xx 此种格式。该参数可不设 |
Height | 控制高度 | double | 默认为0.0,单位:m |
PointColor | 点颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
PointSize | 点大小 | float | 点大小取值范围在1-10之间 |
HeightControlLineColor | 绘制线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
TopColor | 顶面颜色 | 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" |
RangeLineVisible | 范围线是否显示 | bool | 默认为false |
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列表 | 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾 |
PointsIndex | 每个区域对应点数量 | int列表 | 若AreaNum 数量大于1,则需要设定每个区域包含多少个关键点。中间用,分隔 |
IsWorld | 是否世界坐标点 | bool | 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true |
NonIntersect | 非相交图层 | int列表 | 该分析与场景哪些类型图层不相交。1-分析,2-地形,3-模型,4-矢量(未贴地),5-矢量模板阴影体,6-矢量(贴地),7-倾斜摄影。默认为1,即与除分析之外所有图层都相交 |
获取结果说明
控高分析可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
DataSourceTypeName | 数据源类型 | string | as_heightcontrol代表控高分析 |
ClickPoints | 点击点坐标 | x,y,z列表 | 鼠标点击场景形成的关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾 |
PointsIndex | 区域内顶点个数 | int列表 | 每个控高区域内关键点数量。多个中间用,分隔 |
Height | 控制高度 | double | 默认为0.0,单位:m |
代码调用示例
Javascript调用
var heightControl = null;
var heightControlVisble = true;
var FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//创建控高分析
function createHeightControl(){
if(heightControl == null){
var mlo = map.CreateLayerOptions("heightControl");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName", "as_heightcontrol");//数据源类型,as_heightcontrol代表控高分析
mlo.AddConfig("PointColor", "1.0,1.0,0.0,1");//点击点的颜色(RGBA)
mlo.AddConfig("PointSize", "5");//点击点的大小
mlo.AddConfig("AreaNum", "1");//绘制区域个数
mlo.AddConfig("ModelLayersID", "-1");//-1代表分析所有图层;"x,x,x"用,分隔代表分析指定id图层
//mlo.AddConfig("ModelLayersIDEx,", gModelLayer.GetLayerID());//排除图层ID
mlo.AddConfig("Height", "80");//控制高度
mlo.AddConfig("HeightControlLineColor", "1.0,0.0,0.0,1");//线颜色透明度(RGBA)
mlo.AddConfig("TopColor", "0,1,0,0.5");//控高顶面颜色(RGBA)
mlo.AddConfig("SideColor", "1,1,1,0.5");//控高侧面颜色(RGBA)
mlo.AddConfig("RangeLineVisible", "true");//范围线是否显示
mlo.AddConfig("TextLiftUp", "0");//文字显示的抬高高度
mlo.AddConfig("TextVisible", "true");//文字是否被显示
mlo.AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建文字符号,必须为AnalysisTextSymbol字符串
pSymbol.AddConfig("FillingColor", "0.93,0.93,0.93,1");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", FontUrl);//文字字体路径,绝对路径
pSymbol.AddConfig("Size", "20");//字体精度大小
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","4");//显示精度
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
heightControl = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(heightControl);//添加图层
}else{
alert("请勿重复创建分析图层!");
}
}
//更新控高分析
//当做更新操作时,只需把需要更新的参数构建更新配置参数就可以,不需要更新的参数不需要在设置
function updateHeightControl(){
if(heightControl){
var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName", "as_heightcontrol");//数据源类型,as_heightcontrol代表控高分析
mlo.AddConfig("Height", "80");//控制高度
mlo.AddConfig("HeightControlLineColor", "1.0,0.0,0.0,1");//线颜色透明度(RGBA)
mlo.AddConfig("TopColor", "0,1,0,0.5");//控高顶面颜色(RGBA)
mlo.AddConfig("SideColor", "1,1,1,0.5");//控高侧面颜色(RGBA)
mlo.AddConfig("RangeLineVisible", "true");//范围线是否显示
mlo.AddConfig("TextLiftUp", "10");//文字显示的抬高高度
mlo.AddConfig("TextVisible", "true");//文字是否被显示
//创建文字符号
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", "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", "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");//创建Style,名字可以任意
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//添加文字符号到Style里,第一参必须为AnalysisTextSymbol字符串,第二参为上面创建的文字符号的配置信息
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//第一参必须为Style字符串,第二参为上面创建的Style的配置信息
heightControl.UpdateLayerOptions(mlo);//更新控高分析
}else{
alert("请创建分析图层再进行更新操作!");
}
}
//获取控高分析结果
function getHeightControl(){
if(heightControl){
var opt = heightControl.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_heightcontrol"){
var ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取起始点坐标
var PointsIndex = opt.GetConfigValueByKey("PointsIndex");//选取区域点的个数
var Height = opt.GetConfigValueByKey("Height");//控高的高度
alert("ClickPoints:" + ClickPoints + "\nPointsIndex:" + PointsIndex + "\nHeight:" + Height);
}
}else{
alert("不存在分析图层,无法获取结果!");
}
}
//删除控高分析
function removeHeightControl(){
if(heightControl){
map.RemoveLayer(heightControl);//删除图层
heightControl = null;
}else{
alert("分析图层不存在,请勿重复删除!");
}
}
//显隐控高分析
function visibleHeightControl(){
if(heightControl){
if(heightControlVisble){
heightControlVisble = false;
}else{
heightControlVisble = true;
}
heightControl.SetVisible(heightControlVisble);//图层显隐
}else{
alert("图层不存在,无法设置显隐!");
}
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr heightControl;//控高分析图层对象
//创建控高分析
void Cf1c3HeightcontrolDlg::OnBnClickedcreateheightcontrol()
{
if(heightControl)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
tlo->AddConfig("DataSourceTypeName", "as_heightcontrol");//数据源类型,as_heightcontrol代表控高分析
tlo->AddConfig("PointColor", "1.0,1.0,0.0,1");//点击点的颜色(RGBA)
tlo->AddConfig("PointSize", "5");//点击点的大小
tlo->AddConfig("AreaNum", "1");//绘制区域个数
tlo->AddConfig("ModelLayersID", "-1");//-1代表分析所有图层;"x,x,x"用,分隔代表分析指定id图层
//tlo->AddConfig("ModelLayersIDEx,", gModelLayer.GetLayerID());//排除图层ID
tlo->AddConfig("Height", "80");//控制高度
tlo->AddConfig("HeightControlLineColor", "1.0,0.0,0.0,1");//线颜色透明度(RGBA)
tlo->AddConfig("TopColor", "0,1,0,0.5");//控高顶面颜色(RGBA)
tlo->AddConfig("SideColor", "1,1,1,0.5");//控高侧面颜色(RGBA)
tlo->AddConfig("RangeLineVisible", "true");//范围线是否显示
tlo->AddConfig("TextLiftUp", "0");//文字显示的抬高高度
tlo->AddConfig("TextVisible", "true");//文字是否被显示
tlo->AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建文字符号
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", "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","4");//显示精度
pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
heightControl = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
map->AddLayer(heightControl);//添加图层
}
//更新控高分析
void Cf1c3HeightcontrolDlg::OnBnClickedupdateheightcontrol()
{
if(!heightControl)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
tlo->AddConfig("DataSourceTypeName", "as_heightcontrol");//数据源类型,as_heightcontrol代表控高分析
tlo->AddConfig("Height", "80");//控制高度
tlo->AddConfig("HeightControlLineColor", "1.0,0.0,0.0,1");//线颜色透明度(RGBA)
tlo->AddConfig("TopColor", "0,1,0,0.5");//控高顶面颜色(RGBA)
tlo->AddConfig("SideColor", "1,1,1,0.5");//控高侧面颜色(RGBA)
tlo->AddConfig("RangeLineVisible", "true");//范围线是否显示
tlo->AddConfig("TextLiftUp", "10");//文字显示的抬高高度
tlo->AddConfig("TextVisible", "true");//文字是否被显示
//创建文字符号
ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = (ConfigOptionsCOMLib::ISymbolObjectPtr)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", "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", "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("BackColor", "0.42,0.47,0.85,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());//添加样式
heightControl->UpdateLayerOptions(tlo);//更新控高分析
}
//获取控高分析结果
void Cf1c3HeightcontrolDlg::OnBnClickedgetheightcontrol()
{
if(!heightControl)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr opt = heightControl->GetLayerResult();
std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获取数据源类型
if(DataSourceTypeName == "as_heightcontrol")
{
CString ClickPoints = opt->GetConfigValueByKey("ClickPoints");//获取起始点坐标
CString PointsIndex = opt->GetConfigValueByKey("PointsIndex");//选取区域点的个数
CString Height = opt->GetConfigValueByKey("Height");//控高的高度
MessageBox(L"ClickPoints:"+ ClickPoints+ L"\r\nPointsIndex:"+PointsIndex+L"\r\nHeight: "+Height);
}
}
//删除控高分析
void Cf1c3HeightcontrolDlg::OnBnClickedremoveheightcontrol()
{
if(!heightControl)
{
return;
}
map->RemoveLayer(heightControl);//删除控高分析
heightControl = NULL;
}
//显隐控高分析
void Cf1c3HeightcontrolDlg::OnBnClickedvisibleheightcontrol()
{
if(!heightControl)
{
return;
}
static bool heightControlVisble = true;
heightControl->SetVisible(heightControlVisble = !heightControlVisble); //显隐控高分析
}
C#调用
ILayerObject heightControl;//控高分析对象
bool heightControlVisble = true;//控高分析显隐控制
//创建控高分析
private void createHeightControl_Click(object sender, EventArgs e)
{
if (heightControl == null)
{
ILayerOptions mlo = map.CreateLayerOptions("heightControl");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName", "as_heightcontrol");//数据源类型,as_heightcontrol代表控高分析
mlo.AddConfig("PointColor", "1.0,1.0,0.0,1");//点击点的颜色(RGBA)
mlo.AddConfig("PointSize", "5");//点击点的大小
mlo.AddConfig("AreaNum", "1");//绘制区域个数
mlo.AddConfig("ModelLayersID", "-1");//-1代表分析所有图层;"x,x,x"用,分隔代表分析指定id图层
//mlo.AddConfig("ModelLayersIDEx,", gModelLayer.GetLayerID());//排除图层ID
mlo.AddConfig("Height", "80");//控制高度
mlo.AddConfig("HeightControlLineColor", "1.0,0.0,0.0,1");//线颜色透明度(RGBA)
mlo.AddConfig("TopColor", "0,1,0,0.5");//控高顶面颜色(RGBA)
mlo.AddConfig("SideColor", "1,1,1,0.5");//控高侧面颜色(RGBA)
mlo.AddConfig("RangeLineVisible", "true");//范围线是否显示
mlo.AddConfig("TextLiftUp", "0");//文字显示的抬高高度
mlo.AddConfig("TextVisible", "true");//文字是否被显示
mlo.AddConfig("IsDepthTest", "true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建文字符号
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", "20");//字体精度大小
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", "4");//显示精度
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
IStyle pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
heightControl = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(heightControl);//添加图层
}
else
{
MessageBox.Show("请勿重复创建分析图层!");
}
}
//更新控高分析
//当做更新操作时,只需把需要更新的参数构建更新配置参数就可以,不需要更新的参数不需要在设置
private void updateHeightControl_Click(object sender, EventArgs e)
{
if (heightControl!=null)
{
ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName", "as_heightcontrol");//数据源类型,as_heightcontrol代表控高分析
mlo.AddConfig("Height", "80");//控制高度
mlo.AddConfig("HeightControlLineColor", "1.0,0.0,0.0,1");//线颜色透明度(RGBA)
mlo.AddConfig("TopColor", "0,1,0,0.5");//控高顶面颜色(RGBA)
mlo.AddConfig("SideColor", "1,1,1,0.5");//控高侧面颜色(RGBA)
mlo.AddConfig("RangeLineVisible", "true");//范围线是否显示
mlo.AddConfig("TextLiftUp", "10");//文字显示的抬高高度
mlo.AddConfig("TextVisible", "true");//文字是否被显示
//创建文字符号
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", "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", "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
//创建样式
IStyle pStyle = map.CreateStyle("Text");//创建Style,名字可以任意
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//添加文字符号到Style里,第一参必须为AnalysisTextSymbol字符串,第二参为上面创建的文字符号的配置信息
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//第一参必须为Style字符串,第二参为上面创建的Style的配置信息
heightControl.UpdateLayerOptions(mlo);//更新控高分析
}
else
{
MessageBox.Show("请创建分析图层再进行更新操作!");
}
}
//获取控高分析结果
private void getHeightControl_Click(object sender, EventArgs e)
{
if (heightControl!=null)
{
ILayerOptions opt = heightControl.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_heightcontrol")
{
string ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取起始点坐标
string PointsIndex = opt.GetConfigValueByKey("PointsIndex");//选取区域点的个数
string Height = opt.GetConfigValueByKey("Height");//控高的高度
MessageBox.Show("ClickPoints:" + ClickPoints + "\nPointsIndex:" + PointsIndex + "\nHeight:" + Height);
}
}
else
{
MessageBox.Show("不存在分析图层,无法获取结果!");
}
}
//删除控高分析
private void removeHeightControl_Click(object sender, EventArgs e)
{
if (heightControl!=null )
{
map.RemoveLayer(heightControl);//删除图层
heightControl = null;
heightControlVisble= true;
}
else
{
MessageBox.Show("分析图层不存在,请勿重复删除!");
}
}
//显隐控高分析
private void visibleHeightControl_Click(object sender, EventArgs e)
{
if (heightControl!=null)
{
if (heightControlVisble)
{
heightControlVisble = false;
}
else
{
heightControlVisble = true;
}
heightControl.SetVisible(heightControlVisble);//图层显隐
}
else
{
MessageBox.Show("图层不存在,无法设置显隐!");
}
}