2.3.5 三维面积测量


三维面积测量

三维面积测量是指对三维空间中多个点形成的空间多边形进行面积量算。在进行面绘制以及计算时,是通过三角剖分算法来实现的。主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。

注意:可创建空的测量图层,也可创建预设的测量图层,如需创建预设测量图层,则IsLoad, IsActive, Points 三个参数需要同时配置

下图是三维面积测量效果:

  

参数说明

三维面积测量可配置的参数如下表所示:

配置项 配置说明 值类型 备注
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"
IsDepthTest 是否开启深度测试 bool 默认为false。false不开启,结果会浮在场景上,true实际显示位置
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 spatialAreaMeasure = null; 
var FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//创建三维面积测量
function createAreaMeasure(){
    if(spatialAreaMeasure == null){
        //创建图层配置信息
        var tlo = map.CreateLayerOptions("spatialAreaMeasure");//创建图层配置对象,任意名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName","as_area");//数据源类型,as_area代表面积测量
        tlo.AddConfig("PointColor","1,1,0,1.0");//点颜色
        tlo.AddConfig("PointSize","10");//点大小
        tlo.AddConfig("AreaMeasureLineColor","0,0.9,0.2,1.0");//线颜色
        tlo.AddConfig("PolygonColor","0,0.7,0.4,0.5");//面颜色
        tlo.AddConfig("AreaMeasureType", "0");//测量类型。0-空间面积测量;1-水平面积测量;2-地表面积测量
        tlo.AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
        //tlo.AddConfig("NonIntersect","2");//非相交图层,1-分析,2-地形,3-模型,4-矢量(未贴地),5-矢量模板阴影体,6-矢量(贴地),7-倾斜摄影数据
        //创建文字符号
        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("MeasureUnitType","10");//显示单位。10-平方米; 11-公顷; 12-平方公里; 13-平方海里
        pSymbol.AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
        pSymbol.AddConfig("CoordinateSystemType","0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true

        var pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        tlo.AddConfig("Style", pStyle.GetConfig());//添加样式
        spatialAreaMeasure = map.CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数必须为AnalysisLayer
        map.AddLayer(spatialAreaMeasure);//添加图层
    }else{
        alert("请勿重复创建!");
    }
}
//更新三维面积测量
function updateAreaMeasure(){ 
    if(spatialAreaMeasure){
        var tlo = map.CreateLayerOptions("spatialAreaMeasure ");//创建图层配置对象,任意名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName","as_area");//数据源类型,as_area代表面积测量
        tlo.AddConfig("PointColor", "0,1,0,1.0");//点颜色
        tlo.AddConfig("PointSize", "7");//点大小
        tlo.AddConfig("AreaMeasureLineColor", "1,0,0,0.1");//线颜色
        tlo.AddConfig("PolygonColor", "0.5,0.6,0,0.4");//面颜色
        tlo.AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
        //创建文字符号
        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","11");//显示单位。10-平方米; 11-公顷; 12-平方公里; 13-平方海里
        pSymbol.AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
        pSymbol.AddConfig("CoordinateSystemType","0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true

        var pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        tlo.AddConfig("Style", pStyle.GetConfig());//添加样式
        spatialAreaMeasure.UpdateLayerOptions(tlo);//更新图层
    }else{
        alert("请创建测量对象!");
    }
}
//获取三维面积测量结果
function getAreaMeasure(){
    if(spatialAreaMeasure){
        var opt = spatialAreaMeasure.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 removeAreaMeasure(){
    if(spatialAreaMeasure){
        map.RemoveLayer(spatialAreaMeasure); //删除图层
        spatialAreaMeasure = null;
    }
}

C++调用

BaseObjectCOMLib::ILayerObjectPtr spatialAreaMeasure;//三维面积测量图层对象
//创建三维面积测量
void Cf2c4SpatialAreaMeasureDlg::OnBnClickedcreateareameasure()
{
    if(spatialAreaMeasure)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName","as_area");//数据源类型,as_area代表面积测量
    tlo->AddConfig("PointColor", "0,1,0,1.0");//点颜色
    tlo->AddConfig("PointSize", "7");//点大小
    tlo->AddConfig("AreaMeasureLineColor", "1,0,0,0.1");//线颜色
    tlo->AddConfig("PolygonColor", "0.5,0.6,0,0.4");//面颜色
    tlo->AddConfig("AreaMeasureType", "0");//测量类型。0-空间面积测量;1-水平面积测量;2-地表面积测量
    tlo->AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
    //tlo->AddConfig("NonIntersect","2");//非相交图层,1-分析,2-地形,3-模型,4-矢量(未贴地),5-矢量模板阴影体,6-矢量(贴地),7-倾斜摄影数据
    //创建文字符号
    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("CoordinateSystemType","0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
    pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true

    ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
    pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
    //将样式添加到图层配置里
    tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
    spatialAreaMeasure = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
    map->AddLayer(spatialAreaMeasure);//添加图层
}
//更新三维面积测量
void Cf2c4SpatialAreaMeasureDlg::OnBnClickedupdateareameasure()
{
    if(!spatialAreaMeasure)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("PointColor", "0,1,0,1.0");//点颜色
    tlo->AddConfig("PointSize", "7");//点大小
    tlo->AddConfig("AreaMeasureLineColor", "1,0,0,0.1");//线颜色
    tlo->AddConfig("PolygonColor", "0,0.7,0.4,0.5");//面颜色
    tlo->AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
    //创建文字符号
    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","11");//显示单位。10-平方米; 11-公顷;12-平方公里;13-平方海里
    pSymbol->AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
    pSymbol->AddConfig("CoordinateSystemType","0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
    pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true

    ConfigOptionsCOMLib::IStylePtr pStyle = (ConfigOptionsCOMLib::IStylePtr)map->CreateStyle("Text");//创建样式
    pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
    //将样式添加到图层配置里
    tlo->AddConfig("Style", pStyle->GetConfig());//添加样式
    spatialAreaMeasure->UpdateLayerOptions(tlo);//更新图层
}
//获取三维面积测量结果
void Cf2c4SpatialAreaMeasureDlg::OnBnClickedgetareameasure()
{
    if(!spatialAreaMeasure)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = spatialAreaMeasure->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 Cf2c4SpatialAreaMeasureDlg::OnBnClickedremoveareameasure()
{
    if(!spatialAreaMeasure)
    {
        return;
    }
    map->RemoveLayer(spatialAreaMeasure);//删除图层
    spatialAreaMeasure = NULL;
}

C#调用

ILayerObject spatialAreaMeasure = null; 
string FontUrl = "C:\\WINDOWS\\Fonts\\msyh.ttf";//文字字体路径
//创建三维面积测量
private void createAreaMeasure_Click(object sender, EventArgs e)
{
    if (spatialAreaMeasure == null)
    {
        //创建图层配置信息
        ILayerOptions tlo = map.CreateLayerOptions("spatialAreaMeasure");//创建图层配置对象,任意名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName", "as_area");//数据源类型,as_area代表面积测量
        tlo.AddConfig("PointColor", "1,1,0,1.0");//点颜色
        tlo.AddConfig("PointSize", "10");//点大小
        tlo.AddConfig("AreaMeasureLineColor", "0,0.9,0.2,1.0");//线颜色
        tlo.AddConfig("PolygonColor", "0,0.7,0.4,0.5");//面颜色
        tlo.AddConfig("AreaMeasureType", "0");//测量类型。0-空间面积测量;1-水平面积测量;2-地表面积测量
        tlo.AddConfig("IsDepthTest", "false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
        //tlo.AddConfig("NonIntersect","2");//非相交图层,1-分析,2-地形,3-模型,4-矢量(未贴地),5-矢量模板阴影体,6-矢量(贴地),7-倾斜摄影数据
        //创建文字符号
        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", "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("MeasureUnitType","10");//显示单位。10-平方米; 11-公顷; 12-平方公里; 13-平方海里
        pSymbol.AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
        pSymbol.AddConfig("CoordinateSystemType","0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true

        IStyle pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        tlo.AddConfig("Style", pStyle.GetConfig());//添加样式
        spatialAreaMeasure = map.CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数必须为AnalysisLayer
        map.AddLayer(spatialAreaMeasure);//添加图层
    }
    else
    {
        MessageBox.Show("请勿重复创建!");
    }
}
//更新三维面积测量
private void updateAreaMeasure_Click(object sender, EventArgs e)
{
    if (spatialAreaMeasure != null)
    {
        ILayerOptions tlo = map.CreateLayerOptions("spatialAreaMeasure ");//创建图层配置对象,任意名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName", "as_area");//数据源类型,as_area代表面积测量
        tlo.AddConfig("PointColor", "0,1,0,1.0");//点颜色
        tlo.AddConfig("PointSize", "7");//点大小
        tlo.AddConfig("AreaMeasureLineColor", "1,0,0,0.1");//线颜色
        tlo.AddConfig("PolygonColor", "0.5,0.6,0,0.4");//面颜色
        tlo.AddConfig("MeasureUnit", "12");//显示单位。10-平方米;11-公顷;12-平方公里;13-平方海里
        tlo.AddConfig("MeasureUnitLanguage", "1");//显示语言。0-英文;1-中文
        tlo.AddConfig("IsDepthTest", "false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
        //创建文字符号
        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","11");//显示单位。10-平方米; 11-公顷; 12-平方公里; 13-平方海里
        pSymbol.AddConfig("MeasureUnitLanguage","1");//显示语言。0-英文;1-中文
        pSymbol.AddConfig("CoordinateSystemType","0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true

        IStyle pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        tlo.AddConfig("Style", pStyle.GetConfig());//添加样式
        spatialAreaMeasure.UpdateLayerOptions(tlo);//更新图层
    }
    else
    {
        MessageBox.Show("请创建测量对象!");
    }
}
//获取三维面积测量结果
private void getAreaMeasure_Click(object sender, EventArgs e)
{
    if (spatialAreaMeasure != null)
    {
        ILayerOptions opt = spatialAreaMeasure.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 removeAreaMeasure_Click(object sender, EventArgs e)
{
    if (spatialAreaMeasure != null)
    {
        map.RemoveLayer(spatialAreaMeasure); //删除图层
        spatialAreaMeasure = null;
    }
}

results matching ""

    No results matching ""