VB测量平差程序设计讲稿
基于VB的间接平差程序设计
毕业论文
论文题目基于VB的间接平差程序设计专业班级工程测量
学生姓名黄晓伟
指导教师王克晓
完成时间2015年5月5日
重庆能源职业学院
重庆能源职业学院毕业设计(论文)指导教师评语评语:
成绩:
指导教师签名:
年月日重庆能源职业学院毕业设计(论文)答辩记录
目录
摘要 (1)
1 引言 (2)
1.1 现状分析 (2)
1.2 目的及意义 (3)
1.3 研究内容 (4)
2 Visual Basic编程语言概述 (5)
2.1 Visual Basic简介 (5)
2.2Visual Basic程序设计简述 (8)
3 间接平差 (25)
4.1 平差软件整体展示 (29)
5算例演算 (32)
5.1水准网间接平差 (32)
6 结论 (34)
测量平差是测绘类专业的一门重要的专业基础课程,是用于观测数据处理的一门应用数学。但是因为其计算量比较大,这变使大家在学习和使用的时候感觉十分头疼。虽然有很多简化了的平差算法,比如高斯约化法,但是这些算法一方面会影响计算精度,另一方面也不能有效的减少计算量。
平差计算是利用最小二乘原理消除观测值与起算数据之间的矛盾,求出各待定元素的平差值并评定精度。而在经典测量平差中,主要研究四种平差模型方程(条件平差、间接平差、附有未知参数的条件平差和附有限制条件的间接平差)的列立和求解,其牵涉到大量的矩阵运算,传统的人工计算工作量很大。随着计算机的出现,矩阵运算就变得轻松,而且计算机的运行速度快,精度高,特别是对于具有大量矩阵运算,计算机轻松解决。前提是要编好相应的程序代码。
本文运用visual basic语言编制了一个平差软件,主要对水准网和附合导线进行了平差的编制和软件程序界面的设计,实现的功能主要有对水准网数据和附合导线数据的平差计算,当然为了平差后能使用数据,本软件还设计了数据输出的功能,使界面更友好,方便用户使用。
VB测量程序设计
实验报告
课程名称:测量程序设计任课老师:段伟姓名:王森学号:147621008
2016年12月24日
综合实验设计:
窗体及代码如下7
Part1:封面
代码:
Private Sub Timer1_Timer()
Label1.Left = Label1.Left + 100
If Label1.Left + Label1.Width > frmCover.Width Then
Timer2.Enabled = True: Timer1.Enabled = False
End If
End Sub
Private Sub Timer2_Timer()
Label1.Left = Label1.Left - 100
If Label1.Left < 0 Then
Timer1.Enabled = True: Timer2.Enabled = False
End If
End Sub
Private Sub Timer3_Timer()
Label7.Caption = Now
End Sub
Private Sub cmdEnter_Click()
If i > 2 Then
MsgBox "您已输错密码超过三次,程序将关闭!", , "输入次数超限"
End
End If
If txtUserName.Text = "admire" And txtPassWord.Text = "1111" Then
FormMain.Show: Unload Me
Else
MsgBox "密码错误,请从新输入!" & vbCrLf & "还有" & Str(4 - i) & "次机会!", , "密码错误"
基于VBA的平差数据精度指标处理程序设计
收稿日期:20190506
作者简介:方㊀齐(1989 ),男,2016年毕业于中国矿业大学数字矿山与沉陷控制工程专业,工学硕士,助理工程师㊂
文章编号:16727479(2020)02000505
基于VBA 的平差数据精度指标处理程序设计
方㊀齐
(中国铁路设计集团有限公司,天津㊀300308)
㊀㊀摘㊀要:为了简化GPS 基线解算后的数据统计工作,方便超限数据查找及数据分析,运用EXCEL
与WORD 交互编程思想,利用EXCEL 软件中内置的Visual Basic for Applications (VBA )语言开发了一套
平差数据后处理程序㊂该程序可以按照规范要求统计分析基线解算和平差后各精度指标的超限情况,并对超限数据进行标注和列表显示,完成相应指标曲线图的绘制;可根据铁路控制网复测要求进行复测分析,完成复测指标及内插更新点的统计,最终将统计结果输出到WORD 规范表格中,方便结果分析和报告编写,实现了EXCEL 与WORD 的数据交互㊂该程序能够快速进行平差数据的后处理,有利于将来测量自动化办公程序的进一步实现㊂实践证明,该程序兼容性强,自动化程度高,适用性强,操作方便,能够满足数据统计分析的要求,可提高精度指标的统计效率和规范性㊂
关键词:数据处理;VBA ;程序设计;
数据交互中图分类号:P258㊀㊀文献标识码:B
DOI:10.19630/ki.tdkc.201905060001
开放科学(资源服务)标识码(OSID):
Processing Program Design of Adjustment Data
基于MatrixVB的测量平差程序设计与实现
2 1 年 第 4期 02
. 京测绘 . 北
1 5
和采用 事 件 驱 动 方 式 的 结 构 化 高 级 程 序 设 计 语
平差 中的几个量 : 1 观测 值 个数 n ( ) 要 () ;2 必
观测 数 t能 够 唯 一 确 定 一 个 几 何 模 型所 必要 的 :
元 素的个 数 ; 3 多 余 观 测数 r 多余 必 要 观 测 的 () :
观测 量个 数 , 叫“ 又 自由度” r: - t , = =n 。
角 网的平 差 过 程 , 目组 利 用 Mar VB强 大 的 项 ti x
其 数 学模 型为 :
一
P一
间接平 差 : 定 t 独立 的参 数 , 每个 观 测 选 个 将 值分 别表 示成这 t 独 立 参数 的 函数 , 成 观测 个 组 方程 , 这种 以观 测方 程 ( 误 差 方 程 ) 函数 模 型 或 为
的平 差方 法就 是 间接平差 L 。 3 ]
矩 阵计算 能力 、 B . V 6 0简 单高 效 可视 化 编程 以及 通用 的 E cl 格 数 据 输人 模 式 , 发 并 应 用 了 xe表 开
此测 量 平 差 程 序 。其 具 有 简 洁 明 了、 操 作 、 易 能
较好 联 系工程 实 际等 特 点 , 平差 计算效 果 良好 。
水准网平差(VB代码)
误差理论与测量平差础)
课程设计报告
系(部):土木工程系
实习单位:山东交通学院
班级:测绘084
学生姓名:田忠星学号080712420
带队教师:夏小裕﹑周宝兴
时间:10 年12 月13 日到10 年12 月19 日
山东交通学院
目录:
1.摘要
P3
2.概述
P3
3.水准网间接平差程序设计思路
P3—P4
4.平差程序流程图P4—P6
5.程序源代码及说明P7—P23
6.计算结果P23—P26
7.总结P26—P27
一:摘要在测量工作中,为了能及时发现错误和提高测量成果的精度,常作多余观测,这就产生了平差问题。在一个平差问题中,当所选的独立参数X?的个数等于必要观测数t 时,可将每个观测值表达成这t 个参数的函数,组成观测方程,这种以观测方程为函数模型的平差方法,就是间接平差。二:概述:该课程设计的主要目是对水准网进行间接平差,在输入数据后依次计算高程近似值﹑误差方程和平差计算。
三:水准网间接平差程序设计思路
1.根据平差问题的性质,选择t 个独立量(既未知点的高程)作为参数X?
2.将每一个观测量的平差值(既观测的高程差值)分别表达成L L V
3.由误差方程系数 B 和自由项组成法方程,法方程个数等于参数的个数t ;
4. 解算法方程,求出参数X?,计算参数(高程)的平差值X?=X0 +x? ;
5.由误差方程计算V,求出观测量(高差)平差值L L V 6.评定精度
单位权中误差
平差值函数的中误差
四:平差程序流程图
1. 已知数据的输入 需要输入的数据包括水准网中已知点数﹑未
知点数以及这些点 的点号, 已知高程和高差观测值﹑距离观测值。 程序采用文件方 式进行输入,约定文件输入的格式如下: 第一行:已知点数﹑未知点数﹑观测值个数 第二行:点号(已知点在前,未知点在后) 第三行:已知高程(顺序与上一行的点号对应) 第四行:高差观测值,按“起点点号,终点点号。高差观测值, 距离观测值”的顺序输入。 本节中使用的算例的数据格式如下
测绘程序设计(VS2008)实验报告--水准网平差程
《测绘程序设计
()》
上机实验报告
(Visual C++.Net)
班级:
学号:
姓名:
序号:
二零一一年五月
实验8 平差程序设计基础
1.实验目的:
1.1 巩固过程的定义与调用;
1.2 巩固类的创建于使用;
1.3 巩固间接平差模型与平差计算;
1.4 掌握平差程序设计的基本技巧与步骤。
2.实验内容:
水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取。
计算部分也界面无关。
3.设计思路:
在本次的实验中,我着重想表现的是一种面向对象的编程思想。于是,在程序中我设计了4个类:CPoint、CObserve、CMatrix、Leveling,分别定义点的属性、观测数据属性、矩阵和水准网平差计算的属性与方法。
水准网平差计算一般步骤为:
(1)读取观测数据和已知数据;
(2)计算未知点高程近似值;
(3)列高差观测值误差方程;
(4)根据水准路线长度计算高差观测值的权;
(5)组成法方程;
(6)解法方程,求得未知点高程改正数及平差后高程值;
(7)求高差观测值残差及平差后高差观测值;
(8)精度评定;
(9)输出平差结果。
水准网高程近似值计算算法
4.界面设计:
仅添加了一个button按钮,单击后读取数据,并进行水准网平差计算,计算结果保存在记事本中
5.主要代码:
文件一: CPoint.h
代码:
class ControlPoint
{
public:
ControlPoint(void){};
~ControlPoint(void){};
public:
CString pointID; //点号
double H; //高程
测绘程序设计教案VB版第七章
测绘程序设计教案VB版第七章
第七章绘制误差椭圆、误差曲线的程序设计⽅法
§7-1 绘制误差椭圆的程序设计⽅法
测量平⾯控制⽹平差计算后进⾏精度评定时,点位中误差虽然可以⽤来评定待定点的点位精度,但是它却不能代表该点在某⼀任意⽅向上的位差⼤⼩。在有些情况下,往往需要确定点位在某些特殊⽅向上的位差⼤⼩;此外,还要了解点位在哪⼀个⽅向上的位差最⼤,在哪⼀个⽅向上的位差最⼩。例如,在⼯程放样中,就经常需要研究这个问题。为了便于求定待定点点位在任意⽅向上位差的⼤⼩,⼀般是通过求出待定点的点位误差椭圆来实现的。通过误差椭圆可以求得待定点在任意⽅向上的位差,这样就可以较精确地、形象⽽全⾯地反映待定点点位在各个⽅向上误差的分布情况。
为了确定任意两个待定点之间相对位置的某些精度,也需要作出两个待定点之间的相对误差椭圆。
⽆论是表⽰点位绝对位差的误差椭圆,还是表⽰两个待定点之间相对位置的某些精度的相对误差椭圆,在测量程序设计中所要⾯临的问题都是绘制椭圆,⽽这个椭圆⼀般情况下不是正⽴的。由于⽬前常⽤的⼏种编程语⾔(例如VB 、VC )中没有现成的语句、命令、函数或⽅法来绘制倾斜任意⾓度的椭圆,因此,下⾯研究在计算机屏幕上绘制倾斜任意⾓度的椭圆的编程⽅法。
⼀、绘制误差椭圆的基本思路
以下讨论问题及编程中所使⽤的平⾯直⾓坐标系,设经过⼀段程序的控制,已将屏幕绘图区域的平⾯直⾓坐标系调整为测量平⾯直⾓坐标系(以下简称坐标系),即纵轴向上为X 轴正向,横轴向右为Y 轴正向。
绘制倾斜任意⾓度的误差椭圆时,已知数据如下:
椭圆的长半轴:E (也可⽤a 表⽰)
测量平差程序设计
学号
天津城市建设学院
测绘程序设计结业考核报告
单一附合水准路线近似平差
学生姓名
班级测绘二班
成绩
指导教师(签字)
测绘工程系
2012年12 月13 日
一、目的和意义
1.掌握常用控件的属性和方法。
2.熟练使用窗体、控件进行程序设计。
3.熟练应用结构化程序设计语言思想编写程序代码。
4.掌握利用菜单编辑器设计VB菜单并编写相关程序代码。
5.了解较复杂的编程过程。
6.掌握在窗体上添加控件的各种方法。
二、原理和过程
《误差理论与测量平差基础》、《VB测绘程序设计》
三、程序代码
Option Explicit
Private Sub Command1_Click()
Dim n As Integer
n = txtcz.Text
If n > 1 Then
Form2.Show
Form1.Hide
Else
MsgBox "测站数应该大于1",
vbOKOnly + vbInformation + vbApplicationModal, "提示信息" End If
Option Explicit
Private Sub Command1_Click()
Dim qg As Double
Dim zg As Double
Dim i As Integer
Dim n As Integer
n = Form1.txtcz.Text
Dim gc() As Double
Dim sum As Double
Dim pcg1() As Double
ReDim gc(0 To n - 1)
ReDim pcg1(0 To n - 1)
Dim a As Double
《测量程序设计》VB
实验二、简单的程序设计()
【实验目的】:
1、了解顺序结构
2、掌握选择结构
3、掌握循环结构。
4、掌握数组。
【实验内容及步骤】:
一、了解顺序结构
1、累加和计数器
Private Sub Form_click()
For i = 1 To 100
m = m + i
n = n + 1
Next
Print m, n
End Sub
2. InputBox函数
•格式:
[变量]=InputBox(提示[,标题] [,默认值] [, <x坐标位置>] [, <y坐标位置>] ) •举例:
a = InputBox("请输入学生学号", "信息查询", , 2000, 3000)
3、MsgBox函数
二、掌握选择结构
1、if----then else
例1:判断输入数的奇偶性,并输出结果Private Sub cmd1_Click()
Dim int1 As Integer, int2 As Integer
int1 = text1.Text
int2 = int1 Mod 2
If int2 = 1 Then
text2.Text = "这是一个奇数!" Else
text2.Text = "这是一个偶数!" End If
End Sub
2、If...Then...Elseif
例2
Private Sub Form_Click()
Dim x As Double
x = Val(InputBox("输入学生成绩=?")) If x > 100 Or x < 0 Then
Print "成绩输入错误"
基于 VB环境下水准网平差 程序设计研究
现 代 测 绘 Modern Surveying and Mapping
Vol.35,No.1 Jan.2012
基于 VB 环境下水准网平差 程序设计研究
周长江,顾和和
(中国矿业大学 环境与测绘学院,江苏 徐州 221008)
摘 要 在工程测量中,当测区需要观测很多点的 高 程 时,就 需 要 布 设 水 准 网。 水 准 网 间 接 平 差 模 型 具 有 许 多 优 点,是编写水准网平差软件的主要模型。本文根据水准 网 间 接 平 差 的 原 理,论 述 了 程 序 实 现 三 四 等 水 准 网 平 差 的 思 路 和 实 现 方 法 ,并 用 相 关 实 例 验 证 了 可 行 性 。 关 键 词 水 准 网 间 接 平 差 VB 中 图 分 类 号 :P224 文 献 标 识 码 :A 文 章 编 号 :1672-4097(2012)01-0012-03
把它们分别编号为1中终点存放到了pointendp3已知点和未知点点名64382已知点a高程24观测值起点终点高差水平距离22未知点近似高程推算观测数据输入后程序就通过循环搜索含有未知点的观测高差对于起点或终点含有已知点而未知点则ap1bp1都可以算出p1点的近似高程而且可能值不一样此时另一个点是未知点的情况就可以通过已知点高程和相应的观测高差推算出未知点的高程近似值
平面和高程控制测量VB程序设计报告
题目:习题7.1平面和高程控制网平差
蒲浡轩
测绘C101班
106684
余数7
一、设计思路
题目为:平面控制网和高程控制网的平差1、流程图
2、界面设计
上面为开始主程序,在该页面进行高程控制网平差,点击平面控制启动下面的程序页面进行平面控制网平差。
2、功能设计
通过菜单实现程序的各个功能,通过菜单启动Common Dialog Control控件输入txt文档,读取txt里面的高程或平面控制网数据,然后点击各个计算菜单进行平差计算
二、算法及代码实现
1、Form1代码:
Dim strFileName As String
Dim nn%, un%, tn%, hn% '已知点个数,未知点个数,总点数,观测值个数
Dim Pname() As String '点名数组
Dim Hknown() As Double '已知高程数组,存放已知点高程和高程近似值
Dim bE%(), en%() '观测值的起点和终点编号数组,存储的是点序号
Dim h#(), s#() '高差观测值数组和距离观测值数组
Dim a#(), x#(), P#(), L#() '间接平差的系数阵、解向量、权阵和常数向量
'高程平差计算
Private Sub mnuAdj_Click()
Dim i%, j%
ReDim x(1 To un)
InAdjust a, P, L, x '调用间接平差的通用过程求解
'计算并显示高程平差结果
txtShow.Text = txtShow.Text & "平差计算结果:" & vbCrLf
txtShow.Text = txtShow.Text & "点号初始高程(m) 高程改正数(m) 平差后高程(m)" & vbCrLf
vb课程测绘程序设计二
2. 计算方法
1) 问题: AB为控制点,位置已知,坐标已知, 给出C点坐 标,进行放样.
2) 求BC两点之间距离.
3) 计算放样元素角b
b=tbc-tab+180
if b>360 then ? if b<0 then ? 有无可能?
3) 放样方法 1) 将全站仪架设在B点, 对中整平. 2) 瞄准A点,置为零方向(角度设置为0). 3) 拨角度b,并依次用棱镜测量, 找出距离B点为 S 的C 点, 并进行标记.
2 、度分秒与度制换算 度分秒 117°45′12″
小数形式 117.7533 1°=60′ 1′=60 ″ 1°=3600 ″ 1′=1/60° 1″=1/60 ′ 1″=1/3600 ° 1) 度分秒换算度 Public Function Deg( jd) [公有过程 子函数 名称(形参) ]
第一象限 a=90°-arctan(dx/dy) 第二 象限 a=90°-arctan(dx/dy) 第三象限 a=270°-arctan(dx/dy) 第四象限 a=270°-arctan(dx/dy) a=180-Sgn(dy)*90-Atn(dx/dy)* 57.29577951308°
Public sub() dx=x(j)-x(i) dy= y(j)-y(i)+0.0000001 s=sqr(dx*dx+dy*dy) a=180-Sgn(dy)*90-Atn(dx/dy)* 57.29577951308°
VB开发水准测量平差软件的方法
VB开发水准测量平差软件的方法
摘要:本文介绍了应用Visual Basic6.0开发的水准测量平差软件的方法。通过软
件自动生成EXCEL格式的水准测量平差计算表格进行数据处理,快速、准确计算
出待求点的高程。
关键词:VB;数据处理;水准测量
水准测量平差计算就是对合格的高差予以调整。将闭合差以相反的符号按与
各段水准路线长度(或按测站数)成正比的办法调整到各段高差上,求出改正后
的高差再推算高程。手工计算速度慢、工作效率低,同时易出现计算错误,而Visual Basic6.0是一种简单易学的可视化语言,用其进行编程计算就显得方便灵活。本文结合作者工作的实践,详细地介绍了用VB开发水准测量平差软件的方法及
应用。
1.VB语言的特点
(1).面向对象和可视化的程序设计。(2).事件驱动的运行机制。(3).结构化的程
序设计语言。 (4).多种数据库访问能力。(5).提供了功能完备的应用程序集成开发
环境。(6).方便使用的联机帮助功能。
2.水准测量平差计算的方法
(1).计算高差闭合差fh。
fh=Σh测 -(H终-H始)
fh允=±20(按四等水准测量限差)
fh≤fh允(合格)
fh允—允许闭合差;Σh测—实测的各段高差和;H始—起点高程;H终—
终点高程;
(2).计算高差改正数Vi。
Σn —总测站数或路线总长度(km);ni —分段测站数或分段路线长度(km);
(3).计算改正后高差h改i。
h改i=h测¬ + Vi
(4).计算待求点高程Hi。
Hi=Hi-1+ h改i
3.软件的开发原理
首先在VB中设计了一个固定的界面(图3.1),添加相应功能键及数据输入
测绘程序设计教案VB版第八章
第八章导线近似平差计算程序设计
§8-1 总体方案设计
一般地说,编写一个测量平差计算程序,首先应进行总体方案设计,然后才是进行具体的程序代码编写及说明书编写等。
一个测量平差计算程序的总体方案设计,应包含如下内容:
1、程序开始运行的图形界面,包括程序名称、编者、完成时间或版本、操作提示、警告等。
2、菜单。一个多功能的大程序应将其用菜单形式分解为多个子功能,即子菜单。
3、输入数据提示界面。应允许用不同方法输入数据,例如:屏幕提示、键盘输入,数据文件输入(此时应有待输入的数据文件所在路径、文件名提示或查找功能)。
输入数据完成后,应允许对已输入的数据进行核对(查看)、修改、补充或删减;还应允许对输入数据以文件形式在某个路径下存盘(保存),以便保存原始数据及重复使用。
4、计算过程设计(含各种计算方法设计)。
5、中间计算结果及最后计算结果的输出方法设计。应允许屏幕显示、通过打印机输出或输出到文件(即以数据文件形式保存计算结果)。
6、显示、保存或通过打印机打印自动生成的网形图方法的设计。
7、点名对照表自动生成及输出设计。
§8-2 输入输出设计
输入、输出方式,是一个程序与用户进行信息交互的界面。它所设计、制作的功能如何,直接影响到程序的优劣。
一个好的程序的输入、输出方式,应具备以下特点:
1、彩色界面。色彩应用调配合适,尽可能少用具有强烈提示作用的明亮颜色,例如红色、亮黄色等要少用;对于较大区域的前景、背景,考虑到对用户眼睛的保护,应尽可能的使用绿色、墨绿色等,或使用与此相近似的自然景色图片。
2、中文提示。
VB测量平差程序的设计讲稿
Case 0 '读入观测值文件
Text1.Visible = False
CommonDialog1.ShowOpen
fname = CommonDialog1.FileName '将用户在"打开"对话框中选择的文件名对变量fname赋值
If fname <> "" Then '若无此判断当对话框中选择取消时、下面赋值语句将出错
Set ts = fso.OpenTextFile(fname) '将fname作为文本文件打开,并设置句柄
j = 0: k = 0: p = 0: h = 0
'j是测站数累计变量,k是已知点累计变量,l(j)、ns(j)分别是方向值、边长累积计数
Do While ts.AtEndOfLine <> True '前测型循环,进入循环的条件是没有读到文件结束尾
B = ts.ReadLine '读一行,置入b
B = Trim(B): i = 1: '删除B可能有的前导和尾随空格,i是工作变量,
m(i) = InStr(B, ",") '查行中第一个逗号的左数位置,并保存在整形数组变量m(i)
Do While m(i) <> 0 '前测型Do... Loop循环,成立条件是该行字符串中有逗号
tr(i) = Mid(B, m(i - 1) + 1, m(i) - m(i - 1) - 1) '提取指定位置开始的指定数目字符。
i = i + 1
m(i) = InStr(m(i - 1) + 1, B, ",") '从上一个找到的逗号位置起,查找下一个逗号的位置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Case 0 '读入观测值文件
Text1.Visible = False
CommonDialog1.ShowOpen
fname = CommonDialog1.FileName '将用户在"打开"对话框中选择的文件名对变量fname赋值
If fname <> "" Then '若无此判断当对话框中选择取消时、下面赋值语句将出错
Set ts = fso.OpenTextFile(fname) '将fname作为文本文件打开,并设置句柄
j = 0: k = 0: p = 0: h = 0
'j是测站数累计变量,k是已知点累计变量,l(j)、ns(j)分别是方向值、边长累积计数
Do While ts.AtEndOfLine <> True '前测型循环,进入循环的条件是没有读到文件结束尾
B = ts.ReadLine '读一行,置入b
B = Trim(B): i = 1: '删除B可能有的前导和尾随空格,i是工作变量,
m(i) = InStr(B, ",") '查行中第一个逗号的左数位置,并保存在整形数组变量m(i)
Do While m(i) <> 0 '前测型Do... Loop循环,成立条件是该行字符串中有逗号
tr(i) = Mid(B, m(i - 1) + 1, m(i) - m(i - 1) - 1) '提取指定位置开始的指定数目字符。
i = i + 1
m(i) = InStr(m(i - 1) + 1, B, ",") '从上一个找到的逗号位置起,查找下一个逗号的位置
Loop
If m(i) = 0 And i > 1 Then tr(i) = Right(B, Len(B) - m(i - 1)) '处理一行中最后一个逗号后的字符串
'以下部分是将存储在数组变量m(i)中的字符分类存放到方向、边长、已知坐标、网型信息等数组中
If p = 0 Then '读到的是文件第一行。
ma = tr(1): ms = tr(2): mk = tr(3): p = 1 '提取观测方向,边先验精度值,并使该句以后不能再执行。
Else
If m(1) = 0 Then j = j + 1: ReDim Preserve dm(j): ReDim Preserve nl(j): ReDim Preserve ns(j): dm(j) = B: nl(j) = nl(j - 1): ns(j) = ns(j - 1) '该行中没有逗号,但又不是结束符,则一定是测站点名。将读出的字符串赋值到点名数组变量dm(j),
资料.
Next j
If p = 0 Then d = d + 1: ReDim Preserve ns(d): ns(d) = ns(d - 1): ReDim Preserve dm(d): dm(d) = lb(i) '如p=0,表明目标点未设过测站,将该点点名加入点名数组
Next i
zds = d '将总点数存入模块级变量zds
ReDim x(zds), y(zds) ' 重新定义坐标数组
x(1) = 10000: y(1) = 10000 '为推算近似坐标,对第一个点赋假设坐标值
k = 1
For i = 1 To yds
If lb(1) = ym(i) Then k = k + 1
Next i
ss = sid(1, k) '调出第一点到未知点方向的边长,参数是测站点序号,照准方向号
h = seqn(lb(k)) '查k方向照准点的计算序号
x(h) = x(1) + ss * Cos(0): y(h) = y(1) + ss * Sin(0) '计算第一点上第k方向值的目标点假设坐标
For i = 1 To nl(cds) '遍访所有方向值,将其由角度值转换为弧度值.
If l(i) > 0.001 Then l(i) = radian(l(i)) '零方向值不参加转换
Next i
n = 0
Do
n = n + 1 'n是循环计数变量,控制循环次数,避免假定坐标计算不出时,进入死循环。
For i = 1 To cds '按测站循环
If x(i) > 1 Then '在该测站假设坐标已计算出的前提下,求照准点假设坐标
p1 = 0
For j = nl(i - 1) + 1 To nl(i) '遍访i测站上所有方向值
h = seqn(lb(j)) '查目标点对应的序号
If x(h) > 1 Then '目标点坐标已解出
资料.
t2 = azimuth(xo(1), yo(1), xo(2), yo(2))
dt = t2 - t1: x1 = x(m(1)): y1 = y(m(1))
For i = 1 To zds '将假设坐标转换到实际坐标
dx = x(i) - x1: dy = y(i) - y1
x(i) = xo(1) + dx * Cos(dt) - dy * Sin(dt)
y(i) = yo(1) + dx * Sin(dt) + dy * Cos(dt)
Next i
For i = 1 To yds '置入已知点坐标
x(m(i)) = xo(i): y(m(i)) = yo(i)
Next i
Case 2 '组法方程
Text1.Visible = False
Dim l1 As Double, pp As Double, n2 As Long '定义过程级变量
q = 206265: ll = 0
n1 = 2 * (zds - yds) '未知数数目
n2 = n1 * (n1 + 1) / 2 '一维存储法方程系数数组上限
ReDim NX(n2), UX(n1) ' 重新定义法方程系数、常数数组
Call order(m(), yds) '对保存已知点序号的m()数组排序
For i = 1 To cds '按测站循环
z = 0 '将按测站累积的变量清零
'下面开始处理一个测站的方向观测值
k1 = nl(i - 1) + 1: k2 = nl(i) '一测站上最小和最大方向号
For j = k1 To k2 '在i测站上按方向循环,求定向角未知数
h = seqn(lb(j))
t = azimuth(x(i), y(i), x(h), y(h))
f = t - l(j): If f < 0 Then f = f + 2 * pi 'f是解算的零方角方位角
资料.