栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

坐标正反算(含高程),把要素内置化(无需改程序文件,即可更换路线,同时存两条线要素

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

坐标正反算(含高程),把要素内置化(无需改程序文件,即可更换路线,同时存两条线要素

tuzhyu

功能:

坐标正反算(含高程),把要素内置化(无需改程序文件,即可更换路线,同时存两条线要素)

另含两个边仰(一个横向坡,一个纵向坡)坡放样模块.

帮助文件未完成

程序浏览:

FileName:RESET    初始化程序

Norm 1:50→C:12345→J

"RESET PW"?I:I=J=>500→DimZ  为数据库增加额外变量500个,在SET、SETPFDYS程序根据实际再增减变量

50→Z[C+22]

"PASSWORDS"?I:I→Z[C+39]      重设要素保护密码

Cls:Stop

FileName:DATLOCK      要素保护密码确定认程序

Cls:Norm 1:50→C

"PASSWORDS"?J:Cls:J≠Z[C+39]=>Stop    2008-08-07修改

FileName:SHELL(外壳程序)

50→C            ;在扩充变量预留前50个给别的程序用。如不够就适量加大。RESET,SHELL,SET,SETPFDYS,这几个程序中C值必需一致

Z[C+35]→I:"STATION-N"?I:I→Z[C+35]      设置测站N坐标

Z[C+36]→I:"STATION-E"?I:I→Z[C+36]      设置测站E坐标

Z[C+44]→I:"STATION-Z"?I:I→Z[C+44]   设置测站Z坐标

Z[C+45]→I:"STATION-HI"?I:I→Z[C+45]    设置仪高

Z[C+41]→I:"GC-DH"?I:I→Z[C+41]    放样点高差常数

Norm 1

Z[C+23]→N 当前分段要素N坐标

Z[C+24]→E 当前分段要素E坐标

Z[C+25]→M 当前分段要素起点桩号

Z[C+26]→H 当前分段要素起点方位角(正北)单位:弧度

Z[C+27]→A 当前分段要素起点曲率有左偏负右偏正(注意不半径)

Z[C+28]→R 当前分段要素终点曲率有左偏负右偏正(注意不半径)

Z[C+29]→L 当前分段要素长度

Z[C+3]→W

Z[C+32]→I:"DAT1 2 3"?I:I→Z[C+32]  平曲线要素数库类型选择1为内置式,2文件式,3实时输入(查看当前要素值)

0→I

Z[C+4]→I:"1 2 3"?I:I→Z[C+4]  选择本程序模式默认为坐标正算,1坐标反算,2横向边仰坡放样,3,纵向边仰坡放样(隧道进出口用到)

Lbi 1

Z[C+4]→I

I=1=>Prog"TURNZH"

I=2=>Prog"HXBYP"

I=3=>Prog"ZXBYP"

Lbi A

Deg:Norm 1:Cls

Z[C+1]→G:"ZH"?G:G→Z[C+1]     ;G桩求桩号

Z[C+2]→B:"JL"?B:B→Z[C+2]     ;B横向距离,左正右负

Lbi B

Prog "ZBJS"    ;坐标正算

Prog "GCJS"    ;高程计算

Fix 3:Cls           ;设置三位小数

"ZH=":Locate 4,1,G    ;第一行显示桩号

"X=":Locate 3,2,X  ;第二行显示X(N)坐标

"Y=":Locate 3,3,Y    ;第三行显示Y(E)坐标

Prog "GCJS"    ;高程计算

"Z":Locate 2,4,Z+Z[C+41]    ;第四行显示Z坐标

Locate 10,4,Z[C+2]        ;第四行显示横向距离

0→I

Do:I+1→I:I=1000=>Goto 1:LpWhile Not(Getkey=57 Or Getkey=27) ;锁定键盘,并在几十秒后自动返回

Getkey=57=> Goto 1

Z+Z[C+41]+Z[C+49]-Z[C+44]-Z[C+45]→Z[C+48]

Pol(Z[C+35]-X,Z[C+36]-Y)

Cls:"DL":Locate 3,1,I:Locate 12,1,Z[C+45]

"DH":Locate 3,2,Z[C+48]:Locate 12,2,Z[C+49]

"FWJ"

J<0=>J+360→J:J◤DMS◢  2008-08-07 修改

J→Z[C+46]

I→Z[C+47]

Goto 1

FileName:ZBJS  坐标计算程序

Prog"READDAT"

Rad

G-M→Q

IF AR=0 :Then If A=R :Then 1→J:Else 3→J :IfEnd:Else If A=R :Then 2→J:Else 3→J:IfEnd:IfEnd

If J=1 :Then H→F:N+QCos(H)→X:E+QSin(H)→Y:IfEnd  直线段直接计算

If J=2 :Then H+QR→F:Rec(Abs(2Sin(Abs(0.5QR))÷R),H+QR÷2):N+I→X:E+J→Y:IfEnd  圆弧段直接计算

If J=3 :Then Goto 5 :IfEnd

X+BCos(F+W)→X

Y+BSin(F+W)→Y

Deg:Return

Lbi 5    用五点通用坐标计算计算缓和段

0.5(R-A)÷L→K

AQ→I

KQ2→J

0.0469100770→P:H+IP+JP2→U

0.2307653449→P:H+IP+JP2→V

0.5→P        :H+IP+JP2→D

0.7692346551→P:H+IP+JP2→F

0.9530899230→P:H+IP+JP2→T

0.1184634425→I

0.2393143352→J

0.2844444444→O

N+Q(ICos(U)+JCos(V)+OCos(D)+JCos(F)+ICos(T))→X

E+Q(ISin(U)+JSin(V)+OSin(D)+JSin(F)+ISin(T))→Y

H+AQ+KQ2→F

X+BCos(F+W)→X

Y+BSin(F+W)→Y

Deg:Return

FileName:TURNZH(坐标反算)

Norm 1

Z[C+37]→I:"DQD-N"?I:I→Z[C+37]    输入待求点N坐标

I=-1=>Prog"INFWJDLDH"

Z[C+38]→I:"DQD-E"?I:I→Z[C+38]    输入待求点E坐标

0→B:M+L÷2→G:Prog"ZBJS"

Lbi S:Rad

Z[C+37]-X→I:Z[C+38]-Y→J

If I=0 And J=0 :Then Goto A:IfEnd

Pol(I,J)

Lbi A:Rec(I,J-F):J→Z[C+2]

G+I→G:IF Abs(I)>0.0001 :Then Prog"ZBJS":Goto S↙   

G→Z[C+1]

FileName:INFWJDLDH   实测坐标(用方位角,距离,高差)输入程序

Deg:Norm 1:Cls

Z[C+46]→J:"DQD-FWJ"?J:J→Z[C+46]

Z[C+47]→I:"DQD-DL"?I:I→Z[C+47]

Z[C+48]→K:"DQD-DZ"?K:K→Z[C+48]

Z[C+49]→P:"RHT"?P:P→Z[C+49]

Rec(I,J)

Z[C+35]+I→Z[C+37]

Z[C+36]+J→Z[C+38]

Z[C+44]+Z[C+45]+K-P→Z[C+43]

FileName:HXBYP  横向边仰坡放样程序

Cls:Norm 1

Z[C+40]→I:"QPD-DL"?I:I→Z[C+40]    输入起坡点与中桩距离常数

Z[C+41]→I:"QPD-DZ"?I:I→Z[C+41]      输入起坡点与中桩高差常数

Z[C+42]→I:"i"?I:I→Z[C+42]            输入边仰坡坡度,左仰坡(路堑)为正,右仰坡(路堑)为负,左边坡为负,右边坡为正

Cls:Z[C+43]→I:"DQD-Z"?I:I→Z[C+43]    输入实测高程

Prog"TURNZH"

Prog "GCJS"

(Z[C+43]-Z-Z[C+41])Z[C+42]+Z[C+40]→B

Fix 3:B-Z[C+2]◢ 显示与上一次测点的偏差

B→Z[C+2]

FileName:ZXBYP  纵向仰坡放样程序(隧道进口使用)

Cls:Norm 1:Z[C+33]→I:"QPD-ZH"?I:I→Z[C+33]    输入起坡点桩号

Z[C+34]→I:"QPD-Z"?I:I→Z[C+34]      输入起坡点高程

Z[C+42]→I:"i"?I:I→Z[C+42]            仰坡时(隧道进出口仰坡),进口为正,出口为负)

Cls:Z[C+43]→I:"DQD-Z"?I:I→Z[C+43]    输入实测高程

Prog"TURNZH"

Z[C+42](Z[C+43]-Z[C+34])+Z[C+33]→G

Fix 3:G-Z[C+1]◢ 显示与上一次测点的偏差

G→Z[C+1]

FileName:SET 设置程序

1Lbi S

2Norm 1

350→C

450→Z[C+22]

5→K

6Z[C+5]→I:"1 Or 2"?I:I→Z[C+5]  ;选择1线或者2线

7180Z[C+3]÷π→J:"XZJJ"?J:Jπ÷180→Z[C+3]      ;斜桩夹角

8If I=1:Then Z[C+8]→Z[C+6]:Z[C+9]→Z[C+7]

9Z[C+12]→Z[C+16]:Z[C+13]→Z[C+17]:Z[C+18]→Z[C+20]

10Else Z[C+10]→Z[C+6]:Z[C+11]→Z[C+7]

11Z[C+14]→Z[C+16]:Z[C+15]→Z[C+17]:Z[C+19]→Z[C+20]

12IfEnd 

13Z[C+7]+3→Z[C+31]

14→I:"1PQX,2SQX,3YSDS"?I  ;1输入平曲线要素,2输入竖曲线要素,3输入1、2线夹平竖曲线交点(变坡点)数量以让程序规划内存建立要素数据为,其它值退出本程序

15I≠0=>Prog"DATLOCK"            2008-07-28 18:23修改

16I=1 => Goto 1:I=2 => Goto 2:I=3 => Goto 3  2008-07-28 18:23修改

17Prog"SETPFDYS"

18Stop

19Lbi 1                  ;平曲线要素输入部分

20Z[C+6]→D

21-1→Z[D+3]

22For 1→J To Z[C+16]

23Cls:"PQX":Locate 9,1,J

24Z[D+1]→I:"N"?I:I→Z[D+1]      ;请输入N坐标

25Z[D+2]→I:"E"?I:I→Z[D+2]  ;请输入E坐标

26Z[D+3]→I:"R"?I:I→Z[D+3]      ;请输入半径R

27Z[D+4]→I:"LS1"?I:I→Z[D+4]  ;请输入缓和曲线1长度

28Z[D+5]→I:"LS2"?I:I→Z[D+5]        ;请输入缓和曲线2长度

29D+5→D

30Next

311→Z[D-2]

32Goto S

33Lbi 2                              ;竖曲线要素输入部分

34Z[C+7]→D

35-1→Z[D+3]

36For 1→J To Z[C+17]

37Cls:"SQX":Locate 9,1,J

38Z[D+1]→I:"BPDZH"?I:I→Z[D+1]    ;请输入变坡点桩号    2008-08-07修改

39Z[D+2]→I:"BPDGC"?I:I→Z[D+2]  ;请输入变坡点高程    2008-08-07修改

40Z[D+3]→I:"R"?I:I→Z[D+3]        ;请输入半径R    2008-08-07修改

41D+3→D

42Next

431→Z[D]

44Goto S

45Lbi 3                            ;要素点数输入部分

46Z[C+12]→I:"1PQXDS"?I:I→Z[C+12]  ;输入1线平曲线点数,最小值为3

47Z[C+13]→I:"1SQXDS"?I:I→Z[C+13]  ;输入1线竖曲线点数,最小值为3

48Z[C+18]→I:"1JDZH"?I:I→Z[C+18]    ;输入1线平曲线第一个交点的交点桩号

49Z[C+14]→I:"2PQXDS"?I:I→Z[C+14]  ;输入2线平曲线点数,最小值为3

50Z[C+15]→I:"2SQXDS"?I:I→Z[C+15]  ;输入2线竖曲线点数,最小值为3

51Z[C+19]→I:"2JDZH"?I:I→Z[C+19]  ;输入2线平曲线第一个交点的交点桩号

52C+Z[C+22]→Z[C+8]              1线路平曲线要素指针偏移基数

53Z[C+8]+5Z[C+12]→Z[C+9]              1线路竖曲线要素指针偏移基数

54Z[C+9]+3Z[C+13]→Z[C+10]        2线路平曲线要素指针偏移基数       

55Z[C+10]+5Z[C+14]→Z[C+11]      2线路竖曲线要素指针偏移基数

56Z[C+11]+3Z[C+15]→Z[C+21]    要素数据库结束指针

57Z[C+21]+1→Z[C+30]

58Z[C+21]→DimZ                增加额外变量

59-1→K

60Goto S

FileName:SETPFDYS  交点要素=>分段要素

1Norm 1

250→C

3Rad

4Z[C+6]+5→D

5Z[C+21]+1→F

6F+6→DimZ

7-1→Z[F]          设置分段要素开始标志

8Z[C+20]→V        ; 从数据库读入当前线第一个平曲线交点桩号

9→G

10Pol(Z[D+1]-Z[D-4],Z[D+2]-Z[D-3])  ;计算第一条直线的距离I,计算方位角J

11J→H

12Z[D-4]→Z[F+1]          直线段

13Z[D-3]→Z[F+2]

14V-I→Z[F+3]

15For 1→G To Z[C+16]-2 

16Pol(Z[D+1]-Z[D-4],Z[D+2]-Z[D-3])   ;计算第本交点与下一交点的距离I,计算方位角J

17J→H      2008-08-07 修改

18Pol(Z[D+6]-Z[D+1],Z[D+7]-Z[D+2])

19I→W:J-H→K                        ;计算转角K,负值是左转角,正值是右转角  2008-08-07 修改

20IF Abs(K)>π:Then If K>0:Then K-2π→K:Else K+2π→K:IfEnd:IfEnd

21Z[D+3]→R  ;从数据库读入半径R

22Z[D+4]→L  ;从数据库读入缓和曲线1长度

23Z[D+5]→M  ;从数据库读入缓和曲线2长度

24L÷2÷R→B  ;计算缓和曲线1的B0角

25M÷2÷R→O  ;计算缓和曲线2的B0角

26(Abs(K)-B-O)R→P  ;计算圆曲线长度

27L2÷24÷R-L^(4) ÷2384÷R^(3) →Q      ;内移值计算方法2

28L÷2-L^(3) ÷240÷R2→S    ;切线增长值计算方法2

29M2÷24÷R-M^(4) ÷2384÷R^(3) →J      ;内移值计算方法2

30M÷2-M^(3) ÷240÷R2→I    ;切线增长值计算方法2

31Abs(π÷2- Abs(K)) →A

32Rtan(Abs(K÷2))+S+J÷Cos(A)-QTan(A)→T ;计算切线1

33Rtan(Abs(K÷2))+I+Q÷Cos(A)-JTan(A)→U ;计算切线2

34H<0=>H+2π→H

351→A

36K<0 =>-1→A

37H→Z[F+4]

38→Z[F+5]

39→Z[F+6]

40F+6→F

41F+6→DimZ

42Rec(T,H)        缓和段1

43Z[D+1]-I→N

44Z[D+2]-J→E

45N→Z[F+1]

46E→Z[F+2]

47V-T→Z[F+3]

48L=0=>Goto A

49H→Z[F+4]

50→Z[F+5]

51A÷R→Z[F+6]

52F+6→F

53F+6→DimZ

54Lbi A          圆弧段

55→I:0→J

56L=0=>Goto B

57Pol(L-L^(3)÷40÷R2,L2÷6÷R-L^(4)÷336÷R^(4))

58Lbi B

59Rec(I,H+AJ)

60N+I→N

61E+J→E

62N→Z[F+1]

63E→Z[F+2]

64V-T+L→Z[F+3]

65H+AB→Z[F+4]

66A÷R→Z[F+5]

67A÷R→Z[F+6]

68F+6→F

69F+6→DimZ

70M=0=>Goto C        缓和段2

71Rec(2RSin(0.5P÷R),H+AB+AP÷R÷2)

72N+I→N

73E+J→E

74N→Z[F+1]

75E→Z[F+2]

76V-T+L+P→Z[F+3]

77H+AB+AP÷R→Z[F+4]

78A÷R→Z[F+5]

79→Z[F+6]

          此处删除2008-08-06 修改

80F+6→F

81F+6→DimZ

82Lbi C          此处插入2008-08-06 修改

83Rec(U,H+K)      

84Z[D+1]+I→Z[F+1]        此处2008-08-07 修改

85Z[D+2]+J→Z[F+2]        此处2008-08-07 修改

86V-T+L+P+M→Z[F+3]

87V-T+L+P+M-U+W→V        此处2008-08-07 修改

88D+5→D

89Next

90H+K→Z[F+4]

91→Z[F+5]

92→Z[F+6]

93F+9→DimZ

941→Z[F+7]

95V→Z[F+9]  要素终点桩号

96Deg

FileName:READDAT

Z[C+32]→I

I=3=>Prog"READDAT3"

If  GM+L  :Then ;验证要素是否可用,否则重设要素

I=1=>Prog"READDAT1"

I=2=>Prog"READDAT2"

Prog"REALDAT3" 

IfEnd

FileName:READDAT1 平曲线分段要素读取程序1

Z[C+30]→F

0→J

Lbi 1          搜索要素

If G

-1=Z[F]=>Goto E:F-6→F:-1→J:Goto 1

Else 1=Z[F+1]=>Goto E:-1=J=>Goto 2:1→J:F+6→F:Goto 1

IfEnd

Lbi 2

F→Z[C+30]

Z[F+1]→Z[C+23] 当前分段要素N坐标

Z[F+2]→Z[C+24] 当前分段要素E坐标

Z[F+3]→Z[C+25] 当前分段要素起点桩号

Z[F+4]→[C+26] 当前分段要素起点方位角(正北)

Z[F+5]→Z[C+27] 当前分段要素起点曲率有左偏负右偏正(注意不半径)

Z[F+6]→Z[C+28]  当前分段要素终点曲率有左偏负右偏正(注意不半径)

Z[F+9]-Z[F+3]→Z[C+29]  当前分段要素长度

Return

Lbi E

Cls

"ERROR"

Stop

READDAT2 文件请输入内容为以下内容以便测试结果与本文一致。

π÷180→J

Goto 1

Lbi 1

If G<30008.396:Then Cls:Stop:IfEnd↙ ;判断待求桩号是否小于本要素起点,如小于就停止运行程序

If G<30661.038(终点里程):Then 2851422.090(起点X)→N:513896.440(起点Y)→E:30008.396→M:213°32′52″J(起点方位角)→H:0(起点曲率)→A:0(终点曲率)→R:652.642起点至终点长度→L:Goto E:IfEnd↙

If G<30921.038:Then 2850878.162→N:513535.768→E:30661.038→M:213°32′52″J→H:0→A:1÷1300→R:260→L:Goto E:IfEnd↙

If G<31426.367:Then 2850666.478→N:513385.004→E:30921.038→M:219°16′39″J→H:1÷1300→A:1÷1300→R:505.328→L:Goto E:IfEnd↙

If G<31686.367:Then 2850346.483→N:512998.015→E:31426.367→M:241°32′56″J→H:1÷1300→A:0→R:260→L:Goto E:IfEnd↙

If G>31686.367:Then Cls:Stop:IfEnd↙ ;判断待求桩号是否大于本要素终点,如大于就停止运行程序

Lbi E

N→Z[C+23]:E→Z[C+24]:M→Z[C+25]:H→Z[C+26]:A→Z[C+27]:R→Z[C+28]:L→Z[C+29]

FileName:READDAT3 平曲线分段要素读取程序3

Norm 1

Z[C+23]→N:?N:N→Z[C+23]      当前分段要素N坐标

Z[C+24]→E:?E:E→Z[C+24]     当前分段要素E坐标

Z[C+25]→M:"SZH"?M:M→Z[C+25]  当前分段要素起点桩号

180Z[C+26]÷π→H:H◤DMS◢

"FWJ"?H:Hπ÷180→H:H→Z[C+26]  当前分段要素起点方位角(正北)单位:度分秒

Z[C+27]→A:"SR"?A:A→Z[C+27]    当前分段要素起点曲率有左偏负右偏正(注意是半径的倒数)

Z[C+28]→R:"ER"?R:R→Z[C+28]    当前分段要素终点曲率有左偏负右偏正(注意是半径倒数)

Z[C+29]→L:?L:L→Z[C+29]     当前分段要素长度

Return

FileName:GCJS 高程计算

Z[C+31]→D

0→J

Lbi S

D→Z[C+31]

Z[D-2]→I

Z[D-1]→V

Z[D+1]→K

Z[D+2]→O

(O-V)÷(K-I)→U

Z[D+4]→I

Z[D+5]→V

(V-O)÷(J-K)→V

U-V→Z  ;为正时是凸型竖曲线,负是时为凹竖曲线

Z[D+3]→I    ;读入半径

Abs(IZ)÷2→T  ;切线长

If G

If J=1 Or Z[D]=-1 :Then UG-UK+O→Z :Return:IfEnd       ;计算高程Z

-1→J:D-3→D:Goto S

Else If G

G-K+T→Q

Q2÷2÷I→I

Z>0=>-I→I

O-UT+UQ+I→Z     ;计算高程Z

Return 

Else If G

G-K-T→Q

Q2÷2÷I→I

Z>0=>-I→I

O+VT+VQ+I→Z   ;计算高程Z

Return

Else If J=-1 Or Z[D+3]=1 :Then

O+VG-VK→Z ;计算高程Z

Return

Else 1→J:D+3→D:Goto S

IfEnd :IfEnd:IfEnd:IfEnd

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005420.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号