2.2.7 区域隐藏分析
区域隐藏分析
区域隐藏是指将选定区域内的模型隐藏的功能。区域隐藏支持同时隐藏多个区域。可以隐藏人工模型、倾斜摄影和矢量图层。
区域隐藏功能一般在城市规划设计中应用较多,它是用于模拟移除整栋建筑,然后重新进行观察的效果。
主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。
注意:可创建空的分析图层,也可创建预设的分析图层,如需创建预设分析图层,则IsLoad
,IsActive
,Points
, PointsIndex
四个参数需要同时配置
下图是区域隐藏分析效果:
参数说明
区域隐藏分析可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
LayerOptionsName | 图层配置对象名称 | string | 分析图层需配置为:AnalysisLayerOptions |
DataSourceTypeName | 数据源类型 | string | as_areahidding代表区域隐藏分析 |
PointColor | 点颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
PointSize | 点大小 | float | 点大小取值范围在1-10之间 |
AreaHiddingLineColor | 线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
AreaNum | 绘制区域个数 | int | 表示一个图层中能绘制的分析体数量。默认为0 |
ModelLayersID | 图层ID列表 | int列表 | -1则代表分析所有图层,若为多个图层,可使用xx,xx,xx 此种格式。图层Id可以通过图层对象的GetLayerId()方法获取 |
ModelLayersIDEx | 排除图层ID列表 | int列表 | 将该参数列出的图层排除后,分析剩余的图层。若为多个图层,可使用xx,xx,xx 此种格式。该参数可不设 |
RangeLineVisible | 区域线是否显示 | bool | 默认为false |
IsLoad | 是否初始化加载点 | bool | 默认为false |
IsActive | 是否激活分析 | bool | 默认为true,表示是否可操作场景进行绘制 |
Points | 坐标点集 | x,y,z列表 | 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾 |
PointsIndex | 每个区域对应点数量 | int列表 | 若AreaNum 数量大于1,则需要设定每个区域包含多少个关键点。中间用,分隔 |
IsWorld | 是否世界坐标点 | bool | 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true |
获取结果说明
区域隐藏分析可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
DataSourceTypeName | 数据源类型 | string | as_areahidding代表区域隐藏分析 |
ClickPoints | 点击点坐标 | x,y,z列表 | 鼠标点击场景形成的关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾 |
代码调用示例
Javascript调用
var areaHid = null;
var areaHiddingVisble = true;
//创建区域隐藏分析
function createAreaHidding(){
if(areaHid == null){
var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称
mlo.AddConfig("DataSourceTypeName", "as_areahidding");//数据源类型,as_areahidding代表区域隐藏
mlo.AddConfig("PointColor", "0,0,1,1.0");//点颜色
mlo.AddConfig("PointSize", "5");//点大小
mlo.AddConfig("AreaHiddingLineColor", "0.1,0.5,0.8,0.9");//线颜色
mlo.AddConfig("AreaNum","1");//隐藏区域个数
mlo.AddConfig("ModelLayersID", -1);//-1代表分析所有图层;"x,x,x"用,分隔代表分析指定id图层
mlo.AddConfig("ModelLayersIDEx", gModelLayer.GetLayerID());//区域隐藏区域排除图层ID
mlo.AddConfig("RangeLineVisible", "true");//区域线显隐
areaHid = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(areaHid);//添加图层
}else{
alert("请勿重复创建分析图层!");
}
}
//更新区域隐藏分析
function updateAreaHidding(){
if(areaHid){
var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称
mlo.AddConfig("DataSourceTypeName", "as_areahidding");//数据源类型,as_areahidding代表区域隐藏
mlo.AddConfig("PointColor", "1,0,1,1.0");//点颜色
mlo.AddConfig("PointSize", "7");//点大小
mlo.AddConfig("AreaHiddingLineColor", "1.0,0,0.0,1.0");//线颜色
mlo.AddConfig("RangeLineVisible", "true");//区域线显隐
mlo.AddConfig("AreaNum","1");//隐藏区域个数
mlo.AddConfig("IsActive", "false");//是否激活分析
mlo.AddConfig("IsLoad", "true");//是否加载点
mlo.AddConfig("PointsIndex", "4");//每个区域顶点数量,以逗号分隔
mlo.AddConfig("Points", "120.219878103,30.2119316923,14.9999696231;120.218935144,30.2115560063,14.9999635126;120.219325476,30.2109317621,14.9999712659;120.220282975,30.2113118317,14.9999686191;120.219902405,30.2119334228,14.9999700096;");//点列
areaHid.UpdateLayerOptions(mlo);//更新图层
}else{
alert("请创建分析图层再进行更新操作!");
}
}
//获取区域隐藏分析结果
function getAreaHidding(){
if(areaHid){
var opt = areaHid.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_areahidding"){
var ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取起始点坐标
alert("ClickPoints:" + ClickPoints);
}
}else{
alert("不存在分析图层,无法获取结果);
}
}
//删除区域隐藏分析
function removeAreaHidding(){
if(areaHid){
map.RemoveLayer(areaHid);//删除图层
areaHid = null;
}else{
alert("分析图层不存在,请勿重复删除!");
}
}
//显隐区域隐藏分析
function visibleAreaHidding(){
if(areaHid){
if(areaHiddingVisble){
areaHiddingVisble = false;
}else{
areaHiddingVisble = true;
}
areaHid.SetVisible(areaHiddingVisble);//图层显隐
}else{
alert("图层不存在,无法设置显隐!");
}
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr areaHid;//区域隐藏分析图层对象
//创建区域隐藏分析
void Cf1c7AreahiddingDlg::OnBnClickedcreateareahidding()
{
if(areaHid)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称
tlo->AddConfig("DataSourceTypeName", "as_areahidding");//数据源类型,as_areahidding代表区域隐藏
tlo->AddConfig("PointColor", "0,0,1,1.0");//点颜色
tlo->AddConfig("PointSize", "5");//点大小
tlo->AddConfig("AreaHiddingLineColor", "0.1,0.5,0.8,0.9");//线颜色
tlo->AddConfig("AreaNum","1");//隐藏区域个数
tlo->AddConfig("ModelLayersID", "-1");//分析操作图层Id列表,以逗号分隔,-1代表所有图层
tlo->AddConfig("ModelLayersIDEx", gModelLayer.GetLayerID());//区域隐藏区域排除图层ID
tlo->AddConfig("RangeLineVisible", "true");//区域线显隐
areaHid = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
map->AddLayer(areaHid);//添加图层
}
//更新区域隐藏分析
void Cf1c7AreahiddingDlg::OnBnClickedupdateareahidding()
{
if(!areaHid)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称
tlo->AddConfig("DataSourceTypeName", "as_areahidding");//数据源类型,as_areahidding代表区域隐藏
tlo->AddConfig("PointColor", "1,0,1,1.0");//点颜色
tlo->AddConfig("PointSize", "7");//点大小
tlo->AddConfig("AreaHiddingLineColor", "1.0,0,0.0,1.0");//线颜色
tlo->AddConfig("RangeLineVisible", "true");//区域线显隐
tlo->AddConfig("AreaNum","1");//隐藏区域个数
tlo->AddConfig("IsActive", "false");//是否激活分析
tlo->AddConfig("IsLoad", "true");//是否加载点
tlo->AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
tlo->AddConfig("PointsIndex", "4");//每个区域顶点数量,以逗号分隔
tlo->AddConfig("Points", "120.219878103,30.2119316923,14.9999696231;120.218935144,30.2115560063,14.9999635126;120.219325476,30.2109317621,14.9999712659;120.220282975,30.2113118317,14.9999686191;120.219902405,30.2119334228,14.9999700096;");//点列
areaHid->UpdateLayerOptions(tlo);//更新图层
}
//获取区域隐藏分析结果
void Cf1c7AreahiddingDlg::OnBnClickedgetareahidding()
{
if(!areaHid)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr opt = areaHid->GetLayerResult();
std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获取数据源类型
if(DataSourceTypeName == "as_areahidding")
{
CString ClickPoints = opt->GetConfigValueByKey("ClickPoints");//获取点击点坐标
MessageBox(L"ClickPoints:"+ ClickPoints);
}
}
//删除区域隐藏分析
void Cf1c7AreahiddingDlg::OnBnClickedremoveareahidding()
{
if(!areaHid)
{
return;
}
map->RemoveLayer(areaHid);//删除区域隐藏分析
areaHid = NULL;
}
//显隐区域隐藏分析
void Cf1c7AreahiddingDlg::OnBnClickedvisibleareahidding()
{
if(!areaHid)
{
return;
}
static bool areaHidVisble = true;
areaHid->SetVisible(areaHidVisble = !areaHidVisble); //显隐区域隐藏分析
}
C#调用
ILayerObject areaHid;
bool areaHiddingVisble = true;
//创建区域隐藏分析
private void createAreaHidding_Click(object sender, EventArgs e)
{
if (areaHid == null)
{
ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称
mlo.AddConfig("DataSourceTypeName", "as_areahidding");//数据源类型,as_areahidding代表区域隐藏
mlo.AddConfig("PointColor", "0,0,1,1.0");//点颜色
mlo.AddConfig("PointSize", "5");//点大小
mlo.AddConfig("AreaHiddingLineColor", "0.1,0.5,0.8,0.9");//线颜色
mlo.AddConfig("ModelLayersIDEx", gModelLayer.GetLayerID());//区域隐藏区域排除图层ID
mlo.AddConfig("AreaNum", "1");//隐藏区域个数
mlo.AddConfig("ModelLayersID", "-1");//-1代表分析所有图层;"x,x,x"用,分隔代表分析指定id图层
mlo.AddConfig("RangeLineVisible", "true");//区域线显隐
areaHid = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(areaHid);//添加图层
}
else
{
MessageBox.Show("请勿重复创建分析图层!");
}
}
//更新区域隐藏分析
private void updateAreaHidding_Click(object sender, EventArgs e)
{
if (areaHid != null)
{
ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称
mlo.AddConfig("DataSourceTypeName", "as_areahidding");//数据源类型,as_areahidding代表区域隐藏
mlo.AddConfig("PointColor", "1,0,1,1.0");//点颜色
mlo.AddConfig("PointSize", "7");//点大小
mlo.AddConfig("AreaHiddingLineColor", "1.0,0,0.0,1.0");//线颜色
mlo.AddConfig("RangeLineVisible", "true");//区域线显隐
mlo.AddConfig("AreaNum", "1");//隐藏区域个数
mlo.AddConfig("IsActive", "false");//是否激活分析
mlo.AddConfig("IsLoad", "true");//是否加载点
mlo.AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
mlo.AddConfig("PointsIndex", "4");//每个区域顶点数量,以逗号分隔
mlo.AddConfig("Points", "120.219878103,30.2119316923,14.9999696231;120.218935144,30.2115560063,14.9999635126;120.219325476,30.2109317621,14.9999712659;120.220282975,30.2113118317,14.9999686191;120.219902405,30.2119334228,14.9999700096;");//点列
areaHid.UpdateLayerOptions(mlo);//更新图层
}
else
{
MessageBox.Show("请创建分析图层再进行更新操作!");
}
}
//获取区域隐藏分析结果
private void getAreaHidding_Click(object sender, EventArgs e)
{
if (areaHid!=null)
{
ILayerOptions opt = areaHid.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_areahidding")
{
string ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取起始点坐标
MessageBox.Show("ClickPoints:" + ClickPoints);
}
}
else
{
MessageBox.Show("不存在分析图层,无法获取结果);
}
}
//删除区域隐藏分析
private void removeAreaHidding_Click(object sender, EventArgs e)
{
if (areaHid!=null)
{
map.RemoveLayer(areaHid);//删除图层
areaHid = null;
}
else
{
MessageBox.Show("分析图层不存在,请勿重复删除!");
}
}
//显隐区域隐藏分析
private void visibleAreaHidding_Click(object sender, EventArgs e)
{
if (areaHid != null)
{
if (areaHiddingVisble)
{
areaHiddingVisble = false;
}
else
{
areaHiddingVisble = true;
}
areaHid.SetVisible(areaHiddingVisble);//图层显隐
}
else
{
MessageBox.Show("图层不存在,无法设置显隐!");
}
}