2.2.1 单视域分析


视域分析是模拟相机照射一片区域的效果。它根据提供的点位和观察角度,生成一个视野观察范围,然后分析在该观察范围内的被观察物体是否可见。分析时,范围内可见区域会绿色显示,不可见区域会红色显示。视域分析在不同的领域有着广泛的应用,如火灾监控点的设定,观察哨所的设定等等。

CooRun SDK根据单个图层里可绘制的视域分析体数量,将视域分析分为:单视域分析多视域分析

单视域分析

单视域分析是指在单个图层中只创建一个视域分析的功能。主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。

注意:可创建空的分析图层,也可创建预设的分析图层,如需创建预设分析图层,则IsLoad, IsActive, EyePos, ArmPos 四个参数需要同时配置,也可以用VRotateAngle,HRotateAngleDistance三个参数取代ArmPos进行自动计算目标点。

下图是视域分析效果:

  

参数说明

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

配置项 配置说明 值类型 备注
LayerOptionsName 图层配置对象名称 string 分析图层需配置为:AnalysisLayerOptions
DataSourceTypeName 数据源类型 string as_viewshed代表视域分析
DrawLineColor 线颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0",A的取值必须大于0.2
VAngle 垂直方向张角 float 角度在0-179之间(度)
HAngle 水平方向张角 float 角度在0-179之间(度)
TextVisible 是否显示文字 bool 默认为false。如为false,则TextLiftUpStyle配置都无效
TextLiftUp 文字抬高高度 float 默认为0.0
IsDepthTest 是否开启深度测试 bool 默认为false。false不开启,结果会浮在场景上,true实际显示位置
Style 添加样式 string 配置文字样式,配置信息参考文字样式配置
IsLoad 是否初始化加载点 bool 默认为false
IsActive 是否激活分析 bool 默认为true,表示是否可操作场景进行绘制
EyePos 起始点坐标 x,y,z 需传入经度,纬度,高程坐标
ArmPos 目标点坐标 x,y,z 需传入经度,纬度,高程坐标
VRotatAngle 垂直旋转角度 float 角度在0-179之间(度)
HRotatAngle 水平旋转角度 float 角度在0-179之间(度)
Distance 起始点到终点距离 double 起始点到终点距离
IsWorld 是否世界坐标点 bool 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true

获取结果说明

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

配置项 配置说明 值类型 备注
DataSourceTypeName 数据源类型 string as_viewshed代表视域分析
EyePoint 起始点坐标 x,y,z 起始点的经度,纬度,高程坐标
AimPoint 目标点坐标 x,y,z 目标点的经度,纬度,高程坐标
FrustumPos 视景体坐标 x,y,z列表 视域分析形成的棱锥5个顶点的经度,纬度,高程坐标
VRotatAngle 垂直旋转角度 float 角度在0-179之间(度)
HRotatAngle 水平旋转角度 float 角度在0-179之间(度)
Distance 起始点到终点距离 double 起始点到终点距离

代码调用示例

Javascript调用

var viewShed = null;
var FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//创建单视域分析
function createViewShed(state){
    if(viewShed == null){
        var layerOpt = map.CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
        layerOpt.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        layerOpt.AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析 
        layerOpt.AddConfig("DrawLineColor", "1,1,0,1");//线颜色(RGBA)
        layerOpt.AddConfig("VAngle", "60");//垂直方向张角
        layerOpt.AddConfig("HAngle", "60");//水平方向张角        
        layerOpt.AddConfig("TextVisible", "true");//是否显示文字
        layerOpt.AddConfig("TextLiftUp", "1");//文字抬高高度
        layerOpt.AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
        if(state){
            layerOpt.AddConfig("IsActive", "false");//是否激活分析。初始化加载点时,需要关闭激活
            layerOpt.AddConfig("IsLoad", "true");//是否初始化加载点
            layerOpt.AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
            layerOpt.AddConfig("EyePos", "120.218221747,30.2105396593,82.76055");//起始点
            layerOpt.AddConfig("ArmPos", "120.218013904,30.2110769596,20.09121");//目标点
            //可以设置起始点+目标点方式,也可以设置起始点+角度+距离方式
            //layerOpt.AddConfig("VRotateAngle", "-45");//垂直旋转角
            //layerOpt.AddConfig("HRotateAngle", "45");//水平旋转角
            //layerOpt.AddConfig("Distance", "100");//起始点至终点距离
        }
        //创建文字符号
        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());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        layerOpt.AddConfig("Style", pStyle.GetConfig());//添加样式
        viewShed = map.CreateLayer("AnalysisLayer", layerOpt);//创建分析图层,第一项参数为AnalysisLayer
        map.AddLayer(viewShed);//添加图层
    }else{
        alert("请勿重复创建分析图层!");
    }
}
//更新单视域分析
//当做更新操作时,只需把需要更新的参数构建更新配置参数就可以,不需要更新的参数不需要在设置
function updateViewShed(){
    if(viewShed){
        var layerOpt = map.CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
        layerOpt.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        layerOpt.AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析   
        layerOpt.AddConfig("TextVisible", "true");//是否显示文字
        layerOpt.AddConfig("TextLiftUp", "20");//文字抬高高度
        layerOpt.AddConfig("VAngle", "80");//视域垂直方向夹角
        layerOpt.AddConfig("HAngle", "80");//视域水平方向夹角
        //创建文字符号
        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", "8");//文字大小
        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", "true");//是否设置背景色
        pSymbol.AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,是否设置背景色为true有效
        pSymbol.AddConfig("FieldPrecision","6");//显示精度
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
        //创建样式
        var pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        layerOpt.AddConfig("Style", pStyle.GetConfig());//添加样式
        viewShed.UpdateLayerOptions(layerOpt);//更新分析
    }else{
        alert("请创建分析图层再进行更新操作!");
    }
}
//获取单视域分析结果
function getViewShed(){
    if(viewShed){
        var opt = viewShed.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_viewshed"){
            var EyePoint = opt.GetConfigValueByKey("EyePoint");//获取起始点坐标
            var AimPoint = opt.GetConfigValueByKey("AimPoint");//获取结束点坐标
            var FrustumPos = opt.GetConfigValueByKey("FrustumPos");//获取视景体的5个点
            var VRotatAngle = opt.GetConfigValueByKey("VRotatAngle");//垂直旋转角度
            var HRotatAngle = opt.GetConfigValueByKey("HRotatAngle");//水平旋转角度
            var Distance = opt.GetConfigValueByKey("Distance");//起始点到终点距离
            var FrustumPos = opt.GetConfigValueByKey("FrustumPos");//获取视景体的5个点
            alert("EyePoint:" + EyePoint + "\nAimPoint:" + AimPoint + "\nVRotatAngle:" + VRotatAngle + "\nHRotatAngle:" + HRotatAngle + "\nDistance:" + Distance + "\nFrustumPos:" + FrustumPos);
        }
    }else{
        alert("不存在分析图层,无法获取结果!");
    }
}
//删除单视域分析
function removeViewShed() {
    if(viewShed){
        map.RemoveLayer(viewShed);//删除视域分析
        viewShed = null;
    }else{
        alert("分析图层不存在,请勿重复删除!");
    }
}

C++调用

BaseObjectCOMLib::ILayerObjectPtr viewShed;//单视域分析图层对象
std::string FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//创建预设单视域分析
void Cf1c0ViewshedDlg::OnBnClickedcreatepresetviewshed()
{
    if(viewShed)
    {
        return;
    }
    viewShed=loadViewShed(TRUE);
}

//创建手动单视域分析
void Cf1c0ViewshedDlg::OnBnClickedcreatemanualviewshed()
{
    if(viewShed)
    {
        return;
    }
    viewShed=loadViewShed(FALSE);
}

//加载单视域分析
BaseObjectCOMLib::ILayerObjectPtr Cf1c0ViewshedDlg::loadViewShed(bool IsLoad)
{
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析
    tlo->AddConfig("DrawLineColor", "1,1,0,1");//线颜色(RGBA)
    tlo->AddConfig("VAngle", "60");//垂直方向张角
    tlo->AddConfig("HAngle", "60");//水平方向张角        
    tlo->AddConfig("TextVisible", "true");//是否显示文字
    tlo->AddConfig("TextLiftUp", "1");//文字抬高高度
    tlo->AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
    if(IsLoad){
        tlo->AddConfig("IsActive", "false");//是否激活分析。初始化加载点时,需要关闭激活
        tlo->AddConfig("IsLoad", "true");//是否初始化加载点
        tlo->AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
        tlo->AddConfig("EyePos", "120.218221747,30.2105396593,82.76055");//起始点
        tlo->AddConfig("ArmPos", "120.218013904,30.2110769596,20.09121");//目标点
        //可以设置起始点+目标点方式,也可以设置起始点+角度+距离方式
        //tlo->AddConfig("VRotateAngle", "-45");//垂直旋转角
        //tlo->AddConfig("HRotateAngle", "45");//水平旋转角
        //tlo->AddConfig("Distance", "100");//起始点至终点距离
    }
    //创建文字符号
    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 viewShed = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
    map->AddLayer(viewShed);//添加图层
    return viewShed;
}

//更新单视域分析
void Cf1c0ViewshedDlg::OnBnClickedupdateviewshed()
{
    if(!viewShed)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析
    tlo->AddConfig("TextVisible", "true");//是否显示文字
    tlo->AddConfig("TextLiftUp", "200");//文字抬高高度
    tlo->AddConfig("VAngle", "80");//垂直方向张角
    tlo->AddConfig("HAngle", "80");//水平方向张角
    //创建文字符号
    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", "20");//字体精度大小
    pSymbol->AddConfig("CharacterSize", "8");//文字大小
    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", "true");//是否设置背景色
    pSymbol->AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,IsBack为true有效
    pSymbol->AddConfig("FieldPrecision","6");//显示精度
    pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
        //创建样式
    ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
    pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
    //将样式添加到图层配置里
    tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
    viewShed->UpdateLayerOptions(tlo);//更新分析
}

//获取单视域分析结果
void Cf1c0ViewshedDlg::OnBnClickedgetviewshed()
{
    if(!viewShed)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = viewShed->GetLayerResult();
    std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获取数据源类型
    if(DataSourceTypeName == "as_viewshed")
    {
        CString EyePoint = opt->GetConfigValueByKey("EyePoint");//获取起始点坐标
        CString AimPoint = opt->GetConfigValueByKey("AimPoint");//获取结束点坐标
        CString VRotatAngle = opt->GetConfigValueByKey("VRotatAngle");//垂直旋转角度
        CString HRotatAngle = opt->GetConfigValueByKey("HRotatAngle");//水平旋转角度
        CString Distance = opt->GetConfigValueByKey("Distance");//起始点到终点距离
        CString FrustumPos = opt->GetConfigValueByKey("FrustumPos");//获取视景体的5个点
        MessageBox(L"EyePoint:"+ EyePoint + L"\r\nAimPoint:" + AimPoint + L"\r\nVRotatAngle:" + VRotatAngle + L"\r\nHRotatAngle:" + HRotatAngle + L"\r\nDistance:" + Distance + L"\r\nFrustumPos"+FrustumPos);
    }
}

//删除单视域分析
void Cf1c0ViewshedDlg::OnBnClickedremoveviewshed()
{
    if(!viewShed)
    {
        return;
    }
    map->RemoveLayer(viewShed);//删除视域分析
    viewShed = NULL;
}

C#调用

ILayerObject viewShed;//单视域分析图层对象
//创建预设单视域分析
private void createpresetviewshed_Click(object sender, EventArgs e)
{
    if (viewShed != null)
    {
        return;
    }
    loadViewShed(true);
}

//创建手动单视域分析
private void createmanualviewshed_Click(object sender, EventArgs e)
{
    if (viewShed != null)
    {
        return;
    }
    loadViewShed(false);
}

//加载单视域分析
private void loadViewShed(bool IsLoad)
{
    ILayerOptions layerOpt = map.CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
    layerOpt.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    layerOpt.AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析 
    layerOpt.AddConfig("DrawLineColor", "1,1,0,1");//线颜色(RGBA)
    layerOpt.AddConfig("VAngle", "60");//垂直方向张角
    layerOpt.AddConfig("HAngle", "60");//水平方向张角        
    layerOpt.AddConfig("TextVisible", "true");//是否显示文字
    layerOpt.AddConfig("TextLiftUp", "1");//文字抬高高度
    layerOpt.AddConfig("IsDepthTest", "true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
    if (IsLoad)
    {
        layerOpt.AddConfig("IsActive", "false");//是否激活分析。初始化加载点时,需要关闭激活
        layerOpt.AddConfig("IsLoad", "true");//是否初始化加载点
        layerOpt.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
        layerOpt.AddConfig("EyePos", "120.218221747,30.2105396593,82.76055");//起始点
        layerOpt.AddConfig("ArmPos", "120.218013904,30.2110769596,20.09121");//目标点
        //可以设置起始点+目标点方式,也可以设置起始点+角度+距离方式
        //layerOpt.AddConfig("VRotateAngle", "-45");//垂直旋转角
        //layerOpt.AddConfig("HRotateAngle", "45");//水平旋转角
        //layerOpt.AddConfig("Distance", "100");//起始点至终点距离        
    }
    //创建文字符号
    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());//将符号对象添加到样式,第一参数为符号类型
    //将样式添加到图层配置里
    layerOpt.AddConfig("Style", pStyle.GetConfig());//添加样式
    viewShed = map.CreateLayer("AnalysisLayer", layerOpt);//创建分析图层,第一项参数为AnalysisLayer
    map.AddLayer(viewShed);//添加图层
}

//更新单视域分析
private void updateViewShed_Click(object sender, EventArgs e)
{
    if (viewShed != null)
    {
        ILayerOptions layerOpt = map.CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
        layerOpt.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        layerOpt.AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析   
        layerOpt.AddConfig("TextVisible", "true");//是否显示文字
        layerOpt.AddConfig("TextLiftUp", "200");//文字抬高高度
        layerOpt.AddConfig("VAngle", "80");//视域垂直方向夹角
        layerOpt.AddConfig("HAngle", "80");//视域水平方向夹角
        //创建文字符号
        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", "8");//文字大小
        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", "true");//是否设置背景色
        pSymbol.AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,是否设置背景色为true有效
        pSymbol.AddConfig("FieldPrecision", "6");//显示精度
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
        //创建样式
        IStyle pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        layerOpt.AddConfig("Style", pStyle.GetConfig());//添加样式
        viewShed.UpdateLayerOptions(layerOpt);//更新分析
    }
}

//获取单视域分析结果
private void getViewShed_Click(object sender, EventArgs e)
{
    if (viewShed != null)
    {
        ILayerOptions opt = viewShed.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_viewshed")
        {
            string EyePoint = opt.GetConfigValueByKey("EyePoint");//获取起始点坐标
            string AimPoint = opt.GetConfigValueByKey("AimPoint");//获取结束点坐标
            string VRotatAngle = opt.GetConfigValueByKey("VRotatAngle");//垂直旋转角度
            string HRotatAngle = opt.GetConfigValueByKey("HRotatAngle");//水平旋转角度
            string Distance = opt.GetConfigValueByKey("Distance");//起始点到终点距离
            string FrustumPos = opt.GetConfigValueByKey("FrustumPos");//获取视景体的5个点
            MessageBox.Show("EyePoint:" + EyePoint + "\nAimPoint:" + AimPoint + "\nVRotatAngle:" + VRotatAngle + "\nHRotatAngle:" + HRotatAngle + "\nDistance:" + Distance + "\nFrustumPos:" + FrustumPos);
        }
    }
}

//删除单视域分析
private void removeViewShed_Click(object sender, EventArgs e)
{
    if (viewShed != null)
    {
        map.RemoveLayer(viewShed);//删除视域分析
        viewShed = null;
    }
}

results matching ""

    No results matching ""