2.3.6 地表面积测量
地表面积测量
地表面积测量是指将三维空间中多个点形成的空间多边形进行采样,形成关键点集,并将关键点集覆盖到地形表面,然后通过三角剖分算法对关键点集进行操作,形成多个小三角形,最后计算小三角形的面积总和。
主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。
注意:可创建空的测量图层,也可创建预设的测量图层,如需创建预设测量图层,则IsLoad
, IsActive
, Points
三个参数需要同时配置。
下图是地表面积测量效果:
参数说明
地表面积测量可配置的参数如下表所示:其中PolygonMode
PageLevel
GridLineColor
是地表面积专有配置项。
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
LayerOptionsName | 图层配置对象名称 | string | 分析图层需配置为:AnalysisLayerOptions |
DataSourceTypeName | 数据源类型 | string | as_area代表面积测量 |
AreaMeasureType | 测量类型 | int | 面积测量的类型。0-空间面积测量;1-水平面积测量;2-地表面积测量。 默认为0 |
PointColor | 点颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
PointSize | 点大小 | float | 点大小取值范围在1-10之间 |
AreaMeasureLineColor | 线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
PolygonColor | 面颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
LiftUp | 抬高高度 | float | 将绘制结果整体抬高高度。该值是为了避免显示结果被地形覆盖而设定的。单位m,默认0 |
IsDepthTest | 是否开启深度测试 | bool | 默认为false。false不开启,结果会浮在场景上,true实际显示位置 |
PolygonMode | 显示方式 | int | 绘制区域的显示方式,可选是网格显示还是多边形面显示。1-多边形显示 2-网格显示,默认为2 |
PageLevel | 地形调度层级 | int | 该值决定了采样点的高程值精细程度。实际调度层级=当前显示层级+PageLevel 。取值范围是0~16 |
GridLineColor | 网格线颜色 | R,G,B,A | 当PolygonMode 为2时起效。颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
Style | 添加样式 | string | 配置文字样式,配置信息参考文字样式配置 |
IsLoad | 是否初始化加载点 | bool | 默认为false |
IsActive | 是否激活分析 | bool | 默认为true,表示是否可操作场景进行绘制 |
Points | 坐标点集 | x,y,z列表 | 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾 |
IsWorld | 是否世界坐标点 | bool | 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true |
NonIntersect | 非相交图层 | int列表 | 该分析与场景哪些类型图层不相交。1-分析,2-地形,3-模型,4-矢量(未贴地),5-矢量模板阴影体,6-矢量(贴地),7-倾斜摄影。默认为1,即与除分析之外所有图层都相交 |
获取结果说明
三维面积测量可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
DataSourceTypeName | 数据源类型 | string | as_area代表面积测量 |
ClickPoints | 点击点坐标 | x,y,z列表 | 鼠标点击场景形成的关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾 |
AreaResult | 测量结果 | double | 绘制区域内总体面积。 单位跟配置的MeasureUnit 一致 |
代码调用示例
Javascript调用
var surfaceAreaMeasure = null;
var FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//创建地表面积测量
function createSurfaceAreaMeasure(state){
if(surfaceAreaMeasure == null){
//创建图层配置信息
var mlo = map.CreateLayerOptions("areaMeasure");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName","as_area");//数据源类型,as_area代表面积测量
mlo.AddConfig("PointColor","1,1,0,1.0");//点颜色(RGBA
mlo.AddConfig("PointSize","7");//点大小
mlo.AddConfig("AreaMeasureLineColor","0,0.9,0.2,1.0");//线颜色(RGBA
mlo.AddConfig("PolygonColor","0,0.7,0.4,0.5");//面颜色(RGBA
mlo.AddConfig("LiftUp","0.1");//抬高
mlo.AddConfig("AreaMeasureType", "2");//测量类型。0-空间面积测量;1-水平面积测量;2-地表面积测量
mlo.AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
mlo.AddConfig("PolygonMode", "2" );//封闭区域显示方式选择。1,以多边形区域显示 2,以网格显示(地表面积测量专有配置项)
mlo.AddConfig("PageLevel", "5" );//地形调度层级。0~16,实际调度层级=当前显示层级+PageLevel(地表面积测量专有配置项)
mlo.AddConfig("GridLineColor", "1.0,1.0,0.0,1.0");//网格线颜色。当PolygonMode为2时起效(地表面积测量专有配置项)
if(state){
mlo.AddConfig("IsActive", "false");//是否激活分析
mlo.AddConfig("IsLoad", "true");//是否加载点集
mlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
mlo.AddConfig("Points", "120.217807602,30.2074212072,14.6460230006;120.217182374,30.207380254,14.6789400103;120.2172589,30.2067760082,14.6747630741;120.217846664,30.2069059705,14.6438545631;");//点集信息
}
//创建文字符号
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", "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.42,0.47,0.85,1");//背景颜色,IsBack为true有效
pSymbol.AddConfig("FieldPrecision","2");//显示精度
pSymbol.AddConfig("MeasureUnitType","10");//显示单位。10-平方米; 11-公顷; 12-平方公里; 13-平方海里
pSymbol.AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
surfaceAreaMeasure = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(surfaceAreaMeasure);//添加图层
}else{
alert("请勿重复创建!");
}
}
//更新地表面积测量
function updateSurfaceAreaMeasure(){
if(surfaceAreaMeasure != null){
var mlo = map.CreateLayerOptions("areaMeasure");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName","as_area");//数据源类型,as_area代表面积测量
mlo.AddConfig("PointColor","0,0.3,0.8,1.0");//点颜色(RGBA)
mlo.AddConfig("PointSize","7");//点大小
mlo.AddConfig("AreaMeasureLineColor","0,0.9,0.2,1.0");//线颜色(RGBA)
mlo.AddConfig("PolygonColor","1,0.7,0.0,0.5");//面颜色(RGBA)
mlo.AddConfig("LiftUp","50");//抬高
mlo.AddConfig("PolygonMode", "2" );//封闭区域显示方式选择 1,以多边形区域显示 2,以网格显示
//创建文字符号
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("MeasureUnitType","10");//显示单位。10-平方米; 11-公顷; 12-平方公里; 13-平方海里
pSymbol.AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
var pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
surfaceAreaMeasure.UpdateLayerOptions(mlo);//更新图层
}else{
alert("请创建测量对象!");
}
}
//获取地表面积测量结果
function getSurfaceAreaMeasure(){
if(surfaceAreaMeasure){
var opt = surfaceAreaMeasure.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_area")
{
var points = opt.GetConfigValueByKey("ClickPoints");//获取点击点坐标
var AreaResult = opt.GetConfigValueByKey("AreaResult");//获取测量结果
alert("ClickPoints:" + points + "\nAreaResult:" + AreaResult);
}
}else{
alert("请创建测量对象!");
}
}
//删除地表面积测量
function removeSurfaceAreaMeasure(){
if(surfaceAreaMeasure){
map.RemoveLayer(surfaceAreaMeasure); //删除图层
surfaceAreaMeasure = null;
}else{
alert("没有测量对象!");
}
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr surfaceAreaMeasure;//地表面积测量图层对象
//创建预设地表面积测量
void Cf2c5SurfaceAreaMeasureDlg::OnBnClickedcreatepresetsurfaceareameasure()
{
if(surfaceAreaMeasure)
{
return;
}
surfaceAreaMeasure=loadsurfaceArea(TRUE);
}
//创建手动地表面积测量
void Cf2c5SurfaceAreaMeasureDlg::OnBnClickedcreatemanualsurfaceareameasure()
{
if(surfaceAreaMeasure)
{
return;
}
surfaceAreaMeasure=loadsurfaceArea(FALSE);
}
//创建地表面积测量
BaseObjectCOMLib::ILayerObjectPtr Cf2c5SurfaceAreaMeasureDlg::loadsurfaceArea(bool IsLoad)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
tlo->AddConfig("DataSourceTypeName","as_area");//数据源类型,as_area代表面积测量
tlo->AddConfig("PointColor","1,1,0,1.0");//点颜色(RGBA)
tlo->AddConfig("PointSize","7");//点大小
tlo->AddConfig("AreaMeasureLineColor","0,0.9,0.2,1.0");//线颜色(RGBA)
tlo->AddConfig("PolygonColor","0,0.7,0.4,0.5");//面颜色(RGBA)
tlo->AddConfig("LiftUp","0.1");//抬高
tlo->AddConfig("AreaMeasureType", "2");//测量类型。0-空间面积测量;1-水平面积测量;2-地表面积测量
tlo->AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
tlo->AddConfig("PolygonMode", "2" );//封闭区域显示方式选择。1,以多边形区域显示 2,以网格显示(地表面积测量专有配置项)
tlo->AddConfig("PageLevel", "5" );//地形调度层级。0~16,实际调度层级=当前显示层级+PageLevel(地表面积测量专有配置项)
tlo->AddConfig("GridLineColor", "1.0,1.0,0.0,1.0");//网格线颜色。当PolygonMode为2时起效(地表面积测量专有配置项)
if(IsLoad){
tlo->AddConfig("IsActive", "false");//是否激活分析
tlo->AddConfig("IsLoad", "true");//是否加载点集
tlo->AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
tlo->AddConfig("Points", "120.217807602,30.2074212072,14.6460230006;120.217182374,30.207380254,14.6789400103;120.2172589,30.2067760082,14.6747630741;120.217846664,30.2069059705,14.6438545631;");//点集信息
}
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", "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.42,0.47,0.85,1");//背景颜色,IsBack为true有效
pSymbol->AddConfig("FieldPrecision","2");//显示精度
pSymbol->AddConfig("MeasureUnitType","10");//显示单位。10-平方米; 11-公顷; 12-平方公里; 13-平方海里
pSymbol->AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
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 surfaceAreaMeasure = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
map->AddLayer(surfaceAreaMeasure);//添加图层
return surfaceAreaMeasure;
}
//更新地表面积测量
void Cf2c5SurfaceAreaMeasureDlg::OnBnClickedupdatesurfaceareameasure()
{
if(!surfaceAreaMeasure)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
tlo->AddConfig("DataSourceTypeName","as_area");//数据源类型,as_area代表面积测量
tlo->AddConfig("PointColor","0,0.3,0.8,1.0");//点颜色(RGBA)
tlo->AddConfig("PointSize","7");//点大小
tlo->AddConfig("AreaMeasureLineColor","0,0.9,0.2,1.0");//线颜色(RGBA)
tlo->AddConfig("PolygonColor","1,0.7,0.0,0.5");//面颜色(RGBA)
tlo->AddConfig("LiftUp","50");//抬高
tlo->AddConfig("PolygonMode", "2" );//封闭区域显示方式选择 1,以多边形区域显示 2,以网格显示
//创建文字符号
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");//背景颜色,是否设置背景色为true有效
pSymbol->AddConfig("FieldPrecision","6");//显示精度
pSymbol->AddConfig("MeasureUnitType","10");//显示单位。10-平方米; 11-公顷; 12-平方公里; 13-平方海里
pSymbol->AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
surfaceAreaMeasure->UpdateLayerOptions(tlo);//更新分析
}
//获取地表面积测量结果
void Cf2c5SurfaceAreaMeasureDlg::OnBnClickedgetsurfaceareameasure()
{
if(!surfaceAreaMeasure)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr opt = surfaceAreaMeasure->GetLayerResult();
std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获取数据源类型
if(DataSourceTypeName == "as_area")
{
CString ClickPoints = opt->GetConfigValueByKey("ClickPoints");//获取点击点坐标
CString AreaResult = opt->GetConfigValueByKey("AreaResult");//获取测量结果
MessageBox(L"ClickPoints:"+ ClickPoints+ L"\r\nAreaResult:"+AreaResult);
}
}
//删除地表面积测量
void Cf2c5SurfaceAreaMeasureDlg::OnBnClickedremovesurfaceareameasure()
{
if(!surfaceAreaMeasure)
{
return;
}
map->RemoveLayer(surfaceAreaMeasure);//删除图层
surfaceAreaMeasure = NULL;
}
C#调用
ILayerObject surfaceAreaMeasure = null;
string FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
bool bInitCreate = false; //是否初始化加载
//创建地表面积测量
private void CreatePresetSurfaceareaMeasure_Click(object sender, EventArgs e)
{
if (surfaceAreaMeasure == null)
{
//创建图层配置信息
ILayerOptions mlo = map.CreateLayerOptions("areaMeasure");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName", "as_area");//数据源类型,as_area代表面积测量
mlo.AddConfig("PointColor", "1,1,0,1.0");//点颜色(RGBA)
mlo.AddConfig("PointSize", "7");//点大小
mlo.AddConfig("AreaMeasureLineColor", "0,0.9,0.2,1.0");//线颜色(RGBA)
mlo.AddConfig("PolygonColor", "0,0.7,0.4,0.5");//面颜色(RGBA)
mlo.AddConfig("LiftUp", "0.1");//抬高
mlo.AddConfig("AreaMeasureType", "2");//测量类型。0-空间面积测量;1-水平面积测量;2-地表面积测量
mlo.AddConfig("IsDepthTest", "true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
mlo.AddConfig("PolygonMode", "2");//封闭区域显示方式选择。1,以多边形区域显示 2,以网格显示(地表面积测量专有配置项)
mlo.AddConfig("PageLevel", "5");//地形调度层级。0~16,实际调度层级=当前显示层级+PageLevel(地表面积测量专有配置项)
mlo.AddConfig("GridLineColor", "1.0,1.0,0.0,1.0");//网格线颜色。当PolygonMode为2时起效(地表面积测量专有配置项)
if(bInitCreate){
mlo.AddConfig("IsActive", "false");//是否激活分析
mlo.AddConfig("IsLoad", "true");//是否加载点集
mlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
mlo.AddConfig("Points", "120.217807602,30.2074212072,14.6460230006;120.217182374,30.207380254,14.6789400103;120.2172589,30.2067760082,14.6747630741;120.217846664,30.2069059705,14.6438545631;");//点集信息
}
//创建文字符号
ISymbolObject 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", "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.42,0.47,0.85,1");//背景颜色,IsBack为true有效
pSymbol.AddConfig("FieldPrecision", "2");//显示精度
pSymbol.AddConfig("MeasureUnitType","10");//显示单位。10-平方米; 11-公顷; 12-平方公里; 13-平方海里
pSymbol.AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
IStyle pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
surfaceAreaMeasure = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
map.AddLayer(surfaceAreaMeasure);//添加图层
}
else
{
MessageBox.Show("请勿重复创建!");
}
}
//更新地表面积测量
private void updateSurfaceAreaMeasure_Click(object sender, EventArgs e)
{
if (surfaceAreaMeasure != null)
{
ILayerOptions mlo = map.CreateLayerOptions("areaMeasure");//创建图层配置对象,任意名称
mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
mlo.AddConfig("DataSourceTypeName", "as_area");//数据源类型,as_area代表面积测量
mlo.AddConfig("PointColor", "0,0.3,0.8,1.0");//点颜色(RGBA)
mlo.AddConfig("PointSize", "7");//点大小
mlo.AddConfig("AreaMeasureLineColor", "0,0.9,0.2,1.0");//线颜色(RGBA)
mlo.AddConfig("PolygonColor", "1,0.7,0.0,0.5");//面颜色(RGBA)
mlo.AddConfig("LiftUp", "50");//抬高
mlo.AddConfig("PolygonMode", "2");//封闭区域显示方式选择 1,以多边形区域显示 2,以网格显示
//创建文字符号
ISymbolObject 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("MeasureUnitType","10");//显示单位。10-平方米; 11-公顷; 12-平方公里; 13-平方海里
pSymbol.AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
//创建样式
IStyle pStyle = map.CreateStyle("Text");//创建样式
pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//将样式添加到图层配置里
mlo.AddConfig("Style", pStyle.GetConfig());//添加样式
surfaceAreaMeasure.UpdateLayerOptions(mlo);//更新图层
}
else
{
MessageBox.Show("请创建测量对象!");
}
}
//获取地表面积测量结果
private void getSurfaceAreaMeasure_Click(object sender, EventArgs e)
{
if (surfaceAreaMeasure != null)
{
ILayerOptions opt = surfaceAreaMeasure.GetLayerResult();//获取图层结果
//判断当前图层数据源类型
if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_area")
{
string points = opt.GetConfigValueByKey("ClickPoints");//获取点击点坐标
string AreaResult = opt.GetConfigValueByKey("AreaResult");//获取测量结果
MessageBox.Show("ClickPoints:" + points + "\nAreaResult:" + AreaResult);
}
}
else
{
MessageBox.Show("请创建测量对象!");
}
}
//删除地表面积测量
private void removeSurfaceAreaMeasure_Click(object sender, EventArgs e)
{
if (surfaceAreaMeasure != null)
{
map.RemoveLayer(surfaceAreaMeasure); //删除图层
surfaceAreaMeasure = null;
}
else
{
MessageBox.Show("没有测量对象!");
}
}