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("分析图层未创建!");
}
}