2.2.12 全景视域分析


全景视域分析

全景视域分析是模拟全景相机照射周边区域的效果。它根据提供的点位生成球形视野观察范围,然后分析在该观察范围内的模型建筑是否可见。分析时,范围内可见区域会绿色显示,不可见区域会红色显示。

主要包括添加(创建)、更新、显隐、删除和获取结果操作。

注意:可创建空的分析图层,也可创建预设的分析图层,如需创建预设分析图层,则IsLoad, IsActive, EyePos, ArmPos 四个参数需要同时配置。

下图是全景视域分析效果:

  

参数说明

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

配置项 配置说明 值类型 备注
LayerOptionsName 图层配置对象名称 string 分析图层需配置为:AnalysisLayerOptions
DataSourceTypeName 数据源类型 string as_globalviewshed代表全景视域分析
DrawLineColor 线颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0",A的取值必须大于0.2
LineWidth 线宽度 float 线宽度取值范围在1-10之间。默认:2
IsSphere 是否是视域球 bool 默认为false
VAngle 垂直方向夹角 float 角度在0-179之间(度)。该值在IsSphere=false时起效,且角度不能超过120度
HAngle 水平方向夹角 float 角度在0-179之间(度)。该值在IsSphere=false时起效,且角度不能超过120度
IsLoad 是否初始化加载点 bool 默认为false
IsActive 是否激活分析 bool 默认为true,表示是否可操作场景进行绘制
EyePos 起始点坐标 x,y,z 需传入经度,纬度,高程坐标
ArmPos 目标点坐标 x,y,z 需传入经度,纬度,高程坐标
IsWorld 是否世界坐标点 bool 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true

获取结果说明

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

配置项 配置说明 值类型 备注
DataSourceTypeName 数据源类型 string as_globalviewshed代表全景视域分析
IsSphere 是否是视域球 bool 默认为false
EyePoint 起始点坐标 x,y,z 起始点的经度,纬度,高程坐标
AimPoint 目标点坐标 x,y,z 目标点的经度,纬度,高程坐标
DrawLineColor 线颜色 R,G,B,A 视域线颜色
LineWidth 线宽度 float 视域线宽度

代码调用示例

Javascript调用

var globalViewShed;
//创建全景视域分析
function CreateGlobalViewShed() {
    var mlo3 = map.CreateLayerOptions("GlobalViewShed")//创建分析图层配置,给配置起个名称,任意名称
    mlo3.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    mlo3.AddConfig("DataSourceTypeName", "as_globalviewshed");//数据源类型,代表全景视域分析
    mlo3.AddConfig("DrawLineColor", "1,1,0,1");//线颜色(RGBA)
    mlo3.AddConfig("LineWidth", "1.0" );//线宽。取值范围:1-10像素,默认2   
    mlo3.AddConfig("IsSphere", "true");//是否是视域球。默认false
    mlo3.AddConfig("VAngle", "90");//垂直方向夹角。该值在IsSphere=false时起效,且角度不能超过120度
    mlo3.AddConfig("HAngle", "120");//水平方向夹角。该值在IsSphere=false时起效,且角度不能超过120度    

    globalViewShed = map.CreateLayer("AnalysisLayer", mlo3);//创建分析图层,第一项参数必须为AnalysisLayer
    map.AddLayer(globalViewShed);//添加分析图层
}

//更新全景视域分析
//当做更新操作时,只需把需要更新的参数构建更新配置参数就可以,不需要更新的参数不需要在设置
function UpdateGlobalViewShed() {
    var mlo3 = map.CreateLayerOptions("");//创建更新的配置参数
    mlo3.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    mlo3.AddConfig("DataSourceTypeName", "as_globalviewshed");//数据源类型,代表全景视域分析

    mlo3.AddConfig("IsLoad", "true");
    mlo3.AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
///更新视域分析点坐标,当更新点时必须设置IsLoad配置项为true
    mlo3.AddConfig("IsSphere", "false");//是否是视域球。默认false
    mlo3.AddConfig("VAngle", "90");//垂直方向夹角。该值在IsSphere=false时起效,且角度不能超过120度
    mlo3.AddConfig("HAngle", "120");//水平方向夹角。该值在IsSphere=false时起效,且角度不能超过120度  
    mlo3.AddConfig("EyePos", "120.215623935214,30.211935234442,91.705125554465");//起始点
    mlo3.AddConfig("ArmPos", "120.211938237292,30.210849069547,-0.000396835618");//目标点
///更新视域分析点坐标,当更新点时必须设置IsLoad配置项为true
    globalViewShed.UpdateLayerOptions(mlo3);//更新全景视域分析
}

//获取全景视域分析结果
function GetGlobalViewShed() {
    var opt = globalViewShed.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
    if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_globalviewshed")
    {
        var EyePoint = opt.GetConfigValueByKey("EyePoint"); //获取起始点坐标
        var AimPoint = opt.GetConfigValueByKey("AimPoint"); //获取结束点坐标
        var IsSphere = opt.GetConfigValueByKey("IsSphere"); //是否是视域球
        var LineWidth = opt.GetConfigValueByKey("LineWidth"); //线宽
        var DrawLineColor = opt.GetConfigValueByKey("DrawLineColor"); //线颜色
        alert("EyePoint:" + EyePoint + "; AimPoint:" + AimPoint + "; IsSphere:" + IsSphere);
    }
}

//删除全景视域分析
function RemoveGlobalViewShed() {
    map.RemoveLayer(globalViewShed);//删除全景视域分析
    globalViewShed = null;
}

var globalVisble = true;
function VisibleGlobalViewShed() {
    if (globalVisble) {
        globalVisble = false;
    } else {
        globalVisble = true;
    }
    globalViewShed.SetVisible(globalVisble);//显隐全景视域分析
}

C++调用

BaseObjectCOMLib::ILayerObjectPtr globalViewShed;//全景视域分析图层对象
//全景视域分析
void CglobalviewshedDlg::OnBnClickedCreateglobalviewshed()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map ->CreateLayerOptions("GlobalViewShed");//创建分析图层配置,给配置起个名称,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_globalviewshed");//数据源类型,代表全景视域分析
    tlo->AddConfig("DrawLineColor", "1,1,0,1");//线颜色(RGBA)
    tlo->AddConfig("LineWidth", "1.0" );//线宽(0-10),默认2   
    tlo->AddConfig("IsSphere", "false");//是否是视域球。默认false
    tlo->AddConfig("VAngle", "90");//垂直方向夹角。该值在IsSphere=false时起效,且角度不能超过120度
    tlo->AddConfig("HAngle", "120");//水平方向夹角。该值在IsSphere=false时起效,且角度不能超过120度    

    globalViewShed = map ->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数必须为AnalysisLayer
    map ->AddLayer(globalViewShed);//添加分析图层
}

//更新全景视域
//当做更新操作时,只需把需要更新的参数构建更新配置参数就可以,不需要更新的参数不需要在设置
void CglobalviewshedDlg::OnBnClickedUpdateglobalviewshed()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map ->CreateLayerOptions("GlobalViewShed");//创建更新的配置参数
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_globalviewshed");//数据源类型,代表全景视域分析

    tlo->AddConfig("IsLoad", "true");
    tlo->AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
    //更新视域分析点坐标,当更新点时必须设置IsLoad配置项为true
    tlo->AddConfig("IsSphere", "true");//是否是视域球。默认false
    tlo->AddConfig("VAngle", "90");//垂直方向夹角。该值在IsSphere=false时起效,且角度不能超过120度
    tlo->AddConfig("HAngle", "120");//水平方向夹角。该值在IsSphere=false时起效,且角度不能超过120度  
    tlo->AddConfig("EyePos", "120.215623935214,30.211935234442,91.705125554465");//起始点
    tlo->AddConfig("ArmPos", "120.211938237292,30.210849069547,-0.000396835618");//目标点
    //更新视域分析点坐标,当更新点时必须设置IsLoad配置项为true
    globalViewShed->UpdateLayerOptions(tlo);//更新全景视域分析
}

//获取全景视域结果
void CglobalviewshedDlg::OnBnClickedGetglobalviewshed()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = globalViewShed->GetLayerResult();//获取图层结果
    //判断当前图层数据源类型
    std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获得数据源类型
    if(DataSourceTypeName == "as_globalviewshed")
    {
        CString EyePoint = opt->GetConfigValueByKey("EyePoint"); //获取起始点坐标
        CString AimPoint = opt->GetConfigValueByKey("AimPoint"); //获取结束点坐标
        CString IsSphere = opt->GetConfigValueByKey("IsSphere"); //是否是视域球
        CString LineWidth = opt->GetConfigValueByKey("LineWidth"); //线宽
        CString DrawLineColor = opt->GetConfigValueByKey("DrawLineColor"); //线颜色
        MessageBox(L"EyePoint:" + EyePoint + L"; AimPoint:" + AimPoint + L"; IsSphere:" + IsSphere);
    }
}

//删除全景视域
void CglobalviewshedDlg::OnBnClickedRemoveglobalviewshed()
{
    map ->RemoveLayer(globalViewShed);//删除全景视域分析
    globalViewShed = NULL;
}

//显隐全景视域
void CglobalviewshedDlg::OnBnClickedVisibleglobalviewshed()
{
    if (globalVisble) {
        globalVisble = false;
    } else {
        globalVisble = true;
    }
    globalViewShed->SetVisible(globalVisble);//显隐全景视域分析
}

C#调用

ILayerObject globalViewShed;
//创建全景视域分析
private void CreateGlobalViewShed_Click(object sender, EventArgs e)
{
    ILayerOptions mlo3 = map.CreateLayerOptions("GlobalViewShed");//创建分析图层配置,给配置起个名称,任意名称
    mlo3.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    mlo3.AddConfig("DataSourceTypeName", "as_globalviewshed");//数据源类型,代表全景视域分析
    mlo3.AddConfig("DrawLineColor", "1,1,0,1");//线颜色(RGBA)
    mlo3.AddConfig("LineWidth", "1.0" );//线宽。取值范围:1-10像素,默认2   
    mlo3.AddConfig("IsSphere", "false");//是否是视域球。默认false
    mlo3.AddConfig("VAngle", "90");//垂直方向夹角。该值在IsSphere=false时起效,且角度不能超过120度
    mlo3.AddConfig("HAngle", "120");//水平方向夹角。该值在IsSphere=false时起效,且角度不能超过120度  

    globalViewShed = map.CreateLayer("AnalysisLayer", mlo3);//创建分析图层,第一项参数必须为AnalysisLayer
    map.AddLayer(globalViewShed);//添加分析图层

}

//更新全景视域分析
//当做更新操作时,只需把需要更新的参数构建更新配置参数就可以,不需要更新的参数不需要在设置
private void UpdateGlobalViewShed_Click(object sender, EventArgs e)
{
    ILayerOptions mlo3 = map.CreateLayerOptions("");//创建更新的配置参数
    mlo3.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    mlo3.AddConfig("DataSourceTypeName", "as_globalviewshed");//数据源类型,代表全景视域分析

    mlo3.AddConfig("IsLoad", "true");
    mlo3.AddConfig("IsWorld", "false");//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
    ///更新视域分析点坐标,当更新点时必须设置IsLoad配置项为true
    mlo3.AddConfig("IsSphere", "true");//是否是视域球。默认false
    mlo3.AddConfig("VAngle", "90");//垂直方向夹角。该值在IsSphere=false时起效,且角度不能超过120度
    mlo3.AddConfig("HAngle", "120");//水平方向夹角。该值在IsSphere=false时起效,且角度不能超过120度  
    mlo3.AddConfig("EyePos", "120.215623935214,30.211935234442,91.705125554465");//起始点
    mlo3.AddConfig("ArmPos", "120.211938237292,30.210849069547,-0.000396835618");//目标点
    ///更新视域分析点坐标,当更新点时必须设置IsLoad配置项为true
    globalViewShed.UpdateLayerOptions(mlo3);//更新全景视域分析
}

//获取全景视域分析结果
private void GetGlobalViewShed_Click(object sender, EventArgs e)
{
    ILayerOptions opt = globalViewShed.GetLayerResult();//获取图层结果
    //判断当前图层数据源类型
    if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_globalviewshed")
    {
        string EyePoint = opt.GetConfigValueByKey("EyePoint"); //获取起始点坐标
        string AimPoint = opt.GetConfigValueByKey("AimPoint"); //获取结束点坐标
        string IsSphere = opt.GetConfigValueByKey("IsSphere"); //是否是视域球
        string LineWidth = opt.GetConfigValueByKey("LineWidth"); //线宽
        string DrawLineColor = opt.GetConfigValueByKey("DrawLineColor"); //线颜色
        MessageBox.Show("EyePoint:" + EyePoint + "; AimPoint:" + AimPoint + "; IsSphere:" + IsSphere);
    }
}

//删除全景视域分析
private void RemoveGlobalViewShed_Click(object sender, EventArgs e)
{
    map.RemoveLayer(globalViewShed);//删除全景视域分析
    globalViewShed = null;
}

bool globalVisble = true;
private void VisibleGlobalViewShed_Click(object sender, EventArgs e)
{
    if (globalVisble)
    {
        globalVisble = false;
    }
    else
    {
        globalVisble = true;
    }
    globalViewShed.SetVisible(globalVisble);//显隐全景视域分析
}

results matching ""

    No results matching ""