一、程序使用流程
本程序数据和主程序是分开的,编程时将不同的工程数据存放到不同的数据文件里,如A匝道,文件名为A,将匝道A所有的曲线线元参数输入A文件里。运行时只要运行文件名A的程序就可以了,具体运行流程见下图:
二、数据文件的编写
(一)交点法数据文件编辑
交点法编写数据文件必须是对称型的,即直线段→缓和曲线段→圆曲线段→缓和曲线段→直线段,(如果任意一端没有直线段,则把直线段长度看做是0),另外圆曲线两侧缓和曲线的旋转常数必须相等,并且和直线段连接处的半径必须是无穷大。
交点法数据文件编写一般是根据设计图纸提供的平面曲线参数一览表提供的参数来编写,每个弯道包括:弯道起点方位角(C),交点X坐标(D),交点Y坐标(E),缓和曲线长度(F,当没有设缓和曲线时,F=0),交点转交(G,向左转弯,G为负值,向右转弯,G取正值),交点桩号(H),弯道圆曲线半径(R)。
下图是一段市政道路设计参数数据。
根据上图提供的数据,可以编辑成如下的数据文件:
文件名:CHLNR
3→DimZ “X0”?A:”Y0”?B:“Ln”?L:Abs(L)-Int(Abs(1000L))/1000→Z[3]:Lbl 0:If Z[3]≠0.0001: Then ?L: Else “Xp”?X:”Yp”?Y:X→Z[1]:Y→Z[2]:IfEnd:Lbl 1:If L>0 :Then 98°39°35.12°→C:4474.384→D:2415.861→E:140→F:31°17°23°→G:410.007→H:600→R:IfEnd: If L>1060 Then 129°56°58.19°→C:4206.421→D:3093.946→E:70→F:-33°50°48°→G:1285.437→H:600→R:IfEnd:Prog”XLJS”:If Z[3]≠0.0001:Then Goto 0:Else (Z[1]-X)cos(O)+(Z[2]-Y)sin(O)→N:L+N→L:-(Z[1]-X)sin(O)+(Z[2]-Y)cos(O)→K:If Abs(N)≥0.001:Then Goto 1:Else “L=“:L◢
“K=”:K◢
IfEnd:Goto 0: IfEnd
在面程式中,有两个条件转移语句即If L>0:Then 98°39°35.12°→C:4774.384→D: 2415.861→E:140→F:31°17°23°→G:410.007→H:600→R:IfEnd
If L>1060:Then 129°56°58.19°→C:4206.421→D: 3093.946→E:70→F:-33°50°48°→G:1285.437→H:600→R:IfEnd
……
如果还有其他弯道,可以继续完后加。在这些存放设计参数的语句前后的程序表达式是固定的。
说明:
编辑曲线参数时,每个曲线参数放在一个If L>***.***(两个弯道中间直线段上的任意桩号) :Then ***°**°**.**°→C(弯道起点方位角):****.***→D(交点X坐标):****.****→E(交点Y坐标):***.***→F(缓和曲线长度:**°**°**°→G(转角,向左转为负值,向右转为正值):***.***→H(交点里程桩号):***→R(圆曲线半径):IfEnd 条件式语句里,如果有多个弯道,一直按上述形式编下去,
变量说明:
1、 L>***.***
弯道参数的起点范围,可以是弯道起点,也可以是弯道前直线段里的任意点桩号
2、 ***°**°**.**°→C 弯道起点方位角
3、****.***→D、****.****→E
交点X坐标、Y坐标
4、***.***→F
缓和曲线长度,如果没设置缓和曲线,则缓和曲线长度看做0
5、**°**°**°→G 转角,向左转为负值,向右转为正值
6、***.***→H、交点里程桩号
7、***→R 圆曲线半径
注意,运行程序时,第一部是输入测站坐标X0,Y0,然后输入近似桩号,主要是为了加快收敛,输入时注意当根据桩号和距中距离计算所求点坐标时,请不要把小数点第四位输入0.0001,如K21+369.0921,请把桩号输入21369.092即可,相反,当根据坐标反算桩号和距中距离时,请在输入时把第四位小数数位0.0001,如K21+200,输入时请输入21200.0001。
(二)线元法数据文件编辑
线元法数据文件编辑适合于各种各样的线型组合,特别是在大型立交区或者是不规则的线型组合地方,如小区道路、重丘区山路等有特别明显的有点,本程序为了减少使用者设计参数的输入,特别把直线与缓和曲线以及圆曲线连接的地方只要输入缓和曲线参数就可以了,这样可以减少输入很多设计参数,同时节约大量的内存。看下图,
该图是一个半喇叭型的互通立交,一共是5条匝道,我们以D匝道为例,来看看线元法数据文件的建立。
下表是D匝道的线元表:
D匝道线元数据分析:从上表中可以看出,D匝道由三个线元组成,第一段是缓和曲线段,根据上表判断,该缓和曲线属于第一段缓和曲线,其最小半径处桩号为J=K0+039.289,该处坐标X=494347.926,Y=477989. 873,半径为R=40米,方位角W=302°18′26.0″,缓和曲线旋转常数P=55,在缓和曲线终点K0+039.289处,有一圆曲线与其相连接,长度I=39.216。第二段是圆曲线,第三段又是一段缓和曲线,根据上表判断,该曲线属于第二缓和曲线,曲线最小半径位于与园曲线连接处,桩号J=K0+78.504,坐标为X=494380.677,Y=477971.271,方位角W=358°28′45.9″,最小半径R=40,缓和曲线旋转常数P=-65(为了判断是第一段还是第二缓和曲线,我们通过P的正负来判断,第一缓和段P统一用正数表示,第二缓和段统一用负号表示。起点处相连的圆曲线长度I可以看做0,也可以看做是39.216.由此我们整理下。从整个线型全部是向右转向,所以R全部取正数。具体如下:
第一段缓和曲线线元参数:
最小半径处坐标X=494347.926 Y=477989. 873
最小半径R=40
最小半径处方位角:W=302°18′26.0″
缓和曲线旋转常数P=55
与之相连的圆曲线长度I=39.216
最小半径处桩号J=39.289
此段数据计算范围可以从K0+000~ K0+78.504
第二段缓和曲线线元参数
最小半径处坐标X=494380.677 Y=477971.271
最小半径R=40
最小半径处方位角:W=358°28′45.9″
缓和曲线旋转常数P=65
与之相连的圆曲线长度I=39.216
最小半径处桩号J= W=358°28′45.9″
此段数据计算范围可以从K0+78.504到匝道结束。
当桩号L位于K0+000~ K0+78.504时,曲线参数按第一段编写,当L>78.504时,按第二段缓和曲线编写,当然第二段缓和曲线计算范围也可以从圆曲线起点K0+039.289到K0+78.504中间任意桩号开始。下面是D匝道的数据程序文件(文件名“DZD”):
3→DimZ:X0”?A:”Y0”?B:“Ln”?L: Abs(L)-Int(Abs(1000L))/1000→Z[3]:Lbl 0:If Z[3]≠0.0001: Then ?L: Else “Xp”?X:”Yp”?Y:X→Z[1]:Y→Z[2]:IfEnd:Lbl 1:If L≥0 :Then 494347.926→X:477989. 873→Y:40→R:302°18°26°→W:55→P:39.216→I: 39.289→J:IfEnd: If L≥78.504:Then 494380.677→X:477971.271→Y:40→R:358°28°45.9°→W:-65→P:39.216→I: 78.504→J:IfEnd:Prog”FDCH”: Prog”XLJS”: If Z[3]≠0.0001:Then Goto 0:Else (Z[1]-X)cos(O)+(Z[2]-Y)sin(O)→N:L+N→L:-(Z[1]-X)sin(O)+(Z[2]-Y)cos(O)→K:If Abs(N)≥0.001:Then Goto 1:Else “L=“:L◢
“K=”:K◢
IfEnd:Goto 0: IfEnd
在上面程式中,每个缓和曲线的线元参数放在一个If … Then …… IfEnd循环语句中,If 后面紧跟计算的起点范围,终点范围从下段的起点范围结束。
变量定义:
1、X、Y 输入缓和曲线半径最小处的X、Y坐标
2、R 缓和曲线最小半径,当线路左转时,半径数据前面加“-”号,以判断线路转向。
3、W 输入缓和曲线半径最小处的方位角
4、P 缓和曲线旋转常数,第一缓和曲线长度为正数,第二缓和曲线常数为负数。当不设缓和曲线时,P=0
5、I 与缓和曲线最小半径端连接的圆曲线长度。
6、J缓和曲线小半径段的桩号。
再看看E匝道数据文件编辑
E匝道线元设计数据表
在E匝道线元表中,我们可以看出,E匝道式由一段直线段→缓和曲线段→圆曲线段→缓和曲线段→缓和曲线段→圆曲线段连接起来的。值得注意的是,在位于K0+248.491处,是两段反向的缓和曲线连接点,在编写数据程序文件时,分三段编写,第一段从K0+000到K0+203.366,第二段从K0+203.366到K0+248.919,第三段从K0+248.919到线路终点K0+331.13。具体文件如下:(文件名“EZD”)
3→DimZ:X0”?A:”Y0”?B:“Ln”?L:Abs(L)-Int(Abs(1000L))/1000→Z[3]:Lbl 0:If Z[3]≠0.0001: Then ?L: Else “Xp”?X:”Yp”?Y:X→Z[1]:Y→Z[2]:IfEnd:Lbl 1:If L≥0 :Then 494381.6316→X:477847.870→Y:200→R:90°08°44.6°→W:120→P:60.07→I: 143.296→J:IfEnd: If L≥203.366:Then 494372.527→X:477948.932→Y:200→R:107°21°16.3°→W:-95→P:60.07→I: 203.366→J:IfEnd: If L≥248.491:Then 494337.373→X:478010.658→Y:86.75→R:92°24°19°→W:75→P:17.8→I: 313.333→J:IfEnd: Prog”FDCH”: Prog“XLJS”:If Z[3]≠0.0001:Then Goto 0:Else (Z[1]-X)cos(O)+(Z[2]¬-Y)sin(O)→N:L+N→L:Int(1000L)÷1000+0.0001→L:-(Z[1]-X)sin(O)+(Z[2]-Y)cos(O)→K:If Abs(N)≥0.001:Then Goto 1:Else “L=“:L◢
“K=”:K◢
IfEnd:Goto 0: IfEnd
为了让使用者熟悉掌握数据程序文件的编写线元法的数据程序文件,现在将C、F、G等匝道的线元数据列出来,供使用者练习。
C匝道数据
F匝道数据
G匝道数据
三、道路计算程序
道路计算程序是核心程序,但是道路计算程序是固定的,使用者不需要做任何修改,也不直接运行道路计算程序分为两部分,第一部分是常规的对成型线型组合计算的程序(文件名:XLJS),利用交点法编辑的数据文件可以直接调用;第二部分是适用于非对称的线型组合计算文件(文件名:FDCH),在数据文件调用完“FDCH”文件后,还要调用“XLJS”文件。
线路计算程序(XLJS)
Deg:Fix 4:G÷Abs(G)→V:F2÷(24R)-F^(4)÷(2688R^(3))+F^(6)÷(506880R^(5))-F^(8)÷(154828800R^(7))→P:F÷2-F^(3)÷(240R2)+F^(5)÷(34560R^(4))-F^(7)÷(8386560R^(6))+F^(9)÷(3158507520R^(8))→Q:Q+(R+P)Vtan(G÷2)→T:πRGV÷180+F→I:IF L≤H-T:Then L-H→J:Goto 1:IfEnd:If L<H-T+F:Then L-H+T→J:C→Z:1→S:Goto 2:IfEnd:If L≤H-T+I-F:Then L-H+T→J:C→Z:1→S: Goto 3:IfEnd:If L<H-T+I:Then H-T+I-L→J:C+G→C:-1→S:Goto 2:If L≥H-T+I:Then L-H-I+2T→J:C+G→C:Goto 1:IfEnd:Lbl 1:D+Jcos C→X:E+Jsin C→Y:C→O: Goto C:Lbl 2:(J-J^(5)÷40(RF)2+J^(9)÷(3456(RF)^(4))-J^(13)÷(599040(RF)^(6))+J^(17)÷(175472640(RF)^(8))-T)S→M:(J^(3)÷(6RF)-J^(7)÷(336(RF)^(3))+J^(11)÷(42240(RF)^(5))-J^(15)÷(9676800(RF)^(7))+J^(19)÷(3530097000(RF)^(9)))V→N:C+90J2SV÷πRF→O:Goto B
Lbl 3:180(J-0.5F) ÷πR→O:Q+Rsin (O)-T→M:(P+R(1-cos (O)))V→N:C+VO→O:Goto B
Lbl B:D+Mcos(C)-Nsin(C)→X:E+Msin(C)+Ncos(C)→Y :Goto C:Lbl C:If Z[3]≠0.0001:Then ?K: “M”?U:K<0=>180-U →U:O+U×Abs(K)÷(K+10^(-10)) →Z:X+Abs(K)×cos(Z)→X◢
Y+Abs(K)×sin(Z)→Y◢
tan-1((Y-B)÷(X-A+10^(-10))→W
X-A<0=>W+180→W:W<0=>W+360→W:√((X-A)2+(Y-B)2)→S
“DIS”: S◢
“FW”: W>DMS◢
IfEnd
非对称线型组合计算程序(FDCH)
Abs(P+10^(-10))÷(P+10^(-10))→S:Abs (R)÷R→V:Abs(R)→R:P2÷R→F:180(I+F)V÷(πR)→G:90FSV÷(πR)→O:If S=1:Then W-O→C:Else If S=-1:Then W-O-G→C :IfEnd:IfEnd:If C<0:Then C=C+360→C:IfEndIf C>360:Then C-360→C:IfEnd:F2÷(24R)-F^(4)÷(2688R^(3))+F^(6)÷(506880R^(5))-F^(8)÷(154828800R^(7))→P:F÷2-F^(3)÷(240R2)+F^5÷(34560R^(4))-F^(7)÷(8386560R^6)+F^9÷(3158507520R^(8))→Q:Q+(R+P)Vtan(G÷2)→T:If S=1:Then J-F+T→H:C→Z:If S=-1:Then J-I-F+T→H:C+G→Z:IfEnd:IfEnd:(F-F^(3)÷(40R2)+F^(5)÷(3456R^(4))-F^(7)÷(599040R^(6))+F^(9)÷(175472640R^(8))-T)S→M:(F2÷(6R)-F^(4)÷(336R^(3))+F^(6)÷(42240R^(5))-F^(8)÷(9676800R^(7))+F^(10)÷(3530097000R^(9)))V→N:X-Mcos(Z)+Nsin(Z)→D:Y-Msin(Z)-Ncos(Z)→E
四、程序执行
程序运行分为两种,第一种是根据根据使用者输入的桩号和距中距离计算出所求点的坐标和测站点到该点的方位角和水平距离,可以直接利用计算器提供的距离和方位角进行极坐标放样。另一种是根据使用者输入的实测坐标计算出该点的桩号和距中距离,可以根据桩号和距中距离进行高边坡、隧道断面点的设计高程、以及进行路面高程控制计算方面很方便。
(一)、根据桩号和距中距离计算所求点的坐标、及方位角和水平距离。
要进行程序的线路计算,直接运行数程序文件就可以了,不需要理会计算程序。如果计算某桩号L距离中线K处的坐标X,Y和该点到测站点的距离和方位角,运行提示如下:
X0? 提示输入测站点X坐标
Y0? 提示输入测站点Y坐标
(测站点的位数和数据程序文件里坐标取位要一致)
Ln? 计算点近似桩号
近似桩号输入第四位小数后不能等于0.0001,
L? 输入计算点准确桩号
近似桩号输入第四位小数后不能等于0.0001,
K? 提示输入距离中桩的桩号
如果计算点位于线路的左幅,则在数据前加入“-”号,如果是计算中桩坐标,则输入0
M? 输入该点与线路的前进方向的按顺时针转过的角度,常于斜交的涵洞,桥梁等构造物。
X 显示所求点的X坐标
Y 显示所求点的Y坐标
FW 显示所求点至测站点的方位角
DIS 显示所求点至测站点的距离
要继续计算则从L?开始,计算新点的坐标。
具体流程见程序流程图的左边部分。
例:要计算D匝道的DK0+020中桩坐标、DK0+080左边5.3米的坐标、Dk0+240斜交75°58′11.8″、距中右侧5米处的坐标,并计算出该点至坐标为X=495005.991,Y=478056.677控制点的水平距离和方位角,运行文件“DZD”提示如 下:
X0? 495005.991 测站X坐标
Y0? 478056.677 测站Y坐标
Ln? 0 输入小输点第四位起不等于0.0001的桩号
L? 20 输入所求点桩号
K? 0 输入距中距离
M? 90 输入斜交角度
X= 494341.482 显示所求点X坐标
Y= 478007.903 显示所求点Y坐标
DIS 666.2959 显示所求点至测站平距
FW 184°11′52.42″显示所求点至测站方位角
L? 80 输入下点的桩号
K? -5.3
M? 90
X= 494382.2290
Y= 477965.9594
DIS 630.324
FW 188°16′29.5″
L? 240
K? 5.0
M? 75°58°11.8°
X= 494455.3110
Y= 478101.5491
DIS 552.505
FW 175°20′29.6″
(二)、根据坐标反算桩号和距中
如果是根据某点的坐标,计算出该点在线路中的桩号和距离,程序运行时提示如下:
X0? 提示输入测站点X坐标
Y0? 提示输入测站点Y坐标
(测站点的位数和数据程序文件里坐标取位要一致)
Ln? 计算点近似桩号
近似桩号输入第四位小数后不能等于0.0001,
Xp? 所求点P的X坐标
Yp? 所求点P的Y坐标
L 显示所求点的桩号
K 显示所求点的距中距离,如果位于线路的左边,则显示结果为负值,如果K为0时,则该点在线路中线上。
计算新点的桩号和距中距离,则从?Xp 开始。如此循环计算。
具体流程见流程图的右边部分
例:求点X=494382.2290,Y=477965.9594在D匝道中的位置,运行文件“DZD”如下:
X0? 495005.991 测站X坐标(可输入0)
Y0? 478056.677 测站Y坐标(可输入0)
Ln? 60.0001 输入小输点第四位起等于0.0001的桩号
Xp? 494382.2290 输入所求点X坐标
Yp? 477965.9594 输入所求点Y坐标
L= 79.999999 显示所求点桩号
K= -5.2989 显示所求点距中距离, “-“ 表示该点位于中桩左侧
五、程序应用
(一)本程序在高边坡放样中的应用
高边坡放样是目前公路道路测量工作普遍要做的一项工作,边坡坡顶线或者填方边坡坡脚线是边坡放样最繁琐的工作,利用本程序进行边坡放样,工作步骤如下:
- 司镜员走到目的地后,先测出一个点的坐标和高程;
- 利用本程序求出该点在线路中的桩号和距中距离,然后根据计算出来的桩号和设计图纸,内插出道路边桩高程,根据道路边桩高程和道路设计宽度、坡度、设计碎落平台的宽度和间隔高度、实测点的高程计算出按实测高程,边坡距中距离。
- 根据高程算出的距中距离和程序计算出立镜点至距中距离差值dK,指挥司镜员靠近道路中线或者往外偏移多少米。
- 重新做1~3工作,直到dK 小于边坡宽度控制精度要求为止。
- 如上图,司镜员在P点立镜,测出P点坐标和高程后,用本程序计算出P点到的中桩桩号和距离中桩距离K,根据中桩桩号和有关设计数据内插出边坡坡脚点的设计高程Hs和距离中桩的距离K1,根据Hc、和Hs的高差计算出K2,按照P点的高程,边坡顶距中桩的理论宽度K理论,具体计算如下:
K理论=K1+h*n1+m+h*n2+m+(Hc-Hs-2h)*n3
则dK=K- K理论
dK 求出来后,可以指挥司镜员靠近道路dK米,然后重复以上步骤,直到dK值能满足边坡控制精度。
(二)本程序在隧道断面欠挖、超挖放样中的应用。
利用本程序进行隧道断面开挖的欠挖和超挖计算,看下图:
- 用全站仪测出P点的坐标和标高后,根据坐标算出P点的中桩桩号和距中距离K,根据中桩桩号查看P点的路面高程,算出P点至设计路面的高差h,根据P点所在圆弧的圆心O2在断面中的位置(K2,h2)算出P点到O2点距离R2’,用R2’-R2的差距就是P点的超挖或者欠挖的数据。
(三)本程序在路面施工控制放样中的应用
路面施工时,路面的轴线偏位、路面宽度、路面高程是测量的重要控制指标,也是道路施工控制最严格的一道测量控制。利用本程序输入桩号和距中距离,可以直接计算出所求点至测站点的水平距离和方位角,从而直接通过极坐标法直接放出该点在实地的位置。
(四)处理线路设计中的“断链”问题
断链是线路设计中经常出现的问题,断链分为长链与短链,如果是短链,那么只要弯道的计算范围从短链处分界就可以了,如果是长链,则需要把线路分成两个文件,从开始出现断链处分,这样可以避免桩号相同,但位置不同的情况。
(五)本程序在道路竣工验收过程中的应用
道路竣工验收,其主要方面就是轴线偏位和宽度,可以通过现场测量道路中线的坐标,通过坐标反算出该点和设计中线的偏移值K(轴线偏位值)。
- 附表一:CHLNR计算出来的逐桩坐标表
- C匝道坐标一览表
D匝道坐标一览表
- 六、公路纵断面高程计算
公路纵断面计算也是采用计算程序和数据程序分开的原则,数据文件是专门存放道路纵断面设计参数,对于多个工程,可以建立多个数据文件,这样每个数据文件通过调用计算程序就可以计算出该点的高程。
- 数据文件
每个纵断面由纵坡和竖曲线组成,本程序每一个变坡点计算范围是从竖曲线前的纵坡任意桩号开始到竖曲线后纵坡上的任一桩号结束。
下表是某线路路基纵断面设计的参数一览表:
-
- 运行
运行BBR程序显示如下
Dh? 提示输入至路面厚度
L=? 提示输入桩号
i? 提示输入横坡度
K? 提示输入距中距离,均为正数
H= 提示输出所求点高程
例:根据上表计算K38+660中桩高程、K38+900右侧4.5米高程、K39+600底基层面左侧4.5米高程(假设路面沥青厚度为6cm,封釉层1cm,水泥稳定层基层厚度为30cm)
运行BBR文件
Dh? 0
L=? 38660
i? 0
K? 0
H= 76.9412
L=? 38900
i? 0.02
K? 4.50
H= 85.2200
退出程序,重新运行
Dh? 0.370
L=? 39600
i? 0.02
K? 4.50
H= 93.0509
-
附: