VB测量平差程序设计讲稿
基于VB语言的施工测量应用程序设计

Shell App.Path & "\DATA\qt\ 位于圆曲线斜交盖梁 长度和两端点桩号及座标计算 .EXE", vbNormalFocus End Sub Private Sub hgljs_Click() Shell App.Path & "\DATA\qt\ 缓和曲线盖梁长度计 算 .EXE", vbNormalFocus End Sub Private Sub hpjs_Click() Shell App.Path & "\DATA\lx\ 高速公路超高横坡计 算 .EXE", vbNormalFocus End Sub Private Sub jyszpc_Click() Shell App.Path & "\DATA\pc\ 简易水准平差 .EXE", vbNormalFocus End Sub Private Sub LXSJPC1_Click() Shell App.Path & "\DATA\zh\ 菱 形 三 角 平 差 (1). EXE", vbNormalFocus End Sub Private Sub LXSJPC2_Click() Shell App.Path & "\DATA\zh\ 菱 形 三 角 平 差 (2). EXE", vbNormalFocus End Sub Private Sub mnuaboat_Click() frmAbout.Show 1 End Sub Private Sub mnuend_Click() End End Sub Private Sub pqxjs_Click() Shell App.Path & "\DATA\lx\ 平 曲 线 计 算 .EXE", vbNormalFocus End Sub Private Sub razhrjs_Click() Shell App.Path & "\DATA\qt\ 卵形线与钻桩或路基 计算 .EXE", vbNormalFocus End Sub Private Sub sbspc_Click() Shell App.Path & "\DATA\pc\ 三 边 锁 严 密 条 件 平 差 .EXE", vbNormalFocus End Sub Private Sub sjspc_Click() Shell App.Path & "\DATA\pc\ 三角锁严密平差 .EXE", vbNormalFocus
《测量平差程序设计》PPT课件

精选课件ppt
14
(三)、程序设计的主要环节和难点
4、误差方程建立、法方程组成和解算:
相对于前几个问题,这一部分程序的实现,
需要较高的设计技巧,但其算法已经较为
成熟,有公开的资料可供借鉴。对比而言,
如果说前3个问题的解决,需要创造性地找
出算法,而这一问题,困难则在于如何灵
活将给定的算法程序化。
精选课件ppt
19
三、平差程序的数据结构设计
3、平差程序的数据结构应满足的 条件
(1)、充分条件:应包含足够的 数据,即:必要的起算数据,大于 必要观测数的独立观测值,这一点 主要通过合理的布网和观测来解决, 与程序设计关系不大。
精选课件ppt
20
三、平差程序的数据结构设计
(2)、必要条件:数据结构只含 构网必须的数据,无冗余数据。注 意这里所谓冗余数据是指描述网型 的关系数据冗余,而不是多余观测 数。
精选课件ppt
21
三、平差程序的数据结构设计
(3)、满足充分必要条件与否与程序 的关系:不满足充分条件,控制网中 的待定元素将不能全部算出,从而程 序不能成功运行;若不满足必要条件, 可能程序能成功运行,解算正确,但 是由于多而复杂的数据录入,使程序 的方便性、可读性受到影响,用户会 感到使用不便、难于维护,影响程序 的质量。
精选课件ppt
22
精选课件ppt
10
(三)、程序设计的主要环节和难点 1、控制网数据结构设计: ➢ 由于控制网的网型是不可预设的,所以平
差程序必须能适应各种可能的网型。要实 现这一要求,设计能使计算机能够识别控 制网网型的观测数据格式,是程序设计的 首要问题。
精选课件ppt
11
(三)、程序设计的主要环节和难点
水准网平差(VB代码)

(误差理论与测量平差础)课程设计报告系(部):土木工程系实习单位:山东交通学院班级:测绘084学生姓名:田忠星学号********* 带队教师:夏小裕﹑周宝兴时间:10 年12 月13日到10 年12 月19日山东交通学院目录:1.摘要P32.概述P33.水准网间接平差程序设计思路P3—P44. 平差程序流程图P4—P65. 程序源代码及说明P7—P236. 计算结果P23—P267. 总结P26—P27一:摘要在测量工作中,为了能及时发现错误和提高测量成果的精度,常作多余观测,这就产生了平差问题。
在一个平差问题中,当所选的独立参数Xˆ的个数等于必要观测数t时,可将每个观测值表达成这t个参数的函数,组成观测方程,这种以观测方程为函数模型的平差方法,就是间接平差。
二:概述:该课程设计的主要目是对水准网进行间接平差,在输入数据后依次计算高程近似值﹑误差方程和平差计算。
三:水准网间接平差程序设计思路1.根据平差问题的性质,选择t个独立量(既未知点的高程)作为参数Xˆ2. 将每一个观测量的平差值(既观测的高程差值)分别表达成3.由误差方程系数B和自由项组成法方程,法方程个数等于参数的个数t ;4. 解算法方程,求出参数Xˆ,计算参数(高程)的平差值Xˆ=X0 +xˆ;5.由误差方程计算V,求出观测量(高差)平差值6.评定精度单位权中误差VLL+ =∧VLL+ =∧平差值函数的中误差四:平差程序流程图1. 已知数据的输入需要输入的数据包括水准网中已知点数﹑未知点数以及这些点的点号,已知高程和高差观测值﹑距离观测值。
程序采用文件方式进行输入,约定文件输入的格式如下:第一行:已知点数﹑未知点数﹑观测值个数第二行:点号(已知点在前,未知点在后)第三行:已知高程(顺序与上一行的点号对应)第四行:高差观测值,按“起点点号,终点点号。
高差观测值,距离观测值”的顺序输入。
本节中使用的算例的数据格式如下2,3,71,2,3,4,55.016,6.0161,3,1.359,1.11,4,2.009,1.7 2,3,0.363,2.3,ˆ20s u n PV V r PV V T T +-==σ.ˆˆˆ0ˆϕϕϕσσQ =2,4,1.012,2.73,4,0.657,2.43,5,0.238,1.45,2,-0.595,2.62.平差计算过程(1)近似高程的计算。
水准网平差(VB代码)

误差理论与测量平差础)课程设计报告系(部):土木工程系实习单位:山东交通学院班级:测绘084学生姓名:田忠星学号080712420带队教师:夏小裕﹑周宝兴时间:10 年12 月13 日到10 年12 月19 日山东交通学院目录:1.摘要P32.概述P33.水准网间接平差程序设计思路P3—P44.平差程序流程图P4—P65.程序源代码及说明P7—P236.计算结果P23—P267.总结P26—P27一:摘要在测量工作中,为了能及时发现错误和提高测量成果的精度,常作多余观测,这就产生了平差问题。
在一个平差问题中,当所选的独立参数X?的个数等于必要观测数t 时,可将每个观测值表达成这t 个参数的函数,组成观测方程,这种以观测方程为函数模型的平差方法,就是间接平差。
二:概述:该课程设计的主要目是对水准网进行间接平差,在输入数据后依次计算高程近似值﹑误差方程和平差计算。
三:水准网间接平差程序设计思路1.根据平差问题的性质,选择t 个独立量(既未知点的高程)作为参数X?2.将每一个观测量的平差值(既观测的高程差值)分别表达成L L V3.由误差方程系数 B 和自由项组成法方程,法方程个数等于参数的个数t ;4. 解算法方程,求出参数X?,计算参数(高程)的平差值X?=X0 +x? ;5.由误差方程计算V,求出观测量(高差)平差值L L V 6.评定精度单位权中误差平差值函数的中误差四:平差程序流程图1. 已知数据的输入 需要输入的数据包括水准网中已知点数﹑未知点数以及这些点 的点号, 已知高程和高差观测值﹑距离观测值。
程序采用文件方 式进行输入,约定文件输入的格式如下: 第一行:已知点数﹑未知点数﹑观测值个数 第二行:点号(已知点在前,未知点在后) 第三行:已知高程(顺序与上一行的点号对应) 第四行:高差观测值,按“起点点号,终点点号。
高差观测值, 距离观测值”的顺序输入。
本节中使用的算例的数据格式如下2,3,7 1,2,3,4,5 5.016,6.016 1,3,1.359,1.11,4,2.009,1.7 2,3,0.363,2.3 2,4,1.012,2.7 3,4,0.657,2.4 3,5,0.238,1.4 5,2,-0.595,2.6 2.平差计算过程V TPV rV TPVnus(1)近似高程的计算。
测绘程序设计教案VB版第十一章

第十一章演示源程序§11-1 VB6.0测量程序菜单总体演示VERSION 5.00Begin VB.Form Form1Caption = "Form1"ClientHeight = 3195ClientLeft = 165ClientTop = 855ClientWidth = 7545LinkTopic = "Form1"ScaleHeight = 3195ScaleWidth = 7545StartUpPosition = 3 '窗口缺省Begin VB.Menu WYJLCaption = "外业记录"Begin VB.Menu SZCLJLCaption = "水准测量观测记录"Begin VB.Menu PTSZJLCaption = "普通水准记录"EndBegin VB.Menu SDSZJLCaption = "四等水准记录"EndEndBegin VB.Menu SPFXJLCaption = "水平方向观测记录"Begin VB.Menu J6FXGCJLCaption = "J6方向观测法记录" EndBegin VB.Menu J6CHFJLCaption = "J6测回法记录"EndBegin VB.Menu LZF6Caption = "-"EndBegin VB.Menu J2FXGCJLCaption = "J2方向观测法记录" EndBegin VB.Menu J2CHFJLCaption = "J2测回法记录"EndEndEndBegin VB.Menu NYJSCaption = "内业计算"Begin VB.Menu ZBZSCaption = "坐标正算"EndBegin VB.Menu ZBFSCaption = "坐标反算"EndBegin VB.Menu LZF1Caption = "-"EndBegin VB.Menu JSPCCaption = "近似平差"Begin VB.Menu JHDDCaption = "交会定点"Begin VB.Menu CJDSJXZJSCaption = "测角单三角形之计算" EndBegin VB.Menu CJQFJH1ZJSCaption = "测角前方交会1之计算" EndBegin VB.Menu CJQFJH2ZJSCaption = "测角前方交会2之计算" EndEndBegin VB.Menu JWYDXJSPCCaption = "经纬仪导线近似平差"EndBegin VB.Menu DSJSJSPCCaption = "单三角锁近似平差"EndBegin VB.Menu XXSJSPCCaption = "线形锁近似平差"EndBegin VB.Menu LZF2Caption = "-"EndBegin VB.Menu DDSBXJSPCCaption = "大地四边形近似平差"EndBegin VB.Menu ZDDBX1JSPCCaption = "中点多边形1近似平差"EndBegin VB.Menu ZDDBX2JSPCCaption = "中点多边形2近似平差"EndBegin VB.Menu BWJSPCCaption = "半网近似平差"EndBegin VB.Menu LZF3Caption = "-"EndBegin VB.Menu DYSZLXJSPCCaption = "单一水准路线近似平差"Begin VB.Menu BHSZLXJSPCCaption = "闭合水准路线近似平差" EndBegin VB.Menu FHSZLXJSPCCaption = "附合水准路线近似平差" EndBegin VB.Menu ZSZLXJSPCCaption = "支水准路线近似平差" EndEndEndBegin VB.Menu YMPCCaption = "严密平差"Begin VB.Menu SZWYMPCCaption = "水准网严密平差"EndBegin VB.Menu SJGCWYMPCCaption = "三角高程网严密平差"EndBegin VB.Menu LZF4Caption = "-"EndBegin VB.Menu DXWYMPCCaption = "导线网严密平差"EndBegin VB.Menu LZF5Caption = "-"EndBegin VB.Menu CJSJWYMPCCaption = "测角三角网严密平差"EndBegin VB.Menu CBSJWYMPCCaption = "测边三角网严密平差"EndBegin VB.Menu BJTCSJWYMPCCaption = "边角同测三角网严密平差"EndEndEndBegin VB.Menu SGFYCaption = "施工放样"Begin VB.Menu JZBFDWFYYSZJSCaption = "极坐标法点位放样元素之计算" EndEndBegin VB.Menu GSTYCaption = "高斯投影"Begin VB.Menu GJLQ3DDDHCaption = "根据一点经度求3度投影带带号" EndBegin VB.Menu GJLQ6DDDHCaption = "根据一点经度求6度投影带带号" EndBegin VB.Menu LZF7Caption = "-"EndBegin VB.Menu HDJSCaption = "换带计算"Begin VB.Menu Y3DDD3DDCaption = "由3度带到3度带"EndBegin VB.Menu Y3DDD6DDCaption = "由3度带到6度带"EndBegin VB.Menu LZF8Caption = "-"EndBegin VB.Menu Y6DDD3DDCaption = "由6度带到3度带"EndBegin VB.Menu Y6DDD6DDCaption = "由6度带到6度带"EndEndEndBegin VB.Menu FFBHCaption = "分幅编号"Begin VB.Menu YBYBWBLCCaption = "1:100万比例尺"EndBegin VB.Menu YBSWBLCCaption = "1:10万比例尺"EndBegin VB.Menu YBYWBLCCaption = "1:1万比例尺"EndBegin VB.Menu LZF9Caption = "-"EndBegin VB.Menu GJYFTTHQQZWBFTTHCaption = "根据一幅图图号求其周围八幅图图号"EndEndEndAttribute VB_Name = "Form1"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalseOption ExplicitPrivate Sub form_load()Rem ***** 此为第一个窗体Form1.frm *****Form1.Height = Screen.Height: '**** 设置窗体高占整个屏幕Form1.Width = Screen.Width: '**** 设置窗体宽占整个屏幕Form1.Left = 0: '***** 设置窗体位置距离屏幕左端的距离值为零Form1.Top = 0: '***** 设置窗体位置距离屏幕上端的距离值为零End SubPrivate Function NNN(NM As Double, BB As Integer) As DoubleRem ***** 奇进偶舍函数(新版),2002/8/2 ****Rem ***** NM为需要奇进偶舍的变量,BB为NM这个变量需要保留的小数点后面的位数 ***** Rem ***** 分别用NM=PI()、BB=1、2、......Rem ***** NM=1.2225、BB=3Rem ***** NM=1.2235、BM=3 来验证该FUNCTION过程的正确性 *****Dim BNM As DoubleDim C As IntegerDim J As IntegerDim K As IntegerDim I As DoubleC = Sgn(NM)BNM = Abs(NM)I = (BNM * 10 ^ (BB + 1) + 10 ^ (-11)) - 10 * Fix(BNM * 10 ^ BB + 10 ^ (-11)) I = (Fix(I * 10 ^ 10)) / 10 ^ 10J = Fix(BNM * 10 ^ BB + 10 ^ (-11)) - 10 * Fix(BNM * 10 ^ (BB - 1) + 10 ^ (-11))If I > 5 ThenK = 1ElseIf I < 5 ThenK = 0ElseIf (I = 5 And J = 2 * Fix(J / 2)) ThenK = 0ElseK = 1End IfNNN = C * Fix(BNM * 10 ^ BB + K) / 10 ^ BBEnd FunctionPrivate Function PI() As DoubleRem ****** 计算值 *****PI = 4 * Atn(1)End FunctionPrivate Sub PTSZJL_Click()Rem ***** 普通水准记录(演示) *****Dim A As IntegerDim I As IntegerPrintPrint Spc(6); "PI="; PI()Rem *****分别用NM=PI的值、BB=1、2、......Rem ***** NM=1.2225、BB=3Rem ***** NM=1.2235、BM=3 来验证该FUNCTION NNN(NM,BB)过程的正确性 ***** PrintFor A = 1 To 15If A <= 9 ThenI = 10ElseIf A >= 10 ThenI = 9End IfPrint Spc(6); A; Spc(I); "NNN="; NNN(PI(), A)Next AEnd SubRem ***** VB中三个取整函数的用法 *****Rem ***** INT(X):返回小于或等于X的第一个(负)整数 *****Rem ***** FIX(X):截断X小数点右边的所有位,返回小数点左边的值 *****Rem ***** CINT(X):通过小数部分的四舍五入,将X转换为整数 *****Rem ***** 注意:在上述各取整函数中,X为必需参数,应为双精度数据或任何有效的数值表达式 *****Rem ***** 举例如下: *****Rem ***** CINT(45.449)=45 *****Rem ***** CINT(-2.89)=-3 *****Rem ***** FIX(45.67)=45 *****Rem ***** FIX(-2.89)=-2 *****Rem ***** INT(45.67)=45 *****Rem ***** INT(-2.89)=-3 *****Rem ***** 取整函数FIX(X)与INT(X)之间的关系式如下: *****Rem ***** FIX(X)=SGN(X)*INT(ABS(X)) *****Rem ***** 测量程序中常使用FIX(X)函数 *****§11-2 演示用Image控件Picture属性装入一个图片后,满屏显示的实现方法VERSION 5.00Begin VB.Form Form1Caption = "演示用Image控件Picture属性装入一个图片后,满屏显示的实现方法"ClientHeight = 3105ClientLeft = 60ClientTop = 435ClientWidth = 4680FillColor = &H000000FF&LinkTopic = "Form1"Picture = "Form1.frx":0000ScaleHeight = 3105ScaleWidth = 4680StartUpPosition = 3 '窗口缺省Begin mandButton Command2Appearance = 0 'FlatBackColor = &H80000016&Caption = "退出"BeginProperty FontName = "华文新魏"Size = 12Charset = 134Weight = 400Underline = 0 'FalseItalic = 0 'FalseStrikethrough = 0 'FalseEndPropertyHeight = 495Left = 9720TabIndex = 1Top = 7320Width = 1215EndBegin mandButton Command1Appearance = 0 'FlatCaption = "继续"BeginProperty FontName = "宋体"Size = 12Charset = 134Weight = 400Underline = 0 'FalseItalic = 0 'FalseStrikethrough = 0 'FalseEndPropertyHeight = 495Left = 6720TabIndex = 0Top = 7320Width = 1215EndBegin bel Label2Alignment = 2 'CenterAutoSize = -1 'TrueBackStyle = 0 'TransparentCaption = "高平和编 2001年9月25日" BeginProperty FontName = "宋体"Size = 21.75Charset = 134Weight = 400Underline = 0 'FalseItalic = 0 'FalseStrikethrough = 0 'FalseEndPropertyForeColor = &H00FF00FF&Height = 870Left = 3480TabIndex = 3Top = 5760Width = 6450WordWrap = -1 'TrueEndBegin bel Label1AutoSize = -1 'TrueBackStyle = 0 'TransparentCaption = "测量平差计算程序" DragMode = 1 'AutomaticBeginProperty FontName = "华文新魏"Size = 72Charset = 134Weight = 400Underline = 0 'FalseItalic = 0 'FalseStrikethrough = 0 'FalseEndPropertyForeColor = &H000000FF&Height = 1470Left = 240TabIndex = 2Top = 1800Width = 11520EndEndAttribute VB_Name = "Form1"Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalseOption ExplicitPrivate Sub Command1_Click()'***** 用鼠标左键点击“继续”按钮,则进入该子过程。
测绘程序设计教案VB版第四章

第四章线性代数方程组的数值解法及程序设计方法许多科学和技术问题的解决,常常需要求解线性方程组,例如测量平差计算中的法方程组的求解,便是一个典型的求解线性方程组的问题。
目前编程求解线性方程组,多采用矩阵解法。
矩阵并非如同一种容易产生的猜想那样直接源自线性方程组系数的研究,系数阵列导致数学家们发展了行列式,而不是矩阵。
微积分创建合作者Leibniz (莱布尼茨)在1693年使用了行列式,先于矩阵成为独立研究对象约150年。
Cramer (克莱姆)在1750年建立解线性方程组的行列式基本公式,Gauss (高斯)在1820年左右提出消去法。
这些事件都出现在矩阵概念存在之前。
矩阵代数得以产生必须具备下述两个条件:1、适当的记号,诸如ij a 和A 等。
2、矩阵乘法的定义。
很巧合的是这两个重要因素几乎形成于同一时间,大约1850年;而且出自同一国家,英国。
除了Newton (牛顿)创建微积分外,17、18至19世纪近代数学早期主要成就都是欧洲大陆数学家们取得的,他们是Bernoulli 、Cauchy 、Euler 、Gauss 和Laplace 等。
但是到了19世纪中期,英国的数学家率先开展各种代数系统基础结构的研究。
确立矩阵概念和产生“矩阵”一词的动机是试图为研究行列式提供适当的代数语言。
1848年,J.J.Sylvester 引进术语“矩阵”,其拉丁文为“womb ”,作为数的阵列的名称。
他用“womb ”是因为他视矩阵为行列式的生成体。
亦即,矩阵的每k 行和k 列的子集(相应行和列确定的子矩阵)生成一个行列式。
矩阵和线性变换具有紧密的联系。
Gauss 消去法多年来一直是作为大地测量学(而不是数学)发展的一部分;称为主元消去法的Gauss-Jordan (高斯-约旦)方法最先也是出现在大地测量学手册之中。
随着计算机的问世及广泛应用,矩阵理论及快速算法得以不断发展。
Von Neumann 和Goldstein 在1947年提出分析舍入误差中的条件数的矩阵解法,A.Turing (研制计算机存储程序的一位天才)在1948年给出了矩阵的LU 分解法。
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改i3.软件的开发原理首先在VB中设计了一个固定的界面(图3.1),添加相应功能键及数据输入文本框,通过输入相应的数据,利用VB编程实现自动生成电子表格;通过VB操作电子表格里数据进行平差计算。
根据不同的平差方法,本软件设置按距离进行平差和按测站数进行平差两种计算方法。
图3.1水准测量平差软件界面3.1参数输入方式数据输入设计成两种方式;一种是先建立文本格式(txt)的参数文件,通过编写程序代码实现直接读取数据。
vb课程课件测绘程序设计7(七)

【解】:
1. 列条件方程 本题有2个未知点,需4个必要观测,实际有 9个观测值,故应列出5个条件方程。其中3个 图形条件,1个圆周角条件,1个极条件。
2. 闭合差检核
一级小三角网测角中误差应不大于5” •图形条件闭合差检核: |wi| max =1.6”< w限 w限 2m 3 17.3" •圆周角条件闭合差检核:
二、测量工作中的坐标系
坐标系的建立是个历史过程,逐步的完善和精化 1、1954年北京坐标系 1954年,鉴于当时的历史条件,将从苏联传算来的坐标系定名为 1954年北京坐标系。 1954年北京坐标系实际上是前苏联1942年普尔科 沃坐标系在我国的延伸,1954年北京坐标系属于参心坐标系,采用克拉 索夫斯基椭球参数;大地原点是前苏联的普尔科沃; 1954年北京坐标系-问题和缺点 克拉索夫斯基椭球比现代精确椭球相差过大;
System),称为1984年世界大地坐标系统。地心地固坐标系,其坐标系的Z 轴指向BIH (国际时间)1984.O定义的协议地球极(CTP)方向,X轴指向
BIH 1984.0的零子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐
标系,GPS广播星历基于WGS-84坐标系。WGS-84采用的椭球是国际大地测 量与地球物理联合会第17届大会大地测量常数推荐值,其四个基本参数:
wO限 2m 3 17.3" •极条件闭合差检核:
wO = -3.2”< wO限
ws限 2m 46.5"
ws
i i
sin b ) " 33.1" w (1 sin a
s限
3. 列立条件方程
条件方程的矩阵形式为:AV+W=0, 本例中:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Case 0 '读入观测值文件Text1.Visible = FalseCommonDialog1.ShowOpenfname = 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 '读一行,置入bB = 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 + 1m(i) = InStr(m(i - 1) + 1, B, ",") '从上一个找到的逗号位置起,查找下一个逗号的位置LoopIf 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 '提取观测方向,边先验精度值,并使该句以后不能再执行。
ElseIf 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 jIf 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 izds = d '将总点数存入模块级变量zdsReDim x(zds), y(zds) ' 重新定义坐标数组x(1) = 10000: y(1) = 10000 '为推算近似坐标,对第一个点赋假设坐标值k = 1For i = 1 To ydsIf lb(1) = ym(i) Then k = k + 1Next iss = 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 in = 0Don = n + 1 'n是循环计数变量,控制循环次数,避免假定坐标计算不出时,进入死循环。
For i = 1 To cds '按测站循环If x(i) > 1 Then '在该测站假设坐标已计算出的前提下,求照准点假设坐标p1 = 0For 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) - y1x(i) = xo(1) + dx * Cos(dt) - dy * Sin(dt)y(i) = yo(1) + dx * Sin(dt) + dy * Cos(dt)Next iFor i = 1 To yds '置入已知点坐标x(m(i)) = xo(i): y(m(i)) = yo(i)Next iCase 2 '组法方程Text1.Visible = FalseDim l1 As Double, pp As Double, n2 As Long '定义过程级变量q = 206265: ll = 0n1 = 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是解算的零方角方位角资料.pp = 1 '方向观测值的权为1Call equation(nb(), pp, l1) '组法方程,参数分别是误差方程系数数组、权、误差方程常数项Next jpp = -1 / (k2 - k1 + 1): l1 = ln 'pp是和方程的权Call equation(nc(), pp, l1) '和方程组法方程,nc()是一测站方向误差方程和方程数组'一个测站方向观测值误差方程处理完毕,下面开始处理该测站的边观测值If ns(i) - ns(i - 1) - 1 >= 0 Then 'i测站有观测边For j = ns(i - 1) + 1 To ns(i) '依次遍访i测站上各观测边ReDim nb(n1) ' 重新定义误差方程系数数组,并且每循环到一新边长前清零h = seqn(sb(j))t = azimuth(x(i), y(i), x(h), y(h))A = Cos(t):B = Sin(t)cha = charact(i, k) '自定义函数,查测站点i是否已知点,如不是,用k返回i前面有几个已知点If cha = "n" Then '测站点i不是已知点d = 2 * (i - k - 1) + 1 '计算测站i点x坐标未知数在未知数点集中的序号nb(d) = -A: nb(d + 1) = -BEnd Ifcha = charact(h, k)If cha = "n" Then '照准方向点h不是已知点d = 2 * (h - k - 1) + 1 '计算照准方向h点x坐标未知数在未知数点集中的序号nb(d) = A: nb(d + 1) = BEnd Ifdx = x(h) - x(i): dy = y(h) - y(i)ss = Sqr(dx ^ 2 + dy ^ 2) '反算边长,置于判断式外是因为两已知点之间不会测边pp = (ma / (0.1 * ms + mk * ss * 10 ^ -4)) ^ 2 '边长观测值定权l1 = (ss - s(j)) * 100 '求边误差方程常数(单位是厘米)资料.'并对该测站最大方向号,最大边长号数组变量nl(j)、ns(j)赋值累计起始值If m(1) <> 0 Then '不是第一行,并且该行中有逗号分割的多个字串tr(2) = LCase(tr(2))If tr(2) <> "l" And tr(2) <> "s" Then '这一行不是方向或边长观测值,而是已知点坐标值k = k + 1: ReDim Preserve ym(k): ReDim Preserve xo(k): ReDim Preserve yo(k):ym(k) = tr(1): xo(k) = Val(tr(2)): yo(k) = Val(tr(3)) '输入已知点坐标ElseIf tr(2) = "l" Then nl(j) = nl(j) + 1: ReDim Preserve lb(nl(j)): ReDim Preserve l(nl(j)): lb(nl(j)) = tr(1): l(nl(j)) = Val(tr(3)) '累计测站方向数、提取照准点、方向值If tr(2) = "s" Then ns(j) = ns(j) + 1: ReDim Preserve sb(ns(j)): ReDim Preserve s(ns(j)): sb(ns(j)) = tr(1): s(ns(j)) = Val(tr(3)) '提取边观测数、提取照准点、观测边End IfEnd IfEnd IfLoopts.Closecds = j: yds = k '用模块级变量cds 、yds保存测站点总数、已知点总数MsgBox "数据已成功读入", 0 + 64 + 0, "数据输入"End IfCase 1 '解算近似坐标d = cds 'd是测站数For i = 1 To nl(cds) '依次访问所有的方向值p = 0 '设识别变量For j = 1 To d '依次访问所有测站If dm(j) = lb(i) Then p = 1 ' 查看目标点是否设过测站,是则对识别变量p赋值1。