附和导线平差程序[QBASIC](精选2篇)
附和导线平差程序[QBASIC] 篇1
附和导线平差程序[QBASIC]
由本人在网络上收集整理
DECLARE FUNCTION DEG!(X!)
DECLARE FUNCTION DMS!(XX!)
DECLARE FUNCTION XCHAR$(XX!, N!)
CLS
PRINT “ 附和导线平差程序(2.0R)”
PRINT “ 作者:徐振刚”
PRINT “ 1999年12月31日”
PRINT “功能:本程序可以用来进行一般导线平差计算,包括附和导线、闭合导线和支导线,其中” PRINT “ 闭合导线和支导线需对原始数据进行一定处理。”
PRINT “备注:坐标计算误差≤5mm;角度计算误差≤0.5s”
REM N----角度个数(包括已知方位角)
REM M----导线边数
REM H----允许方位角闭合差秒值
REM A----方位角(A(0)为起始方位角)
REM D----边长
REM X,Y----坐标(X1,Y1;X,Y为已知坐标)
REM F0----方位角允许闭合差
REM F1----导线方位角闭合差
REM F3,F4,F----增量闭合差
REM K----导线全长相对闭合差
PRINT “新建数据文件?(Y/N)”
LOCATE 25: PRINT “按 ESC键 返回主菜单.”;TAB(60);DATE$;“ ”;TIME$
DO
YN$ = INKEY$
IF YN$ = “Y” OR TN$ = “y” THEN
RUN “DXPCEDIT.BAS”
ELSEIF YN$ = “N” OR YN$ = “n” THEN
EXIT DO
ELSEIF YN$=CHR$(27)THEN
RUN “MAIN.BAS”
END IF
LOOP
REM ******************************************************************************** CLS
PI = 3.14***93#: PU = 180 / PI
INPUT “请输入数据文件名:(DXPC.DAT)”;FILEIN$
IF FILEIN$ = “" THEN
FILEIN$ = ”DXPC.DAT“
END IF
OPEN FILEIN$ FOR INPUT AS #1
INPUT #1, N, M, H
DIM B(N), D(M), A(N1
A(I)= A(I360
END IF
NEXT I
F0 = H / 3600 * SQR(N1)1)
FOR I = 1 TO N360
END IF
NEXT I
S = 0: X(0)= X1: Y(0)= Y1
FOR I = 1 TO M
S = S + D(I)
X(I)= X(I1)+ D(I)* SIN(A(I)/ PU)
NEXT I
F3 = X(M)Y: F = ABS(SQR(F3 * F3 + F4 * F4))
D = 0
FOR I = 1 TO M
D = D + D(I)
X(I)= X(I)F4 / S * D
NEXT I
REM ********************************************************************************
PRINT ”方位角允许闭合差 F0=+/-“;XCHAR$(DMS(F0), 6)
IF ABS(F1)<= F0 THEN
PRINT ”导线方位角闭合差 F1= “;XCHAR$(DMS(F1), 6);” OK!“
ELSE
PRINT ”导线方位角闭合差 F1= “;XCHAR$(DMS(F1), 6);” OVER LIMIT!“
END IF
PRINT ”相对闭合差:“
PRINT TAB(5);”F3=“;F3, ”F4=“;F4, ”F=“;F, ”K=1/“;S / F
PRINT ”改正后方位角:“
FOR I = 0 TO N1
PRINT #1, TAB(5);”A(“;I;”)=“;XCHAR$(DMS(A(I)), 6)
NEXT I
PRINT #1, ”改正后坐标:“
FOR I = 0 TO M
PRINT #1, TAB(5);”X(“;I;”)=“;XCHAR$(X(I), 4), TAB(30);”Y(“;I;”)=“;XCHAR$(Y(I), 4)NEXT I
PRINT #1, TAB(5);”X(“;M;”)=“;XCHAR$(X(M), 4), TAB(30);”Y(“;M;”)=“;XCHAR$(Y(M), 4)CLOSE #1
REM ******************************************************************************** PRINT
PRINT ”详细数据资料业已备份到 JHFY.OUT。“
PRINT ”按 ESC键 返回主菜单...“ DO
LOOP UNTIL INKEY$ = CHR$(27)RUN ”MAIN.BAS“
END
REM 将度分秒转换成度
FUNCTION DEG(X)
D = INT(X)
M = INT((XDD)* 60)
S =(XM / 60)* 3600
IF XX >= 0 THEN
DMS = D + M / 100 + S / 10000
ELSE
DMS =-1 *(D + M / 100 + S / 10000)END IF
END FUNCTION
REM 以字符串形式输出保留 N 位小数的 X FUNCTION XCHAR$(XX, N)
X = ABS(XX)
R = INT(X)
F = INT((X-R)* 10 ^ N +.5)
TEMP$ = MID$(STR$(F), 2)
WHILE LEN(TEMP$)< N
TEMP$ = ”0“ + TEMP$
WEND
TEMP$ = STR$(R)+ ”.“ + TEMP$
IF XX >= 0 THEN
XCHAR$ = TEMP$
ELSE
XCHAR$ = ”-" + MID$(TEMP$, 2)
END IF
END FUNCTION
附和导线平差程序[QBASIC] 篇2
导线测量是控制测量中常用的方法之一, 在导线外业测量完成后, 需要进行导线平差, 以求得每个导线点的坐标值。目前, 测量平差软件颇多, 每种软件都有各自的优点, 但也存在一定的缺陷, 如软件处理结果只有数据, 没有图;或图表分开显示, 效果不直观;或只有平差的最终结果, 不能显示平差的中间计算过程, 不利于用户理解平差原理;也有些先进的测量仪器 (如全站仪) 中嵌入了导线平差程序模块, 除不能显示平差中间计算过程外, 也不能绘图, 尤其是当控制点多, 导线外业测量采取分组作业完成时, 则无法直接使用仪器自带的程序进行平差。
Visual Fox Pro 6.0 (以下简称VFP) 是目前微型计算机上应用最广泛的数据库系统开发工具之一, 它功能强大, 具有可视性和面向对象程序设计的优点。本文尝试采用VFP开发导线平差应用程序, 其界面友好, 用户使用方便, 既能根据不同目的的需要输出相应的处理结果, 又能直接绘制导线图。
二、导线平差内容
导线平差包括平面控制导线平差和高程控制导线平差。根据导线近似平差原理, 平面控制导线平差的主要内容包括: (一) 计算角度闭合差, 判断误差是否超限, 若在允许范围则进行调整 (包括计算角度改正数、残差分配和改正后角度) ; (二) 计算导线边方位角; (三) 计算坐标增量; (四) 计算导线全长闭合差, 判断闭合差是否超限, 若在允许范围则进行调整 (包括计算坐标增量改正值, 残差分配和改正后坐标增量) ; (五) 计算各导线点坐标。
进行角度闭合差调整时, 将闭合差反符号平均分配到各观测角, 剩余误差 (残差) 分配到转折角较大的几个观测角中;进行坐标增量闭合差调整时, 采用与对应边长成正比例的原则计算坐标增量的改正数, 残差分配到边长较大的坐标增量中。导线平差计算公式参见参考文献[3]中有关章节。
高程控制导线平差的主要内容包括:计算两点间高差;计算高差闭合差, 判断误差是否超限, 若在允许范围则进行调整 (包括计算高差改正数、残差分配和改正后高差) ;计算各导线点高程。
三、表单设计
导线平差表单设计如图1所示。
表单中各命令按钮功能包括以下几个方面。
(一) “清空数据”。
用来清除表格中原有数据以及辅助计算数据和导线图。
(二) “导入数据”。
将导线测量外业记录表中各导线点观测数据直接导入表单的表格中。
(三) “增加记录”。
用于直接录入外业测量各导线点观测数据, 它与“导入数据”两者间可视具体条件选用其一。
(四) “删除记录”。
用于删除无用 (或错误) 的导线点记录。
(五) “平差计算”。
完成平面控制和高程控制导线平差的全部计算过程。本模块为“导线平差”程序的核心模块, 程序运行过程中会提示用户确认观测角是“左角”还是“右角”, 并根据计算结果返回闭合差是否超限的信息, 由用户决定是否继续平差。
(六) “数据转储”。
将导线平差结果 (或导线外业测量观测数据) 根据需要保存到指定格式 (*.dbf、*.xls、*.txt) 的文件中。
(七) “打印输出”。
将导线平差结果 (包括角度闭合差计算、调整, 方位角计算, 坐标增量计算, 导线全长闭合差计算、调整等中间过程) 按常规内业计算表格形式预览或送打印机输出。
(八) “设置”。
对导线图进行设置, 包括是否切换界面绘图, 是否显示坐标北向, 是否以红、蓝两色相间显示导线边, 是否显示点号或高程等。
(九) “绘制导线图”。
根据平差结果和用户对图形的设置, 绘制导线平面图。程序允许用户直接在本表单上绘制导线图 (见图1) , 若控制点多, 图形复杂, 程序也允许用户切换到新界面绘图。绘制导线图时可同时显示坐标北向、控制点号或控制点的高程。
(十) “放大”、“缩小”、“清除导线图”。
分别用于放大导线图、缩小导线图和清除导线图。
四、表单方法
由于角度观测单位是度、分、秒, 为便于角度的录入和计算输出, 为表单添加dotoshuo和shuotodo两个方法。前者的功能是将角度单位度、分、秒转换为以度为单位的小数形式;后者是将以度为单位的小数再转换成度、分、秒。
(一) dotoshuo方法的代码
(二) shuotodo方法的代码
(限于篇幅, 表单中其他控件的事件代码略)
五、应用举例
表1为单一附合导线外业观测数据, 其中A、B、C、D为已知点, 导线图参见图1中的导线略图。
操作步骤: (一) 单击“增加记录”按钮, 将各导线点观测数据依次录入 (本程序允许观测角为左角, 也可以为右角) 表格中, 若已建立外业测量记录表文件, 则按“导入数据”将指定文件中全部数据直接导入表格中。角度录入时, 度分秒之间用“.”间隔。 (二) 单击“计算平差”按钮, 可完成平面坐标平差和高程平差。 (三) 单击“设置”按钮, 根据实际需要完成对导线图的设置。 (四) 单击“绘制导线图”按钮, 可按用户的设置生成平差后的导线图。 (五) 若要预览或打印则按“打印输出”按钮;若要保存平差结果, 则按“数据转储”按钮, 指定文件名, 选择文件格式和目录即可存盘。 (六) 对录入错误的记录, 按“删除记录”按钮可将其删除。
六、结束语
(一) 应用本程序进行导线平差, 其数据录入、平差计算、成果保存、输出以及绘制导线图均可在同一界面完成, 操作方便, 界面友好, 效果直观。其处理成果可根据不同需求生成相应格式文件, 由其生成的txt文件通过文本编辑器转换成dat文件后, 便可在绘图软件CASS中展点、绘图。
(二) 本程序既可将平面和高程平差同时进行, 也可单独对平面坐标进行平差。在四等以下地形图测绘的首级控制及图根控制测量中均可使用。
(三) 本程序能显示导线平差的中间计算过程和最终处理结果 (按表单中的“打印输出”按钮即可显示报表) , 有助于用户理解导线近似平差原理, 可作为测量教学的重要辅助工具, 有较大的实用价值。
(四) 本程序既可用于附合导线平差 (包括定向点坐标已知和未知两种情况) , 也可用于闭合导线平差。限于篇幅, 本文仅以单一附合导线平差为例介绍了其应用, 对于闭合导线只需按规定格式、顺序录入观测记录即可。
参考文献
[1]候建国.三维导线平差程序设计[J].东北测绘, 2003.
[2]黎升洪.Visual FoxPro面向对象程序设计教程[M].北京:科学出版社, 2004.
[3]卞正富.测量学[M].北京:中国农业出版社, 2005.
[4]袁泽喜.导线平差方法的应用与分析[J].西部探矿工程, 2005.
[5]陈传胜.测量学[M].武汉:武汉测绘科技大学出版社, 1999.
【附和导线平差程序[QBASIC]】推荐阅读:
随声附和词语解析05-23
导线舞动06-24
导线载流量07-15
绝缘导线施工07-21
无定向导线测量08-03
导线计算算法分析09-07
导线安装作业指导书07-11
上海企业工资增长指导线08-02
交桩导线复核测量成果报告目录07-03
多分裂导线阻力系数的变化规律研究论文05-27