2.2.2 多视域分析


多视域分析

多视域分析是指在一个图层里面添加多个可绘制的视域分析体。

相比较单视域分析来说,多视域分析提供普通模式、固定视距模式和固定视距及转角模式三种使用方式。并且支持绘制结束后重新激活绘制。

多视域分析主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。

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

下图是多视域分析效果:

  

参数说明

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

配置项 配置说明 值类型 备注
LayerOptionsName 图层配置对象名称 string 分析图层需配置为:AnalysisLayerOptions
DataSourceTypeName 数据源类型 string as_multviewshed代表多视域分析
CameraCountMax 分析最大个数 int 当超过该数量时,只绘制分析体。最大个数只支持最后创建的视域分析
CameraNames 唯一标志ID string列表 各个分析体id,用;分隔
RemoveTargets 更新目标ID string列表 各个分析体id,用;分隔
VAngle 垂直方向张角 float列表 角度在0-179之间(度),用;分隔
HAngle 水平方向张角 float列表 角度在0-179之间(度),用;分隔
DefaultVAngle 默认垂直夹角 float 角度在0-179之间(度),该值在未设置垂直夹角的分析体上使用
DefaultHAngle 默认水平夹角 float 角度在0-179之间(度),该值在未设置垂直夹角的分析体上使用
HRotateAngles 水平转角 float列表 观察点和目标点连线与正北形成的夹角。角度在0-179之间(度),正北为0,顺时针360,用;分隔
VRotateAngles 垂直俯仰角 float列表 观察点和目标点连续与水平面形成的夹角。角度在-90-90之间(度),正下方-90,水平0,正上方90,用;分隔
DefaultVRotateAngle 默认水平夹角 float 该值在未设置垂直夹角的分析体上使用
DefaultHRotateAngle 默认垂直俯仰角 float 该值在未设置垂直夹角的分析体上使用
FixedDistances 固定视距 float列表 表示观察点到目标点的距离,多个用;分隔
DefaultFixedDistance 默认固定视距 float 表示观察点到目标点的距离,该值在未设置垂直夹角的分析体上使用
IsLoad 是否初始化加载点 bool 默认为false
IsActive 是否激活分析 bool 默认为true,表示是否可操作场景进行绘制
Points 关键点坐标 x,y,z列表 需传入经度,纬度,高程坐标;多个中间用;分隔,并以;结尾
ActivateDraw 绘制激活状态 bool 默认为false,表示是否重新激活绘制
IsWorld 是否世界坐标点 bool 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true

获取结果说明

多视域分析有两种类型的结果可以获取,一种是获取当前操作的视域体结果,另一种是获取当前图层所有的视域体结果。获取结果可以通过图层对象的GetLayerResult()方法获取结果。可以获取的结果值对象参数如下表所示:

  • 获取当前操作的视域体结果
配置项 配置说明 值类型 备注
DataSourceTypeName 数据源类型 string as_multviewshed代表多视域分析
CameraName 唯一标志ID string 当前视域体的id
EyePoint 起始点坐标 x,y,z 起始点的经度,纬度,高程坐标
AimPoint 目标点坐标 x,y,z 目标点的经度,纬度,高程坐标
VAngle 垂直方向张角 float 角度在0-179之间(度)
HAngle 水平方向张角 float 角度在0-179之间(度)
FixedDistance 固定视距 float 表示观察点到目标点的距离
HRotateAngle 水平转角 float 观察点和目标点连线与正北形成的夹角。 角度在0-179之间(度), 正北为0,顺时针360
VRotateAngle 垂直俯仰角 float 观察点和目标点连续与水平面形成的夹角。 角度在-90-90之间(度),正下方-90,水平0,正上方90
FrustumPos 视景体坐标 x,y,z列表 视域分析形成的棱锥5个顶点的经度,纬度,高程坐标
  • 获取所有视域体结果
配置项 配置说明 值类型 备注
DataSourceTypeName 数据源类型 string as_multviewshed代表多视域分析
CameraNames 唯一标志ID string 所有视域体id列表,用;分隔
EyePoints 起始点坐标 x,y,z 起始点的经度,纬度,高程坐标
AimPoints 目标点坐标 x,y,z 目标点的经度,纬度,高程坐标
VAngles 垂直方向张角 float 角度在0-179之间(度)
HAngles 水平方向张角 float 角度在0-179之间(度)
FixedDistances 固定视距 float列表 表示观察点到目标点的距离,多个用;分隔
HRotateAngles 水平转角 float列表 观察点和目标点连线与正北形成的夹角。 角度在0-179之间(度), 正北为0,顺时针360,用;分隔
VRotateAngles 垂直俯仰角 float列表 观察点和目标点连续与水平面形成的夹角。 角度在-90-90之间(度),正下方-90,水平0,正上方90,用;分隔
FrustumPoss 视景体坐标 x,y,z列表 视域分析形成的棱锥5个顶点的经度,纬度,高程坐标

代码调用示例

Javascript调用

var multiViewshed = null; 
var FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//多视域分析开启    
function loadMultiView(){
    var selOption = document.getElementById("selOption");
    switch(selOption.selectedIndex){
    case 0://"普通模式":
        commonStart();break;
    case 1://"固定视距模式":
        fixedStart();break;
    case 2://"固定视距转角模式":
        fixedRangeAngle();break;
    default:
        alert("no item selected!");
    }
}
//多视域分析移除    
function removeMultiView(){
    var selOption = document.getElementById("selOption");
    switch(selOption.selectedIndex){
    case 0://"普通模式":
        commonClose();break;
    case 1://"固定视距模式":
        fixedClose();break;
    case 2://"固定视距转角模式":
        fixedRangeRemove();break;
    default:
        alert("no item selected!!!");
    }
}
//普通多视域分析创建 
function commonStart(){
    if( null != multiViewshed ){//这里会将上次创建的分析图层移除,需要多个类型视域分析,需自行添加
        map.RemoveLayer(multiViewshed);//移除图层
        multiViewshed = null;
    }
    var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
    mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
    mlo.AddConfig("CameraCountMax", "3");//支持视域分析最大个数,最大个数只支持最后创建的视域分析
    mlo.AddConfig("CameraNames", "camera1;camera2;camera3;");//唯一标志ID
    mlo.AddConfig("HAngles", "30;40;50;");//视域分析水平夹角 
    mlo.AddConfig("VAngles", "30;40;50;");//视域分析垂直夹角 
    mlo.AddConfig("DefaultVAngle", "66");//默认垂直夹角,未设置垂直夹角时使用 
    mlo.AddConfig("DefaultHAngle", "66");//默认水平夹角,未设置水平交角时使用 
    multiViewshed = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
    map.AddLayer(multiViewshed);//添加图层
}
//普通多视域分析创建移除
function commonClose(){
    if(multiViewshed){
        map.RemoveLayer(multiViewshed);//移除图层
        multiViewshed = null;
    }else{
        alert("分析图层不存在,请勿重复删除!");
    }
}
//固定视距、水平,垂直方向夹角多视域分析加载
function fixedStart(){
    if(null != multiViewshed){//这里会将上次创建的分析图层移除,需要多个类型视域分析,需自行添加
        map.RemoveLayer(multiViewshed);//移除图层
        multiViewshed = null;
    }
    var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
    mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
    mlo.AddConfig("CameraCountMax","3");//支持视域分析最大个数 
    mlo.AddConfig("CameraNames","camera1;camera2;camera3;");//唯一标志ID
    mlo.AddConfig("HAngles","30;40;50;");//视域分析水平夹角 
    mlo.AddConfig("VAngles","30;40;50;");//视域分析垂直夹角 
    mlo.AddConfig("FixedDistances","50;100;150;");//固定视距
    mlo.AddConfig("DefaultVAngle","66");//默认垂直夹角,未设置垂直夹角时使用 
    mlo.AddConfig("DefaultHAngle","66");//默认水平夹角,未设置水平交角时使用 
    mlo.AddConfig("DefaultFixedDistance","2000");//默认固定视距
    multiViewshed = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
    map.AddLayer(multiViewshed);//添加图层
}
//固定视距、水平,垂直方向夹角多视域分析移除
function fixedClose(){
   if(null != multiViewshed){
           map.RemoveLayer(multiViewshed);//移除图层
           multiViewshed = null;
       }else{
        alert("分析图层不存在,请勿重复删除!");
    }
}
//固定视距,水平转角,垂直转角多视域分析加载
function fixedRangeAngle(){
    if(null != multiViewshed){
        map.RemoveLayer(multiViewshed);//这里会将上次创建的分析图层移除,需要多个类型视域分析,需自行添加
        multiViewshed = null;
    }
    var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
    mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析

    mlo.AddConfig("CameraCountMax","3");//支持视域分析最大个数 
    mlo.AddConfig("CameraNames","camera1;camera2;camera3;");//唯一标志ID 

    mlo.AddConfig("HAngles","30;40;50;");//视域分析水平夹角 
    mlo.AddConfig("VAngles","30;40;50;");//视域分析垂直夹角 
    mlo.AddConfig("HRotateAngles","35;180;270;");//水平转角正北为0度,顺时针360
    mlo.AddConfig("VRotateAngles","-30;0;30;");//正下方-90水平0,正上方90
    mlo.AddConfig("FixedDistances","50;70;30;");//固定视距 

    mlo.AddConfig("DefaultVAngle","66");//默认垂直夹角,未设置垂直夹角时使用 
    mlo.AddConfig("DefaultHAngle","66");//默认水平夹角,未设置水平交角时使用 
    mlo.AddConfig("DefaultFixedDistance","50");//默认固定视距 
    mlo.AddConfig("DefaultVRotateAngle","90");//默认水平转角
    mlo.AddConfig("DefaultHRotateAngle","90");//默认垂直转角
    //mlo.AddConfig("Points","119.205240964,29.9611976754,-0.0730524882674;0,0,0;"+
    //                        "119.323898778,30.0471061421,-0.239164832048;0,0,0;"+
    //                        "119.069924078,30.0198931866,-0.258735077456;0,0,0;");//参数为"起始点;目标点" ex:"119.205240964,29.9611976754,-0.0730524882674;0,0,0;"
    //mlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
    //mlo.AddConfig("IsLoad", "true");
    multiViewshed = map.CreateLayer("AnalysisLayer", mlo);
    map.AddLayer(multiViewshed);
}
//固定视距,水平转角,垂直转角多视域分析移除
function fixedRangeRemove(){
    if(null != multiViewshed){
        map.RemoveLayer(multiViewshed);//移除图层
        multiViewshed = null;
    }else{
        alert("分析图层不存在,请勿重复删除!");
    }
}
//激活绘制
function activeDraw(){
    if(null != multiViewshed){
        var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        mlo.AddConfig("ActivateDraw","true");//绘制激活状态    
        mlo.AddConfig("IsActive", "true");//响应器激活状态
        multiViewshed.UpdateLayerOptions(mlo); //更新分析
    }else{
        alert("分析图层未创建!");
    }
}
//使绘制失效
function deactiveDraw(){
   if(null != multiViewshed){
        var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        mlo.AddConfig("IsActive", "false");//响应器激活状态
        multiViewshed.UpdateLayerOptions(mlo); //更新分析
       }else{
        alert("分析图层未创建!");
       }
}
//更新目标
function updateTargets() {
   if( null != multiViewshed ){
        var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        mlo.AddConfig("UpdateTargets","camera2;camera3;");//需要更新目标标志
        mlo.AddConfig("HAngles","20;20;25;");//视频的水平张角 
        mlo.AddConfig("VAngles","20;20;");//视频的水平张角
        mlo.AddConfig("IsActive", "true");//响应器激活状态
        multiViewshed.UpdateLayerOptions(mlo); 
       }else{
        alert("分析图层未创建!");
       }
}
//移除目标
function removeTargets(){
  if(null != multiViewshed){
        var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        mlo.AddConfig("RemoveTargets","camera2;camera3;");//需要更新目标标志        
        mlo.AddConfig("IsActive", "false");//响应器激活状态                               
        multiViewshed.UpdateLayerOptions(mlo); 
      }else{
        alert("分析图层未创建!");
       }
}

//设置显隐
function setVisible(){
    if(null != multiViewshed){
        multiViewshed.SetVisible(1^multiViewshed.GetVisible());//图层显隐
    }else{
        alert("分析图层未创建!");
       }
}
//输出当前操作的视域信息
function getResult(){
    if(null != multiViewshed){
        alert(
        "EyePoint:"+multiViewshed.GetLayerResult().GetConfigValueByKey("EyePoint")+"\n"+//视点
        "AimPoint:"+multiViewshed.GetLayerResult().GetConfigValueByKey("AimPoint")+"\n"+//目标点
        "VAngle:"+multiViewshed.GetLayerResult().GetConfigValueByKey("VAngle")+"\n"+//垂直角度
        "HAngle:"+multiViewshed.GetLayerResult().GetConfigValueByKey("HAngle")+"\n"+//水平角度 
        "FixedDistance:"+multiViewshed.GetLayerResult().GetConfigValueByKey("FixedDistance")+"\n"+//固定视距
        "VRotatAngle:"+multiViewshed.GetLayerResult().GetConfigValueByKey("VRotatAngle")+"\n"+//垂直转角
        "HRotatAngle:"+multiViewshed.GetLayerResult().GetConfigValueByKey("HRotatAngle")+"\n"//水平转角 
        );
    }else{
        alert("分析图层未创建!");
    }
}
//输出所有视域信息
function getResultAll()
{
    if(null != multiViewshed){
        alert(
        "EyePoints:"+multiViewshed.GetLayerResult().GetConfigValueByKey("EyePoints")+"\n"+//视点
        "AimPoints:"+multiViewshed.GetLayerResult().GetConfigValueByKey("AimPoints")+"\n"+//目标点
        "VAngles:"+multiViewshed.GetLayerResult().GetConfigValueByKey("VAngles")+"\n"+//垂直角度
        "HAngles:"+multiViewshed.GetLayerResult().GetConfigValueByKey("HAngles")+"\n"+//水平角度 
        "VRotatAngles:"+multiViewshed.GetLayerResult().GetConfigValueByKey("VRotatAngles")+"\n"+//垂直转角
        "HRotatAngles:"+multiViewshed.GetLayerResult().GetConfigValueByKey("HRotatAngles")+"\n"+//水平转角 
        "FixedDistances:"+multiViewshed.GetLayerResult().GetConfigValueByKey("FixedDistances")+"\n"+//固定视距
        "CameraNames:"+multiViewshed.GetLayerResult().GetConfigValueByKey("CameraNames")+"\n"+//视域分析ID
        "FrustumPoss:"+multiViewshed.GetLayerResult().GetConfigValueByKey("FrustumPoss")+"\n"+//视域分析体点位
        "Count:"+multiViewshed.GetLayerResult().GetConfigValueByKey("Count")+"\n"//视域分析个数
        );
    }else{
        alert("分析图层未创建!");
    }
}

C++调用

CComboBox m_combo;//下拉框对象
std::string value;//下拉框内容
BaseObjectCOMLib::ILayerObjectPtr multiViewshed;//多视域分析对象
//普通多视域分析
void Cf1c1MultviewshedDlg::commonStart()
{
    if( NULL != multiViewshed ){//这里会将上次创建的分析图层移除,需要多个类型视域分析,需自行添加
        map->RemoveLayer(multiViewshed);//移除图层
        multiViewshed = NULL;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
    tlo->AddConfig("CameraCountMax", "3");//支持视域分析最大个数,最大个数只支持最后创建的视域分析
    tlo->AddConfig("CameraNames", "camera1;camera2;camera3;");//唯一标志ID
    tlo->AddConfig("HAngles", "30;40;50;");//视域分析水平夹角 
    tlo->AddConfig("VAngles", "30;40;50;");//视域分析垂直夹角 
    tlo->AddConfig("DefaultVAngle", "66");//默认垂直夹角,未设置垂直夹角时使用 
    tlo->AddConfig("DefaultHAngle", "66");//默认水平夹角,未设置水平交角时使用 
    multiViewshed = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
    map->AddLayer(multiViewshed);//添加图层
}

//固定视距、水平,垂直方向夹角多视域分析加载
void Cf1c1MultviewshedDlg::fixedStart()
{
    if(NULL != multiViewshed){//这里会将上次创建的分析图层移除,需要多个类型视域分析,需自行添加
        map->RemoveLayer(multiViewshed);//移除图层
        multiViewshed = NULL;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
    tlo->AddConfig("CameraCountMax","3");//支持视域分析最大个数 
    tlo->AddConfig("CameraNames","camera1;camera2;camera3;");//唯一标志ID
    tlo->AddConfig("HAngles","30;40;50;");//视域分析水平夹角 
    tlo->AddConfig("VAngles","30;40;50;");//视域分析垂直夹角 
    tlo->AddConfig("FixedDistances","50;100;150;");//固定视距
    tlo->AddConfig("DefaultVAngle","66");//默认垂直夹角,未设置垂直夹角时使用 
    tlo->AddConfig("DefaultHAngle","66");//默认水平夹角,未设置水平交角时使用 
    tlo->AddConfig("DefaultFixedDistance","2000");//默认固定视距
    multiViewshed = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
    map->AddLayer(multiViewshed);//添加图层
}

//固定视距,角度多视域分析
void Cf1c1MultviewshedDlg::fixedRangeAngle()
{
    if(NULL != multiViewshed){
        map->RemoveLayer(multiViewshed);//这里会将上次创建的分析图层移除,需要多个类型视域分析,需自行添加
        multiViewshed = NULL;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
    tlo->AddConfig("CameraCountMax","3");//支持视域分析最大个数 
    tlo->AddConfig("CameraNames","camera1;camera2;camera3;");//唯一标志ID 
    tlo->AddConfig("HAngles","30;40;50;");//视域分析水平夹角 
    tlo->AddConfig("VAngles","30;40;50;");//视域分析垂直夹角 
    tlo->AddConfig("HRotateAngles","35;180;270;");//水平转角正北为0度,顺时针360
    tlo->AddConfig("VRotateAngles","-30;0;30;");//正下方-90水平0,正上方90
    tlo->AddConfig("FixedDistances","50;70;30;");//固定视距 
    tlo->AddConfig("DefaultVAngle","66");//默认垂直夹角,未设置垂直夹角时使用 
    tlo->AddConfig("DefaultHAngle","66");//默认水平夹角,未设置水平交角时使用 
    tlo->AddConfig("DefaultFixedDistance","50");//默认固定视距 
    tlo->AddConfig("DefaultVRotateAngle","90");//默认水平转角
    tlo->AddConfig("DefaultHRotateAngle","90");//默认垂直转角
    //tlo->AddConfig("Points","119.205240964,29.9611976754,-0.0730524882674;0,0,0;"+
    //                        "119.323898778,30.0471061421,-0.239164832048;0,0,0;"+
    //                        "119.069924078,30.0198931866,-0.258735077456;0,0,0;");//参数为"起始点;目标点" ex:"119.205240964,29.9611976754,-0.0730524882674;0,0,0;"
    //tlo->AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
    //tlo->AddConfig("IsLoad", "true");
    multiViewshed = map->CreateLayer("AnalysisLayer", tlo);
    map->AddLayer(multiViewshed);
}

//获取多视域分析类型
void Cf1c1MultviewshedDlg::OnCbnSelchangeCombo1()
{
    CString m_paramname;
    m_combo.GetLBText(m_combo.GetCurSel(),m_paramname);
    value = CT2A(m_paramname.GetBuffer());
}

//获取下拉框内容
void Cf1c1MultviewshedDlg::OnCbnSetfocusCombo1()
{
    m_combo.ResetContent();//清空下拉框
    m_combo.AddString(L"普通模式");
    m_combo.AddString(L"固定视距模式");
    m_combo.AddString(L"固定视距转角模式");
    m_combo.SetCurSel(-1);
}

//加载多视域分析
void Cf1c1MultviewshedDlg::OnBnClickedloadmultiview()
{
    if(value == "普通模式")
    {
        commonStart();
    }
    else if(value == "固定视距模式")
    {
        fixedStart();
    }
    else if(value == "固定视距转角模式")
    {
        fixedRangeAngle();
    }
}

//移除多视域分析
void Cf1c1MultviewshedDlg::OnBnClickedremovemultiview()
{
    if(NULL != multiViewshed){
        map->RemoveLayer(multiViewshed);//这里会将上次创建的分析图层移除,需要多个类型视域分析,需自行添加
        multiViewshed = NULL;
    }
}

//设置显隐
void Cf1c1MultviewshedDlg::OnBnClickedsetvisible()
{
    if(NULL != multiViewshed){
        multiViewshed->SetVisible(1^multiViewshed->GetVisible());//图层显隐
    }
}

//激活多视域绘制
void Cf1c1MultviewshedDlg::OnBnClickedactivedraw()
{
    if(NULL != multiViewshed){
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        tlo->AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        tlo->AddConfig("ActivateDraw","true");//绘制激活状态    
        tlo->AddConfig("IsActive", "true");//响应器激活状态
        multiViewshed->UpdateLayerOptions(tlo); //更新分析
    }
}

//禁用多视域绘制
void Cf1c1MultviewshedDlg::OnBnClickeddeactivedraw()
{
    if(NULL != multiViewshed){
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        tlo->AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        tlo->AddConfig("IsActive", "false");//响应器激活状态
        multiViewshed->UpdateLayerOptions(tlo); //更新分析
    }
}

//更新多个目标
void Cf1c1MultviewshedDlg::OnBnClickedupdatetargets()
{
    if( NULL != multiViewshed ){
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        tlo->AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        tlo->AddConfig("UpdateTargets","camera2;camera3;");//需要更新目标标志
        tlo->AddConfig("HAngles","20;20;25;");//视频的水平张角 
        tlo->AddConfig("VAngles","20;20;");//视频的水平张角
        tlo->AddConfig("IsActive", "true");//响应器激活状态
        multiViewshed->UpdateLayerOptions(tlo); 
    }
}

//移除目标
void Cf1c1MultviewshedDlg::OnBnClickedremovetargets()
{
    if(NULL != multiViewshed){
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        tlo->AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        tlo->AddConfig("RemoveTargets","camera2;camera3;");//需要更新目标标志        
        tlo->AddConfig("IsActive", "false");//响应器激活状态                               
        multiViewshed->UpdateLayerOptions(tlo); 
    }
}

//获取结果
void Cf1c1MultviewshedDlg::OnBnClickedgetresult()
{
    if(!multiViewshed)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = multiViewshed->GetLayerResult();
    std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获取数据源类型
    if(DataSourceTypeName == "as_multviewshed")
    {
        CString EyePoint = opt->GetConfigValueByKey("EyePoint");//获取起始点坐标
        CString AimPoint = opt->GetConfigValueByKey("AimPoint");//获取目标点
        CString VAngle = opt->GetConfigValueByKey("VAngle");//获取垂直角度
        CString HAngle = opt->GetConfigValueByKey("HAngle");//获取水平角度
        CString FixedDistance = opt->GetConfigValueByKey("FixedDistance");//获取固定视距
        CString VRotatAngle = opt->GetConfigValueByKey("VRotatAngle");//获取垂直转角
        CString HRotatAngle = opt->GetConfigValueByKey("HRotatAngle");//获取水平转角 
        MessageBox(L"EyePoint:"+ EyePoint+ L"\r\nAimPoint:"+AimPoint+L"\r\nVAngle: "+VAngle+L"\r\nHAngle: "+HAngle+L"\r\nFixedDistance: "+FixedDistance+L"\r\nVRotatAngle: "+VRotatAngle+L"\r\nHRotatAngle: "+HRotatAngle);
    }
}

C#调用

ILayerObject multiViewshed;//多视域分析对象
//普通模式
private void commonStart()
{
    if (null != multiViewshed)
    {//这里会将上次创建的分析图层移除,需要多个类型视域分析,需自行添加
        map.RemoveLayer(multiViewshed);//移除图层
        multiViewshed = null;
    }
    ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
    mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
    mlo.AddConfig("CameraCountMax", "3");//支持视域分析最大个数,最大个数只支持最后创建的视域分析
    mlo.AddConfig("CameraNames", "camera1;camera2;camera3;");//唯一标志ID
    mlo.AddConfig("HAngles", "30;40;50;");//视域分析水平夹角 
    mlo.AddConfig("VAngles", "30;40;50;");//视域分析垂直夹角 
    mlo.AddConfig("DefaultVAngle", "66");//默认垂直夹角,未设置垂直夹角时使用 
    mlo.AddConfig("DefaultHAngle", "66");//默认水平夹角,未设置水平交角时使用 
    multiViewshed = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
    map.AddLayer(multiViewshed);//添加图层
}

//固定视距模式
private void fixedStart()
{
    if (null != multiViewshed)
    {//这里会将上次创建的分析图层移除,需要多个类型视域分析,需自行添加
        map.RemoveLayer(multiViewshed);//移除图层
        multiViewshed = null;
    }
    ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
    mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
    mlo.AddConfig("CameraCountMax", "3");//支持视域分析最大个数 ,最大个数只支持最后创建的视域分析
    mlo.AddConfig("CameraNames", "camera1;camera2;camera3;");//唯一标志ID
    mlo.AddConfig("HAngles", "30;40;50;");//视域分析水平夹角 
    mlo.AddConfig("VAngles", "30;40;50;");//视域分析垂直夹角 
    mlo.AddConfig("FixedDistances", "50;100;150;");//固定视距
    mlo.AddConfig("DefaultVAngle", "66");//默认垂直夹角,未设置垂直夹角时使用 
    mlo.AddConfig("DefaultHAngle", "66");//默认水平夹角,未设置水平交角时使用 
    mlo.AddConfig("DefaultFixedDistance", "2000");//默认固定视距
    multiViewshed = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
    map.AddLayer(multiViewshed);//添加图层
}

//固定视距转角模式
void fixedRangeAngle()
{
    if (null != multiViewshed)
    {
        map.RemoveLayer(multiViewshed);//这里会将上次创建的分析图层移除,需要多个类型视域分析,需自行添加
        multiViewshed = null;
    }
    ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
    mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析

    mlo.AddConfig("CameraCountMax", "3");//支持视域分析最大个数 ,最大个数只支持最后创建的视域分析
    mlo.AddConfig("CameraNames", "camera1;camera2;camera3;");//唯一标志ID 

    mlo.AddConfig("HAngles", "30;40;50;");//视域分析水平夹角 
    mlo.AddConfig("VAngles", "30;40;50;");//视域分析垂直夹角 
    mlo.AddConfig("HRotateAngles", "35;180;270;");//水平转角正北为0度,顺时针360
    mlo.AddConfig("VRotateAngles", "-30;0;30;");//正下方-90水平0,正上方90
    mlo.AddConfig("FixedDistances", "50;70;30;");//固定视距 

    mlo.AddConfig("DefaultVAngle", "66");//默认垂直夹角,未设置垂直夹角时使用 
    mlo.AddConfig("DefaultHAngle", "66");//默认水平夹角,未设置水平交角时使用 
    mlo.AddConfig("DefaultFixedDistance", "50");//默认固定视距 
    mlo.AddConfig("DefaultVRotateAngle", "90");//默认水平转角
    mlo.AddConfig("DefaultHRotateAngle", "90");//默认垂直转角
    //mlo.AddConfig("Points","119.205240964,29.9611976754,-0.0730524882674;0,0,0;"+
    //                        "119.323898778,30.0471061421,-0.239164832048;0,0,0;"+
    //                        "119.069924078,30.0198931866,-0.258735077456;0,0,0;");//参数为"起始点;目标点" ex:"119.205240964,29.9611976754,-0.0730524882674;0,0,0;"
    //mlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
    //mlo.AddConfig("IsLoad", "true");
    multiViewshed = map.CreateLayer("AnalysisLayer", mlo);
    map.AddLayer(multiViewshed);
}

private void loadMultiView_Click(object sender, EventArgs e)
{
    Console.WriteLine("Text:" + comboBox1.SelectedItem.ToString());
    switch (comboBox1.SelectedItem.ToString())
    {
        case "普通模式":
            commonStart();
            break;
        case "固定视距模式":
            fixedStart();
            break;
        case "固定视距转角模式":
            fixedRangeAngle();
            break;
    }
}

//多视域分析移除
private void removeMultiView_Click(object sender, EventArgs e)
{
    if (multiViewshed!=null)
    {
        map.RemoveLayer(multiViewshed);//移除图层
        multiViewshed = null;
    }
}
//设置显隐
private void setVisible_Click(object sender, EventArgs e)
{
    if (null != multiViewshed)
    {
        multiViewshed.SetVisible( multiViewshed.GetVisible());//图层显隐
    }
}
//激活多视域绘制
private void activeDraw_Click(object sender, EventArgs e)
{
    if (null != multiViewshed)
    {
        ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        mlo.AddConfig("ActivateDraw", "true");//绘制激活状态    
        mlo.AddConfig("IsActive", "true");//响应器激活状态
        multiViewshed.UpdateLayerOptions(mlo); //更新分析
    }
}
//使绘制失效
private void deactiveDraw_Click(object sender, EventArgs e)
{
    if (null != multiViewshed)
    {
        ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析            
        mlo.AddConfig("IsActive", "false");//响应器激活状态
        multiViewshed.UpdateLayerOptions(mlo); //更新分析
    }
}
//更新目标
private void updateTargets_Click(object sender, EventArgs e)
{
    if (null != multiViewshed)
    {
        ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        mlo.AddConfig("UpdateTargets", "camera2;camera3;");//需要更新目标标志
        mlo.AddConfig("HAngles", "20;20;25;");//视频的水平张角 
        mlo.AddConfig("VAngles", "20;20;");//视频的水平张角
        mlo.AddConfig("IsActive", "true");//响应器激活状态
        multiViewshed.UpdateLayerOptions(mlo);
    }
}
//移除目标
private void removeTargets_Click(object sender, EventArgs e)
{
    if (null != multiViewshed)
    {
        var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_multviewshed");//数据源类型,as_multviewshed代表多视域分析
        mlo.AddConfig("RemoveTargets", "camera2;camera3;");//需要更新目标标志        
        mlo.AddConfig("IsActive", "false");//响应器激活状态                               
        multiViewshed.UpdateLayerOptions(mlo);
    }
    else
    {
        MessageBox.Show("分析图层未创建!");
    }
}
//输出当前操作的视域信息
private void getResult_Click(object sender, EventArgs e)
{
    if (null != multiViewshed)
    {
        MessageBox.Show(
        "EyePoint:" + multiViewshed.GetLayerResult().GetConfigValueByKey("EyePoint") + "\n" +//视点
        "AimPoint:" + multiViewshed.GetLayerResult().GetConfigValueByKey("AimPoint") + "\n" +//目标点
        "VAngle:" + multiViewshed.GetLayerResult().GetConfigValueByKey("VAngle") + "\n" +//垂直角度
        "HAngle:" + multiViewshed.GetLayerResult().GetConfigValueByKey("HAngle") + "\n" +//水平角度 
        "FixedDistance:" + multiViewshed.GetLayerResult().GetConfigValueByKey("FixedDistance") + "\n" +//固定视距
        "VRotatAngle:" + multiViewshed.GetLayerResult().GetConfigValueByKey("VRotatAngle") + "\n" +//垂直转角
        "HRotatAngle:" + multiViewshed.GetLayerResult().GetConfigValueByKey("HRotatAngle") + "\n"//水平转角 
        );
    }
    else
    {
        MessageBox.Show("分析图层未创建!");
    }
}

private void getResultAll_Click(object sender, EventArgs e)
{
    if (null != multiViewshed)
    {
        MessageBox.Show(
        "EyePoints:" + multiViewshed.GetLayerResult().GetConfigValueByKey("EyePoints") + "\n" +//视点
        "AimPoints:" + multiViewshed.GetLayerResult().GetConfigValueByKey("AimPoints") + "\n" +//目标点
        "VAngles:" + multiViewshed.GetLayerResult().GetConfigValueByKey("VAngles") + "\n" +//垂直角度
        "HAngles:" + multiViewshed.GetLayerResult().GetConfigValueByKey("HAngles") + "\n" +//水平角度 
        "VRotatAngles:" + multiViewshed.GetLayerResult().GetConfigValueByKey("VRotatAngles") + "\n" +//垂直转角
        "HRotatAngles:" + multiViewshed.GetLayerResult().GetConfigValueByKey("HRotatAngles") + "\n" +//水平转角 
        "FixedDistances:" + multiViewshed.GetLayerResult().GetConfigValueByKey("FixedDistances") + "\n" +//固定视距
        "CameraNames:" + multiViewshed.GetLayerResult().GetConfigValueByKey("CameraNames") + "\n" +//视域分析ID
        "FrustumPoss:" + multiViewshed.GetLayerResult().GetConfigValueByKey("FrustumPoss") + "\n" +//视域分析体点位
        "Count:" + multiViewshed.GetLayerResult().GetConfigValueByKey("Count") + "\n"//视域分析个数
        );
    }
    else
    {
        MessageBox.Show("分析图层未创建!");
    }
}

results matching ""

    No results matching ""