2.3.9 地表距离测量
地表距离测量
地表距离测量是指将三维空间中两个点形成的连线覆盖到地形表面,然后进行距离量算的功能。可以在场景中点击多个点,SDK会对根据点的顺序形成多条线段并量算出各条线段的距离值。
主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。
注意:可创建空的测量图层,也可创建预设的测量图层,如需创建预设测量图层,则IsLoad
, IsActive
, Points
三个参数需要同时配置
下图是地表距离测量效果:
参数说明
地表距离测量可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
LayerOptionsName | 图层配置对象名称 | string | 分析图层需配置为:AnalysisLayerOptions |
DataSourceTypeName | 数据源类型 | string | as_surfacedistance代表地表距离测量 |
PointColor | 点颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
PointSize | 点大小 | float | 点大小取值范围在1-10之间 |
LineColor | 线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
LineWidth | 线宽度 | float | 线宽度取值范围在1-10之间 |
AltituLineColor | 贴地线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
AltituLineWidth | 贴地线宽度 | float | 线宽度取值范围在1-10之间 |
AltituLineStipple | 贴地线样式 | short | 贴地线显示样式,可控制实线/虚线显示。取值范围-32768-32767之间。-1-实线,其他-虚线。默认-1 |
SamplingInterval | 采样间隔 | float | 贴地线的采样间隔 |
IsDepthTest | 是否开启深度测试 | bool | 默认为false。false不开启,结果会浮在场景上,true实际显示位置 |
TextVisible | 是否显示文字 | bool | 默认为false。如为false,则TextLiftUp 和Style 配置都无效 |
TextLiftUp | 文字抬高高度 | float | 默认为0.0 |
Style | 添加样式 | string | 配置文字样式,配置信息参考文字样式配置 |
IsLoad | 是否初始化加载点 | bool | 默认为false |
IsActive | 是否激活分析 | bool | 默认为true,表示是否可操作场景进行绘制 |
Points | 坐标点集 | x,y,z列表 | 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾 |
IsWorld | 是否世界坐标点 | bool | 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true |
获取结果说明
地表距离测量可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
DataSourceTypeName | 数据源类型 | string | as_surfacedistance代表地表距离测量 |
ClickPoints | 点击点坐标 | x,y,z列表 | 鼠标点击场景形成的关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾 |
DistanceResult | 测量结果 | double列表 | 各个线段的距离结果值,中间用,分隔。单位跟配置的MeasureUnit 一致 |
代码调用示例
Javascript调用
//创建地表距离测量
var surfaceDistanceMeasure = null;
function CreateSurfaceDistanceMeasure()
{
//创建图层配置信息
var tlo = map.CreateLayerOptions("surfaceDistanceMeasure");//创建分析图层配置,给配置起个名称,任意名称
tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
tlo.AddConfig("DataSourceTypeName", "as_surfacedistance");//数据源类型,代表垂直距离测量,必须是此键值对
tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0");//设置点击点的颜色透明度(RGBA) 1为不透明 0为透明
tlo.AddConfig("PointSize", "5"); //设置点击点的大小
tlo.AddConfig("LineColor","0,1,0,1.0");//线颜色
tlo.AddConfig("LineWidth", "2"); //线宽(0-10)
tlo.AddConfig("AltituLineColor","0,1,1,1.0");//贴地线颜色
tlo.AddConfig("AltituLineWidth", "5"); //贴地线宽度(0-10)
tlo.AddConfig("AltituLineStipple", "-1"); //线条类型,-1 实线 1 虚线
tlo.AddConfig("SamplingInterval","1");//采样间隔
tlo.AddConfig("MeasureUnit","0");//显示单位。0-米;1-公里;2-海里
tlo.AddConfig("MeasureUnitLanguage","0");//显示语言。0-英文;1-中文
tlo.AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
tlo.AddConfig("TextVisible", "true");//文字是否被显示
tlo.AddConfig("TextLiftUp", "20");//文字显示的抬高高度
//tlo.AddConfig("IsActive","false");//是否激活
//tlo.AddConfig("IsLoad","true" );//是否重新加载 Points 配置项所对应的点
//tlo.AddConfig("Points","120.16119,30.261164,17.042929;120.16151,30.261482,28.522919;");//线段点集
//tlo.AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
pSymbol.AddConfig("FillingColor", "1.0, 0.0, 0.0, 0.0");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF");//设置字体类型,字体文件一定要存在
pSymbol.AddConfig("Size", "20"); //字体精度大小
pSymbol.AddConfig("CharacterSize", "10.0"); //文字大小
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", "true"); //字体是否为斜体
pSymbol.AddConfig("IsUnderline", "false"); //字体是否有下划线
pSymbol.AddConfig("IsBack", "false"); //是否设置背景色
pSymbol.AddConfig("HorizonSpaceSize", "5");//字符水平间隔距离
pSymbol.AddConfig("FieldPrecision","2");//显示精度
pSymbol.AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
pSymbol.AddConfig("MeasureUnitType","0");//显示单位。0-米;1-公里;2-海里
pSymbol.AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
pSymbol.AddConfig("CoordinateSystemType","0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
//创建文字样式
var pStyle = map.CreateStyle("Text"); //创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
tlo.AddConfig("Style", pStyle.GetConfig());//添加样式
surfaceDistanceMeasure = map.CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数必须为AnalysisLayer
map.AddLayer(surfaceDistanceMeasure);//添加分析图层
}
//更新地表地表距离测量
function UpdateSurfaceDistanceMeasure()
{
if( null != surfaceDistanceMeasure )
{
//创建图层配置信息
var tlo = map.CreateLayerOptions("surfaceDistanceMeasure");//创建分析图层配置,给配置起个名称,任意名称
tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
tlo.AddConfig("DataSourceTypeName", "as_surfacedistance");//数据源类型,代表垂直距离测量,必须是此键值对
tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0");//设置点击点的颜色透明度(RGBA) 1为不透明 0为透明
tlo.AddConfig("PointSize", "5"); //设置点击点的大小
tlo.AddConfig("LineColor","1.0,1.0,0,1.0");//线颜色
tlo.AddConfig("LineWidth", "10"); //线宽(0-10)
tlo.AddConfig("AltituLineColor","1,1,1,1.0");//贴地颜色
tlo.AddConfig("AltituLineWidth", "10"); //贴地线颜色
tlo.AddConfig("AltituLineStipple", "-1"); //线条类型,-1 实线 1 虚线
tlo.AddConfig("SamplingInterval","1" );//采样间隔
tlo.AddConfig("TextVisible", "true");//文字是否被显示
tlo.AddConfig("TextLiftUp", "40");//文字显示的抬高高度
//下列三个配置可选
//tlo.AddConfig("IsLoad","true" );//是否加载点坐标
//tlo.AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
//tlo.AddConfig("Points","120.16119,30.261164,17.042929;120.16151,30.261482,28.522919;");//点坐标
//tlo.AddConfig("IsActive","false" );//是否激活测量
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
pSymbol.AddConfig("FillingColor", "1.0, 0.0, 0.0, 0.0");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF");//设置字体类型,字体文件一定要存在
pSymbol.AddConfig("Size", "20"); //字体精度大小
pSymbol.AddConfig("CharacterSize", "10.0"); //文字大小
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", "true"); //字体是否为斜体
pSymbol.AddConfig("IsUnderline", "false"); //字体是否有下划线
pSymbol.AddConfig("IsBack", "false"); //是否设置背景色
pSymbol.AddConfig("HorizonSpaceSize", "5");//字符水平间隔距离
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());//添加样式
surfaceDistanceMeasure.UpdateLayerOptions(tlo);//更新图层配置项
}
}
//获取地表地表距离测量结果
function GetSurfaceDistanceMeasure()
{
if( null != surfaceDistanceMeasure )
{
var opt = surfaceDistanceMeasure.GetLayerResult();//获取图层结果
var points = opt.GetConfigValueByKey("ClickPoints");//获取点击点坐标
alert("ClickPoints:" + points);//获取的地理坐标点集
var distanceResult = opt.GetConfigValueByKey("DistanceResult");//获取测量结果
alert("VerticalResult:" + distanceResult);
}
}
//移除地表地表距离测量
function RemoveSurfaceDistanceMeasure()
{
if( null != surfaceDistanceMeasure )
{
map.RemoveLayer(surfaceDistanceMeasure);//删除地表距离测量
}
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr surfaceDistanceMeasure;//测量图层对象
void CsurfacedistanceDlg::OnBnClickedCreatesurfacedistancemeasure()
{
//创建图层配置信息
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("surfaceDistanceMeasure");//创建分析图层配置,给配置起个名称,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
tlo->AddConfig("DataSourceTypeName", "as_surfacedistance");//数据源类型,代表垂直距离测量,必须是此键值对
tlo->AddConfig("PointColor", "0.0,0.0,1.0,1.0");//设置点击点的颜色透明度(RGBA) 1为不透明 0为透明
tlo->AddConfig("PointSize", "5"); //设置点击点的大小
tlo->AddConfig("LineColor","0,1,0,1.0");//线颜色
tlo->AddConfig("LineWidth", "2"); //线宽(0-10)
tlo->AddConfig("AltituLineColor","0,1,1,1.0");//贴地线颜色
tlo->AddConfig("AltituLineWidth", "5"); //贴地线宽度
tlo->AddConfig("AltituLineStipple", "-1"); //线条类型,-1 实线 1 虚线
tlo->AddConfig("SamplingInterval","1");//采样间隔
tlo->AddConfig("MeasureUnit","0");//显示单位。0-米;1-公里;2-海里
tlo->AddConfig("MeasureUnitLanguage","0");//显示语言。0-英文;1-中文
tlo->AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
tlo->AddConfig("TextVisible", "true");//文字是否被显示
tlo->AddConfig("TextLiftUp", "20");//文字显示的抬高高度
//tlo->AddConfig("IsActive","false");//是否激活
//tlo->AddConfig("IsLoad","true" );//是否重新加载 Points 配置项所对应的点
//tlo->AddConfig("Points","120.16119,30.261164,17.042929;120.16151,30.261482,28.522919;");//线段点集
//tlo->AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
//创建文字符号
ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = map->CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
pSymbol->AddConfig("FillingColor", "1.0, 0.0, 0.0, 0.0");//设置文字颜色(RGBA)
pSymbol->AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF");//设置字体类型,字体文件一定要存在
pSymbol->AddConfig("Size", "20"); //字体精度大小
pSymbol->AddConfig("CharacterSize", "10.0"); //文字大小
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", "true"); //字体是否为斜体
pSymbol->AddConfig("IsUnderline", "false"); //字体是否有下划线
pSymbol->AddConfig("IsBack", "false"); //是否设置背景色
pSymbol->AddConfig("HorizonSpaceSize", "5");//字符水平间隔距离
pSymbol->AddConfig("FieldPrecision","2");//显示精度
pSymbol->AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
pSymbol->AddConfig("MeasureUnitType","0");//显示单位。0-米;1-公里;2-海里
pSymbol->AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
pSymbol->AddConfig("CoordinateSystemType","0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
//创建文字样式
ConfigOptionsCOMLib::IStylePtr pStyle = map.CreateStyle("Text");//创建样式
pStyle->AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
tlo->AddConfig("Style", pStyle.GetConfig());//添加样式
surfaceDistanceMeasure = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数必须为AnalysisLayer
map->AddLayer(surfaceDistanceMeasure);//添加分析图层
}
void CsurfacedistanceDlg::OnBnClickedUpdatesurfacedistancemeasure()
{
if( NULL != surfaceDistanceMeasure )
{
//创建图层配置信息
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("surfaceDistanceMeasure");//创建分析图层配置,给配置起个名称,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
tlo->AddConfig("DataSourceTypeName", "as_surfacedistance");//数据源类型,代表垂直距离测量,必须是此键值对
tlo->AddConfig("PointColor", "0.0,0.0,1.0,1.0");//设置点击点的颜色透明度(RGBA) 1为不透明 0为透明
tlo->AddConfig("PointSize", "5"); //设置点击点的大小
tlo->AddConfig("LineColor","1.0,1.0,0,1.0");//线颜色
tlo->AddConfig("LineWidth", "10"); //线宽(0-10)
tlo->AddConfig("AltituLineColor","1,1,1,1.0");//贴地颜色
tlo->AddConfig("AltituLineWidth", "10"); //贴地线颜色
tlo->AddConfig("AltituLineStipple", "-1"); //线条类型,-1 实线 1 虚线
tlo->AddConfig("SamplingInterval","1" );//采样间隔
tlo->AddConfig("TextVisible", "true");//文字是否被显示
tlo->AddConfig("TextLiftUp", "40");//文字显示的抬高高度
//下列三个配置可选
//tlo->AddConfig("IsLoad","true" );//是否加载点坐标
//tlo->AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
//tlo->AddConfig("Points","120.16119,30.261164,17.042929;120.16151,30.261482,28.522919;");//点坐标
//tlo->AddConfig("IsActive","false" );//是否激活测量
//创建文字符号
ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = map->CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
pSymbol->AddConfig("FillingColor", "1.0, 0.0, 0.0, 0.0");//设置文字颜色(RGBA)
pSymbol->AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF");//设置字体类型,字体文件一定要存在
pSymbol->AddConfig("Size", "20"); //字体精度大小
pSymbol->AddConfig("CharacterSize", "10.0"); //文字大小
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", "true"); //字体是否为斜体
pSymbol->AddConfig("IsUnderline", "false"); //字体是否有下划线
pSymbol->AddConfig("IsBack", "false"); //是否设置背景色
pSymbol->AddConfig("HorizonSpaceSize", "5");//字符水平间隔距离
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());//添加样式
surfaceDistanceMeasure->UpdateLayerOptions(tlo);//更新图层配置项
}
}
void CsurfacedistanceDlg::OnBnClickedGetsurfacedistancemeasure()
{
if( NULL != surfaceDistanceMeasure )
{
ConfigOptionsCOMLib::ILayerOptionsPtr opt = surfaceDistanceMeasure->GetLayerResult();//获取图层结果
CString points = opt->GetConfigValueByKey("ClickPoints");//获取点击点坐标
MessageBox(L"ClickPoints:" + points);//获取的地理坐标点集
CString distanceResult = opt->GetConfigValueByKey("DistanceResult");//获取测量结果
MessageBox(L"VerticalResult:" + distanceResult);
}
}
void CsurfacedistanceDlg::OnBnClickedRemovesurfacedistancemeasure()
{
if( NULL != surfaceDistanceMeasure )
{
map->RemoveLayer(surfaceDistanceMeasure);//删除地表距离测量
surfaceDistanceMeasure = NULL;
}
}
C#调用
//创建地表距离测量
ILayerObject surfaceDistanceMeasure = null;
private void CreateSurfaceDistanceMeasure_Click(object sender, EventArgs e)
{
//创建图层配置信息
ILayerOptions tlo = map.CreateLayerOptions("surfaceDistanceMeasure");//创建分析图层配置,给配置起个名称,任意名称
tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
tlo.AddConfig("DataSourceTypeName", "as_surfacedistance");//数据源类型,代表垂直距离测量,必须是此键值对
tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0");//设置点击点的颜色透明度(RGBA) 1为不透明 0为透明
tlo.AddConfig("PointSize", "5"); //设置点击点的大小
tlo.AddConfig("LineColor", "0,1,0,1.0");//线颜色
tlo.AddConfig("LineWidth", "2"); //线宽(0-10)
tlo.AddConfig("AltituLineColor", "0,1,1,1.0");//贴地线颜色
tlo.AddConfig("AltituLineWidth", "5"); //贴地线宽度
tlo.AddConfig("AltituLineStipple", "-1"); //线条类型,-1 实线 1 虚线
tlo.AddConfig("SamplingInterval", "1");//采样间隔
tlo.AddConfig("MeasureUnit", "0");//显示单位。0-米;1-公里;2-海里
tlo.AddConfig("MeasureUnitLanguage", "0");//显示语言。0-英文;1-中文
tlo.AddConfig("IsDepthTest", "true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
tlo.AddConfig("TextVisible", "true");//文字是否被显示
tlo.AddConfig("TextLiftUp", "20");//文字显示的抬高高度
//tlo.AddConfig("IsActive","false");//是否激活
//tlo.AddConfig("IsLoad","true" );//是否重新加载 Points 配置项所对应的点
//tlo.AddConfig("Points","120.16119,30.261164,17.042929;120.16151,30.261482,28.522919;");//线段点集
//tlo.AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
pSymbol.AddConfig("FillingColor", "1.0, 0.0, 0.0, 0.0");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF");//设置字体类型,字体文件一定要存在
pSymbol.AddConfig("Size", "20"); //字体精度大小
pSymbol.AddConfig("CharacterSize", "10.0"); //文字大小
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", "true"); //字体是否为斜体
pSymbol.AddConfig("IsUnderline", "false"); //字体是否有下划线
pSymbol.AddConfig("IsBack", "false"); //是否设置背景色
pSymbol.AddConfig("HorizonSpaceSize", "5");//字符水平间隔距离
pSymbol.AddConfig("FieldPrecision", "2");//显示精度
pSymbol.AddConfig("IsDepthTest", "false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
pSymbol.AddConfig("MeasureUnitType", "0");//显示单位。0-米;1-公里;2-海里
pSymbol.AddConfig("MeasureUnitLanguage", "1");//显示语言。0-英文;1-中文
pSymbol.AddConfig("CoordinateSystemType", "0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
//创建文字样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
tlo.AddConfig("Style", pStyle.GetConfig());//添加样式
surfaceDistanceMeasure = map.CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数必须为AnalysisLayer
map.AddLayer(surfaceDistanceMeasure);//添加分析图层
}
//更新地表地表距离测量
private void UpdateSurfaceDistanceMeasure_Click(object sender, EventArgs e)
{
if (null != surfaceDistanceMeasure)
{
//创建图层配置信息
ILayerOptions tlo = map.CreateLayerOptions("surfaceDistanceMeasure");//创建分析图层配置,给配置起个名称,任意名称
tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
tlo.AddConfig("DataSourceTypeName", "as_surfacedistance");//数据源类型,代表垂直距离测量,必须是此键值对
tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0");//设置点击点的颜色透明度(RGBA) 1为不透明 0为透明
tlo.AddConfig("PointSize", "5"); //设置点击点的大小
tlo.AddConfig("LineColor", "1.0,1.0,0,1.0");//线颜色
tlo.AddConfig("LineWidth", "10"); //线宽(0-10)
tlo.AddConfig("AltituLineColor", "1,1,1,1.0");//贴地颜色
tlo.AddConfig("AltituLineWidth", "10"); //贴地线颜色
tlo.AddConfig("AltituLineStipple", "-1"); //线条类型,-1 实线 1 虚线
tlo.AddConfig("SamplingInterval", "1");//采样间隔
tlo.AddConfig("TextVisible", "true");//文字是否被显示
tlo.AddConfig("TextLiftUp", "40");//文字显示的抬高高度
//下列三个配置可选
//tlo.AddConfig("IsLoad","true" );//是否加载点坐标
//tlo.AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
//tlo.AddConfig("Points","120.16119,30.261164,17.042929;120.16151,30.261482,28.522919;");//点坐标
//tlo.AddConfig("IsActive","false" );//是否激活测量
//创建文字符号
var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
pSymbol.AddConfig("FillingColor", "1.0, 0.0, 0.0, 0.0");//设置文字颜色(RGBA)
pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF");//设置字体类型,字体文件一定要存在
pSymbol.AddConfig("Size", "20"); //字体精度大小
pSymbol.AddConfig("CharacterSize", "10.0"); //文字大小
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", "true"); //字体是否为斜体
pSymbol.AddConfig("IsUnderline", "false"); //字体是否有下划线
pSymbol.AddConfig("IsBack", "false"); //是否设置背景色
pSymbol.AddConfig("HorizonSpaceSize", "5");//字符水平间隔距离
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());//添加样式
surfaceDistanceMeasure.UpdateLayerOptions(tlo);//更新图层配置项
}
}
//获取地表地表距离测量结果
private void GetSurfaceDistanceMeasure_Click(object sender, EventArgs e)
{
if (null != surfaceDistanceMeasure)
{
var opt = surfaceDistanceMeasure.GetLayerResult();//获取图层结果
var points = opt.GetConfigValueByKey("ClickPoints");//获取点击点坐标
MessageBox.Show("ClickPoints:" + points);//获取的地理坐标点集
var distanceResult = opt.GetConfigValueByKey("DistanceResult");//获取测量结果
MessageBox.Show("VerticalResult:" + distanceResult);
}
}
//移除地表地表距离测量
private void RemoveSurfaceDistanceMeasure_Click(object sender, EventArgs e)
{
if (null != surfaceDistanceMeasure)
{
map.RemoveLayer(surfaceDistanceMeasure);//删除地表距离测量
}
}