Excel_中边桩坐标计算程序(原件勿改)
利用EXCEL表格计算线路中边桩坐标

利用EXCEL表格计算线路中边桩坐标高速公路施工中,桥梁、隧道施工以及路沿石施工时对测量要求相当严格,要求总体宽度误差在1cm以内。
这就要求测量工程师必须把线路边桩都计算出来,每隔10米(曲线段)或者20米(直线段)放样线路边桩,以便指导施工。
如果采用常规的计算器计算,不仅繁琐、费力而且容易出现差错。
本人在计算中边桩坐标时,试着利用EXCEL表格功能,编辑函数大批量计算线路中边桩坐标,达到了高效、准确的目的。
由于直线部分相对简单,复曲线又特别繁琐。
现就圆曲线举例计算如下:例:在浙江省龙丽一级公路施工中,左线圆曲线起点里程为K86+966.6,曲线半径为1500m,曲线左偏,起始方位角为147°43 ′58.2″,线路中心和隧道中心偏差15cm。
计算隧道中心线和衬砌边线(半径5.1m)。
1.在B4方格中输入:=$B$3+3000*SIN((A4-$A$3)/3000)*COS(2.5784244-(A4-$A$3)/3000)+ 0.15*COS(4.149220679-2*(A4-$A$3)/3000)按回车键确认即可以计算出该里程隧道中心线X轴坐标。
2.在C4方格中输入:=$C$3+3000*SIN((A4-$A$3)/3000)*SIN(2.5784244-(A4-$A$3)/3000)+0.15*SIN(4.149220679-2*(A4-$A$3)/3000)按回车键确认即可以计算出该里程隧道中心线Y轴坐标。
同理在3.D4方格中输入:=$B$3+3000*SIN((A4-$A$3)/3000)*COS(2.5784244-(A4-$A$3)/3000)+ COS(4.149220679-2*(A4-$A$3)/3000) *(0.15+5.1)4.在E4方格中输入:=$C$3+3000*SIN((A4-$A$3)/3000)*SIN(2.5784244-(A4-$A$3)/3000)+SIN(4.149220679-2*(A4-$A$3)/3000)*(0.15+5.1)其中 2.5784244为方位角147°43 ′58.2″的弧度表达方式,4.149220679为起始方位角147°43 ′58.2″加90°后的弧度值。
道路中边桩坐标计算EXCEL程

道路中边桩坐标计算EXCEL程
道路中边桩坐标计算EXCEL程是一种用于快速计算道路中边桩的相对位置及其坐标的Excel程序。
它使用一个小工具来帮助用户将边桩定义在数学坐标系(X-Y坐标系)中。
EXCEL程是一个Excel表格,用户可以在表格中输入边桩数据,并根据输入的边桩数据计算出边桩的位置和坐标。
具体而言,用户需要首先输入各个边桩的起始位置(X0, Y0)、方向(角度)和距离(L),然后点击Excel 程中的计算按钮,Excel程就会按照输入的数据计算出边桩的位置和坐标,并显示在Excel表格中。
用户可以通过Excel程来计算出边桩的位置和坐标,这有助于道路工程的施工计划等的制定。
此外,用户可以根据施工计划进行边桩安装,确保道路的安全性和可靠性。
Excel程的使用非常简单,可以帮助用户更快更准确的计算出边桩的位置和坐标。
因此,Excel程可以大大提高道路施工的效率。
Excel程还提供了一些其他的功能,比如用户可以将边桩位置和坐标可视化,以便更好的理解边桩的位置。
此
外,用户还可以利用Excel程对边桩的位置和坐标进行校验,以确保边桩的准确性。
总之,道路中边桩坐标计算EXCEL程是一款十分有用的小工具,可以大大提高道路施工的效率,保证边桩的准确性,并且可视化边桩的位置和坐标,有助于更好的理解边桩的位置。
EXCEL电子表格在公路测量施工中的应用——海滨大道路基、桥梁中桩坐标计算及放样

为i 点
求 出 i 的路 线 坐 标 后 ,根 据 o 在 线 路 坐 标 系 中 的 方 点 轴 位角 T 和 Z 。 Y点 的坐 标 对 、y进 行 平 移 、旋 转 , 即 : )iX + i o T +y ×sn 0 ( 转取 上 面 符号 ) ; ( 。 x Xc s o i iT 右 = Y= ox iT ±y ×c s 0 ( 转 取 下 面符 号 ) 。 iY + i sn o X i ot 左
徐 刚 , 王 继 刚
( 中交 一航 局 第 一 工 程 有 限 公 司 , 天 津 3 0 5 0 4 6)
摘
要:以海滨大道路基 、桥梁施工为范例 ,通过计算机的应用简化施 工放样计 算的方法 。
文献 标 识 码 :A 文章 编 号 : 10 — 9 3 ( 0 2 4 0 2— 2 0 6 7 7 2 1 )0 — 2 3 0 方 法 二 :用 积 分 坐 标 方 程直 接 求 圆 曲线 上 任 意 i点 的 线 路坐标 ,即:
x=i 1/ R )+ ( 1 0 il i 6 。 一(3 1 / R ); i 2
Y= (2 2 i 1/ R)一 ( 2 R ) + (i 7 0 5 ; i 1/ 4 3 i 1/ 2 R ) 6
坐标 系下 的坐标 ,转换公式与 圆曲线类 同。
缓 和 曲线 上任 意 一 点 i 的切 线 方 位 角 可 用 下 式 求 得 : T= 0 ( / RL ) × ( 8 ) , iT + 1 2 o 2 1 O/
式中:, _ 特定坐标系 x轴 的方 位角。 r_ 0一
同 上 ,可 根 据 T 求 得 任 意 一 点 i的法 线 方 向上 的 距 离 点 i 的坐 标 。
EXCEL计算坐标方法

计算坐标需要"桥型布置图"、"桥台结构图"、"桥墩结构图"、"点位图"、"纵断面".
先点开"桥型布置图","纵断面",找出台帽前墙位置与纵断线上已知一点的距离,例:
量取已知点距台帽前墙距离,如:1.978m
再点开"点位图",找到已知点投影到拟定桥梁中线的位置.
再在该位置向路线方向移动1.978m.
以该点为基点,并在CAD中点出该点的坐标,记录下来.
但是注意CAD的坐标和测量的坐标X、Y是相反的.记下坐标X:6645.8554 ;Y:4103.3546.
再查看桥型布置图,查看两台帽前墙间的距离,13.04m
再在点位图中把之前的基点移动13.04m,并记录下在CAD中的坐标.
如:X:6658.8019,Y:4101.7962
再打开设计完的"桥台结构图",算出台帽至基础前点的平面距离2.7m,并记录下来.
再查看基础的侧面长度,如6.7m,和基础的横向宽度7.0m,并记录下来.
OK有这些记录下来的数据就可以通过EXCEL计算基础坐标了.
方法:
打开excel并把记录下的数据填如表中:
黄色的框是要填入的数据.
注意:EXCEL计算1#台填入的"间距"等于13.04减去1#台台帽前墙距基础前点的平面距离. 如果是斜交的桥梁,输入的交角是路线方向逆时针旋转至桥台前墙的角度.如图中斜交60度,就输入60度.
1 / 1。
Excel批量反算桩号

新建一个Excel表,按ALT+F11进入Excel VB编辑器。
依次点击——插入——模块,将下面的内容全部复制到右边的空白窗口里面(曲线元素请自行修改,下面有说明)。
保存后就可以在这个新建的Excel表里用了(如果出现#NAME?请百度“Excel启用宏”)。
中桩X =XPS(DKI,1)中桩Y =XPS(DKI,2)中桩方位角=XPS(DKI,3)中桩高程=SHU(DKI)坐标反算桩号=ZHUANG(X,Y,1)坐标反算距中桩距离=ZHUANG(X,Y,2)从下面开始复制到结束***************************Function XPS(DKI, Z)'辛普森公式,5800程序改编Dim QX As VariantDim A, B, C, D, E, F, G As DoubleDim P, Q, I, J, M, N, K As Double'曲线元素,请自行更改'ElseIf DKI<终点桩号THEN' QX=Array(起点桩号,终点桩号,起点X,起点Y,起点方位角(弧度),起点半径,终点半径)If DKI < 20058.839 ThenQX = Array(0, 0, 0, 0, 0, 0, 0)ElseIf DKI < 20238.839 ThenQX = Array(20058.839, 20238.839, 4201152.834, 465521.276, 5.65395484192746, 0, 1500)ElseIf DKI < 20816.464 ThenQX = Array(20238.839, 20816.464, 4201300.426, 465418.29, 5.71395484980653, 1500, 1500)ElseIf DKI < 20996.464 ThenQX = Array(20816.464, 20996.464, 4201834.24, 465207.124, 6.09903818731417, 1500, 0)ElseIf DKI < 21116.464 ThenQX = Array(20996.464, 21116.464, 4202012.345, 465181.272, 6.15903858304419, 0, -1244.01)ElseIf DKI < 21538.232 ThenQX = Array(21116.464, 21538.232, 4202131.155, 465164.502, 6.11080747575542, -1244.01, -1244.01)ElseIf DKI < 21658.232 ThenQX = Array(21538.232, 21658.232, 4202526.61, 465023.77, 5.77176839646516, -1244.01, 0)ElseIf DKI < 21850.133 ThenQX = Array(21658.232, 21850.133, 4202629.304, 464961.713, 5.72353724069503, 0, 0) ElseIf DKI < 21970.133 ThenQX = Array(21850.133, 21970.133, 4202791.929, 464859.835, 5.72353724069503, 0, 1252.482)ElseIf DKI < 22050.81 ThenQX = Array(21970.133, 22050.81, 4202894.615, 464797.767, 5.77144211685777, 1252.482, 1252.482)ElseIf DKI < 22310.81 ThenQX = Array(22050.81, 22310.81, 4202966.18, 464760.552, 5.83585582000829, 1252.482, 2900)ElseIf DKI < 23162.892 ThenQX = Array(22310.81, 23162.892, 4203208.994, 464668.271, 5.98447753865125, 2900, 2900)ElseIf DKI < 23418.664 ThenQX = Array(23162.892, 23418.664, 4204048.252, 464539.886, 6.27829891856905, 0, 0) ElseIf DKI < 23843.077 ThenQX = Array(23418.664, 23843.077, 4204304.021, 464538.637, 6.27829887008768, -3000, -3000)ElseIf DKI < 24987.311 ThenQX = Array(23843.077, 24987.311, 4204726.868, 464506.599, 6.13682786235288, 0, 0) ElseIf DKI < 25107.311 ThenQX = Array(24987.311, 25107.311, 4205858.869, 464339.73, 6.1368282986852, 0, -1000)ElseIf DKI < 25597.197 ThenQX = Array(25107.311, 25597.197, 4205977.194, 464319.862, 6.07682829080613, -1000, -1000)ElseIf DKI < 25717.197 ThenQX = Array(25597.197, 25717.197, 4206413.637, 464108.336, 5.58694229503935, -1000, 0)ElseIf DKI < 26198.491 ThenQX = Array(25717.197, 26198.491, 4206502.543, 464027.767, 5.52694228716029, 0, 0) ElseIf DKI < 26318.491 ThenQX = Array(26198.491, 26318.491, 4206852.646, 463697.506, 5.5269428689367, 0, -1250)ElseIf DKI < 26668.593 ThenQX = Array(26318.491, 26668.593, 4206938.599, 463613.786, 5.47894287232972, -1250, -1250)ElseIf DKI < 26788.593 ThenQX = Array(26668.593, 26788.593, 4207143.201, 463331.103, 5.19886125757867, -1250, 0)ElseIf DKI < 27337.747 ThenQX = Array(26788.593, 27337.747, 4207195.875, 463223.295, 5.15086126097169, 0, 0) ElseIf DKI < 27487.747 ThenQX = Array(27337.747, 27487.747, 4207429.022, 462726.09, 5.15086174578537, 0, 1000)Else: QX = Array(0, 0, 0, 0, 0, 0, 0)End If'以下不用更改A = QX(2)B = QX(3)C = QX(4)If QX(5) <> 0 Then D = 1 / QX(5) Else D = 0 'D = QX(5)If QX(6) <> 0 Then E = 1 / QX(6) Else E = 0 'E = QX(6)F = QX(0)G = QX(1)P = (E - D) / Abs(G - F)Q = Abs(DKI - F)I = P * QJ = C + (I + 2 * D) * Q / 2M = C + (I / 4 + 2 * D) * Q / 8N = C + 3 * (3 * I / 4 + 2 * D) * Q / 8K = C + (I / 2 + 2 * D) * Q / 4If Z = 1 Then XPS = A + Q * (Cos(C) + 4 * (Cos(M) + Cos(N)) + 2 * Cos(K) + Cos(J)) / 12If Z = 2 Then XPS = B + Q * (Sin(C) + 4 * (Sin(M) + Sin(N)) + 2 * Sin(K) + Sin(J)) / 12If Z = 3 Then XPS = JEnd FunctionFunction shu(L)Dim SQX As VariantDim A, B, C, D, R, T, E, F, H, X, Y As Double'曲线元素,请自行更改'ElseIf L<终点桩号THEN' SQX=Array(变坡点,H,R,T,E,I1,I2)If L < 20483 ThenSQX = Array(0, 0, 0, 0, 0, 0, 0)ElseIf L <= 21225 ThenSQX = Array(20740, 785.679, 12000, 129, 0.693, 0.0035, 0.025)ElseIf L <= 22009.19 ThenSQX = Array(21360, 801.179, 30000, 135, 0.304, 0.025, 0.034)ElseIf L <= 22797.109 ThenSQX = Array(22160, 828.379, 14160.563, 150.81, 0.803, 0.034, 0.0127) ElseIf L <= 23636.923 ThenSQX = Array(22980, 838.793, 7075.103, 182.891, 2.364, 0.0127, -0.039) ElseIf L <= 24692.69 ThenSQX = Array(23740, 809.153, 12884.625, 103.077, 0.412, -0.039, -0.023) ElseIf L <= 25717.197 ThenSQX = Array(24840, 783.853, 6137.917, 147.31, 1.768, -0.023, 0.025) ElseIf L <= 26467.197 ThenSQX = Array(25820, 808.353, 14686.143, 102.803, 0.36, 0.025, 0.039) ElseIf L <= 27320 ThenSQX = Array(26570, 837.603, 5860.362, 218.591, 4.077, 0.039, -0.0356) Else: SQX = Array(0, 0, 0, 0, 0, 0, 0)End If'以下不用更改A = SQX(1)B = SQX(0)C = SQX(5)D = SQX(6)R = SQX(2)T = SQX(3)E = SQX(4)If (C - D) >= 0 Then F = 1 Else F = -1 'F=ABS(C-D)/(C-D)X = B - TY = B + TIf L < X ThenH = A - (B - L) * CElseIf L < B ThenH = A - (B - L) * C - F * (L - X) ^ 2 / (2 * R)ElseIf L = B ThenH = A - F * EElseIf L < Y ThenH = A - (B - L) * C - F * (L - X) ^ 2 / (2 * R)ElseIf L > Y ThenH = A - (B - L) * DEnd Ifshu = HEnd FunctionFunction ZHUANG(X, Y, Z)Dim W, L, J, DKI As Double'坐标反算,只需更改DKI=路线起点桩号DKI = 20058.839'以下不用更改DoL = ((XPS(DKI, 1) - X) ^ 2 + (XPS(DKI, 2) - Y) ^ 2) ^ 0.5If L = 0 Then Exit DoJ = Sin(XPS(DKI, 3) - 1.5707963267949 - Application.WorksheetFunction.Atan2((XPS(DKI, 1) - X), (XPS(DKI, 2) - Y)))If Application.WorksheetFunction.IsErr(W) Then Exit DoW = L * JIf Abs(W) < 10 ^ (-8) Then Exit DoIf Application.WorksheetFunction.IsErr(W) Then Exit DoDKI = DKI + WLoopIf Z = 1 Then ZHUANG = DKI Else ZHUANG = LEnd Function。
EXCEL辅助计算公路中桩及边桩参数的应用

EXCEL辅助计算公路中桩与边桩参数的应用晓凌摘要:在现今的道路桥梁建立中,全站仪以其高精度、高效率的特点,在测量放样中得到广泛的应用,它将传统的二维测量提升到了三维测量的高度。
但大量的坐标计算加重了测量人员的工作强度,也影响了全站仪的使用效率。
本人根据?公路工程施工测量?提供的FX-4500程序,利用EXCEL函数与逻辑循环语来计算公路中桩及边桩参数,大大提高了计算的可靠性和速度。
关键词:EXCEL 计算公路中桩公路边桩一、前言在当前的高速公路施工中,全站仪以其高精度、使用简便的特点在施工测量放样中得到广泛的应用。
它的使用还有一个意义,它将测量从传统的二维测量提升到三维测量的高度,使测量效率大为提高。
全站仪使用时需计算大量的坐标,坐标的正确和精度直接关系到测量结果的准确度;另外,对于现场计算的坐标,能否迅速的得出结果也会影响全站仪的使用效率,所以准确、快速的坐标计算也是全站仪使用中的关键一环。
坐标的计算涉及到大量的数据和公式,计算时极易出错。
测量中使用最多、计算最为复杂的是公路中桩、边桩坐标和方位角,其他的施工测量都是以此作为参照,经过简单运算即可得结果。
现测量员普遍采用可编程计算器帮助计算,使用前需根据不同的计算器特性输入程序,计算时根据不同的路段选择不同的程序输入参数,逐个得到坐标或方位角,还得反复校核。
这对于大批量计算来说是一个不小的工程。
现在,电脑在施工单位已得到使用普及,在工程量及数测量数据处理过程中,Office中EXCEL经常是测量技术人员利用的工具。
本人根据本人从2002年至2005年的利用电脑处理测量资料的经历结合EXCEL的强大功能,总结出了用电脑计算公路中桩、左侧、右侧坐标的可行方法,并利用EXCEL的逻辑语句编制了一个小的应用程序。
希望能把测量人员从重复性的劳动中解脱出来。
二、工作原理1.应用程序的目标上文已讲到施工测量中使用最多、计算最为复杂的是公路中线逐点坐标和切线方位角,既中桩的X值、Y值。
立交匝道中桩坐标计算EXCEL程序

一、名称:立交匝道中桩坐标计算EXCEL程序二、运行平台:计算机中,安装有EXCEL2003/2007软件三、程序功能:1.输入较少的匝道参数即可计算匝道全部主点参数,且易于同设计文件比照校对;2.能批量生成指定间距的中桩,避免手工输入的麻烦;3.瞬间计算完成指定桩号的中桩坐标和切线方位角,计算结果便于进一步制作报表输出;4.可生成匝道线型绘制数据,简单操作即可在AUTOCAD中生成匝道线型。
四、使用步骤:1.工程实例介绍一个立交匝道实例,并以此为例介绍程序使用步骤。
实例还是来源于《CASIO fx-5800P计算与道路坐标放样计算》中的立交匝道(见教材第6章,139页)匝道整体图:把其中的A匝道提取出来:A匝道相关的参数表也提取出来:.2.打开EXCEL计算程序,输入A匝道的相关参数图中浅绿色部分是输入的原始数据部分。
这里原始数据的输入是难点和关键,一定要准确验证,否则后面的工作全是无用功。
这里就数据输入作详细解读如下:(1)第一行,“匝道”后面的单元格可输入匝道编号,这个不参与计算,仅作提示,使界面清晰明了。
(2)数据第一列,是节点栏,“节点”是我起的名字,含义是两种不同线元交界的点,如ZH、ZY、HZ、GQ、YZ等特征点都是节点,匝道的起、终点也是节点,注意QZ不是节点。
这一栏就填节点的名称,注意不要漏了。
(3)节点桩号栏。
这个在设计文件上可以找到,需要强调的是输入时按数字输入,如输入153.194,回车后会自动显示为K0+153.194格式,千万不可按桩号格式K**+***的格式输入,否则会出错。
(4)半径1、半径2两栏。
节点除匝道起、终点外,都是对前后两个线元起承接作用的点,一般情况下,其曲率半径是连续的,但也有例外,如ZY点,节点前承直线终点,半径无穷大,后接圆曲线,半径为R。
因此,在节点处曲率半径连续的情况下,就在半径1中填写半径值,半径2中空着就行(当然填一个与半径1一样的值也没事),而当节点出曲率半径不连续的情况下,就分别在半径1和半径2中相应填写两个不同的半径值。
EXCEL快速计算任何难度的道路中线、边线坐标

EXCEL快速计算任何难度的道路中线、边线坐标主程序Public i As IntegerPublic pi As DoubleSub TP()Dim ii As IntegerDim k(1000) As DoubleDim xzq, yzq, kq, xzh, yzh, kzh, xjd, yjd, kjd, khy, kyh As Double'直线区域pi = 3.14159265358979xzq = 71862.642yzq = 63474.651kq = 0 '因为直线连接终点为ZH点,与圆曲线起点为同一点,所以在直线区域不定义ZH点参数'直线区域'曲线区域xzh = 71858.3267yzh = 63375.2684kzh = 99.4763xhz = 71909.3687yhz = 63283.8076 '曲线区域定义内容有:ZH(坐标、里程)、HZ(坐标、里程)、JD(坐标、里程)khz = 212.3392 'R(半径)、LS(缓和曲线长度)、HY(里程)、YH(里程)xjd = 71855.658yjd = 63313.806kjd = 160.9966ls = 30r = 75khy = 129.4763kyh = 182.3385'曲线区域i = 2 '从第二格开始读取数据所以定义I=2ii = 1 '桩号从第一个开始启用,所以定义II=2Dok(ii) = Workbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 1) '定义桩号等于读取数据If Workbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 1) = "" Then Exit Do '当没有数据读取时退出循环If k(ii) < kq Then '若计算点超过计算起点给予提示并退出程序MsgBox ("猪啊!!你的输入的桩号居然超过计算起点桩号")Exit SubElseIf k(ii) <= kzh Then '若计算点在ZH点前,则进入直线程序Call zx(xzq, yzq, kq, xzh, yzh, kzh, k(ii))ElseIf kzh < k(ii) And k(ii) <= khy Then '若计算点在ZH和HY之间则调入前段缓和曲线程序Call qhhqx(xzh, yzh, kzh, xhz, yhz, khz, xjd, yjd, kjd, ls, r, k(ii))ElseIf khy < k(ii) And k(ii) <= kyh Then '若计算点在HY和YH之间则调入圆曲线程序Call yqx(xzh, yzh, kzh, xhz, yhz, khz, xjd, yjd, kjd, ls, r, k(ii))ElseIf kyh < k(ii) And k(ii) <= khz Then '若计算点在YH和HZ之间则调入后段缓和曲线程序Call hhhqx(xzh, yzh, kzh, xhz, yhz, khz, xjd, yjd, kjd, ls, r, k(ii))ElseMsgBox ("笨啊!!数据已超出计算范围了") '若出现超出范围的桩号则给与提示并退出程序Exit SubEnd Ifi = i + 1ii = ii + 1LoopEnd Sub直线模块Sub zx(ByV al xzq As Double, ByV al yzq As Double, ByV al kq As Double, ByV al xzh As Double, ByV al yzh As Double, ByV al kzh As Double, ParamArray k())fw = fwj(xzh, xzq, yzh, yzq) '首先调入方位角程序计算直线方位角x = xzq + (k(ii) - kq) * Cos(fw) '然后根据桩号和长度计算出坐标值y = yzq + (k(ii) - kq) * Sin(fw)zdfm = dfm(fw) '将弧度形式的前进方位角转换度分秒形式'输出坐标值以弧度和度分秒形式的前进方位角Workbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 2) = xWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 3) = yWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 4) = fwWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 5) = zdfmEnd Sub圆曲线模块Sub yqx(ByV al xzh As Double, ByV al yzh As Double, ByV al kzh As Double, ByV al xhz As Double, ByV al yhz As Double, ByV al khz As Double, ByV al xjd As Double, ByV al yjd As Double, ByV al kjd As Double, ByV al ls As Double, ByV al r As Double, ParamArray k())l = Abs(k(ii) - kzh) '计算ZH点(因为以直缓点起算)到待求桩号的弧度长度ly = l - ls / 2 '计算圆弧长度p = ls ^ 2 / 24 / r - ls ^ 4 / 2688 / r ^ 3 '曲线内移值m = ls / 2 - ls ^ 3 / 240 / r ^ 2 '曲线切线长增量u = r * Sin(ly / r) + m '偏量坐标计算v = r * (1 - Cos(ly / r)) + p'调入方位角fwq = fwj(xjd, xzh, yjd, yzh) '计算ZH点方位角fwh = fwj(xhz, xjd, yhz, yjd) '计算HZ点方位角(此角作用是用来推算曲线是左偏还是右偏)'调入偏角判定nq = n(fwq, fwh) '计算偏角方向,左偏为-1右偏为1'计算坐标x = u * Cos(fwq) - nq * v * Sin(fwq) + xzhy = u * Sin(fwq) + nq * v * Cos(fwq) + yzhd = (90 * (2 * l - ls) / pi / r) * pi / 180 '计算圆曲线上的偏角(此句要点为角度必须转换为弧度即:pi/180)fw = fwq + d * nq '计算前进方位角zdfm = dfm(fw) '将弧度形式的前进方位角转换度分秒形式'输出坐标值以弧度和度分秒形式的前进方位角Workbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 2) = xWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 3) = yWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 4) = fwWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 5) = zdfmEnd Sub前缓和段Sub qhhqx(ByV al xzh As Double, ByV al yzh As Double, ByV al kzh As Double, ByV al xhz As Double, ByV al yhz As Double, ByV al khz As Double, ByV al xjd As Double, ByV al yjd As Double, ByV al kjd As Double, ByV al ls As Double, ByV al r As Double, ParamArray k())l = Abs(k(ii) - kzh) '计算测点到ZH点的距离u = l - l ^ 5 / 40 / r ^ 2 / ls ^ 2 + l ^ 9 / r ^ 4 / ls ^ 4 / 3456 '计算偏量v = l ^ 3 / 6 / r / ls - l ^ 7 / 336 / r ^ 3 / ls ^ 3'用公式二则以下两计算可省略(圆曲线和后缓和曲线也同理)Rem t = Atn(v / u)Rem s = Sqr(u ^ 2 + v ^ 2)'调入方位角计算fwq = fwj(xjd, xzh, yjd, yzh) '计算ZH点方位角fwh = fwj(xhz, xjd, yhz, yjd) '计算HZ点方位角(此角作用是用来推算曲线是左偏还是右偏)'调入偏角判定nq = n(fwq, fwh) '计算偏角方向,左偏为-1右偏为1'结果计算Rem x = xzh + s * Cos(fwq + nq * t)Rem y = yzh + s * Sin(fwq + nq * t)x = u * Cos(fwq) - nq * v * Sin(fwq) + xzh '经过测试,计算结果中的两种公式计算结果是一样的y = u * Sin(fwq) + nq * v * Cos(fwq) + yzhd = (90 * l * l / pi / r / ls) * pi / 180 '计算缓和曲线上的偏角(此句要点为角度必须转换为弧度即:pi/180)fw = fwq + d * nq '计算前进方位角zdfm = dfm(fw) '将弧度形式的前进方位角转换度分秒形式'输出坐标值以弧度和度分秒形式的前进方位角Workbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 2) = xWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 3) = yWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 4) = fwWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 5) = zdfmEnd Sub后缓和段模块Sub hhhqx(ByV al xzh As Double, ByV al yzh As Double, ByV al kzh As Double, ByV al xhz As Double, ByV al yhz As Double, ByV al khz As Double, ByV al xjd As Double, ByV al yjd As Double, ByV al kjd As Double, ByV al ls As Double, ByV al r As Double, ParamArray k())l = Abs(k(ii) - khz) '计算测点到HZ点的距离(后缓和曲线是以HZ点为起点)u = l - l ^ 5 / 40 / r ^ 2 / ls ^ 2 + l ^ 9 / r ^ 4 / ls ^ 4 / 3456 '计算偏量v = l ^ 3 / 6 / r / ls - l ^ 7 / 336 / r ^ 3 / ls ^ 3Rem t = Atn(v / u)Rem s = Sqr(u ^ 2 + v ^ 2)'调入方位角计算fwq = fwj(xjd, xzh, yjd, yzh) '计算ZH点方位角fwh = fwj(xhz, xjd, yhz, yjd) '计算HZ点方位角(此角作用是用来推算曲线是左偏还是右偏)'调入偏角判定nh = n(fwh, fwq) '计算偏角方向,左偏为-1右偏为1(注意:因为是从后HZ点起算,所以必须将HZ点方位角放在前ZH放在后)'结果计算Rem x = xzh + s * Cos(fwq + nq * t)Rem y = yzh + s * Sin(fwq + nq * t)x = xhz - (u * Cos(fwh) - nh * v * Sin(fwh)) '经过测试,计算结果中的两种公式计算结果是一样的y = yhz - (u * Sin(fwh) + nh * v * Cos(fwh))d = (90 * l * l / pi / r / ls) * pi / 180 '计算缓和曲线上的偏角(此句要点为角度必须转换为弧度即:pi/180)fw = fwh + d * nh '计算前进方位角zdfm = dfm(fw) '将弧度形式的前进方位角转换度分秒形式'输出坐标值以弧度和度分秒形式的前进方位角Workbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 2) = xWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 3) = yWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 4) = fwWorkbooks("单交点平曲线.xls").Worksheets("sheet1").Cells(i, 5) = zdfmEnd Sub偏角模块Function n(ByV al fw1 As Double, ByV al fw2 As Double) As Doublepj = fw1 + pi - fw2 '前进的右角pjIf pj - pi > 0 Then '当右角pj-pi 〉0时为左偏否则为右偏n = -1Else: n = 1End IfEnd Function方位角模块Function fwj(ByV al x1 As Double, ByV al x2 As Double, ByV al y1 As Double, ByV al y2 As Double) As Double'计算增量x0 = x1 - x2y0 = y1 - y2'由增量判断方位角所在象限,不同象限取不同的值If x0 = 0 And y0 > 0 Thenfwj = pi / 2 '当在大地坐标中偏量在X轴上的值时ElseIf x0 = 0 And y0 < 0 Thenfwj = 3 * pi / 2 '当在大地坐标中偏量在负X轴上的值时ElseIf x0 < 0 Thenfwj = Atn(y0 / x0) + pi '当在大地坐标中偏量在第二第三象限上的值时ElseIf x0 > 0 And y0 < 0 Thenfwj = Atn(y0 / x0) + 2 * pi '当在大地坐标中偏量在第四象限上的值时Elsefwj = Atn(y0 / x0) '当在大地坐标中偏量在第一象限上的值时End IfEnd Function度分秒模块Function dfm(ByV al ao As Double) As V ariantao = ao * 180 / pi '将弧度转化为度jd = Int(ao) '计算度jf = Int(ao * 60 - jd * 60) '计算分jmx = (ao - jd - jf / 60) * 3600 '计算秒jm = Left(jmx, 8) '因为拆分出来的秒数经常占到十多位,所以只取秒数的前八位dfm = jd & "°" & jf & "′" & jm & "″" '连接度分秒End Function边桩公式(此公式在电子表格中直接输入):=B2+J2*COS(D2+RADIANS(L2)+PI()) =C2+J2*SIN(D2+RADIANS(L2)+PI()) =B2+K2*COS(D2+RADIANS(M2)) =C2+K2*SIN(D2+RADIANS(M2))=B3+J3*COS(D3+RADIANS(L3)+PI()) =C3+J3*SIN(D3+RADIANS(L3)+PI()) =B3+K3*COS(D3+RADIANS(M3)) =C3+K3*SIN(D3+RADIANS(M3))=B4+J4*COS(D4+RADIANS(L4)+PI()) =C4+J4*SIN(D4+RADIANS(L4)+PI()) =B4+K4*COS(D4+RADIANS(M4)) =C4+K4*SIN(D4+RADIANS(M4))=B5+J5*COS(D5+RADIANS(L5)+PI()) =C5+J5*SIN(D5+RADIANS(L5)+PI()) =B5+K5*COS(D5+RADIANS(M5)) =C5+K5*SIN(D5+RADIANS(M5))=B6+J6*COS(D6+RADIANS(L6)+PI()) =C6+J6*SIN(D6+RADIANS(L6)+PI()) =B6+K6*COS(D6+RADIANS(M6)) =C6+K6*SIN(D6+RADIANS(M6))=B7+J7*COS(D7+RADIANS(L7)+PI()) =C7+J7*SIN(D7+RADIANS(L7)+PI()) =B7+K7*COS(D7+RADIANS(M7)) =C7+K7*SIN(D7+RADIANS(M7))=B8+J8*COS(D8+RADIANS(L8)+PI()) =C8+J8*SIN(D8+RADIANS(L8)+PI()) =B8+K8*COS(D8+RADIANS(M8)) =C8+K8*SIN(D8+RADIANS(M8))=B9+J9*COS(D9+RADIANS(L9)+PI()) =C9+J9*SIN(D9+RADIANS(L9)+PI()) =B9+K9*COS(D9+RADIANS(M9)) =C9+K9*SIN(D9+RADIANS(M9))=B10+J10*COS(D10+RADIANS(L10)+PI()) =C10+J10*SIN(D10+RADIANS(L10)+PI()) =B10+K10*COS(D10+RADIANS(M10)) =C10+K10*SIN(D10+RADIANS(M10))=B11+J11*COS(D11+RADIANS(L11)+PI()) =C11+J11*SIN(D11+RADIANS(L11)+PI()) =B11+K11*COS(D11+RADIANS(M11)) =C11+K11*SIN(D11+RADIANS(M11))=B12+J12*COS(D12+RADIANS(L12)+PI()) =C12+J12*SIN(D12+RADIANS(L12)+PI()) =B12+K12*COS(D12+RADIANS(M12)) =C12+K12*SIN(D12+RADIANS(M12))=B13+J13*COS(D13+RADIANS(L13)+PI()) =C13+J13*SIN(D13+RADIANS(L13)+PI()) =B13+K13*COS(D13+RADIANS(M13)) =C13+K13*SIN(D13+RADIANS(M13))=B14+J14*COS(D14+RADIANS(L14)+PI()) =C14+J14*SIN(D14+RADIANS(L14)+PI()) =B14+K14*COS(D14+RADIANS(M14)) =C14+K14*SIN(D14+RADIANS(M14))=B15+J15*COS(D15+RADIANS(L15)+PI()) =C15+J15*SIN(D15+RADIANS(L15)+PI()) =B15+K15*COS(D15+RADIANS(M15)) =C15+K15*SIN(D15+RADIANS(M15))=B16+J16*COS(D16+RADIANS(L16)+PI()) =C16+J16*SIN(D16+RADIANS(L16)+PI()) =B16+K16*COS(D16+RADIANS(M16)) =C16+K16*SIN(D16+RADIANS(M16))=B17+J17*COS(D17+RADIANS(L17)+PI()) =C17+J17*SIN(D17+RADIANS(L17)+PI()) =B17+K17*COS(D17+RADIANS(M17)) =C17+K17*SIN(D17+RADIANS(M17))=B18+J18*COS(D18+RADIANS(L18)+PI()) =C18+J18*SIN(D18+RADIANS(L18)+PI()) =B18+K18*COS(D18+RADIANS(M18)) =C18+K18*SIN(D18+RADIANS(M18))=B19+J19*COS(D19+RADIANS(L19)+PI()) =C19+J19*SIN(D19+RADIANS(L19)+PI()) =B19+K19*COS(D19+RADIANS(M19)) =C19+K19*SIN(D19+RADIANS(M19))=B20+J20*COS(D20+RADIANS(L20)+PI()) =C20+J20*SIN(D20+RADIANS(L20)+PI()) =B20+K20*COS(D20+RADIANS(M20)) =C20+K20*SIN(D20+RADIANS(M20))=B21+J21*COS(D21+RADIANS(L21)+PI()) =C21+J21*SIN(D21+RADIANS(L21)+PI()) =B21+K21*COS(D21+RADIANS(M21)) =C21+K21*SIN(D21+RADIANS(M21))=B22+J22*COS(D22+RADIANS(L22)+PI()) =C22+J22*SIN(D22+RADIANS(L22)+PI()) =B22+K22*COS(D22+RADIANS(M22)) =C22+K22*SIN(D22+RADIANS(M22))=B23+J23*COS(D23+RADIANS(L23)+PI()) =C23+J23*SIN(D23+RADIANS(L23)+PI()) =B23+K23*COS(D23+RADIANS(M23)) =C23+K23*SIN(D23+RADIANS(M23))呵呵,这个就是传说已久的EXCEL自动计算曲线坐标.给大家研究研究.欢迎在此基础上开发增加新模块。