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,则TextLiftUpStyle配置都无效
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);//图层显隐
    }
}

results matching ""

    No results matching ""