2.4.1 扯旗标注
扯旗标注
扯旗标注是指在三维空间内进行扯旗标注绘制的功能。
扯旗标注主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。
注意:可创建空的绘制图层,也可创建预设的绘制图层,如需创建预设绘制图层,则IsLoad
, IsActive
, Points
三个参数需要同时配置。
下图是扯旗标注效果:
参数说明
扯旗标注可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
LayerOptionsName | 图层配置对象名称 | string | 分析图层需配置为:AnalysisLayerOptions |
DataSourceTypeName | 数据源类型 | string | as_label代表扯旗标注 |
PointColor | 点颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
PointSize | 点大小 | float | 点大小取值范围在1-10之间 |
LabelTextLineColor | 线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
LineWidth | 线宽度 | float | 线宽度取值范围在1-10之间 |
Pitch | 抬起角度 | float | 标注抬起角度 |
TextVisible | 是否显示文字 | bool | 默认为false。如为false,则TextLiftUp 和Style 配置都无效 |
TextLiftUp | 文字抬高高度 | float | 默认为0.0 |
IsLoad | 是否初始化加载点 | bool | 默认为false |
IsActive | 是否激活分析 | bool | 默认为true,表示是否可操作场景进行绘制 |
Points | 坐标点集 | x,y,z列表 | 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾 |
IsWorld | 是否世界坐标点 | bool | 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true |
获取结果说明
扯旗标注可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
DataSourceTypeName | 数据源类型 | string | as_label代表扯旗标注 |
ClickPoints | 关键点坐标 | x,y,z列表 | 鼠标点击场景形成的关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾 |
代码调用示例
Javascript调用
var LabelText;
//绘制扯旗标注
function CreateLabelText() {
//创建图层配置信息
var tlo = map.CreateLayerOptions("label");//创建分析图层配置
tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
tlo.AddConfig("DataSourceTypeName", "as_label"); //数据源类型,代表扯旗标注
tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0"); //设置点击点的颜色透明度(RGBA) 1为不透明 0为透明
tlo.AddConfig("PointSize", "5");//设置点击点的大小
tlo.AddConfig("LabelTextLineColor", "1.0,1.0,0.0,1.0"); //设置线的颜色(RGBA)
tlo.AddConfig("LineWidth", "2");//线宽(0-10)
tlo.AddConfig("Pitch", "30");//抬起角度
tlo.AddConfig("TextVisible", "true");//文字是否被显示
tlo.AddConfig("TextLiftUp", "20");//文字显示的抬高高度
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol"); //创建文字符号
pSymbol.AddConfig("Content", "测试扯旗");//文字内容
pSymbol.AddConfig("FillingColor", "1.0, 0.0, 0.0, 1.0"); //设置文字颜色(RGBA)
pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF"); //设置字体类型,字体文件一定要存在
pSymbol.AddConfig("Size", "40");//字体精度大小
pSymbol.AddConfig("CharacterSize", "20"); //文字大小
pSymbol.AddConfig("CharacterMode", "1");//取值 1 -- 始终朝向相机
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,1.0,1.0,1"); //背景颜色,是否设置背景色为true有效
pSymbol.AddConfig("FieldPrecision","2"); //显示精度
pSymbol.AddConfig("IsDepthTest","false"); //是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
LabelText = map.CreateLayer("AnalysisLayer", tlo); //创建分析图层,第一项参数必须为AnalysisLayer
map.AddLayer(LabelText);//添加分析图层
}
//更新扯旗标注
//当做更新操作时,只需把需要更新的参数构建更新配置参数就可以,不需要更新的参数不需要在设置
function UpdateLabelText() {
var tlo = map.CreateLayerOptions("draw2dpolygon"); //创建更新的配置参数
tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
tlo.AddConfig("DataSourceTypeName", "as_label"); //数据源类型,代表扯旗标注
//tlo.AddConfig("IsLoad", "true");
//tlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
//tlo.AddConfig("Points", "120.205420708,30.2416892474,15.0748782353;120.20489575,30.2417527978,10;");//更新点坐标,当更新点时必须设置IsLoad配置项为true
tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0"); //设置点击点的颜色透明度(RGBA) 1为不透明 0为透明
tlo.AddConfig("PointSize", "5");//设置点击点的大小
tlo.AddConfig("LabelTextLineColor", "1.0,1.0,0.0,1.0"); //设置线的颜色(RGBA)
tlo.AddConfig("LineWidth", "5");//线宽(0-10)
tlo.AddConfig("Pitch", "60");//抬起角度
tlo.AddConfig("TextVisible", "true");//文字是否被显示
tlo.AddConfig("TextLiftUp", "20");//文字显示的抬高高度
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol"); //创建文字符号
pSymbol.AddConfig("Content", "测试更新扯旗");//文字内容
pSymbol.AddConfig("FillingColor", "0.0, 0.0, 1.0, 1.0"); //设置文字颜色(RGBA)
pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF"); //设置字体类型,字体文件一定要存在
pSymbol.AddConfig("Size", "40");//字体精度大小
pSymbol.AddConfig("CharacterSize", "20"); //文字大小
pSymbol.AddConfig("CharacterMode", "1");//取值 1 -- 始终朝向相机
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,1.0,1.0,1"); //背景颜色,是否设置背景色为true有效
pSymbol.AddConfig("FieldPrecision","2"); //显示精度
pSymbol.AddConfig("IsDepthTest","false"); //是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
LabelText.UpdateLayerOptions(tlo);
}
//获取扯旗标注
function GetLabelText() {
var opt = LabelText.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_label")
{
var Points = opt.GetConfigValueByKey("ClickPoints"); //获取关键点集
alert("ClickPoints:" + Points);
}
}
//删除扯旗标注
function RemoveLabelText() {
map.RemoveLayer(LabelText); //删除扯旗标注
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr LabelText;//图层对象
void ClabelDlg::OnBnClickedCreatelabeltext()
{
//创建图层配置信息
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("label"); //创建图层配置对象
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
tlo->AddConfig("DataSourceTypeName", "as_label");//数据源类型,as_label代表扯旗标注
tlo->AddConfig("PointColor", "0.0,0.0,1.0,1.0");//点颜色
tlo->AddConfig("PointSize", "5");//点大小
tlo->AddConfig("LabelTextLineColor", "1.0,1.0,0.0,1.0");//设置线的颜色(RGBA)
tlo->AddConfig("LineWidth", "2");//线宽
tlo->AddConfig("Pitch", "30");//抬起角度
tlo->AddConfig("TextVisible", "true");//文字是否被显示
tlo->AddConfig("TextLiftUp", "20");//文字显示的抬高高度
//创建文字符号
ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = map->CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
pSymbol->AddConfig("Content", "测试扯旗");//文字内容
pSymbol->AddConfig("FillingColor", "1.0, 0.0, 0.0, 1.0");//设置文字颜色(RGBA)
pSymbol->AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF");//文字字体路径,绝对路径
pSymbol->AddConfig("Size", "40");//字体精度大小
pSymbol->AddConfig("CharacterSize", "20");//文字大小
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,1.0,1.0,1");//背景颜色,是否设置背景色为true有效
pSymbol->AddConfig("FieldPrecision","2");//显示精度
pSymbol->AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建样式
ConfigOptionsCOMLib::IStylePtr pStyle = map->CreateStyle("Text");//创建样式
pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式
//将样式添加到图层配置里
tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
LabelText = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
map->AddLayer(LabelText);//添加图层
}
void ClabelDlg::OnBnClickedUpdatelabeltext()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("draw2dpolygon");//创建更新的配置参数
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
tlo->AddConfig("DataSourceTypeName", "as_label");//数据源类型,as_label代表扯旗标注
//tlo->AddConfig("IsLoad", "true");
//tlo->AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
//tlo->AddConfig("Points", "120.205420708,30.2416892474,15.0748782353;120.20489575,30.2417527978,10;");//更新点坐标,当更新点时必须设置IsLoad配置项为true
tlo->AddConfig("PointColor", "0.0,0.0,1.0,1.0");//点颜色
tlo->AddConfig("PointSize", "5");//点大小
tlo->AddConfig("LabelTextLineColor", "1.0,1.0,0.0,1.0");//设置线的颜色(RGBA)
tlo->AddConfig("LineWidth", "5");//线宽
tlo->AddConfig("Pitch", "60");//抬起角度
tlo->AddConfig("TextVisible", "true");//文字是否被显示
tlo->AddConfig("TextLiftUp", "20");//文字显示的抬高高度
//创建文字符号
ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = map->CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
pSymbol->AddConfig("Content", "测试更新扯旗");//文字内容
pSymbol->AddConfig("FillingColor", "0.0, 0.0, 1.0, 1.0");//设置文字颜色(RGBA)
pSymbol->AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF");//文字字体路径,绝对路径
pSymbol->AddConfig("Size", "40");//字体精度大小
pSymbol->AddConfig("CharacterSize", "20");//文字大小
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,1.0,1.0,1");//背景颜色,是否设置背景色为true有效
pSymbol->AddConfig("FieldPrecision","2");//显示精度
pSymbol->AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建样式
ConfigOptionsCOMLib::IStylePtr pStyle = map->CreateStyle("Text");//创建样式
pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式
//将样式添加到图层配置里
tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
LabelText->UpdateLayerOptions(tlo);
}
void ClabelDlg::OnBnClickedGetlabeltext()
{
ConfigOptionsCOMLib::ILayerOptionsPtr opt = LabelText->GetLayerResult();//获取图层结果
//判断当前图层数据源类型
std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获得数据源类型
//判断当前图层数据源类型
if(DataSourceTypeName == "as_label")
{
CString Points = opt->GetConfigValueByKey("ClickPoints");//获取关键点集
MessageBox(L"ClickPoints:" + Points);
}
}
void ClabelDlg::OnBnClickedRemovelabeltext()
{
map->RemoveLayer(LabelText);//删除扯旗标注
LabelText = NULL;
}
C#调用
ILayerObject LabelText;
private void CreateLabelText_Click(object sender, EventArgs e)
{
//创建图层配置信息
var tlo = map.CreateLayerOptions("label");//创建分析图层配置,任意名称
tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
tlo.AddConfig("DataSourceTypeName", "as_label");//数据源类型,代表扯旗标注
tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0");//设置点击点的颜色透明度(RGBA) 1为不透明 0为透明
tlo.AddConfig("PointSize", "5");//设置点大小(0~10)
tlo.AddConfig("LabelTextLineColor", "1.0,1.0,0.0,1.0");//设置线的颜色(RGBA)
tlo.AddConfig("LineWidth", "2");//线宽
tlo.AddConfig("Pitch", "30");//抬起角度
tlo.AddConfig("TextVisible", "true");//文字是否被显示
tlo.AddConfig("TextLiftUp", "20");//文字显示的抬高高度
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
pSymbol.AddConfig("Content", "测试扯旗");//文字内容
pSymbol.AddConfig("FillingColor", "1.0, 0.0, 0.0, 1.0");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF");//文字字体路径,绝对路径
pSymbol.AddConfig("Size", "40");//字体精度大小
pSymbol.AddConfig("CharacterSize", "20");//文字大小
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,1.0,1.0,1");//背景颜色,是否设置背景色为true有效
pSymbol.AddConfig("FieldPrecision", "2");//显示精度
pSymbol.AddConfig("IsDepthTest", "false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
tlo.AddConfig("Style", pStyle.GetConfig());//添加样式,通过 pStyle.GetConfig()获取
LabelText = map.CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(LabelText);
}
//更新扯旗标注
//当做更新操作时,只需把需要更新的参数构建更新配置参数就可以,不需要更新的参数不需要在设置
private void UpdateLabelText_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("draw2dpolygon");//创建更新的配置参数
tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
tlo.AddConfig("DataSourceTypeName", "as_label");//数据源类型,代表2D对象
//tlo.AddConfig("IsLoad", "true");
//tlo.AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
//tlo.AddConfig("Points", "120.205420708,30.2416892474,15.0748782353;120.20489575,30.2417527978,10;");//更新点坐标,当更新点时必须设置IsLoad配置项为true
tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0");//设置点击点的颜色透明度(RGBA) 1为不透明 0为透明
tlo.AddConfig("PointSize", "5");//设置点大小(0~10)
tlo.AddConfig("LabelTextLineColor", "1.0,1.0,0.0,1.0");//设置线的颜色(RGBA)
tlo.AddConfig("LineWidth", "5");//线宽
tlo.AddConfig("Pitch", "60");//抬起角度
tlo.AddConfig("TextVisible", "true");//文字是否被显示
tlo.AddConfig("TextLiftUp", "20");//文字显示的抬高高度
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
pSymbol.AddConfig("Content", "测试更新扯旗");//文字内容
pSymbol.AddConfig("FillingColor", "0.0, 0.0, 1.0, 1.0");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF");//文字字体路径,绝对路径
pSymbol.AddConfig("Size", "40");//字体精度大小
pSymbol.AddConfig("CharacterSize", "20");//文字大小
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,1.0,1.0,1");//背景颜色,是否设置背景色为true有效
pSymbol.AddConfig("FieldPrecision", "2");//显示精度
pSymbol.AddConfig("IsDepthTest", "false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
//创建样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
tlo.AddConfig("Style", pStyle.GetConfig());//添加样式,通过 pStyle.GetConfig()获取
LabelText.UpdateLayerOptions(tlo);
}
//获取扯旗标注
private void GetLabelText_Click(object sender, EventArgs e)
{
var opt = LabelText.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_label")
{
var Points = opt.GetConfigValueByKey("ClickPoints");//获取关键点集
MessageBox.Show("ClickPoints:" + Points);
}
}
//删除扯旗标注
private void RemoveLabelText_Click(object sender, EventArgs e)
{
map.RemoveLayer(LabelText);//删除扯旗标注
}