Skyline根据适量数据生成三维管线.docx
《Skyline根据适量数据生成三维管线.docx》由会员分享,可在线阅读,更多相关《Skyline根据适量数据生成三维管线.docx(15页珍藏版)》请在冰豆网上搜索。
![Skyline根据适量数据生成三维管线.docx](https://file1.bdocx.com/fileroot1/2023-2/4/d9149d13-8900-43ce-9ddb-9b23be46e417/d9149d13-8900-43ce-9ddb-9b23be46e4171.gif)
Skyline根据适量数据生成三维管线
Skyline在三维管线中的应用
(北京东方道迩信息技术有限责任公司事业部skyline业务部)
摘要:
随着数字城市在管理和应用中的不断发展,城市管网系统也在国内部分大中城市中也已经应用起来,广泛应用于城市规划、市政、供排水、燃气、通讯、园林绿化等行业。
城市管网为城市建设的规范化、科学化、数字化、智能化及其信息管理、信息共享建设,提供了有效的进行科学化的管理手段。
基于Skyline的数字地下管线建设,可以更直观的展示各种管线在城市管网系统中位置,如果遇到突发事件,它能对事故做出更加形象的三维可视化展示,并且能及时、准确地对进行中事态发展的做预测演示,能为决策者果断采取有效控制措施提供三维空间展示功能,使损失降到最低。
关键词:
skyline三维管线生成;城市管网;管线;地下管线;数字城市
1、概述
随着城市规模不断的扩大和生活水平的日益提高,城市地下管网系统越来越庞大。
如何应对社会的发展,更好地服务于社会,作为城市的重要组成部分,地下管网将面临管理上的更高要求和严峻考验。
管网系统在国内部分大中城市已经应用起来,中西部地区也在加紧了建设的步伐。
但是,仍然有许多城市应用效果并不良好。
这一方面是由于各单位自身的原因,另一方面是系统本身技术落后,不够灵活,不能适应发展的需求。
以实际项目经验为依据,从地下管线系统的数据结构,结合Skyline的应用,简易介绍Skylie三维GIS技术在地下管网系统中的应用,引导用户建立一个先进、灵活、实用、安全、高效、三维立体的地下管网地理信息系统。
2、地下管网数据结构
地下管网数据中包括两部分:
一部分是管线矢量数据,另一部分是管点矢量数据。
管线数据
类别
层名
表名
代码
几何类型
说明
给排水管线
水系统管沟
SL_PL_SXTGG
20100
Polyline
生产新水管
SL_PL_SCXSG
20101
Polyline
生活消防给水管
SL_PL_SHXFGSG
20102
Polyline
软水补充水管
SL_PL_RSBCSG
20103
Polyline
净环给水管
SL_PL_JHGSG
20104
Polyline
净环回水管
SL_PL_JHGHSG
20105
Polyline
浊环给水管
SL_PL_ZHGSG
20106
Polyline
浊环回水管
SL_PL_ZHHSG
20107
Polyline
风机除尘水送架空流槽
SL_PL_FJCCSSJKLC
20108
Polyline
生产生活雨水排水管
SL_PL_SCSHYSPSG
20109
Polyline
软环水管
SL_PL_RHSG
20110
Polyline
电力管线
电缆电讯管沟
DL_PL_DLDXGG
20200
Polyline
动力电缆
DL_PL_DLDL
20201
Polyline
照明电缆
DL_PL_ZMDL
20202
Polyline
电缆电讯
DL_PL_DLDX
20203
Polyline
网线
DL_PL_WX
20204
Polyline
热力管线
蒸气管
RL_PL_ZQG
20301
Polyline
压缩空气管
RL_PL_YSKQG
20302
Polyline
冷风气管
RL_PL_LFQG
20303
Polyline
燃气管线
高炉煤气
RQ_PL_GLMQ
20401
Polyline
转炉煤气
RQ_PL_ZLMQ
20402
Polyline
焦炉煤气
RQ_PL_JLMQ
20403
Polyline
气体管
氧气管
QT_PL_YQG
20501
Polyline
氮气管
QT_PL_DQG
20502
Polyline
氩气管
QT_PL_YQG
20503
Polyline
管点数据
层名
表名
代码
几何类型
说明
阀门
GD_PP_FM
30001
Point
排水器
GD_PP_PSQ
30002
Point
积水坑
GD_PP_JSK
30003
Point
排水井
GD_PP_PSJ
30004
Point
阀门井
GD_PP_FMJ
30005
Point
消防井
GD_PP_XFJ
30006
Point
雨水井
GD_PP_YSJ
30007
Point
支架
GD_PP_ZJ
30008
Point
通风亭
GD_PP_TFT
30009
Point
补偿器
GD_PP_BCQ
30010
Point
放散阀
GD_PP_FSF
30011
Point
人孔
GD_PP_RK
30012
Point
异径管
GD_PP_YJG
30013
Point
法兰
GD_PP_FL
30014
Point
一、管线数据结构中必要的属性字段
Name
Remark
管线种类
可以用来判断管线的在系统中显示的颜色
起点X坐标
某一根管线的起点X坐标
起点Y坐标
某一根管线的起点Y坐标
起点埋深
某一根管线的起点埋深
终点X坐标
某一根管线的终点X坐标
终点Y坐标
某一根管线的终点Y坐标
终点埋深
某一根管线的终点埋深
二、管点数据结构中必要的属性字段
Name
Remark
井X坐标
井的X坐标
井Y坐标
井的Y坐标
井底深
井底深度
旋转角
井的方位角,用于中转、连接管线的
3、Skyline在地下管网支持的数据
由于管线数据的长短不一的特殊要求和Skyline中对象的支持程度,目前管线数据在三维中显示的对象主要是圆柱体对象,即Cylinder对象(Building对象也可以实现);系统可以根据不同数据种类的管线制作不同颜色的三维管线数据,以便区别管线的种类,如果管线颜色有规定,我们也可以制作一个管线颜色符号库。
管点数据在三维中显示的对象主要是模型对象,即Model对象。
根据系统中不同管点数据制作不同的模型;同一种类的管点,根据结构类型的不同也可制作相应的模型。
4、三维管线的生成
三维管线的生成包括两部分:
一、在Skyline中三维管线的生成;二、在Skyline中三维管点的生成。
一、管线生成
由管线的属性数据,管线种类、起点X坐标、起点Y坐标、起点埋深、终点X坐标、终点Y坐标和终点埋深,在skyline三维软件中根据接口CreateCylinder方法,创建三维管线数据(源码算法略)。
在Skyline软件中效果图如图一和图二所示
地下管线管线数据生成展示图一
地下管线管线数据生成展示图二
二、管点生成
由管点的属性数据,井X坐标、井Y坐标、井底深和旋转角,管点在skyline三维软件中根据接口CreateModel方法,创建三维管点数据(源码算法略)。
其中:
旋转角是设置井的方向,用于衔接管线。
在Skyline软件中效果图如图三所示:
地下管线管点生成展示图三
三、示例代码
SkyLine场景中的三维管线同样可以根据管线矢量图层自动生成。
具体思路无非是获得矢量图层的空间信息和相关属性,
然后在三维场景中进行渲染。
下面提供相关样例代码,以供参考。
//生成3D管道
privatevoidbtnBulidPipe_Click(objectsender,EventArgse)
{
MapLayerlyrTemp=newMapLayer();
lyrTemp=(MapLayer)axMap1.Layers.Item(0);
TableDescTabDesc=newTableDesc();
TabDesc=lyrTemp.Records.TableDesc;
Recordsetrecs=lyrTemp.Records;
LinelineTemp;
PointsptsTemp;
ESRI.MapObjects2.Core.PointptTemp,ptBeg,ptEnd;
doubledouPipeGJ=0.0;//管径
stringstrPipeCZ=null;;//材质
//管线数据的属性表中已有字段
//规格材质长度上井管标高下井管标高标高位置岔管类型
//需要传入数据
//起点坐标(x,y,h)终点坐标(z,y,h)管径材质纹理名称其它注释信息
ptBeg=newESRI.MapObjects2.Core.Point();
ptEnd=newESRI.MapObjects2.Core.Point();
intiGroupID=clsObjTree.IsExistGruop(DateTime.Now.Hour.ToString()+DateTime.Now.Minute.ToString()+DateTime.Now.Second.ToString(),"");
for(inti=0;i{
if(recs.Fields.Item("Shape").Value!
=System.DBNull.Value)
{
lineTemp=(Line)recs.Fields.Item("Shape").Value;
}
else
{
return;
}
if(recs.Fields.Item("上井管标高").Value!
=System.DBNull.Value)
{
ptBeg.Z=-(double)recs.Fields.Item("上井管标高").Value;
}
else
{
MessageBox.Show("上井管标高未赋值");
}
if(recs.Fields.Item("下井管标高").Value!
=System.DBNull.Value)
{
ptEnd.Z=-(double)recs.Fields.Item("下井管标高").Value;
}
else
{
MessageBox.Show("下井管标高未赋值");
}
if(recs.Fields.Item("材质").Value!
=System.DBNull.Value)
{
strPipeCZ=(string)recs.Fields.Item("材质").Value;
}
else
{
MessageBox.Show("材质字段未赋值");
}
if(lineTemp.Parts.Count>1)MessageBox.Show("此线有"+lineTemp.Parts.Count.ToString()+"个部分。
");
for(intj=0;j{
ptsTemp=(Points)lineTemp.Parts.Item(j);
if(ptsTemp.Count>2)MessageBox.Show("此线有"+ptsTemp.Count.ToString()+"个端点。
");
ptTemp=(ESRI.MapObjects2.Core.Point)ptsTemp.Item(0);
ptBeg.X=ptTemp.X;
ptBeg.Y=ptTemp.Y;
ptTemp=(ESRI.MapObjects2.Core.Point)ptsTemp.Item
(1);
ptEnd.X=ptTemp.X;
ptEnd.Y=ptTemp.Y;
CreatePipe(ptBeg.X,ptBeg.Y,ptBeg.Z,ptEnd.X,ptEnd.Y,ptEnd.Z,strPipeCZ,douPipeGJ,i,iGroupID);
}
recs.MoveNext();
}
}
///
///生成三维管线
///
///起点X值
///起点Y值
///起点Z值
///终点X值
///终点Y值
///终点Z值
///管线材质
///管线管径
privatevoidCreatePipe(doublex1,doubley1,doublez1,doublex2,doubley2,doublez2,stringstrPipeCZ,doubledouPipeGJ,intFid,intiGroupID)
{
//关于传入参数的说明
//管线的边线的颜色和透明度填充颜色和透明度(或者采用纹理)管径为圆柱半径
//thrownewException("Themethodoroperationisnotimplemented.");
doubledouPipeLength=clsTE.CoordSys.GetDistanceEx(x1,y1,z1,x2,y2,z2);//管线长度
intiNumOfSegments=20;//圆柱构成面数
intiLineColor=33023;
doubledouFillOpacity=0.7;
intiFillColor=255;
//stringstrDescription="3D管道";
douPipeGJ=0.6;
objectoYaw,oPitch;
doubledouYaw;
TerraExplorerX.ITerrain3DRegBase5te3DEegBase5;
if(z1{
clsTE.CoordSys.GetAimingAngles(x1,y1,z1,x2,y2,z2,outoYaw,outoPitch);
if((double)oYaw<180)
{
douYaw=(double)oYaw+180;
}
else
{
douYaw=(double)oYaw-180;
}
te3DEegBase5=(TerraExplorerX.ITerrain3DRegBase5)clsTE.ObjectManager.CreateCylinder(x1,y1,z1,douPipeGJ,douPipeLength,iNumOfSegments,iLineColor,douFillOpacity,iFillColor,HeightStyleCode.HSC_TERRAIN_ABSOLUTE,iGroupID,Fid.ToString());
te3DEegBase5.SetPosition(x1,y1,z1,douYaw,90-(double)oPitch,0.0,7);
}
else
{
clsTE.CoordSys.GetAimingAngles(x2,y2,z2,x1,y1,z1,outoYaw,outoPitch);
if((double)oYaw<180)
{
douYaw=(double)oYaw+180;
}
else
{
douYaw=(double)oYaw-180;
}
te3DEegBase5=(TerraExplorerX.ITerrain3DRegBase5)clsTE.ObjectManager.CreateCylinder(x2,y2,z2,douPipeGJ,douPipeLength,iNumOfSegments,iLineColor,douFillOpacity,iFillColor,HeightStyleCode.HSC_TERRAIN_ABSOLUTE,iGroupID,Fid.ToString());
te3DEegBase5.SetPosition(x2,y2,z2,douYaw,90-(double)oPitch,0.0,7);
}
te3DEegBase5.ToolTipText=Fid.ToString();
}
四、结束语
解决任何问题,都是需要有基础的。
很多时候不是说你要采用多么高明的、高深的技术去完成一个项目,而是看你是采用什么思维方式完成如这个项目,采用什么样的思维方式更方便的去解决问题,而这样的思维方式取决于你对整个项目系统需求的了解,因此只有深入了解整个项目的需求,全面把握整个项目的可维护性、可扩展性和可复用性产品程序,不仅对将来的整个项目很有帮助,而且也会对我们自身也很有帮助。
这里只简要说明管线数据生成的原理,项目还是需要具体问题具体分析,才能达到预期的目标。
[参考文献]
[1]范刚龙.供热管网设计计算模型优化研究[J].郑州大学学报:
理学版,2005,37(3):
61-63.
[2]彭芳乐.孙德新.袁大军.廖少明.朱合华城市道路地下空间与共同沟[期刊论文]-给水排水2003(4);
[3]常河;GoogleSketchUp与ArcGIS在城市三维地下综合管网中的应用研究[D];昆明理工大学;2008年
[4]乔淑娟;基于GIS的城市地下管网空间数据模型及其可视化研究[D];首都师范大学;2006年
[5]寇有观.“数字城市”的规划研究[J].电脑知识与技术,2006.
[6]文俊浩,赵有声,青虹宏.数字城市与城市可持续发展的相互关系的分析[N].重庆建筑大学学报,2004,
(2).
[7]Skyline公司,TerraExplorerProUserManual[M],技术白皮书,2009.
[8]沈阳金建数字城市软件有限公司(ShenyangJinjianDigitalCitySoftwareLtd.)