APP下载

基于Cesium的路基参数化三维建模方法

2020-11-24荆倩婧吴大庆徐帮树李志强

土木建筑工程信息技术 2020年2期
关键词:横断面中心线绘制

荆倩婧 吴大庆 徐帮树 李 良 李志强

(1.山东省建筑设计研究院有限公司, 济南 250001;2.中铁十四局集团第五工程有限公司, 兖州 272117; 3.山东大学齐鲁交通学院,济南 250061)

引言

高速公路作为一种狭长的带状结构,一般由路基、路面、桥梁、涵洞、隧道、交通工程及沿线设施等构成。其中,路基是高速公路的基本组成结构,贯穿于高速公路全线,也是支撑路面结构的基础,与沿线的桥涵、隧道等相连接,更是高速公路与地形融合的媒介。路基三维模型的构建方法是实现高速公路三维可视化过程中的技术关键点和难点。目前,国内外许多学者已对路基的三维建模方法开展了相关研究。

在国外,路基的三维模型主要是利用自主研发的道路设计软件中的相关模块来进行创建。其中,应用较为广泛的道路设计软件主要有:德国汉堡的IB&T软件公司开发的CARD/1系统[1]、美国Intergraph公司的InRoads软件[2-3]、英国Infrasoft公司推出的MXRoad软件[4]、美国Eagle Point软件公司开发的Eagle Point软件[5-7]、挪威的NovaCAD软件、加拿大的GWN-ROAD软件以及比利时的Star Info软件等等。虽然这些软件都具有较强的三维建模功能,但是存在设计规范与国内不相适应、价格昂贵等问题,因此很难将上述软件应用于国内的路基工程之中。

在国内,关于路基的三维建模方面的研究起步稍晚,但是发展迅速,不少学者已进行了相关研究。潘兵宏等[8]提出应用表面模型来构建公路路基三维模型的方法,选用空间四边形平面来模拟路基模型,根据公路平、纵横断面计算确定四边形平面每个顶点的三维点坐标来建立路基模型,并基于AutoCAD平台利用VB或VC语言开发了公路三维建模系统,实现了路基模型的自动化建立。曾勇[9]采用非均匀有理B样条NURBS拟合道路中心线和横断面,并利用蒙面法建立了路面的三维模型,但并未涉及路基模型的建立。周明智等[10]提出了一种基于ArcGIS的公路三维建模方法,分别将公路路线桩号、路线高程与ArcGIS中的M值、Z值相关联,利用ArcScene中的三维可视化功能建立路基的三维模型,极大地提高了建模速度。张毅等[11]采用Trimble GS200地面三维激光扫描仪采集数据,然后对点云数据进行配准、坐标转换及滤波等预处理,最后利用Realworks Survey软件的几何建模功能实现了公路路基三维模型的建立。杨锡鎏等[12]提出了一种结合ANSYS有限元分析软件和OpenGL纹理贴图技术的高速公路结构物仿真建模技术,实现了高速公路路基的仿真建模。潘荣江等[13]基于高速公路横断面设计图文件,首先对平面图进行断面分割,确定了断面图的边界和各个断面的范围,然后进行坐标转换,提取断面的轮廓线,最后沿着公路中心线将多个横断面的轮廓线对齐,进行三角片表面重构,完成了高速公路路基三维模型的构建,有效地提高了模型建立的速度和质量。孙伟利[14]提出了基于车载LiDAR技术的公路路基三维建模方法,首先利用车载激光测量系统采集数据,然后基于扫描线进行滤波处理将地面点云数据和非地面点云数据分开,并对因遮挡而造成缺失的地面点云数据进行修补,有选择性地对冗余数据进行抽稀处理,最后基于扫描线进行三角剖分构建路基三维模型。张波[15]利用CATIA软件中的建模功能,分别建立了道路中心线和路基横断面轮廓,并通过扫掠、镶嵌命令生成了路基的三维实体模型。

综上所述,国内外路基三维模型的建立主要是依靠专业的三维建模软件和道路设计软件中的相关模块来建立。但是,高速公路绵延数百里,路基数量多且尺寸不一样,运用专业的三维建模软件(3DsMax、AutoCAD、Google SketchUp等)构建路基模型时需要耗费大量的人力和时间,而现有的道路设计软件在路基模型的处理上存在不足,因此研究路基三维模型的快速构建方法对高速公路路基三维可视化的实现具有重要意义。

Cesium[16]是一个开源的JavaScript地图引擎,具有地图数据显示等一系列相关操作的功能,只需要浏览器支持WebGL功能即可运行,无需安装任何浏览器插件,可以实现跨浏览器跨平台展示。同时,Cesium利用WebGL进行图形渲染,有利于呈现数据的动态变化。此外,Cesium对一些AJAX(Asynchronous Javascript and XML)功能进行了重新封装,可以实现海量地理空间数据的异步请求。

鉴于此,本文利用开源的JavaScript地图引擎Cesium,通过对Cesium API进行二次开发,实现路基横断面、公路中心线和路基三维模型的快速构建; 利用JavaScript语言设计了路基标准横断面参数设计界面,实现路基标准横断面的参数化构建。研究成果可以为交通规划部门辅助决策提供依据。

1 参数化建模原理

Cesium是一个开源的JavaScript地图引擎,具有地图数据显示等一系列相关操作的功能,只需要浏览器支持WebGL功能即可运行,无需安装任何浏览器插件,可以实现跨浏览器跨平台展示。同时,Cesium利用WebGL进行图形渲染,有利于呈现数据的动态变化。此外,Cesium对一些AJAX(Asynchronous Javascript and XML)功能进行了重新封装,可以实现海量地理空间数据的异步请求。

Cesium给用户提供了两种开发应用程序编程的接口(API),一种为“Primitive API”,该接口使用图形学术语,具有很大的灵活性,适用于面向图形开发人员的底层编程接口。另一种为“Entity API”,是高级别的数据驱动的编程接口,该接口使用一致性设计的、高级别的对象来管理一组相关性的可视化对象,支持多种类型空间数据的可视化。

Cesium提供的Polyline函数可以根据属性positions设置一组三维坐标点作为节点,实现多段线在三维场景内的可视化,并通过设置其它属性,改变其线宽、颜色与贴图等显示效果。PolylineVolume除了可以依据positions设置一组三维坐标点作为节点,还可以根据属性shape设置一组由二维坐标点形成的二维图形作为截面,在positions描述的多段线上扫掠而成得到体。

2 路基三维建模的特点和内容

2.1 特点

路基是指在天然的地表面上根据公路路线的位置以及设计横断面的要求修筑而成的带状构造物[17]。公路路基的三维建模方法与桥梁、隧道不同,因为路基的形态是和地形密切相关的,路基的存在使地形发生了很大的变化,而桥梁、隧道等构筑物则无法对地形产生这种效果。

由于高速公路路基线路长及沿线地形起伏变化的影响,即使同一线路其不同路段断面组成也不尽相同。因此,路基开展三维建模需要考虑如下特点:

(a)填方路基横断面设计图

(b)挖方路基横断面设计图图1 路基横断面设计图

(1)当前路基三维建模的基础依然是传统的路基二维横断面结构(路面、边坡、坡脚和各构造物等);

(2)路基不同路段应考虑填挖特点、不同的横断面结构及实际地形地貌;

(3)路基三维模型既要满足线路全长需要,也要考虑路基全生命周期。

2.2 内容

路基的三维模型是路基设计成果在三维空间中的展示,可以看作是由路基横断面沿着公路中心线扫掠而成的实体模型。因此,本文路基三维建模的主要内容是确定公路中心线和路基横断面的绘制方法,以及如何由路基横断面沿着公路中心线扫掠得到路基的三维实体模型。

具体地,根据路基平面和纵断面二维设计,基于统一的大地坐标系统,计算公路中心线主关键点的大地坐标。依据《铁路工程制图标准(TB/T10058-98)》路基线路设计规范要求,由公路中心线关键点完成路基中线绘制、里程标注、线路分段等工作。再以路基线路里程桩号为准,把路基平面、纵面及横断面二维设计与横断面对应的地面地形相结合,按照不同路基线路分段进行各标准横断面的设计,并确定各段线路左侧及右侧的路肩边缘点和路基边坡与地面线交点的坐标,即确定路基横断面关键点的三维空间坐标。最后将路基横断面关键点的三维点坐标转换为局部坐标系下的二维点坐标,并根据路基横断面的关键点坐标完成路基横断面的绘制。

3 路基三维模型的建立

Cesium中路基绘制的基本步骤如下:

(1)计算提取出公路中心线关键点的三维坐标,构建公路中心线。

(2)绘制路基横断面。路基横断面以一组有序二维坐标所围成的平面图形组成,计算出路基横断面各关键点的坐标,建立路基横断面。

为了有利于路基横断面的设计、修改以及批量、快速构建,将路基横断面轮廓进行参数化设置,只考虑挖方和填方两种类型(半填半挖式可以视为把路基分成左右两部分,一部分为填方,另一部分为挖方,然后将这两部分组合起来即可),并将横断面进行适当简化,如图1所示。其中,图1(a)为填方路基的横断面,图1(b)为挖方路基的横断面,由边坡、碎落段、排水沟等组成。

图2 路基横断面参数化设置界面

路基横断面轮廓参数化绘制的功能使用Canvas+JavaScript实现。Canvas相当于是画板和画笔,而JavaScript相当于是控制画笔绘画的画手。通过使用JavaScript语言编写对应的函数来得到对应的路基横断面,要输入的参数作为javascript函数的参数,根据参数的变化,函数的输出值会发生变化,从而动态的生成路基横断面。路基横断面轮廓的参数化设置界面如图2所示。

其中,根据参数变化动态生成路基横断面的代码实现如下:

1)Html代码

2)Javascript代码

function draw(l0,l1,l2,a1,a2,b1,b2){

var canvas=document.getElementById(′canvas′);

if(canvas.getContext){

var ctx=canvas.getContext(′2d′);

//描边三角形

ctx.beginPath();

ctx.moveTo(10, 10);

ctx.lineTo(20, 20);

ctx.lineTo(20+l2, 20);

ctx.lineTo(20+l2+b2, 20+a2);

ctx.lineTo(20+l2+b2+l1, 20+a2);

ctx.lineTo(20+l2+b2+l1+b1, 20+a2+a1);

ctx.lineTo(20+l2+b2+l1+b1+5, 20+a2+a1);

ctx.lineTo(20+l2+b2+l1+b1+5, 20+a2+a1+5);

ctx.lineTo(20+l2+b2+l1+b1+5+5, 20+a2+a1+5);

ctx.lineTo(20+l2+b2+l1+b1+10, 20+a2+a1);

ctx.lineTo(20+l2+b2+l1+b1+10+l0/2, 20+a2+a1);

ctx.lineTo(20+l2+b2+l1+b1+10+l0, 20+a2+a1);

ctx.lineTo(20+l2+b2+l1+b1+10+l0, 20+a2+a1+5);

ctx.lineTo(20+l2+b2+l1+b1+10+l0+5, 20+a2+a1+5);

ctx.lineTo(20+l2+b2+l1+b1+10+l0+5, 20+a2+a1);

ctx.lineTo(20+l2+b2+l1+b1+10+l0+10, 20+a2+a1);

ctx.lineTo(20+l2+b2+l1+b1+10+l0+10+b1, 20+a2);

ctx.lineTo(20+l2+b2+l1+b1+10+l0+10+b1+l1, 20+a2);

ctx.lineTo(20+l2+b2+l1+b1+10+l0+10+b1+l1+b2, 20);

ctx.lineTo(20+l2+b2+l1+b1+10+l0+10+b1+l1+b2+l2, 20);

ctx.lineTo(20+l2+b2+l1+b1+10+l0+10+b1+l1+b2+l2+10, 10);

ctx.stroke();

}

}

用户只需要填写网页表格里面的参数,软件会自动获取用户填写的参数,输入到绘图函数中,页面就可以根据用户输入的参数生成路基横断面图,用户修改参数,路基横断面图也会动态地修改。例如当l0=100 mm,l1=10 mm,l2=10 mm,a1=20 mm,a2=30 mm,b1=20 mm,b2=40 mm时,网页生成的图片如图3所示。

图3 路基横断面图

(3)设置绘制属性。设置material、cornerType、outline、outlineColor等属性,改变部件的显示颜色贴图、转角形式、轮廓线及轮廓线颜色等。

(4)使用Cesium函数开始绘制。使用viewer.entities.add函数,依据设定参数绘制路基的三维模型。

使用PolylineVolume参数化绘制路基的JavaScript主要代码如下:

var CenterLine=Cesium.Cartesian3.fromDegreesArrayHeights(

[lon1,lat1,hei1,

Lon2,lat2,hei2,

lon3,lat3,hei3]); //构建公路中心线

var CrossSection=[new Cesium.Cartesian2(x1,y1),

new Cesium.Cartesian2(x2,y2),

new Cesium.Cartesian2(x3,y3),

new Cesium.Cartesian2(x4,y4)]; //构建路基横断面

var Road=viewer.entities.add({

id:xxx,

name:xxx,

PolylineVolume:{

positions:CenterLine,

shape:CrossSection,

cornerType:Cesium.CornerType.ROUNDED,

material:Cesium.Color.WHITE.withAlpha(0.5),

outline:true,

outlineColor:Cesium.Color.BLACK

}

}); //构建路基三维模型

上述代码中[lon1,lat1,hei1,lon2,lat2,hei2,lon3,lat3,hei3]表示依次用经度、纬度和高程表示一组公路中心线坐标点,此处只列举了3个点,点的个数由路基中心线采用几个点拟合而成决定,若由多个点拟合,可依次添加多个点。代码[new Cesium.Cartesian2(x1,y1),new Cesium.Cartesian2(x2,y2)]表示依次用一组平面直角坐标系下的点(x,y)来拟合截面形状。代码viewer.entities.add可以存储id、name以及更多的属性信息,这些属性与路基部件绑定。在PolylineVolume对象中,positions属性指定了轴线坐标,shape属性指定了截面形状,cornerType属性指定了转角类型,material属性制定了绘制的颜色或者贴图文件,outline、outlineColor属性赋值是否显示轮廓及轮廓颜色。代码运行后,即可绘制所设定的路基部件,并将返回entity对象存储在变量Road中。采用不同的参数绘制的路基模型效果如图4~5所示。

图4 填方路基三维模型

图5 挖方路基三维模型

4 结论

针对传统建模方法速度慢且无法满足自动批量建模的需求,本文基于Cesium平台,研究了路基的参数化建模方法,具体如下:

(1)利用开源的JavaScript地图引擎Cesium,基于Cesium API进行二次开发,通过PolylineVolume实现了路基横断面和公路中心线的快速生成,继而实现了路基三维模型的快速构建;

(2)利用JavaScript编码设计了路基标准横断面参数设计的界面,通过直接输入参数建立路基标准横断面,实现了路基标准横断面的参数化构建。

猜你喜欢

横断面中心线绘制
绘制童话
作品赏析
浅析某船重要设备底座与基准平台偏差的纠正措施
树叶竞技场
绘制世界地图
停机后汽缸温差大原因分析及处理
青中年血透患者低社会支持度横断面分析
城市道路的横断面设计论述
绿色生态型城市道路横断面设计分析
神秘的不速之客