2.3.8 建筑间距测量


建筑间距测量

建筑间距测量是指测量场景中的两个建筑模型之间的距离。它是在选中两个模型后,建立模型中心点在水平方向上的连接线,然后在连接线上构建两个垂直的测量辅助面,最终计算测量辅助面之间的距离。在使用时可以调整测量辅助面的位置,以确保模型建筑的距离是真实间距。

主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。

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

下图是建筑间距测量效果:

  

参数说明

建筑间距测量可配置的参数如下表所示:

配置项 配置说明 值类型 备注
LayerOptionsName 图层配置对象名称 string 分析图层需配置为:AnalysisLayerOptions
DataSourceTypeName 数据源类型 string as_buildinginterval代表建筑间距测量
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之间
PolygonColor 立面颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
PolygonLineColor 立面线框颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
PolygonWidth 立面宽度 double 垂直立面宽度。单位(米)。默认:100
StartPolygonDistance 起始立面移动距离 double 起始立面移动距离。向外为负,向内为正。单位(米)。默认:0
EndPolygonDistance 终止立面移动距离 double 终止立面移动距离。向外为负,向内为正。单位(米)。默认:0
IsPickPolygon 拾取开启拾取立面 bool 开启拾取后,可以点击立面并调整立面位置。默认为false
PickPolygonColor 拾取立面线框颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
IsDepthTest 是否开启深度测试 bool 默认为false。false不开启,结果会浮在场景上,true实际显示位置
TextVisible 是否显示文字 bool 默认为false。如为false,则TextLiftUpStyle配置都无效
TextLiftUp 文字抬高高度 float 默认为0.0
Style 添加样式 string 配置文字样式,配置信息参考文字样式配置
IsLoad 是否初始化加载点 bool 默认为false
IsActive 是否激活分析 bool 默认为true,表示是否可操作场景进行绘制
Points 坐标点集 x,y,z列表 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾
IsWorld 是否世界坐标点 bool 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true
StartPoint 起始点坐标 x,y,z 需传入经度,纬度,高程坐标
EndPoint 终止点坐标 x,y,z 需传入经度,纬度,高程坐标
NonIntersect 非相交图层 int列表 该分析与场景哪些类型图层不相交。1-分析,2-地形,3-模型,4-矢量(未贴地),5-矢量模板阴影体,6-矢量(贴地),7-倾斜摄影。默认为1,即与除分析之外所有图层都相交

获取结果说明

建筑间距测量可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:

配置项 配置说明 值类型 备注
DataSourceTypeName 数据源类型 string as_buildinginterval代表建筑间距测量
IsSuccess 是否创建成功 bool 默认为false
BuildingInterval 测量结果 double 建筑之间的距离值。单位为米
StartPoint 起始点坐标 x,y,z 起始点的经度,纬度,高程坐标
EndPoint 终止点坐标 x,y,z 终止点的经度,纬度,高程坐标
StartPolygonDistance 起始立面移动距离 double 起始立面移动距离。向外为负,向内为正。单位(米)。默认:0
EndPolygonDistance 终止立面移动距离 double 终止立面移动距离。向外为负,向内为正。单位(米)。默认:0

代码调用示例

Javascript调用

var buildInterval = null;
function CreateBuildInterval() {
    if(buildInterval == null){
        //创建图层配置信息
        var tlo = map.CreateLayerOptions("buildInterval"); //创建分析图层配置,任意名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName", "as_buildinginterval");    //数据源类型。as_buildinginterval代表建筑间距测量
        tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0");//点颜色透明度(RGBA)。1-不透明;0-透明。
        tlo.AddConfig("PointSize", "5");//点击点的大小
        tlo.AddConfig("LineColor", "1.0,0.0,0.0,1.0"); //线颜色(RGBA)
        tlo.AddConfig("LineWidth", "2");//线宽(0-10)
        tlo.AddConfig("PolygonColor", "0.5,0.6,0,0.4"); //立面颜色(RGBA)
        tlo.AddConfig("PolygonLineColor", "0,1,0,1"); //立面边框颜色(RGBA)
        tlo.AddConfig("PolygonWidth", "200"); //立面宽度。默认100
        tlo.AddConfig("PolygonHeight", "200"); //立面高度。默认100
        tlo.AddConfig("StartPolygonDistance","50.0");//起始立面移动距离,向外为负,向内为正。默认0
        tlo.AddConfig("EndPolygonDistance","50.0");  //终止立面移动距离,向外为负,向内为正。默认0

        tlo.AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
        tlo.AddConfig("TextVisible", "true");//文字是否被显示
        tlo.AddConfig("TextLiftUp", "20");//文字显示的抬高高度
        //tlo.AddConfig("NonIntersect","1,2");//非相交图层,1:分析,2:地形,3:模型,4:矢量(未贴地),5:矢量模板阴影体,6:矢量(贴地),7:倾斜摄影数据

        //tlo.AddConfig("IsActive","false" );//是否激活测量
        //tlo.AddConfig("IsLoad","true" );//是否加载点坐标
        //tlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
        //tlo.AddConfig("StartPoint","120.215667656,30.2136383941,-1.10956306104"); //点坐标
        //tlo.AddConfig("EndPoint","120.214122717,30.2124231319,-1.11372030433"); //点坐标

        //创建文字符号
        var pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
        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", "10");//文字大小
        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", "true");//字体是否有下划线
        pSymbol.AddConfig("IsBack", "true");//是否设置背景色
        pSymbol.AddConfig("BackColor", "0,1.0,1.0,1"); //背景颜色,是否设置背景色为true有效
        pSymbol.AddConfig("HorizonSpaceSize", "5");//字符水平间隔距离
        pSymbol.AddConfig("FieldPrecision","6");//显示精度
        pSymbol.AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置

        pSymbol.AddConfig("MeasureUnitType","0");//显示单位。0-米;1-公里;2-海里
        pSymbol.AddConfig("MeasureUnitLanguage","0");//显示语言。0-英文;1-中文
        pSymbol.AddConfig("CoordinateSystemType","0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
        pSymbol.AddConfig("IsDepthTest","true");//是否开启深度测试。默认为true
        //创建样式
        var pStyle = map.CreateStyle("Text");        //创建Style,名字可以任意
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig()); //将符号对象添加到样式,第一参数为符号类型
        //将样式添加到图层配置里
        tlo.AddConfig("Style", pStyle.GetConfig()); //添加样式

        buildInterval = map.CreateLayer("AnalysisLayer", tlo); //创建分析图层,第一项参数必须为AnalysisLayer
        map.AddLayer(buildInterval); //添加图层
    }else{
        alert("请勿重复创建!");
    }
}

//更新建筑间距测量
function UpdateBuildInterval() {
    if( null != buildInterval )
    {
        var tlo = map.CreateLayerOptions("buildInterval"); //创建分析图层配置,任意名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName", "as_buildinginterval");    //数据源类型。as_buildinginterval代表建筑间距测量
        tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0");//点颜色透明度(RGBA)。1-不透明;0-透明。
        tlo.AddConfig("PointSize", "5");//点击点的大小
        tlo.AddConfig("LineColor", "0.0,1.0,0.0,1.0"); //线颜色(RGBA)
        tlo.AddConfig("LineWidth", "4");//线宽(0-10)
        tlo.AddConfig("PolygonColor", "0.0,0.0,1,0.8"); //立面颜色(RGBA)
        tlo.AddConfig("PolygonLineColor", "0,1,0,1"); //立面边框颜色(RGBA)
        tlo.AddConfig("PolygonWidth", "150"); //立面宽度。默认100
        tlo.AddConfig("PolygonHeight", "150"); //立面高度。默认100
        tlo.AddConfig("StartPolygonDistance","60.0");//起始立面移动距离,向外为负,向内为正。默认0
        tlo.AddConfig("EndPolygonDistance","100.0"); //终止立面移动距离,向外为负,向内为正。默认0

        tlo.AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
        tlo.AddConfig("TextVisible", "true");//文字是否被显示
        tlo.AddConfig("TextLiftUp", "20");//文字显示的抬高高度
        //tlo.AddConfig("NonIntersect","1,2");//非相交图层,1:分析,2:地形,3:模型,4:矢量(未贴地),5:矢量模板阴影体,6:矢量(贴地),7:倾斜摄影数据

        //tlo.AddConfig("IsActive","false" );//是否激活测量
        //tlo.AddConfig("IsLoad","true" );//是否加载点坐标
        //tlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
        //tlo.AddConfig("StartPoint","120.215667656,30.2136383941,-1.10956306104"); //点坐标
        //tlo.AddConfig("EndPoint","120.214122717,30.2124231319,-1.11372030433"); //点坐标

        //创建文字符号
        var pSymbol = map.CreateSymbol("AnalysisTextSymbol"); //创建文字符号,分析文字为:AnalysisTextSymbol
        pSymbol.AddConfig("FillingColor", "1.0, 1.0, 0.0, 1.0"); //设置文字颜色(RGBA)
        pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF"); //设置字体类型,字体文件一定要存在
        pSymbol.AddConfig("Size", "40");//字体精度大小
        pSymbol.AddConfig("CharacterSize", "14");//文字大小
        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", "true");//字体是否有下划线
        pSymbol.AddConfig("IsBack", "true");//是否设置背景色
        pSymbol.AddConfig("BackColor", "1.0,0,1.0,1"); //背景颜色,是否设置背景色为true有效
        pSymbol.AddConfig("FieldPrecision","10");//显示精度

        pSymbol.AddConfig("MeasureUnitType","0");//显示单位。0-米;1-公里;2-海里
        pSymbol.AddConfig("MeasureUnitLanguage","0");//显示语言。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()); //添加样式
        buildInterval.UpdateLayerOptions(tlo);     //更新参数设置项
    }else{
        alert("请创建测量对象!");
    }
}

//调整建筑间距测量
function MoveBuildInterval() {
    if( null != buildInterval )
    {
        var tlo = map.CreateLayerOptions("buildInterval"); //创建分析图层配置,任意名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName", "as_buildinginterval");    //数据源类型。as_buildinginterval代表建筑间距测量
        tlo.AddConfig("IsPickPolygon","true");//是否拾取立面。默认false -开启拾取可以移动立面
        tlo.AddConfig("PickPolygonColor", "true");//拾取立面颜色(RGBA)
        buildInterval.UpdateLayerOptions(tlo);     //更新参数设置项
    }
}

//获取建筑间距测量结果
function GetBuildInterval() {
    var opt = buildInterval.GetLayerResult();        //获取图层结果
    //判断当前图层数据源类型
    if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_buildinginterval")
    {
        var IsSuccess = opt.GetConfigValueByKey("IsSuccess");//获取是否创建成功
        var Intervals = opt.GetConfigValueByKey("BuildingInterval");//获取建筑间距的距离值
        var StartPoint = opt.GetConfigValueByKey("StartPoint"); //获取起始点坐标
        var EndPoint = opt.GetConfigValueByKey("EndPoint"); //获取终止点坐标
        var StartPolygonDistance = opt.GetConfigValueByKey("StartPolygonDistance"); //获取起始立面移动距离
        var EndPolygonDistance = opt.GetConfigValueByKey("EndPolygonDistance"); //获取终止立面移动距离
        alert("是否成功:" + IsSuccess + "\n距离:" + Intervals + "\n起始点:" + StartPoint
         + "\n终止点:" + EndPoint + "\n起始立面距离:" + StartPolygonDistance + ";终止立面距离:" + EndPolygonDistance);
    }
}

//删除建筑间距测量
function RemoveBuildInterval() {
    map.RemoveLayer(buildInterval);//删除建筑间距测量
    buildInterval = null;
}

C++调用

BaseObjectCOMLib::ILayerObjectPtr buildInterval;//建筑间距测量图层对象
void CbuildingintervalDlg::OnBnClickedCreatebuildinterval()
{
    if(buildInterval == NULL){
        //创建图层配置信息
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("buildInterval"); //创建分析图层配置,任意名称
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo->AddConfig("DataSourceTypeName", "as_buildinginterval");    //数据源类型。as_buildinginterval代表建筑间距测量
        tlo->AddConfig("PointColor", "0.0,0.0,1.0,1.0");//点颜色透明度(RGBA)。1-不透明;0-透明。
        tlo->AddConfig("PointSize", "5");//点击点的大小
        tlo->AddConfig("LineColor", "1.0,0.0,0.0,1.0"); //线颜色(RGBA)
        tlo->AddConfig("LineWidth", "2");//线宽(0-10)
        tlo->AddConfig("PolygonColor", "0.5,0.6,0,0.4"); //立面颜色(RGBA)
        tlo->AddConfig("PolygonLineColor", "0,1,0,1"); //立面边框颜色(RGBA)
        tlo->AddConfig("PolygonWidth", "200"); //立面宽度。默认100
        tlo->AddConfig("PolygonHeight", "200"); //立面高度。默认100
        tlo->AddConfig("StartPolygonDistance","50.0");//起始立面移动距离,向外为负,向内为正。默认0
        tlo->AddConfig("EndPolygonDistance","50.0");  //终止立面移动距离,向外为负,向内为正。默认0

        tlo->AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
        tlo->AddConfig("TextVisible", "true");//文字是否被显示
        tlo->AddConfig("TextLiftUp", "20");//文字显示的抬高高度
        //tlo->AddConfig("NonIntersect","1,2");//非相交图层,1:分析,2:地形,3:模型,4:矢量(未贴地),5:矢量模板阴影体,6:矢量(贴地),7:倾斜摄影数据

        //tlo->AddConfig("IsActive","false" );//是否激活测量
        //tlo->AddConfig("IsLoad","true" );//是否加载点坐标
        //tlo->AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
        //tlo->AddConfig("StartPoint","120.215667656,30.2136383941,-1.10956306104"); //点坐标
        //tlo->AddConfig("EndPoint","120.214122717,30.2124231319,-1.11372030433"); //点坐标

        //创建文字符号
        ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = map->CreateSymbol("AnalysisTextSymbol"); //创建文字符号,分析文字为:AnalysisTextSymbol
        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", "10");//文字大小
        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", "true");//字体是否有下划线
        pSymbol->AddConfig("IsBack", "true");//是否设置背景色
        pSymbol->AddConfig("BackColor", "0,1.0,1.0,1"); //背景颜色,是否设置背景色为true有效
        pSymbol->AddConfig("HorizonSpaceSize", "5");//字符水平间隔距离
        pSymbol->AddConfig("FieldPrecision","6");//显示精度
        pSymbol->AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置

        pSymbol->AddConfig("MeasureUnitType","0");//显示单位。0-米;1-公里;2-海里
        pSymbol->AddConfig("MeasureUnitLanguage","0");//显示语言。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()); //添加样式

        buildInterval = map->CreateLayer("AnalysisLayer", tlo); //创建分析图层,第一项参数必须为AnalysisLayer
        map->AddLayer(buildInterval); //添加图层
    }else{
        MessageBox(L"请勿重复创建!");
    }
}


void CbuildingintervalDlg::OnBnClickedUpdatebuildinterval()
{
    if( NULL != buildInterval )
    {
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("buildInterval"); //创建分析图层配置,任意名称
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo->AddConfig("DataSourceTypeName", "as_buildinginterval");    //数据源类型。as_buildinginterval代表建筑间距测量
        tlo->AddConfig("PointColor", "0.0,0.0,1.0,1.0");//点颜色透明度(RGBA)。1-不透明;0-透明。
        tlo->AddConfig("PointSize", "5");//点击点的大小
        tlo->AddConfig("LineColor", "0.0,1.0,0.0,1.0"); //线颜色(RGBA)
        tlo->AddConfig("LineWidth", "4");//线宽(0-10)
        tlo->AddConfig("PolygonColor", "0.0,0.0,1,0.8"); //立面颜色(RGBA)
        tlo->AddConfig("PolygonLineColor", "0,1,0,1"); //立面边框颜色(RGBA)
        tlo->AddConfig("PolygonWidth", "150"); //立面宽度。默认100
        tlo->AddConfig("PolygonHeight", "150"); //立面高度。默认100
        tlo->AddConfig("StartPolygonDistance","60.0");//起始立面移动距离,向外为负,向内为正。默认0
        tlo->AddConfig("EndPolygonDistance","100.0"); //终止立面移动距离,向外为负,向内为正。默认0

        tlo->AddConfig("IsDepthTest","false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
        tlo->AddConfig("TextVisible", "true");//文字是否被显示
        tlo->AddConfig("TextLiftUp", "20");//文字显示的抬高高度
        //tlo->AddConfig("NonIntersect","1,2");//非相交图层,1:分析,2:地形,3:模型,4:矢量(未贴地),5:矢量模板阴影体,6:矢量(贴地),7:倾斜摄影数据

        //tlo->AddConfig("IsActive","false" );//是否激活测量
        //tlo->AddConfig("IsLoad","true" );//是否加载点坐标
        //tlo->AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
        //tlo->AddConfig("StartPoint","120.215667656,30.2136383941,-1.10956306104"); //点坐标
        //tlo->AddConfig("EndPoint","120.214122717,30.2124231319,-1.11372030433"); //点坐标

        //创建文字符号
        ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol = map->CreateSymbol("AnalysisTextSymbol"); //创建文字符号,分析文字为:AnalysisTextSymbol
        pSymbol->AddConfig("FillingColor", "1.0, 1.0, 0.0, 1.0"); //设置文字颜色(RGBA)
        pSymbol->AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF"); //设置字体类型,字体文件一定要存在
        pSymbol->AddConfig("Size", "40");//字体精度大小
        pSymbol->AddConfig("CharacterSize", "14");//文字大小
        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", "true");//字体是否有下划线
        pSymbol->AddConfig("IsBack", "true");//是否设置背景色
        pSymbol->AddConfig("BackColor", "1.0,0,1.0,1"); //背景颜色,是否设置背景色为true有效
        pSymbol->AddConfig("FieldPrecision","10");//显示精度
        pSymbol->AddConfig("IsDepthTest","true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置
        pSymbol->AddConfig("MeasureUnitType","0");//显示单位。0-米;1-公里;2-海里
        pSymbol->AddConfig("MeasureUnitLanguage","0");//显示语言。0-英文;1-中文
        pSymbol->AddConfig("CoordinateSystemType","0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ

        //创建样式
        ConfigOptionsCOMLib::IStylePtr pStyle = map->CreateStyle("Text");//创建Style,名字可以任意
        pStyle->AddSymbol("AnalysisTextSymbol", pSymbol->GetConfig()); //将符号对象添加到样式,第一参数为符号类型
        tlo->AddConfig("Style", pStyle->GetConfig()); //添加样式
        buildInterval->UpdateLayerOptions(tlo); //更新参数设置项
    }else{
        MessageBox(L"请创建测量对象!");
    }
}


void CbuildingintervalDlg::OnBnClickedMovebuildinterval()
{
    if( NULL != buildInterval )
    {
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("buildInterval"); //创建分析图层配置,任意名称
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo->AddConfig("DataSourceTypeName", "as_buildinginterval");    //数据源类型。as_buildinginterval代表建筑间距测量
        tlo->AddConfig("IsPickPolygon","true");//是否拾取立面。默认false -开启拾取可以移动立面
        tlo->AddConfig("PickPolygonColor", "true");//拾取立面颜色(RGBA)
        buildInterval->UpdateLayerOptions(tlo);     //更新参数设置项
    }
}


void CbuildingintervalDlg::OnBnClickedGetbuildinterval()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = buildInterval->GetLayerResult();        //获取图层结果
    //判断当前图层数据源类型
    std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获得数据源类型
    if(DataSourceTypeName == "as_buildinginterval")
    {
        CString IsSuccess = opt->GetConfigValueByKey("IsSuccess");//获取是否创建成功
        CString Intervals = opt->GetConfigValueByKey("BuildingInterval");//获取建筑间距的距离值
        CString StartPoint = opt->GetConfigValueByKey("StartPoint"); //获取起始点坐标
        CString EndPoint = opt->GetConfigValueByKey("EndPoint"); //获取终止点坐标
        CString StartPolygonDistance = opt->GetConfigValueByKey("StartPolygonDistance"); //获取起始立面移动距离
        CString EndPolygonDistance = opt->GetConfigValueByKey("EndPolygonDistance"); //获取终止立面移动距离
        MessageBox(L"是否成功:" + IsSuccess + L"\n距离:" + Intervals + L"\n起始点:" + StartPoint
            + L"\n终止点:" + EndPoint + L"\n起始立面距离:" + StartPolygonDistance + L";终止立面距离:" + EndPolygonDistance);
    }
}


void CbuildingintervalDlg::OnBnClickedRemovebuildinterval()
{
    map->RemoveLayer(buildInterval);//删除建筑间距测量
    buildInterval = NULL;
}

C#调用

ILayerObject buildInterval = null;
//创建建筑间距测量
private void CreateBuildInterval_Click(object sender, EventArgs e)
{
    if (buildInterval == null)
    {
        //创建图层配置信息
        ILayerOptions tlo = map.CreateLayerOptions("buildInterval"); //创建分析图层配置,任意名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName", "as_buildinginterval");    //数据源类型。as_buildinginterval代表建筑间距测量
        tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0");//点颜色透明度(RGBA)。1-不透明;0-透明。
        tlo.AddConfig("PointSize", "5");//点击点的大小
        tlo.AddConfig("LineColor", "1.0,0.0,0.0,1.0"); //线颜色(RGBA)
        tlo.AddConfig("LineWidth", "2");//线宽(0-10)
        tlo.AddConfig("PolygonColor", "0.5,0.6,0,0.4"); //立面颜色(RGBA)
        tlo.AddConfig("PolygonLineColor", "0,1,0,1"); //立面边框颜色(RGBA)
        tlo.AddConfig("PolygonWidth", "200"); //立面宽度。默认100
        tlo.AddConfig("PolygonHeight", "200"); //立面高度。默认100
        tlo.AddConfig("StartPolygonDistance", "50.0");//起始立面移动距离,向外为负,向内为正。默认0
        tlo.AddConfig("EndPolygonDistance", "50.0");  //终止立面移动距离,向外为负,向内为正。默认0

        tlo.AddConfig("IsDepthTest", "false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
        tlo.AddConfig("TextVisible", "true");//文字是否被显示
        tlo.AddConfig("TextLiftUp", "20");//文字显示的抬高高度
        //tlo.AddConfig("NonIntersect","1,2");//非相交图层,1:分析,2:地形,3:模型,4:矢量(未贴地),5:矢量模板阴影体,6:矢量(贴地),7:倾斜摄影数据

        //tlo.AddConfig("IsActive","false" );//是否激活测量
        //tlo.AddConfig("IsLoad","true" );//是否加载点坐标
        //tlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
        //tlo.AddConfig("StartPoint","120.215667656,30.2136383941,-1.10956306104"); //点坐标
        //tlo.AddConfig("EndPoint","120.214122717,30.2124231319,-1.11372030433"); //点坐标

        //创建文字符号
        ISymbolObject pSymbol = map.CreateSymbol("AnalysisTextSymbol");//创建文字符号,分析文字为:AnalysisTextSymbol
        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", "10");//文字大小
        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", "true");//字体是否有下划线
        pSymbol.AddConfig("IsBack", "true");//是否设置背景色
        pSymbol.AddConfig("BackColor", "0,1.0,1.0,1"); //背景颜色,是否设置背景色为true有效
        pSymbol.AddConfig("HorizonSpaceSize", "5");//字符水平间隔距离
        pSymbol.AddConfig("FieldPrecision", "6");//显示精度
        pSymbol.AddConfig("IsDepthTest", "false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置

        pSymbol.AddConfig("MeasureUnitType", "0");//显示单位。0-米;1-公里;2-海里
        pSymbol.AddConfig("MeasureUnitLanguage", "0");//显示语言。0-英文;1-中文
        pSymbol.AddConfig("CoordinateSystemType", "0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ
        //创建样式
        IStyle pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig()); //将符号对象添加到样式,第一参数为符号类型
        tlo.AddConfig("Style", pStyle.GetConfig()); //添加样式

        buildInterval = map.CreateLayer("AnalysisLayer", tlo); //创建分析图层,第一项参数必须为AnalysisLayer
        map.AddLayer(buildInterval); //添加图层
    }
    else
    {
        MessageBox.Show("请勿重复创建!");
    }
}

//更新建筑间距测量
private void UpdateBuildInterval_Click(object sender, EventArgs e)
{
    if (null != buildInterval)
    {
        ILayerOptions tlo = map.CreateLayerOptions("buildInterval"); //创建分析图层配置,任意名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName", "as_buildinginterval");    //数据源类型。as_buildinginterval代表建筑间距测量
        tlo.AddConfig("PointColor", "0.0,0.0,1.0,1.0");//点颜色透明度(RGBA)。1-不透明;0-透明。
        tlo.AddConfig("PointSize", "5");//点击点的大小
        tlo.AddConfig("LineColor", "0.0,1.0,0.0,1.0"); //线颜色(RGBA)
        tlo.AddConfig("LineWidth", "4");//线宽(0-10)
        tlo.AddConfig("PolygonColor", "0.0,0.0,1,0.8"); //立面颜色(RGBA)
        tlo.AddConfig("PolygonLineColor", "0,1,0,1"); //立面边框颜色(RGBA)
        tlo.AddConfig("PolygonWidth", "150"); //立面宽度。默认100
        tlo.AddConfig("PolygonHeight", "150"); //立面高度。默认100
        tlo.AddConfig("StartPolygonDistance", "60.0");//起始立面移动距离,向外为负,向内为正。默认0
        tlo.AddConfig("EndPolygonDistance", "100.0"); //终止立面移动距离,向外为负,向内为正。默认0
        tlo.AddConfig("IsDepthTest", "false");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置    
        tlo.AddConfig("TextVisible", "true");//文字是否被显示
        tlo.AddConfig("TextLiftUp", "20");//文字显示的抬高高度
        //tlo.AddConfig("NonIntersect","1,2");//非相交图层,1:分析,2:地形,3:模型,4:矢量(未贴地),5:矢量模板阴影体,6:矢量(贴地),7:倾斜摄影数据

        //tlo.AddConfig("IsActive","false" );//是否激活测量
        //tlo.AddConfig("IsLoad","true" );//是否加载点坐标
        //tlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标
        //tlo.AddConfig("StartPoint","120.215667656,30.2136383941,-1.10956306104"); //点坐标
        //tlo.AddConfig("EndPoint","120.214122717,30.2124231319,-1.11372030433"); //点坐标

        //创建文字符号
        ISymbolObject pSymbol = map.CreateSymbol("AnalysisTextSymbol"); //创建文字符号,分析文字为:AnalysisTextSymbol
        pSymbol.AddConfig("FillingColor", "1.0, 1.0, 0.0, 1.0"); //设置文字颜色(RGBA)
        pSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\STXIHEI.TTF"); //设置字体类型,字体文件一定要存在
        pSymbol.AddConfig("Size", "40");//字体精度大小
        pSymbol.AddConfig("CharacterSize", "14");//文字大小
        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", "true");//字体是否有下划线
        pSymbol.AddConfig("IsBack", "true");//是否设置背景色
        pSymbol.AddConfig("BackColor", "1.0,0,1.0,1"); //背景颜色,是否设置背景色为true有效
        pSymbol.AddConfig("FieldPrecision", "10");//显示精度
        pSymbol.AddConfig("IsDepthTest", "true");//是否开启深度测试。false不开启,结果会浮在场景上,true实际显示位置

        pSymbol.AddConfig("MeasureUnitType", "0");//显示单位。0-米;1-公里;2-海里
        pSymbol.AddConfig("MeasureUnitLanguage", "0");//显示语言。0-英文;1-中文
        pSymbol.AddConfig("CoordinateSystemType", "0");//显示参考系。 0-地理经纬度;1-投影坐标;2-世界坐标系;3-地心空间直角坐标系XYZ

        IStyle pStyle = map.CreateStyle("Text");//创建样式
        pStyle.AddSymbol("AnalysisTextSymbol", pSymbol.GetConfig()); //将符号对象添加到样式,第一参数为符号类型
        tlo.AddConfig("Style", pStyle.GetConfig()); //添加样式
        buildInterval.UpdateLayerOptions(tlo);     //更新参数设置项
    }
    else
    {
        MessageBox.Show("请创建测量对象!");
    }
}
//调整建筑间距测量
private void MoveBuildInterval_Click(object sender, EventArgs e)
{
    if (null != buildInterval)
    {
        ILayerOptions tlo = map.CreateLayerOptions("buildInterval"); //创建分析图层配置,任意名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); //创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName", "as_buildinginterval");    //数据源类型。as_buildinginterval代表建筑间距测量
        tlo.AddConfig("IsPickPolygon", "true");//是否拾取立面。默认false -开启拾取可以移动立面
        tlo.AddConfig("PickPolygonColor", "true");//拾取立面颜色(RGBA)
        buildInterval.UpdateLayerOptions(tlo);     //更新参数设置项
    }
}
//获取建筑间距测量结果
private void GetBuildInterval_Click(object sender, EventArgs e)
{
    ILayerOptions opt = buildInterval.GetLayerResult();        //获取图层结果
    //判断当前图层数据源类型
    if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_buildinginterval")
    {
        string IsSuccess = opt.GetConfigValueByKey("IsSuccess");//获取是否创建成功
        string Intervals = opt.GetConfigValueByKey("BuildingInterval");//获取建筑间距的距离值
        string StartPoint = opt.GetConfigValueByKey("StartPoint"); //获取起始点坐标
        string EndPoint = opt.GetConfigValueByKey("EndPoint"); //获取终止点坐标
        string StartPolygonDistance = opt.GetConfigValueByKey("StartPolygonDistance"); //获取起始立面移动距离
        string EndPolygonDistance = opt.GetConfigValueByKey("EndPolygonDistance"); //获取终止立面移动距离
        MessageBox.Show("是否成功:" + IsSuccess + "\n距离:" + Intervals + "\n起始点:" + StartPoint
         + "\n终止点:" + EndPoint + "\n起始立面距离:" + StartPolygonDistance + ";终止立面距离:" + EndPolygonDistance);
    }
}
//删除建筑间距测量
private void RemoveBuildInterval_Click(object sender, EventArgs e)
{
    map.RemoveLayer(buildInterval);//删除建筑间距测量
    buildInterval = null;
}

results matching ""

    No results matching ""