2.2.1 单视域分析
视域分析是模拟相机照射一片区域的效果。它根据提供的点位和观察角度,生成一个视野观察范围,然后分析在该观察范围内的被观察物体是否可见。分析时,范围内可见区域会绿色显示,不可见区域会红色显示。视域分析在不同的领域有着广泛的应用,如火灾监控点的设定,观察哨所的设定等等。
CooRun SDK根据单个图层里可绘制的视域分析体数量,将视域分析分为:单视域分析和多视域分析。
单视域分析
单视域分析是指在单个图层中只创建一个视域分析的功能。主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。
注意:可创建空的分析图层,也可创建预设的分析图层,如需创建预设分析图层,则IsLoad
, IsActive
, EyePos
, ArmPos
四个参数需要同时配置,也可以用VRotateAngle
,HRotateAngle
和Distance
三个参数取代ArmPos
进行自动计算目标点。
下图是视域分析效果:
参数说明
单视域分析可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
LayerOptionsName | 图层配置对象名称 | string | 分析图层需配置为:AnalysisLayerOptions |
DataSourceTypeName | 数据源类型 | string | as_viewshed代表视域分析 |
DrawLineColor | 线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0",A的取值必须大于0.2 |
VAngle | 垂直方向张角 | float | 角度在0-179之间(度) |
HAngle | 水平方向张角 | float | 角度在0-179之间(度) |
TextVisible | 是否显示文字 | bool | 默认为false。如为false,则TextLiftUp 和Style 配置都无效 |
TextLiftUp | 文字抬高高度 | float | 默认为0.0 |
IsDepthTest | 是否开启深度测试 | bool | 默认为false。false不开启,结果会浮在场景上,true实际显示位置 |
Style | 添加样式 | string | 配置文字样式,配置信息参考文字样式配置 |
IsLoad | 是否初始化加载点 | bool | 默认为false |
IsActive | 是否激活分析 | bool | 默认为true,表示是否可操作场景进行绘制 |
EyePos | 起始点坐标 | x,y,z | 需传入经度,纬度,高程坐标 |
ArmPos | 目标点坐标 | x,y,z | 需传入经度,纬度,高程坐标 |
VRotatAngle | 垂直旋转角度 | float | 角度在0-179之间(度) |
HRotatAngle | 水平旋转角度 | float | 角度在0-179之间(度) |
Distance | 起始点到终点距离 | double | 起始点到终点距离 |
IsWorld | 是否世界坐标点 | bool | 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true |
获取结果说明
单视域分析可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
DataSourceTypeName | 数据源类型 | string | as_viewshed代表视域分析 |
EyePoint | 起始点坐标 | x,y,z | 起始点的经度,纬度,高程坐标 |
AimPoint | 目标点坐标 | x,y,z | 目标点的经度,纬度,高程坐标 |
FrustumPos | 视景体坐标 | x,y,z列表 | 视域分析形成的棱锥5个顶点的经度,纬度,高程坐标 |
VRotatAngle | 垂直旋转角度 | float | 角度在0-179之间(度) |
HRotatAngle | 水平旋转角度 | float | 角度在0-179之间(度) |
Distance | 起始点到终点距离 | double | 起始点到终点距离 |
代码调用示例
Javascript调用
var viewShed = null;
var FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//创建单视域分析
function createViewShed(state){
if(viewShed == null){
var layerOpt = map.CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
layerOpt.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
layerOpt.AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析
layerOpt.AddConfig("DrawLineColor", "1,1,0,1");//线颜色(RGBA)
layerOpt.AddConfig("VAngle", "60");//垂直方向张角
layerOpt.AddConfig("HAngle", "60");//水平方向张角
layerOpt.AddConfig("TextVisible", "true");//是否显示文字
layerOpt.AddConfig("TextLiftUp", "1");//文字抬高高度
layerOpt.AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
if(state){
layerOpt.AddConfig("IsActive", "false");//是否激活分析。初始化加载点时,需要关闭激活
layerOpt.AddConfig("IsLoad", "true");//是否初始化加载点
layerOpt.AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
layerOpt.AddConfig("EyePos", "120.218221747,30.2105396593,82.76055");//起始点
layerOpt.AddConfig("ArmPos", "120.218013904,30.2110769596,20.09121");//目标点
//可以设置起始点+目标点方式,也可以设置起始点+角度+距离方式
//layerOpt.AddConfig("VRotateAngle", "-45");//垂直旋转角
//layerOpt.AddConfig("HRotateAngle", "45");//水平旋转角
//layerOpt.AddConfig("Distance", "100");//起始点至终点距离
}
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
pSymbol.AddConfig("FillingColor", "0.93,0.93,0.93,1");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", FontUrl);//文字字体路径,绝对路径
pSymbol.AddConfig("Size", "40");//字体精度大小
pSymbol.AddConfig("CharacterSize", "10");//文字大小
pSymbol.AddConfig("CharacterMode", "1");//字符大小变化模式。0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
pSymbol.AddConfig("AlignmentMode", "5");//文字对齐方式
pSymbol.AddConfig("AxisAlignment", "6");//设置文字旋转模式。旋转轴0-7,6:自动
pSymbol.AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注
pSymbol.AddConfig("IsEmbolden", "false");//字体是否加粗
pSymbol.AddConfig("IsTransform", "false");//字体是否为斜体
pSymbol.AddConfig("IsUnderline", "false");//字体是否有下划线
pSymbol.AddConfig("IsBack", "true");//是否设置背景色
pSymbol.AddConfig("BackColor", "0.42,0.47,0.85,1");//背景颜色,IsBack为true有效
pSymbol.AddConfig("FieldPrecision","2");//显示精度
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
layerOpt.AddConfig("Style", pStyle.GetConfig());//添加样式
viewShed = map.CreateLayer("AnalysisLayer", layerOpt);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(viewShed);//添加图层
}else{
alert("请勿重复创建分析图层!");
}
}
//更新单视域分析
//当做更新操作时,只需把需要更新的参数构建更新配置参数就可以,不需要更新的参数不需要在设置
function updateViewShed(){
if(viewShed){
var layerOpt = map.CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
layerOpt.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
layerOpt.AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析
layerOpt.AddConfig("TextVisible", "true");//是否显示文字
layerOpt.AddConfig("TextLiftUp", "20");//文字抬高高度
layerOpt.AddConfig("VAngle", "80");//视域垂直方向夹角
layerOpt.AddConfig("HAngle", "80");//视域水平方向夹角
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
pSymbol.AddConfig("FillingColor", "1.0,0.0,0.0,1.0");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", FontUrl);//文字字体路径,绝对路径
pSymbol.AddConfig("Size", "20");//字体精度大小
pSymbol.AddConfig("CharacterSize", "8");//文字大小
pSymbol.AddConfig("CharacterMode", "1");//字符大小变化模式。0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
pSymbol.AddConfig("AlignmentMode", "5");//文字对齐方式
pSymbol.AddConfig("AxisAlignment", "6");//设置文字旋转模式。旋转轴0-7,6:自动
pSymbol.AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注
pSymbol.AddConfig("IsEmbolden", "false");//字体是否加粗
pSymbol.AddConfig("IsTransform", "true");//字体是否为斜体
pSymbol.AddConfig("IsUnderline", "false");//字体是否有下划线
pSymbol.AddConfig("IsBack", "true");//是否设置背景色
pSymbol.AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,是否设置背景色为true有效
pSymbol.AddConfig("FieldPrecision","6");//显示精度
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
layerOpt.AddConfig("Style", pStyle.GetConfig());//添加样式
viewShed.UpdateLayerOptions(layerOpt);//更新分析
}else{
alert("请创建分析图层再进行更新操作!");
}
}
//获取单视域分析结果
function getViewShed(){
if(viewShed){
var opt = viewShed.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_viewshed"){
var EyePoint = opt.GetConfigValueByKey("EyePoint");//获取起始点坐标
var AimPoint = opt.GetConfigValueByKey("AimPoint");//获取结束点坐标
var FrustumPos = opt.GetConfigValueByKey("FrustumPos");//获取视景体的5个点
var VRotatAngle = opt.GetConfigValueByKey("VRotatAngle");//垂直旋转角度
var HRotatAngle = opt.GetConfigValueByKey("HRotatAngle");//水平旋转角度
var Distance = opt.GetConfigValueByKey("Distance");//起始点到终点距离
var FrustumPos = opt.GetConfigValueByKey("FrustumPos");//获取视景体的5个点
alert("EyePoint:" + EyePoint + "\nAimPoint:" + AimPoint + "\nVRotatAngle:" + VRotatAngle + "\nHRotatAngle:" + HRotatAngle + "\nDistance:" + Distance + "\nFrustumPos:" + FrustumPos);
}
}else{
alert("不存在分析图层,无法获取结果!");
}
}
//删除单视域分析
function removeViewShed() {
if(viewShed){
map.RemoveLayer(viewShed);//删除视域分析
viewShed = null;
}else{
alert("分析图层不存在,请勿重复删除!");
}
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr viewShed;//单视域分析图层对象
std::string FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//创建预设单视域分析
void Cf1c0ViewshedDlg::OnBnClickedcreatepresetviewshed()
{
if(viewShed)
{
return;
}
viewShed=loadViewShed(TRUE);
}
//创建手动单视域分析
void Cf1c0ViewshedDlg::OnBnClickedcreatemanualviewshed()
{
if(viewShed)
{
return;
}
viewShed=loadViewShed(FALSE);
}
//加载单视域分析
BaseObjectCOMLib::ILayerObjectPtr Cf1c0ViewshedDlg::loadViewShed(bool IsLoad)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
tlo->AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析
tlo->AddConfig("DrawLineColor", "1,1,0,1");//线颜色(RGBA)
tlo->AddConfig("VAngle", "60");//垂直方向张角
tlo->AddConfig("HAngle", "60");//水平方向张角
tlo->AddConfig("TextVisible", "true");//是否显示文字
tlo->AddConfig("TextLiftUp", "1");//文字抬高高度
tlo->AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
if(IsLoad){
tlo->AddConfig("IsActive", "false");//是否激活分析。初始化加载点时,需要关闭激活
tlo->AddConfig("IsLoad", "true");//是否初始化加载点
tlo->AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
tlo->AddConfig("EyePos", "120.218221747,30.2105396593,82.76055");//起始点
tlo->AddConfig("ArmPos", "120.218013904,30.2110769596,20.09121");//目标点
//可以设置起始点+目标点方式,也可以设置起始点+角度+距离方式
//tlo->AddConfig("VRotateAngle", "-45");//垂直旋转角
//tlo->AddConfig("HRotateAngle", "45");//水平旋转角
//tlo->AddConfig("Distance", "100");//起始点至终点距离
}
//创建文字符号
ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = (ConfigOptionsCOMLib::ISymbolObjectPtr)map->CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
pSymbol->AddConfig("FillingColor", "0.93,0.93,0.93,1");//设置文字颜色(RGBA)
pSymbol->AddConfig("Font", "C:\\WINDOWS\\Fonts\\simhei.ttf");//设置字体路径
pSymbol->AddConfig("Size", "40");//字体精度大小
pSymbol->AddConfig("CharacterSize", "10");//文字大小
pSymbol->AddConfig("CharacterMode", "1");//字符大小变化模式。0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
pSymbol->AddConfig("AlignmentMode", "5");//文字对齐方式
pSymbol->AddConfig("AxisAlignment", "6");//设置文字旋转模式。旋转轴0-7,6:自动
pSymbol->AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注
pSymbol->AddConfig("IsEmbolden", "false");//字体是否加粗
pSymbol->AddConfig("IsTransform", "false");//字体是否为斜体
pSymbol->AddConfig("IsUnderline", "false");//字体是否有下划线
pSymbol->AddConfig("IsBack", "true");//是否设置背景色
pSymbol->AddConfig("BackColor", "0.42,0.47,0.85,1");//背景颜色,IsBack为true有效
pSymbol->AddConfig("FieldPrecision","2");//显示精度
pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
BaseObjectCOMLib::ILayerObjectPtr viewShed = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
map->AddLayer(viewShed);//添加图层
return viewShed;
}
//更新单视域分析
void Cf1c0ViewshedDlg::OnBnClickedupdateviewshed()
{
if(!viewShed)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
tlo->AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析
tlo->AddConfig("TextVisible", "true");//是否显示文字
tlo->AddConfig("TextLiftUp", "200");//文字抬高高度
tlo->AddConfig("VAngle", "80");//垂直方向张角
tlo->AddConfig("HAngle", "80");//水平方向张角
//创建文字符号
ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = (ConfigOptionsCOMLib::ISymbolObjectPtr)map->CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
pSymbol->AddConfig("FillingColor", "1.0,0.0,0.0,1.0");//设置文字颜色(RGBA)
pSymbol->AddConfig("Font", "C:\\WINDOWS\\Fonts\\simhei.ttf");//设置字体路径
pSymbol->AddConfig("Size", "20");//字体精度大小
pSymbol->AddConfig("CharacterSize", "8");//文字大小
pSymbol->AddConfig("CharacterMode", "1");//字符大小变化模式。0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
pSymbol->AddConfig("AlignmentMode", "5");//文字对齐方式
pSymbol->AddConfig("AxisAlignment", "6");//设置文字旋转模式。旋转轴0-7,6:自动
pSymbol->AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注
pSymbol->AddConfig("IsEmbolden", "false");//字体是否加粗
pSymbol->AddConfig("IsTransform", "true");//字体是否为斜体
pSymbol->AddConfig("IsUnderline", "false");//字体是否有下划线
pSymbol->AddConfig("IsBack", "true");//是否设置背景色
pSymbol->AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,IsBack为true有效
pSymbol->AddConfig("FieldPrecision","6");//显示精度
pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
viewShed->UpdateLayerOptions(tlo);//更新分析
}
//获取单视域分析结果
void Cf1c0ViewshedDlg::OnBnClickedgetviewshed()
{
if(!viewShed)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr opt = viewShed->GetLayerResult();
std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获取数据源类型
if(DataSourceTypeName == "as_viewshed")
{
CString EyePoint = opt->GetConfigValueByKey("EyePoint");//获取起始点坐标
CString AimPoint = opt->GetConfigValueByKey("AimPoint");//获取结束点坐标
CString VRotatAngle = opt->GetConfigValueByKey("VRotatAngle");//垂直旋转角度
CString HRotatAngle = opt->GetConfigValueByKey("HRotatAngle");//水平旋转角度
CString Distance = opt->GetConfigValueByKey("Distance");//起始点到终点距离
CString FrustumPos = opt->GetConfigValueByKey("FrustumPos");//获取视景体的5个点
MessageBox(L"EyePoint:"+ EyePoint + L"\r\nAimPoint:" + AimPoint + L"\r\nVRotatAngle:" + VRotatAngle + L"\r\nHRotatAngle:" + HRotatAngle + L"\r\nDistance:" + Distance + L"\r\nFrustumPos"+FrustumPos);
}
}
//删除单视域分析
void Cf1c0ViewshedDlg::OnBnClickedremoveviewshed()
{
if(!viewShed)
{
return;
}
map->RemoveLayer(viewShed);//删除视域分析
viewShed = NULL;
}
C#调用
ILayerObject viewShed;//单视域分析图层对象
//创建预设单视域分析
private void createpresetviewshed_Click(object sender, EventArgs e)
{
if (viewShed != null)
{
return;
}
loadViewShed(true);
}
//创建手动单视域分析
private void createmanualviewshed_Click(object sender, EventArgs e)
{
if (viewShed != null)
{
return;
}
loadViewShed(false);
}
//加载单视域分析
private void loadViewShed(bool IsLoad)
{
ILayerOptions layerOpt = map.CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
layerOpt.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
layerOpt.AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析
layerOpt.AddConfig("DrawLineColor", "1,1,0,1");//线颜色(RGBA)
layerOpt.AddConfig("VAngle", "60");//垂直方向张角
layerOpt.AddConfig("HAngle", "60");//水平方向张角
layerOpt.AddConfig("TextVisible", "true");//是否显示文字
layerOpt.AddConfig("TextLiftUp", "1");//文字抬高高度
layerOpt.AddConfig("IsDepthTest", "true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
if (IsLoad)
{
layerOpt.AddConfig("IsActive", "false");//是否激活分析。初始化加载点时,需要关闭激活
layerOpt.AddConfig("IsLoad", "true");//是否初始化加载点
layerOpt.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
layerOpt.AddConfig("EyePos", "120.218221747,30.2105396593,82.76055");//起始点
layerOpt.AddConfig("ArmPos", "120.218013904,30.2110769596,20.09121");//目标点
//可以设置起始点+目标点方式,也可以设置起始点+角度+距离方式
//layerOpt.AddConfig("VRotateAngle", "-45");//垂直旋转角
//layerOpt.AddConfig("HRotateAngle", "45");//水平旋转角
//layerOpt.AddConfig("Distance", "100");//起始点至终点距离
}
//创建文字符号
ISymbolObject pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
pSymbol.AddConfig("FillingColor", "0.93,0.93,0.93,1");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\simhei.ttf");//设置字体路径
pSymbol.AddConfig("Size", "40");//字体精度大小
pSymbol.AddConfig("CharacterSize", "10");//文字大小
pSymbol.AddConfig("CharacterMode", "1");//字符大小变化模式。0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
pSymbol.AddConfig("AlignmentMode", "5");//文字对齐方式
pSymbol.AddConfig("AxisAlignment", "6");//设置文字旋转模式。旋转轴0-7,6:自动
pSymbol.AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注
pSymbol.AddConfig("IsEmbolden", "false");//字体是否加粗
pSymbol.AddConfig("IsTransform", "false");//字体是否为斜体
pSymbol.AddConfig("IsUnderline", "false");//字体是否有下划线
pSymbol.AddConfig("IsBack", "true");//是否设置背景色
pSymbol.AddConfig("BackColor", "0.42,0.47,0.85,1");//背景颜色,IsBack为true有效
pSymbol.AddConfig("FieldPrecision", "2");//显示精度
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
IStyle pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
layerOpt.AddConfig("Style", pStyle.GetConfig());//添加样式
viewShed = map.CreateLayer("AnalysisLayer", layerOpt);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(viewShed);//添加图层
}
//更新单视域分析
private void updateViewShed_Click(object sender, EventArgs e)
{
if (viewShed != null)
{
ILayerOptions layerOpt = map.CreateLayerOptions("viewShed"); //创建图层配置对象,任意名称
layerOpt.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
layerOpt.AddConfig("DataSourceTypeName", "as_viewshed");//数据源类型,as_viewshed代表视域分析
layerOpt.AddConfig("TextVisible", "true");//是否显示文字
layerOpt.AddConfig("TextLiftUp", "200");//文字抬高高度
layerOpt.AddConfig("VAngle", "80");//视域垂直方向夹角
layerOpt.AddConfig("HAngle", "80");//视域水平方向夹角
//创建文字符号
ISymbolObject pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建符号对象,AnalysisTextSymbol代表文字符号
pSymbol.AddConfig("FillingColor", "1.0,0.0,0.0,1.0");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\simhei.ttf");//设置字体路径
pSymbol.AddConfig("Size", "20");//字体精度大小
pSymbol.AddConfig("CharacterSize", "8");//文字大小
pSymbol.AddConfig("CharacterMode", "1");//字符大小变化模式。0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
pSymbol.AddConfig("AlignmentMode", "5");//文字对齐方式
pSymbol.AddConfig("AxisAlignment", "6");//设置文字旋转模式。旋转轴0-7,6:自动
pSymbol.AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注
pSymbol.AddConfig("IsEmbolden", "false");//字体是否加粗
pSymbol.AddConfig("IsTransform", "true");//字体是否为斜体
pSymbol.AddConfig("IsUnderline", "false");//字体是否有下划线
pSymbol.AddConfig("IsBack", "true");//是否设置背景色
pSymbol.AddConfig("BackColor", "0,1.0,1.0,1");//背景颜色,是否设置背景色为true有效
pSymbol.AddConfig("FieldPrecision", "6");//显示精度
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
IStyle pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
layerOpt.AddConfig("Style", pStyle.GetConfig());//添加样式
viewShed.UpdateLayerOptions(layerOpt);//更新分析
}
}
//获取单视域分析结果
private void getViewShed_Click(object sender, EventArgs e)
{
if (viewShed != null)
{
ILayerOptions opt = viewShed.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_viewshed")
{
string EyePoint = opt.GetConfigValueByKey("EyePoint");//获取起始点坐标
string AimPoint = opt.GetConfigValueByKey("AimPoint");//获取结束点坐标
string VRotatAngle = opt.GetConfigValueByKey("VRotatAngle");//垂直旋转角度
string HRotatAngle = opt.GetConfigValueByKey("HRotatAngle");//水平旋转角度
string Distance = opt.GetConfigValueByKey("Distance");//起始点到终点距离
string FrustumPos = opt.GetConfigValueByKey("FrustumPos");//获取视景体的5个点
MessageBox.Show("EyePoint:" + EyePoint + "\nAimPoint:" + AimPoint + "\nVRotatAngle:" + VRotatAngle + "\nHRotatAngle:" + HRotatAngle + "\nDistance:" + Distance + "\nFrustumPos:" + FrustumPos);
}
}
}
//删除单视域分析
private void removeViewShed_Click(object sender, EventArgs e)
{
if (viewShed != null)
{
map.RemoveLayer(viewShed);//删除视域分析
viewShed = null;
}
}