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);//显隐全景视域分析
}