2.2.3 通视分析
通视分析
通视分析是指以某一点为观察点,研究某一位置通视情况的分析功能。他可以判断地形上任意两点之间是否互相可见。
主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。
注意:可创建空的分析图层,也可创建预设的分析图层,如需创建预设分析图层,则IsLoad
, IsActive
, StartPoint
, EndPoints
四个参数需要同时配置
下图是通视分析效果:
参数说明
通视分析可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
LayerOptionsName | 图层配置对象名称 | string | 分析图层需配置为:AnalysisLayerOptions |
DataSourceTypeName | 数据源类型 | string | as_linesight代表通视分析 |
StartColor | 起始点颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
EndColor | 目标点颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
HitColor | 碰撞点颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
StartPointSize | 起始点大小 | float | 点大小取值范围在1-10之间 |
EndPointSize | 目标点大小 | float | 点大小取值范围在1-10之间 |
HitPointSize | 碰撞点大小 | float | 点大小取值范围在1-10之间 |
LineWidth | 绘制线宽度 | float | 线宽度在1-10之间 |
LineOfSightColor | 通视线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
InvisiblePartColor | 视线不可见部分颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
VisiblePartColor | 视线可见部分颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
TextVisible | 是否显示文字 | bool | 默认为false。如为false,则TextLiftUp 和Style 配置都无效 |
TextLiftUp | 文字抬高高度 | float | 默认为0.0 |
IsDepthTest | 是否开启深度测试 | bool | 默认为false。false不开启,结果会浮在场景上,true实际显示位置 |
Style | 添加样式 | string | 配置文字样式,配置信息参考文字样式配置 |
IsLoad | 是否初始化加载点 | bool | 默认为false |
IsActive | 是否激活分析 | bool | 默认为true,表示是否可操作场景进行绘制 |
StartPoint | 起始点坐标 | x,y,z | 起始点的经度,纬度,高程坐标 |
EndPoints | 目标点坐标 | x,y,z列表 | 目标点的经度,纬度,高程坐标;目标点可以是多个点,中间用;分隔,并以;结尾 |
IsWorld | 是否世界坐标点 | bool | 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true |
StartPointName | 起始点名称 | string | 设置起始点显示名称 |
EndPointName | 目标点名称 | string | 设置目标点显示名称 |
LineOfSightType | 通视分析类型 | int | 通视分析的类型。0-固定观察点;1-固定目标点。默认0 |
获取结果说明
通视分析结束以后会返回结果,其结果是以LineSightResult
返回的,通视结果按照目标点的顺序进行排列,当值为-1时代表通视,非通视状态下值从0开始依次递增,该值代表碰撞点的索引序号。如(-1,0,1,-1,2)中-1代表通视,其他代表第n个碰撞点。
通视分析可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
DataSourceTypeName | 数据源类型 | string | as_linesight代表通视分析 |
StartPoint | 起始点坐标 | x,y,z | 起始点的经度,纬度,高程坐标 |
EndPoints | 目标点坐标 | x,y,z列表 | 目标点的经度,纬度,高程坐标;目标点可以是多个点,中间用;分隔,并以;结尾 |
HitPoints | 碰撞点坐标 | x,y,z列表 | 碰撞点的经度,纬度,高程坐标;碰撞点可以是多个点,中间用;分隔,并以;结尾 |
LineSightResult | 通视结果 | int列表 | 通视结果列表,多个值以,分隔 |
代码调用示例
Javascript调用
var lineOfSight = null;
var lineOfSightVisble = null;
var FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//创建通视分析
function createLineOfSight(state){
if(lineOfSight == null){
var mlo = map.CreateLayerOptions("lineOfSight");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName", "as_linesight");//数据源类型,as_linesight代表通视分析
mlo.AddConfig("StartColor", "0,0,1,1");//起始点颜色(RGBA)
mlo.AddConfig("EndColor", "0,0,1,1");//目标点颜色(RGBA)
mlo.AddConfig("HitColor", "1,1,0,1");//视线碰撞点颜色(RGBA)
mlo.AddConfig("StartPointSize", "5");//起始点的大小
mlo.AddConfig("EndPointSize", "5");//目标点的大小
mlo.AddConfig("HitPointSize", "5");//碰撞点的大小
mlo.AddConfig("LineWidth", "3.0");//线宽(0-10)
mlo.AddConfig("LineOfSightColor", "0,1,0,1");//通视线颜色
mlo.AddConfig("InvisiblePartColor", "1,0,0,1");//视线不可视部分颜色(RGBA)
mlo.AddConfig("VisiblePartColor", "1,1,0,1");//视线可视部分颜色(RGBA)
mlo.AddConfig("TextVisible", "true");//是否显示文字
mlo.AddConfig("TextLiftUp", "1");//文字抬高高度
mlo.AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
mlo.AddConfig("StartPointName", "起始点");//设置起始点的名称
mlo.AddConfig("EndPointName", "目标");//设置目标点的名称
mlo.AddConfig("LineOfSightType", "0");//通视分析类型。0:固定观察点;1:固定目标点
if(state){
mlo.AddConfig("IsLoad","true");//是否初始化加载点
mlo.AddConfig("IsActive", "false");//是否激活分析
mlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
mlo.AddConfig("StartPoint","120.218559381,30.2100080537,27.9831230184");//起始点坐标
mlo.AddConfig("EndPoints","120.218338849,30.2097523565,14.622604738; 120.218479768,30.210410742,79.5481784679;120.218734158,30.2100659177,28.103232082;");//终止点坐标
}
//创建文字符号
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());//添加样式
lineOfSight = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(lineOfSight);//添加图层
}else{
alert("请勿重复创建分析图层!");
}
}
//更新通视分析
//当做更新操作时,只需把需要更新的参数构建更新配置参数就可以,不需要更新的参数不需要在设置
function updateLineOfSight(){
if(lineOfSight){
var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName", "as_linesight");//数据源类型,as_linesight代表通视分析
mlo.AddConfig("StartColor", "1,0,0,0.8");//起始点颜色(RGBA)
mlo.AddConfig("EndColor", "0,1,0,0.8");//目标点颜色(RGBA)
mlo.AddConfig("HitColor", "0,1,1,0.8");//视线碰撞点颜色(RGBA)
mlo.AddConfig("LineOfSightColor", "0,1,0,1");//通视线颜色
mlo.AddConfig("InvisiblePartColor", "1,0,0,1");//视线不可视部分颜色(RGBA)
mlo.AddConfig("VisiblePartColor", "1,1,0,1");//视线可视部分颜色(RGBA)
mlo.AddConfig("TextVisible", "true");//是否显示文字
mlo.AddConfig("TextLiftUp", "30");//文字抬高高度
mlo.AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
pSymbol.AddConfig("FillingColor", "1.0,1.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","5");//显示精度
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
lineOfSight.UpdateLayerOptions(mlo);//更新通视分析
}else{
alert("请创建分析图层再进行更新操作!");
}
}
//获取通视分析结果
function getLineOfSight(){
if(lineOfSight){
var opt = lineOfSight.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_linesight"){
var StartPoint = opt.GetConfigValueByKey("StartPoint");//获取起始点坐标
var EndPoints = opt.GetConfigValueByKey("EndPoints");//获取结束点坐标
var HitPoints = opt.GetConfigValueByKey("HitPoints");//获取碰撞点坐标
alert("StartPoint:" + StartPoint + "; EndPoints:" + EndPoints);
alert("HitPoints:" + HitPoints);
var LineSightResult = opt.GetConfigValueByKey("LineSightResult");//获取通视结果:(-1,0,1,-1,2)-1代表通视,其他代表第n个碰撞点
alert("LineSightResult:" + LineSightResult);
}
}else{
alert("不存在分析图层,无法获取结果!");
}
}
//删除通视分析
function removeLineOfSight(){
if(lineOfSight){
map.RemoveLayer(lineOfSight);//删除图层
lineOfSight = null;
}else{
alert("分析图层不存在,请勿重复删除!");
}
}
//显隐通视分析
function visibleLineOfSight(){
if(lineOfSight){
if(lineOfSightVisble){
lineOfSightVisble = false;
}else{
lineOfSightVisble = true;
}
lineOfSight.SetVisible(lineOfSightVisble);//图层显隐
}else{
alert("图层不存在,无法设置显隐!");
}
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr lineOfSight;//通视分析图层对象
//创建预设通视分析
void Cf1c2LinesightDlg::OnBnClickedcreatepresetlineofsight()
{
if(lineOfSight)
{
return;
}
lineOfSight=loadLineOfSight(TRUE);
}
//创建手动通视分析
void Cf1c2LinesightDlg::OnBnClickedcreatemanuallineofsight()
{
if(lineOfSight)
{
return;
}
lineOfSight=loadLineOfSight(FALSE);
}
//加载通视分析
BaseObjectCOMLib::ILayerObjectPtr Cf1c2LinesightDlg::loadLineOfSight(bool IsLoad)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
tlo->AddConfig("DataSourceTypeName", "as_linesight");//数据源类型,as_linesight代表通视分析
tlo->AddConfig("StartColor", "0,0,1,1");//起始点颜色(RGBA)
tlo->AddConfig("EndColor", "0,0,1,1");//目标点颜色(RGBA)
tlo->AddConfig("HitColor", "1,1,0,1");//视线碰撞点颜色(RGBA)
tlo->AddConfig("StartPointSize", "5");//起始点的大小
tlo->AddConfig("EndPointSize", "5");//目标点的大小
tlo->AddConfig("HitPointSize", "5");//碰撞点的大小
tlo->AddConfig("LineWidth", "3.0");//线宽(0-10)
tlo->AddConfig("LineOfSightColor", "0,1,0,1");//通视线颜色
tlo->AddConfig("InvisiblePartColor", "1,0,0,1");//视线不可视部分颜色(RGBA)
tlo->AddConfig("VisiblePartColor", "1,1,0,1");//视线可视部分颜色(RGBA)
tlo->AddConfig("TextVisible", "true");//是否显示文字
tlo->AddConfig("TextLiftUp", "1");//文字抬高高度
tlo->AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
mlo->AddConfig("StartPointName", "起始点");//设置起始点的名称
mlo->AddConfig("EndPointName", "目标");//设置目标点的名称
mlo->AddConfig("LineOfSightType", "0");//通视分析类型。0:固定观察点;1:固定目标点
if(IsLoad){
tlo->AddConfig("IsLoad","true");//是否初始化加载点
tlo->AddConfig("IsActive", "false");//是否激活分析
tlo->AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
tlo->AddConfig("StartPoint","120.218559381,30.2100080537,27.9831230184");//起始点坐标
tlo->AddConfig("EndPoints","120.218338849,30.2097523565,14.622604738;120.218479768,30.210410742,79.5481784679;120.218734158,30.2100659177,28.103232082;");//终止点坐标
}
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");//字符大小变化模式。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
//创建样式
ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
BaseObjectCOMLib::ILayerObjectPtr lineOfSight = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
map->AddLayer(lineOfSight);//添加图层
return lineOfSight;
}
//更新通视分析
void Cf1c2LinesightDlg::OnBnClickedupdatelineofsight()
{
if(!lineOfSight)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
tlo->AddConfig("DataSourceTypeName", "as_linesight");//数据源类型,as_linesight代表通视分析
tlo->AddConfig("StartColor", "1,0,0,0.8");//起始点颜色(RGBA)
tlo->AddConfig("EndColor", "0,1,0,0.8");//目标点颜色(RGBA)
tlo->AddConfig("HitColor", "0,1,1,0.8");//视线碰撞点颜色(RGBA)
tlo->AddConfig("LineOfSightColor", "0,1,0,1");//通视线颜色
tlo->AddConfig("InvisiblePartColor", "1,0,0,1");//视线不可视部分颜色(RGBA)
tlo->AddConfig("VisiblePartColor", "1,1,0,1");//视线可视部分颜色(RGBA)
tlo->AddConfig("TextVisible", "true");//是否显示文字
tlo->AddConfig("TextLiftUp", "30");//文字抬高高度
tlo->AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建文字符号
ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = (ConfigOptionsCOMLib::ISymbolObjectPtr)map->CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
pSymbol->AddConfig("FillingColor", "1.0,1.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", "true");//字体是否为斜体
pSymbol->AddConfig("IsUnderline", "false");//字体是否有下划线
pSymbol->AddConfig("IsBack", "false");//是否设置背景色
pSymbol->AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,IsBack为true有效
pSymbol->AddConfig("FieldPrecision","5");//显示精度
pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
lineOfSight->UpdateLayerOptions(tlo);//更新分析
}
//获取通视分析结果
void Cf1c2LinesightDlg::OnBnClickedgetlineofsight()
{
if(!lineOfSight)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr opt = lineOfSight->GetLayerResult();
std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获取数据源类型
if(DataSourceTypeName == "as_linesight")
{
CString EyePoint = opt->GetConfigValueByKey("StartPoint");//获取起始点坐标
CString EndPoints = opt->GetConfigValueByKey("EndPoints");//获取结束点坐标
CString HitPoints = opt->GetConfigValueByKey("HitPoints");//获取碰撞点坐标
CString LineSightResult = opt->GetConfigValueByKey("LineSightResult");//获取通视结果:(-1,0,1,-1,2)-1代表通视,其他代表第n个碰撞点
MessageBox(L"EyePoint:"+ EyePoint+ L"\r\nEndPoints:"+EndPoints+L"\r\nHitPoints: "+HitPoints+L"\r\nLineSightResult: "+LineSightResult);
}
}
//移除通视分析
void Cf1c2LinesightDlg::OnBnClickedremovelineofsight()
{
if(!lineOfSight)
{
return;
}
map->RemoveLayer(lineOfSight);//删除通视
lineOfSight = NULL;
}
//显隐通视分析
void Cf1c2LinesightDlg::OnBnClickedvisiblelineofsight()
{
if(!lineOfSight)
{
return;
}
static bool lineOfSightVisble = true;
lineOfSight->SetVisible(lineOfSightVisble = !lineOfSightVisble); //显隐图层
}
C#调用
ILayerObject lineOfSight;//通视分析对象
bool lineOfSightVisble;//显隐控制
bool bInitCreate = false;//是否初始化加载通视分析
//创建通视分析
private void createpresetlineofsight_Click(object sender, EventArgs e)
{
if (lineOfSight == null)
{
ILayerOptions mlo = map.CreateLayerOptions("lineOfSight");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName", "as_linesight");//数据源类型,as_linesight代表通视分析
mlo.AddConfig("StartColor", "0,0,1,1");//起始点颜色(RGBA)
mlo.AddConfig("EndColor", "0,0,1,1");//目标点颜色(RGBA)
mlo.AddConfig("HitColor", "1,1,0,1");//视线碰撞点颜色(RGBA)
mlo.AddConfig("StartPointSize", "5");//起始点的大小
mlo.AddConfig("EndPointSize", "5");//目标点的大小
mlo.AddConfig("HitPointSize", "5");//碰撞点的大小
mlo.AddConfig("LineWidth", "3.0");//线宽(0-10)
mlo.AddConfig("LineOfSightColor", "0,1,0,1");//通视线颜色
mlo.AddConfig("InvisiblePartColor", "1,0,0,1");//视线不可视部分颜色(RGBA)
mlo.AddConfig("VisiblePartColor", "1,1,0,1");//视线可视部分颜色(RGBA)
mlo.AddConfig("TextVisible", "true");//是否显示文字
mlo.AddConfig("TextLiftUp", "1");//文字抬高高度
mlo.AddConfig("IsDepthTest", "true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
mlo.AddConfig("StartPointName", "起始点");//设置起始点的名称
mlo.AddConfig("EndPointName", "目标");//设置目标点的名称
mlo.AddConfig("LineOfSightType", "0");//通视分析类型。0:固定观察点;1:固定目标点
//是否初始化加载
if (bInitCreate)
{
mlo.AddConfig("IsLoad", "true");//是否初始化加载点
mlo.AddConfig("IsActive", "false");//是否激活分析
mlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
mlo.AddConfig("StartPoint", "120.218559381,30.2100080537,27.9831230184");//起始点坐标
mlo.AddConfig("EndPoints", "120.218338849,30.2097523565,14.622604738;120.218479768,30.210410742,79.5481784679;120.218734158,30.2100659177,28.103232082;");//目标点坐标
}
//创建文字符号
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("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
lineOfSight = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(lineOfSight);//添加图层
}
}
//更新通视分析
private void updateLineOfSight_Click(object sender, EventArgs e)
{
if (lineOfSight != null)
{
ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName", "as_linesight");//数据源类型,as_linesight代表通视分析
mlo.AddConfig("StartColor", "1,0,0,0.8");//起始点颜色(RGBA)
mlo.AddConfig("EndColor", "0,1,0,0.8");//目标点颜色(RGBA)
mlo.AddConfig("HitColor", "0,1,1,0.8");//视线碰撞点颜色(RGBA)
mlo.AddConfig("LineOfSightColor", "0,1,0,1");//通视线颜色
mlo.AddConfig("InvisiblePartColor", "1,0,0,1");//视线不可视部分颜色(RGBA)
mlo.AddConfig("VisiblePartColor", "1,1,0,1");//视线可视部分颜色(RGBA)
mlo.AddConfig("TextVisible", "true");//是否显示文字
mlo.AddConfig("TextLiftUp", "30");//文字抬高高度
mlo.AddConfig("IsDepthTest", "false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建文字符号
ISymbolObject pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
pSymbol.AddConfig("FillingColor", "1.0,1.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", "true");//字体是否为斜体
pSymbol.AddConfig("IsUnderline", "false");//字体是否有下划线
pSymbol.AddConfig("IsBack", "false");//是否设置背景色
pSymbol.AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,IsBack为true有效
pSymbol.AddConfig("FieldPrecision", "5");//显示精度
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
IStyle pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
lineOfSight.UpdateLayerOptions(mlo);//更新通视分析
}
}
//获取结果
private void getLineOfSight_Click(object sender, EventArgs e)
{
if (lineOfSight != null)
{
ILayerOptions opt = lineOfSight.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_linesight")
{
string StartPoint = opt.GetConfigValueByKey("StartPoint");//获取起始点坐标
MessageBox.Show("StartPoint:" + StartPoint);
string EndPoints = opt.GetConfigValueByKey("EndPoints");//获取结束点坐标
MessageBox.Show("EndPoints:" + EndPoints);
string HitPoints = opt.GetConfigValueByKey("HitPoints");//获取碰撞点坐标
MessageBox.Show("HitPoints:" + HitPoints);
string LineSightResult = opt.GetConfigValueByKey("LineSightResult");//获取通视结果:(-1,0,1,-1,2)-1代表通视,其他代表第n个碰撞点
MessageBox.Show("LineSightResult:" + LineSightResult);
}
}
}
//删除通视分析
private void removeLineOfSight_Click(object sender, EventArgs e)
{
if (lineOfSight!=null)
{
map.RemoveLayer(lineOfSight);//删除图层
lineOfSight = null;
}
}
//图层显隐
private void visibleLineOfSight_Click(object sender, EventArgs e)
{
if (lineOfSight != null)
{
if (lineOfSightVisble)
{
lineOfSightVisble = false;
}
else
{
lineOfSightVisble = true;
}
lineOfSight.SetVisible(lineOfSightVisble);//图层显隐
}
}