2.3.8 建筑间距测量
建筑间距测量
建筑间距测量是指测量场景中的两个建筑模型之间的距离。它是在选中两个模型后,建立模型中心点在水平方向上的连接线,然后在连接线上构建两个垂直的测量辅助面,最终计算测量辅助面之间的距离。在使用时可以调整测量辅助面的位置,以确保模型建筑的距离是真实间距。
主要包括添加(创建)、更新、显隐、删除和获取结果5种操作。
注意:可创建空的测量图层,也可创建预设的测量图层,如需创建预设测量图层,则IsLoad
, IsActive
, StartPoint
,EndPoint
四个参数需要同时配置。
下图是建筑间距测量效果:
参数说明
建筑间距测量可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
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,则TextLiftUp 和Style 配置都无效 |
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;
}