基于VB的间接平差程序设计

基于VB的间接平差程序设计
基于VB的间接平差程序设计

毕业论文

论文题目基于VB的间接平差程序设计专业班级工程测量

学生姓名黄晓伟

指导教师王克晓

完成时间2015年5月5日

重庆能源职业学院

重庆能源职业学院毕业设计(论文)指导教师评语

评语:

成绩:

指导教师签名:

年 月 日

重庆能源职业学院毕业设计(论文)答辩记录

提 出 问 题

回 答 问 题

正确

基本正确

有一般性错误

有原则性错误

回答不清

1 2 3 4 5 6

答辩委员会评语及建议成绩:

答辩委员会主任:

年 月 日

目录

摘要 (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语言编制了一个平差软件,主要对水准网和附合导线进行了平差的编制和软件程序界面的设计,实现的功能主要有对水准网数据和附合导线数据的平差计算,当然为了平差后能使用数据,本软件还设计了数据输出的功能,使界面更友好,方便用户使用。

关键词:水准网间接平差,visual basic ,visual basic界面设计(GUI)

1.1 现状分析

Visual Basic是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说,VB都是世界上使用人数最多的语言——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。

水准网是建立高程控制的一种常规方法。为了提高水准测量的效率,使得水准测量的内外业一体化,提高数据处理速度、精度和可靠性,外业观测上需采用更加科学、快速的作业模式,内业数据处理上需采用简便、可靠的数据处理软件。随着测绘仪器和计算机软件业的发展,目前市场上已出现多种控制网平差计算软件,不过有些平差软件界面复杂,难懂,需要一段时间的学习才能使用;还有就是这些软件,要么定权不合理,要么就价格昂贵。比如常用的平差易软件就是在Windows系统下用VC 开发的控制测量数据处理软件,就存在着权分配不合理,以致改正数过大,平差结果偏离真实值的问题。虽然发现了问题,然而由于VC语言的局限和作为收费软件,其源代码不公开等缘故,致使此类问题久久不能得到解决。

1.2 目的及意义

Visual Basic编程语言是一种可视化编程语言,通过近几年的发展,它已成为一种专业化的开发语言和环境。其依托于现代pc 机的高性能,以计算机性能换取编程的简便。它把科学计算、结果的可视化和编程集中在一个可视化的环境中,不仅功能强,而且便于输入数据,易于掌握和使用。

测量平差是测绘类专业的一门重要的专业基础课程,是用于处理观测数据的一门应用数学。平差计算是利用最小二乘原理消除观测值与起算数据之间的矛盾,求出各待定元素的平差值并评定精度。而在经典测量平差中,主要研究四种平差模型方程(条件平差、间接平差、附有未知参数的条件平差和附有限制条件的间接平差)的列立和求解,其牵涉到大量的矩阵运算,传统的人工计算工作量很大,已往的测量数据处理方法需要编制特定的处理矩阵运算的程序,而且程序复杂,难度大。随着计算机的出现,矩阵运算就变得轻松,而且计算机的运行速度快,精度高,特别是对于具有大量矩阵运算,计算机轻松解决。前提是要编好相应的程序代码。

本文将分析经典测量平差中的条件平差模型和间接平差模型的特点,重点运用Visual Basic编程语言编写水准网间接平差和单一附合导线的平差程序软件。用Visual Basic语言编写出经典平差模型程序,运用到教学过程中使各种模型的公式推导与实际例题相结

合,对于提高教学质量及加强学生对于《误差理论与测量平差基础》课程的理解具有重要的意义;对于我们即将走上工作岗位的同学来说,它将为我们处理各种实际工程的计算提供了极大的便利,也可以为今后更多的工程应用编程打下基础,提高工作效率和质量。同时也使我们在编程方面有更为深入的理解和掌握,对我们以后工作很有帮助,比如可编程计算器等测量辅助工具,这将会提高我们的工作效率。

1.3 研究内容

本设计主要运用Visual Basic 编程语言,编制控制测量中水准网和单一导线的平差程序软件。实现的功能包括:1.水准网间接平差的平差值,在最小二乘法准则(min T V PV =)要求下求出误差方程中的待定参数x ∧

。2.单一导线和导线网的近似坐标推算:近似坐标的推算不仅是后续工作的基础,为条件方程系数阵的求取做准备,更能在此基础上计算坐标闭合差,检验外业成果的好坏。3. Visual Basic GUI 界面设计:对于用户来说,程序可视化,同时又易懂,便于输入数据。4.平差数据结果输出:便于用户使用和查看。5.将几个平差程序集中在一个系统中,并生成exe 可执行程序,在windows 环境下通用,无需安装。因此,本平差软件让你的使用绝对省心。对每一个功能的实现,其后都附有应的算例。

2 Visual Basic编程语言概述

2.1 Visual Basic简介

2.1.1 Visual Basic的发展

Visual Basic (简称VB)是美国微软公司推出的windows环境下的软件开发工具,使用VB可以既快又简单地开发windows应用软件。Visual是指开发图形用户界面(GUI)的方法。Visual的意思是“视觉的”或“可视的”,也就是直观的编程方法。在VB中引入了控件的概念,如各种各样的按钮、文本框、复选框等,VB把这些控件模式化,并且每个控件都由若干属性来控制其外观、工作方法。这样,采用方法无需编写大量代码去描述界面元素的外观和位置,而只要把预先建立的控件加到屏幕上,就像使用“画图”之类的绘图程序,通过选择画图工具来画图一样,可视化程序设计语言除了提供常规的编程功能外,还提供一套可视化的设计工具,便于程序员建立图形对象,巧妙地把windows编程的复杂性“封装”起来。VB在原有BASIC语言的基础上进一步发展,包含了数百条语句、函数及关键词,其中很多与Windows GUI有直接关系。VB与BASIC之间有着千丝万缕的联系,如果学过BASIC语言的话,看到VB程序结构会感到很亲切。专业人员可以用Visual Basic实现其他任何Windows编程语言的功能,而初学者只要掌握几个关键词就可以建立实用的应用程序。随着微型

计算机技术的飞速发展,美国微软公司以其具有多任务性、图形用户界面、动态数据交换、对象链接与嵌入等强大功能,而成为当今微型计算机操作系统的主流产品。许多商用软件公司为适应这一趋势推出windows境下的软件开发工具,如Visual C++,Delphi,PowerBuilder 等等。但对于初学者希望在windows环境中开发一般的应用程序,VB 无疑是较理想的。VB是目前众多windows软件开发工具中效率最高的一个。

2.1.2 VB的功能特点

1.面向对象

VB采用了面向对象设计思想,它基本思路是把复杂设计问题分解为个个能够完成独立功能——相对简单对象集合。所谓“对象”就是个可操作实体如窗体、窗体中命令按钮、标签、文本框等面向对象编程就好像搭积木样员可根据和界面设计要求直接在屏幕上“画\"出窗口、菜单、按钮等区别类型对象并为每个对象设置属性。2.事件驱动

在Windows环境下是以事件驱动方式运行每个对象的都能响应多个区别事件,每个事件都能驱动段代码——事件过程该代码决定了对象功能通常称这种机制为事件驱动事件可由用户操作触发也可以由系统或应用触发例如单击个命令按钮就触发了按钮Click(单击)事件该事件中代码就会被执行若用户未进行任何操作(未触发事件)则就处于等待状态整个应用就是由彼此独立事件过程构成。

3.软件Software集成式开发

VB为编程提供了个集成开发环境在这个环境中编程者可设计界面、编写代码、调试直至把应用编译成可在Windows中运行可执行文件并为它生成安装VB集成开发环境为编程者提供了很大方便。4.结构化设计语言

VB具有丰富数据类型是种附合结构化设计思想语言而且简单易学此外作为种设计语言VB还有许多独到的处

5.强大数据库访问功能

VB利用数据Control控件可以访问多种数据库VB 6.O提供ADOControl控件不但可以用最少代码实现数据库操作和控制也可以取代DataControl控件和RDOControl控件

6.支持对象链接和嵌入技术

VB核心是对对象链接和嵌入(OLE)技术支持它是访问所有对象种思路方法利用OLE技术能够开发集声音、图像、动画、字处理、Web 等对象于体

7.网络功能

VB 6.O提供了DltTML(Dynamic}tTML)设计工具利用这种技术可以动态创建和编辑Web页面使用户在VB中开发多功能网络应用软件Software

8.多个应用向导

VB提供了多种向导如应用向导、安装向导、数据对象向导和数据窗体向导通过它们可以快速地创建区别类型、区别功能应用

9.支持动态交换、动态链接技术.

通过动态数据交换(DDE)编程技术VB开发应用能和其他Windows 应用的间建立数据通信通过动态链接库技术在VB中可方便地用C语言或汇编语言编写也可Windows应用接口(.API)

10.联机帮助功能

在VB中利用帮助菜单和F1功能键用户可随时方便地得到所需要帮助信息VB帮助窗口中显示了有关举例代码通过复制、粘贴操作可获取大量举例代码为用户学习和使用提供方便

2.2Visual Basic程序设计简述

2.2.1操作界面简介

在默认情况下,visual basic的操作界面包含了6个主要的窗口:主窗体,窗体窗口,工具箱窗口,属性窗口,工程管理窗口和代码窗口。下面简要介绍VB中这几个窗口:

1.主窗体

图2.1 VB主窗体图

2.窗体窗口:

它是用来对应用程序进行界面设计的窗口,用户通过与窗体上的

控件交互即可得到相应的结果,体现了VB的可视化编程思想。值得

图2.2 VB窗体窗口图

设计状态下,为方便用户对控件的定位,窗体由网络点组成,可以通过“工具”|“选项”命令,在“通用”标签的“显示网格”中改变“宽度”或“高度”的值来改变网格的间距

3.工具箱窗口

工具箱中包含有许多图标,它是各种控件的制作工具,利用这些工具,用户可以在窗体上设计各种控件。标准工具箱内只包含了19个控件(指针不是控件,其作用仅用于窗体和控件的移动或调整它们的大小),用户可根据需要添加其它控件到工具箱中。具体方法是选择“工程”|“部件”命令打开“部件”对话框,在控件标签页中选择需要的部件,然后单击“确定”按钮,此时工具箱中将显示新添加的控件图标按钮。

图2.3VB工具箱窗口图

4.属性窗

用于设置对象的属性值,所有窗体或控件的属性都可以通过属性窗口进行修改。如对象名称、颜色、字体等。属性窗口包括以下几个部分:

图2.4VB属性窗口图

(1).对象列表框:单击下拉按钮可打开当前窗体对象列表,可选择要设定属性的对象。

(2).属性显示排列方式:有“按字母序”和“按分类序”两个标签。

(3).属性列表框:列出当前对象在设计模式下可用的属性及当前值,左栏显示属性名称,右栏显示相应的属性值,并可由用户设置该属性值。

(4).属性说明:显示当前属性的含义。

5.工程管理窗口

工程管理窗口保存了这个工程(或应用程序)所有的文件,如工程文件(.vbp)、窗体文件(.frm)、标准模块文件(.bas)和类模块文件(.cls)等。工程管理窗口上方有3个按钮,分别是:

图2.5 VB工程管理窗口图

(1).查看代码:切换到代码窗口,显示和编辑代码。

(2).查看对象:切换到窗体窗口,显示和编辑对象。

(3).切换文件夹:切换本窗口内文件夹显示方式。

6.代码窗口

代码窗口是专门用来进行程序设计的窗口,显示和编辑程序代码。每个窗体都有各自的代码窗口。打开代码窗口的方法:

图2.6 VB代码窗口图

(1)在工程管理窗口选择一个窗体或标准模块,并选择“查看代码”按钮。

(2)在窗体窗口双击控件或窗体本身。

(3)选择“视图”|“代码窗口”命令。

2.2.2 几个常用控件介绍

1.标签 Label

功能:用于显示文本(输出)信息,不能作为输入信息的界面。可以设置标签的背景颜色,本软件界面设计时就用到透明属性。

2.文本框 TextBox

功能:是一个文本编辑区域,可以输入,编辑和显示正文内容。这是使用最频繁的一个控件。可以通过改变属性来改变文本大小,颜色等。

3. 命令按钮CommandButton

功能:接受用户输入的命令。当用户鼠标点击此按钮,便可以执行命令,实现所编功能。

2.2.3 VB编程语言书写和变量声明

VB语言与其他语言书写有不同,所以有必要了解VB的书写方式

1. VB代码不区分字母的大小写。系统关键字自动转换每个单词的首字母大写;用户自定义行以第一次为准。

2. 语句书写自由。每一行可书写几个语句,之间用冒号分隔;一行最多255个字符;一条语句可分若干行书写,用续行符 (空格+下划线)连接。

3. 注释利于程序的维护和调试。用单撇号“‘”以及“编辑”工具栏的“设置注释块”,则VB中注释语句会自动变为绿色,不参与运行。

4.VB中变量声明与其他编程语言的变量声明也有不同,下面简单的介绍下:

(1) 声明形式:

Dim 变量名 As 自定义类型名

例 Dim Student As StudType

(2) 引用:

形式:变量名.元素名

例表示Student变量中的姓名,第4门课程的成绩,则表示如下:

https://www.360docs.net/doc/a82066021.html,,Student.Mark(4)

(3) 赋值:

如:https://www.360docs.net/doc/a82066021.html,=“王刚” Student.Mark(4)=98 其中常用的有声明形式和赋值,而赋值是使用最频繁的,本次编程中也大量使用赋值变量声明

2.2.4矩阵的在VB中的表示

我们知道平差计算中,矩阵计算是必须的,像系数矩阵,法方程矩阵等都要用到矩阵。所以用VB编制平差程序的要点和难点就是进行矩阵运算的编制。在了解矩阵的运算法则后,便可用VB语言编程了。

而用什么来表示矩阵呢?那就是数组,下面重点介绍下数组,这对程序的开发至关重要!

1.数组不是一种数据类型,而是一组相同类型的变量的集合。在程序中使用数组的最大好处是用一个数组名代表逻辑上相关的一批

数据,用下标表示该数组中的各个元素,和循环语句结合使用,使得程序书写简洁。使用数组时需注意:

数组必须先声明后使用。数组分两类:一类是静态(定长)数组,第二累时动态(可变长)数组。像a(7,7)这便是静态数组,a(n,t)就是动态数组,其中的字母代表未知数。

2.静态数组,也就是定长的数组。如我们想将矩阵

1 2

3 4

这个两行两列的矩阵用VB来表示,可以表示为

Dim a(1 to 2,1 to 2) as double ‘变量声明a(1,1)=1: a(1,2)=1: a(2,1)=1: a(2,2)=1

这样数组也变在VB中形成了,当然也可以联合for 循环使用,则语句

变得更为简洁。本程序中用到此联合,来求解矩阵运算。

3.动态数组是指在声明数组时未给出数组的大小(省略括号中的下标),当要使用它时,随时用ReDim语句重新指出数组大小。

如 redim a(1 to n ,1 to n) 这样便定义了一个动态的n维数组,注意声明必须是redim,不然程序会出错。

这里还需指明的是Dim、Private、Public变量声明语句是说明性语句,可出现在过程内或通用声明段;ReDim语句是执行语句,只能出现在过程内。在过程中可多次使用ReDim来改变数组的大小和维数。但使用ReDim语句会使原来数组中的值丢失,可以在ReDim语句

后加Preserve参数来保留数组中的数据。使用Preserve时只能改变最后一维的大小,前面几维大小不能改变。还有ReDim中的下标可以是常量,也可以是有了确定值的变量,这在编程中要注意!另外静态数组在程序编译时就分配存储单元,而动态数组在运行时才分配存储单元

2.2.5 VB中矩阵的运算

为了解决中矩阵运算问题,编好相应的矩阵运算代码是必须的,经过一个月的时间终于将矩阵运算的代码编成功,特别是矩阵求逆的运算。不过编制的矩阵求逆代码前提是满秩的,对于秩亏矩阵,就不适用了,由于时间原因,就没继续深入的研究其代码。当然了,我们平时见到的平差一般都是满秩的,所以此代码的适用性还是挺强的。下面就具体介绍下,各矩阵运算的代码和思想。

1.矩阵加减法

(1)这个代码比较容易编写,只要加矩阵中对应的数相加减便可以得到结果。

所以此处不给出代码

2.矩阵乘法

(1)这个代码编程的要点是跟据矩阵乘法的运算法则,即矩阵的没一行的数分别与另外矩阵的每一列对应的数相乘并全部进行相加。知道一个原则,编程就容易了,多次使用for循环实现!

(2)代码:

Public Sub jzcf(ByRef a() As Double, ByRef b() As Double, ByRef c() As Double)

m = UBound(a, 1)

n = UBound(b, 2)

ni = UBound(a, 2)

For i = 1 To m

For j = 1 To n

For ki = 1 To ni

c(i, j) = c(i, j) + a(i, ki) * b(ki, j)

Next

Next

Next

End Sub

3.矩阵转置

(1)这个代码编程的也比较简单,即将矩阵的行转化成列就行了。

(2)代码:

Public Sub jzzz(ByRef a() As Double, ByRef b() As Double) m = UBound(a, 1)

n = UBound(a, 2)

For i = 1 To n

For j = 1 To m

测绘程序设计—实验八 水准网平差程序设计报告

《测绘程序设计(https://www.360docs.net/doc/a82066021.html,)》 上机实验报告 (Visual C++.Net) 班级:测绘0901班 学号:0405090204 姓名:代娅琴 2012年4月29日

实验八平差程序设计基础 一、实验目的 ?巩固过程的定义与调用 ?巩固类的创建与使用 ?巩固间接平差模型及平差计算 ?掌握平差程序设计的基本技巧与步骤 二、实验内容 水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。 1.水准网间接平差模型: 2.计算示例:

近似高程计算:

3.水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权; (5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值; (8)精度评定; (9)输出平差结果。 4.水准网高程近似值计算算法 5.输入数据格式示例

实验代码: #pragma once class LevelControlPoint { public: LevelControlPoint(void); ~LevelControlPoint(void); public: CString strName;//点名 CString strID;//点号 float H; bool flag;//标记是否已经计算出近似高程值,若计算出则为,否则为}; class CDhObs { public: CDhObs(void); ~CDhObs(void); public: LevelControlPoint* cpBackObj;//后视点 LevelControlPoint* cpFrontObj;//前视点 double ObsValue;//高差值 double Dist;//测站的距离 }; #include"StdAfx.h" #include"LevelControlPoint.h" LevelControlPoint::LevelControlPoint(void) {

误差理论及测量平差课程设计报告

- - - n 目录 一、目录----------------------------1 二、序言---------------------------- 2 三、设计思路------------------------ 3 四、程序流程图---------------------- 4 五、程序及说明---------------------- 5 六、计算结果-----------------------12 七、总结--------------------------- 15 第二部分序言 1、课程设计的性质、目的和任务 误差理论与测量平差是一门理论与实践并重的课程,其课程设计是测量数据处理理论学习的一个重要的实践环节,它是在我们学习了专业基础课“误差理论与测量平差基础”课程后进行的一门实践课程。其目的是增强我们对误差理论与测量平差基础理论的理解,牢固掌握测量平差的基本原理和基本公式,熟悉测量数据处理的基本技能和计算方法,灵活准确地应用于解决各类数据处理的实际问题,并能用所学的计算机理论知识,编制简单的计算程序。 2、误差理论与测量平差课程和其它课程的联系和分工 这次课程设计中所用的数学模型和计算方法是我们在误差理论与测量平差课程中所学的内容,所使用的C程序语言使我们在计算机基础课程中所学知识。误差理论与测量平差课程设计是测量平差和计算机程序设计等课程的综合实践与应用,同时也为我们今后步入工作岗位打下了一定基础。 3、课程设计重点及内容 本次课程设计重点是培养我们正确应用公式、综合分析和解决问题的能力,以及计算机编程能力。另外它要求我们完成1-2个综合性的结合生产实践的题目。如目前生产实践中经常用到的水准网严密平差及精度评定,边角网(导线)严密平差及精度评定等。此次我所选的课程设计课题是水准网严密平差及精度评定,其具体内容如下: 根据题目要求,正确应用平差模型列出观测值条件方程、误差方程和法方程;解算法方程,得出平差后的平差值及各待定点的高程平差值;评定各平差值的精度和各高程平差值的精度。 具体算例为: 如图所示水准网,有2个已知点,3个未知点,7个测段。各已知数据及观测值见下表(1)已知点高程H1=5.016m ,H2=6.016m (2)高差观测值(m)

水准网平差(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. 将每一个观测量的平差值(既观测的高程差值)分别表达成 3.由误差方程系数B和自由项组成法方程,法方程个数等于参数的个数t ; 4. 解算法方程,求出参数X?,计算参数(高程)的平差值 X?=X0 +x?; 5.由误差方程计算V,求出观测量(高差)平差值6.评定精度 单位权中误差 V L L+ = ∧ V L L+ = ∧

平差值函数的中误差 四:平差程序流程图 1. 已知数据的输入 需要输入的数据包括水准网中已知点数﹑未知点数以及这些点的点号,已知高程和高差观测值﹑距离观测值。程序采用文件方式进行输入,约定文件输入的格式如下: 第一行:已知点数﹑未知点数﹑观测值个数 第二行:点号(已知点在前,未知点在后) 第三行:已知高程(顺序与上一行的点号对应) 第四行:高差观测值,按“起点点号,终点点号。高差观测值,距离观测值”的顺序输入。 本节中使用的算例的数据格式如下 2,3,7 1,2,3,4,5 5.016,6.016 1,3,1.359,1.1 1,4,2.009,1.7 2,3,0.363,2.3 ,?20s u n PV V r PV V T T +-==σ. ???0????σσQ =

5800导线平差程序

5800计算器导线平差程序 一、程序用途及使用范围 本程序适用于一般导线复测平差计算,利用左角复测复合导线、闭合导线的平差时可直接使用。复合导线平差时输入起始和终止边两个方位角,如果将终止边方位角输入为0,程序会自动转入闭合导线平差界面。如果想用观测右角平差时,只需将程序中带下划线的地方按使用说明稍加改动即可。 二、源程序清单:1、JDPCA(文件名称) 0→M:0→I:0→K:“AFWJ”?A:“BFWJ”?B:“CZS”?→N:“JDRXBHCA”:24√ˉ(N)→P◣“∑(ZJ)”?→C:If B≠0 Then A-B-180N+C→D: EIseC-180(N-2)→D:IfEnd: “JDBHCA.f=”:D ?DMS◣PGoto 4:“JDGZ=”:-D÷N→F:F?DMS◣LbI 1:“CJ”?→P:B=0 And P=0=>Goto3:“JGH=”:P+F→J:J?DMS ◣A+J-180→E:If E>0 And E<360:ThenE:IfEnd:If E>360:ThenE-360→E:IfEnd: :If E<360:ThenE+360→E:IfEnd: “FWJ=”:E?DMS◣“L”?→L:L=0 And B≠0=>Goto3:“XO=”:Lcos(E)→X◣“YO=”:Lsin(E)→Y◣M+L→M:I+X→I:K+Y→K:E→A:Goto1:LbI3:“∑(L)=”:M◣“∑(XO)=”:I◣“∑(YO)=”:K◣Prog“DXPCA”:LbI4 DXPCA(文件名称,可单独运行) “AX”?→A:“A Y”?→Z:If B≠0:Then “BX”?→C:“BY”?→D:“FX=”:I-C+A→F◣“FY=”:K-D+Z→W◣EIse “FX=”:I

《测绘程序设计》实验指导书

《测绘遥感程序设计》 实验指导书 (Visual C++.net) (供测绘工程专业用) (2015年修订) 戴吾蛟编 二零一五年三月 中南大学测绘与遥感科学系

前言 测绘遥感程序设计上机实验是学习本门课程的重要环节之一,实验的设置是为了配合课堂教学,使学生熟练掌握和深入理解课堂教学内容,进一步强化测绘程序设计、测量学及测量平差原理的理解,掌握利用Visual C++.net进行常用的测量程序以及控制网的间接平差程序设计。 实验内容 本门课程必做的实验有(在Visual C++.net 2008 环境下): 1.Visual C++.net环境、基本控件及简单程序设计(三角形面积计算) 2.控制结构程序设计(方位角计算、地心坐标至大地坐标转换) 3.数组、指针(多边形面积计算) 4.函数(交会定点函数设计、高斯投影正反算程序设计) 5.类的创建(大地四边形类设计、角度类设计) 6.文件(Cass测量数据整理) 7.图形程序设计(位移序列曲线图形程序设计) 8.常用测量计算(无定向导线简易计算程序设计) 9.平差程序设计(水准网间接平差程序设计) 修订说明:由于2012版培养方案增加了8课时,实验课时也相应增加了4课时。为此,本实验指导书将高斯投影正反算提前,并要求以函数的形式编写。增加了大地四边形类设计以及无定向导线简易计算程序设计。

实验1 Visual C++.net环境和简单程序设计 一、实验目的 ?掌握Visual https://www.360docs.net/doc/a82066021.html,的安装和启动。 ?了解VC++ 2008的菜单系统、工具栏和各种基本窗体。 ?理解VC++.net开发应用程序的步骤。 ?掌握基于对话框的程序设计。 ?掌握按钮、文本框和标签框的基本使用方法 ?掌握使用MSDN帮助文档 二、实验内容 1.启动与退出VC++.net,熟悉VC++.net的开发环境,通过向导生成基于对话 框的应用程序。使用MSDN查看命令按钮、标签和文本框的主要属性和方法。 2.打开Microsoft visual studio 2008 文档,浏览“Visual studio 文档”目录下的 内容,并从“Visual studio 文档->Visual C++->示例”目录下下载一个程序,编译并运行之。 3.设计一个已知三边边长计算三角形面积的程序。计算模型如下: 海伦公式:) )( )( (c p b p a p p S- - - =,其中 2c b a p + + = 提示: (1)在【文件】菜单上执行【新建】,然后选择“项目” 。 (2)在【项目类型】窗格中,选择【Visual C++】下的“MFC”项。在【模板】窗格中,选择“MFC 应用程序”模板,输入应用程序名称“××××”。按向导创建名为“×××××”的 MFC应用程序。 (3)在窗体上放置4个文本框、4个静态框、3个命令按钮(其中两个缺省); (4)设置控件属性,如Static1的Caption属性设置成“a=”,用于提示Edit 框的输入边长a;

水准网间接平差程序设计(C++)

//////////////////////////////////////////////////// // visual C++6.0 编译通过 // //////////////////////////////////////////////////// /////////////////////////////////////////////////// // 参考资料 // // 部分网络资料 // // 宋力杰《测量平差程序设计》 // //连壁《基于matlab的控制网平差程序设计》 // /////////////////////////////////////////////////// #include #include #include #include #include using namespace std; //////////////////////////////////////////////////////////////////////////class class SZWPC { private: int gcz_zs; //高差总数 int szd_zs; //总点数 int yz_szd_zs; //已知点数 double m_pvv; //[pvv] int *qsd_dh; //高差起点号 int *zd_dh; //高差终点号 char **dm; //点名地址数组 double *gcz; //观测值数组 double *szd_gc; //高程值数组 double *P; //观测值的权 double *ATPA,*ATPL; //法方程系数矩阵与自由项 double *dX; //高程改正数、平差值 double *V; //残差 double m_mu; //单位权中误差 public: SZWPC(); ~SZWPC(); int ij(int i,int j);//对称矩阵下标计算函数 bool inverse(double a[],int n);//对称正定矩阵求逆(仅存下三角元素)(参考他人)

实验三-利用matlab程序设计语言完成某工程导线网平差计算

实验三利用matlab程序设计语言完成某工 程导线网平差计算 实验数据; 某工程项目按城市测量规范(CJJ8-99)不设一个二级导线网作为首级平面控制网,主要技术要求为:平均边长200cm,测角中误差±8,导线全长相对闭合差<1/10000,最弱点的点位中误差不得大于5cm,经过测量得到观测数据,设角度为等精度观测值、测角中误差为m=±8秒,鞭长光电测距、测距中误差为m=±0.8√smm,根据所学的‘误差理论与测量平差基础’提出一个最佳的平差方案,利用matlab完成该网的严密平差级精度评定计算; 平差程序设计思路: 1采用间接平差方法,12个点的坐标的平差值作为参数.利用matlab进行坐标反算,求出已知坐标方位角;根据已知图形各观测方向方位角; 2计算各待定点的近似坐标,然后反算出近似方位角,近似边.计算各边坐标方位角改正数系数; 3确定角和边的权,角度权Pj=1;边长权Ps=100/S; 4计算角度和边长的误差方程系数和常数项,列出误差方程系数矩阵B,算出Nbb=B’PB,W=B’Pl,参数改正数x=inv(Nbb)*W;角

度和边长改正数V=Bx-l; 6 建立法方程和解算x,计算坐标平差值, 精度计算;程序代码以及说明: s10=238.619;s20=170.759; s30=217.869;s40=318.173; s50=245.635;s60=215.514; s70=273.829;s80=241.560; s90=224.996;s100=261.826; s110=279.840;s120=346.443; s130=312.109;s140=197.637; %已知点间距离 Xa=5256.953;Ya=4520.068; Xb=5163.752;Yb=4281.277; Xc=3659.371;Yc=3621.210; Xd=4119.879;Yd=3891.607; Xe=4581.150;Ye=5345.292; Xf=4851.554;Yf=5316.953; %已知点坐标值 a0=atand((Yb-Ya)/(Xb-Xa))+180; d0=atand((Yd-Yc)/(Xd-Xc)); f0=atand((Yf-Ye)/(Xf-Xe))+360; %坐标反算方位角a1=a0+(163+45/60+4/3600)-180 a2=a1+(64+58/60+37/3600)-180; a3=a2+(250+18/60+11/3600)-180;

测绘程序设计实验八水准网平差程序设计报告完整版

测绘程序设计实验八水准网平差程序设计报告 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

《测绘程序设计》上机实验报告 (Visual C++.Net) 班级:测绘0901班 学号: 04 姓名:代娅琴 2012年4月29日

实验八平差程序设计基础 一、实验目的 巩固过程的定义与调用 巩固类的创建与使用 巩固间接平差模型及平差计算 掌握平差程序设计的基本技巧与步骤 二、实验内容 水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。 1.水准网间接平差模型: 2.计算示例:

近似高程计算: 3.水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权; (5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值; (8)精度评定; (9)输出平差结果。 4.水准网高程近似值计算算法

5.输入数据格式示例 实验代码: #pragma once class LevelControlPoint { public: LevelControlPoint(void); ~LevelControlPoint(void);

public: CString strName;trName=pstrData[0]; m_pKnownPoint[i].strID=pstrData[0]; m_pKnownPoint[i].H=_tstof(pstrData[1]); m_pKnownPoint[i].flag=1;trName=pstrData[i]; m_pUnknownPoint[i].strID=pstrData[i]; m_pUnknownPoint[i].H=0;lag=0;pBackObj=SearchPointUsingID(pstrData[0]);pFrontObj=Sea rchPointUsingID(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID) {return &m_pKnownPoint[i];} } return NULL; } trID==ID) {return &m_pUnknownPoint[i];} } return NULL; } LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID) { LevelControlPoint* cp; cp=SearchKnownPointUsingID(ID); if(cp==NULL) cp=SearchUnknownPointUsingID(ID); return cp; } void AdjustLevel::ApproHeignt(void)lag!=1) { pFrontObj->strID==m_pUnknownPoint[i].strID) && m_pDhObs[j].cpBackObj->flag==1 ) { =m_pDhObs[i].cpBackObj->H - m_pDhObs[i].ObsValue;*/ m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H + m_pDhObs[j].HObsValue; m_pUnknownPoint[i].flag=1; break; } } if(m_pUnknownPoint[i].flag!=1)pBackObj- >strID==m_pUnknownPoint[i].strID) && m_pDhObs[j].cpFrontObj->flag==1 ) { =m_pDhObs[j].cpFrontObj->H-m_pDhObs[j].HObsValue;

附合导线平差程序设计报告

《测量平差程序》课程设计 (报告) 学生姓名:罗正材 学号:1108030128 专业:2011级测绘工程 指导教师:肖东升

目录 一、前言 (3) 二、平差程序的基本要求 (3) 三、平差程序模块化 (3)

图1 四、平差中的重要函数 (一)、角度制与弧度制的相互转化 C/C++程序设计中,关于角度的计算以弧度制为单位,而在测量以及具体工作中我们通常习惯以角度制为单位。这样,在数据处理中,经常需要在角度制与弧度制之间进行相互转化。这里,我们利用C/C++数学函数库math.h中的相关函数完成这两种功能。 这里,我们使用double类型数据表示角度制数和弧度制数。例如:123度44分58.445秒,用double类型表示为123.4458445,其中分、秒根据小数位确定。 在角度制与弧度制的转化中,涉及如下图2所示的两个环节。 度.分秒度弧度 图2 1.角度化弧度函数 double d_h(double angle) //角度化弧度 { double a,b; angle=modf(angle,&a);//a为提取的度值(int类型),angle为分秒值(小数) angle=modf(angle*100.0,&b); // b为提取的分值(int类型),angle为秒值(小数) return (a+b/60.0+angle/36.0)*(PI+3.0E-16)/180.0; } 2.弧度化角度函数 double h_d(double angle) //弧度化角度

{ double a,b,c; angle=modf(angle*180.0/(PI-3.0E-16),&a); angle=modf(angle*60.0,&b); angle=modf(angle*60.0,&c); return a+b*0.01+c*0.0001+angle*0.0001; } 其中,函数modf(angle,&a)为C语言数学库函数,返回值有两个,以引用类型定义的a 返回angle的整数部分,函数直接返回值为angle的小数部分。 (二)近似坐标计算 在平面网间接平差计算中,近似坐标计算是非常重要的一项基础工作。近似坐标是否计算成功是间接平差是否可以进行的必要条件。 1.两方向交会 已知条件:两个点的近似坐标,这两个点到未知点的方位角,如图3所示 图3两方向交会 根据图4.2,设 1 1 α tg k=, 2 2 α tg k=,则很容易写出 ? ? ? ? ? ? - = - - = B P B P A P A P y y k x x y y k 2 1 整理该式,得两方向交会的的计算公式 ?? ? ? ? ? - - = ?? ? ? ? ? ?? ? ? ? ? - - B B A A P P y x k y x k y x k k 2 1 2 1 1 1 (4.1)对(4.1)式计算,即可得到未知点的近似坐标。应用中需要注意的是,若两方向值相同或相反,则该式无解。 程序中,定义该问题的函数为:int xy0ang(obser &a1,obser &a2) 2.三边交会 如图4所示,为排除两边长交会的二义性,给出如下三边交会的模型,已知条件:三个

C#附和导线平差程序设计实习报告

前言 随着测绘科学技术的不断发展,在测量数据的处理中产生很多种平差的方法。附和导线近似平差程序是利用C#编程实现的,我们需要将导线网的已知数据信息按照特定的规则输入到.txt文本中,利用C#程序读取文本数据信息后,对其进行一系列的平差计算,最终获得平差后的结果,并以.txt文本的形式输出,这样就可为测量工作提供一定的参考。 平差程序的基本要求 平差程序的设计与其他程序设计相同,应满足一定要求。 1.程序逻辑结构简单,清晰易读,符合结构化程序设计要求,便于拓展; 2.运算速度快,占用内存小,内外存储之间的交换不宜过于频繁; 3.数学模型及计算方法正确且先进,计算结果精度高; 4.适用性强,便于移植,充分考虑各种可能形式,满足不同需求; 5.方便用户,操作简单,输出明了、齐全,人机交互良好。 上述要求,既体现现在平差程序的总体设计中,也贯穿于平差程序设计的各个环节中。 平差程序中的重要函数 (一)角度制与弧度制的相互转化 C#程序设计中,关于角度的计算以弧度制为单位,而在测量工作中我们通常以角度制记录数据。所以,在数据处理中,通常需要在角度制与弧度制之间进行相互转化。这里我们需要利用相关函数完成这两种功能。 1.角度化弧度函数: static public double DEG(double ang) { int fuhao = (int)(ang / Math.Abs(ang)); ang = Math.Abs(ang); int d = (int)ang; int m = ((int)(ang * 100)) - d * 100; double s = ang * 10000 - m * 100 - d * 10000; return ((d + m / 60.0 + s / 3600.0) * fuhao) / 180.0 * Math.PI; } 2.弧度化角度函数: static public double DMS(double ang) { ang += 1.0E-15;//加上一个小量,以保证进位 int fuhao = (int)(ang / Math.Abs(ang));

测量平差编程

误差理论与测量平差上机指导书 辽宁工程技术大学 测绘与地理科学学院测绘工程系

目录 Visual C++ 6.0开发平台简介 (1) MFC概述 (1) 实验1 矩阵加法与乘法运算 (3) 实验2 矩阵转置与求逆运算 (6) 实验3 误差椭圆元素计算 (13) 实验4 水准网间接平差程序设计 (15)

Visual C++ 6.0开发平台简介 Visual C++提供了一个支持可视化编程的集成开发环境:Visual Studio(又名Developer Studio)。Developer Studio是一个通用的应用程序集成开发环境,它不仅支持Visual C++,还支持Visual Basic,Visual J++,Visual InterDev等Microsoft系列开发工具。Developer Studio包含了一个文本编辑器、资源编辑器、工程编译工具、一个增量连接器、源代码浏览器、集成调试工具,以及一套联机文档。使用Developer Studio,可以完成创建、调试、修改应用程序等的各种操作。 Developer Studio采用标准的多窗口Windows用户界面,并增加了一些新特性,使得开发环境更易于使用,用户很容易学会它的使用方法。 由于Developer Studio是一个可视化的开发工具,在介绍Developer Studio 的各个组成部分之前,首先了解一下可视化编程的概念。可视化技术是当前发展迅速并引人注目的技术之一,它的特点是把原来抽象的数字、表格、功能逻辑等用直观的图形、图象的形式表现出来。可视化编程是它的重要应用之一。所谓可视化编程,就是指:在软件开发过程中,用直观的具有一定含义的图标按钮、图形化的对象取代原来手工的抽象的编辑、运行、浏览操作,软件开发过程表现为鼠标点击按钮和拖放图形化的对象以及指定对象的属性、行为的过程。这种可视化的编程方法易学易用,而且大大提高了工作效率。 Visual C++的集成开发环境Developer Studio提供了大量的实用工具以支持可视化编程特性,它们包括:项目工作区、ClassWizard、AppWizard、WizardBar、Component Gallery等。 MFC概述 MFC是一个编程框架。MFC (Microsoft Foundation Class Library) 中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。

水准网平差c++代码

水准网平差 结果 #include #include #include #include #define max 50 class CMatrix { public: CMatrix(){row=0; column=0;}; // 默认构造函数 CMatrix(int i, int j){row=i;column=j;} // 构造函数一 CMatrix(const CMatrix& m); // 复制构造函数 ~CMatrix(void){/*cout<<"谢谢使用,矩阵所占空间以释放!"<

导线测量平差常见问答

导线测量平差常见问答 一、为何有时计算结果与其它计算有些差异? 答:a.观测角度使用的是前进方向的左角还是右角,本软件采用前进方向的左角,输入负号时表示是前进方向的右角,并转换为左角平差。 b.是否选用了概算,及概算的各选项是否正确。 c.是否使用严密平差,严密平差与近似平差计算结果是不同的。 d.严密平差是否使用迭代平差,有些软件尽管使用严密平差,但只进行单次平差,精度不高。 e.严密平差的先验误差设置是否一致,是否使用了Helmert验后方差定权,软件使用的定权方式可能不一样,导致部分差异。 f.近似平差是否选用了反算等,可以在“项目设置”中更改以适合您的需要。 g.近似平差时是否选用了角度改正前的坐标增量闭合差,这会导致坐标增量闭合差的不一致。 h.高程平差时,水准和三角高程因为定权的不同而有差异,坐标导线按三角高程计算,其它则提供了高差类型的选择。 二、如何选择严密平差或近似平差?近似平差是否需要进行方位角边长反算? 答: 《工程测量规范》规定:一级及以上平面控制网的计算,应采用严密平差法,二级及以下平面控制网,可根据需要采用严密或简化方法平差。当采用简化方法平差时,应以平差后坐标反算的角度和边长作为成果。 《城市测量规范》规定:四等以下平面控制网可采用近似平差法和按近似方法评定其精度。......采用近似平差方法的导线网,应根据平差后坐标反算的方位角与边长作为成果。 因此,严密平差适用于各等级导线,而近似平差适用于较低等级导线,采用近似平差时应对方位角、角度、边长等进行反算,以便方位角、边长、角度等可以作为最终成果使用。 三、为什么软件中默认的计算表格样式与我们的习惯不一样? 答:成果表格可以自定义,计算表因方案设置的不同而有所不同。 这里主要是因为您使用的是近似平差且不进行反算的格式,而本软件默认是严密平差,当选择近似平差时默认也是进行反算的。可以在项目设置中选择近似平差,并且去掉“方位角、边长反算”等即可获得您所需的格式。 四、近似平差时的坐标增量闭合差为什么与有些书上不一样? 答:近似平差中,计算方案里有一个选项,以让用户选择近似平差是否使用在角度闭合差分配前计算的坐标增量闭合差来反映导线精度。使用角度闭合差分配前计算的坐标增量闭合差将与严密平差一致,否则与通常的手工计算一致。 五、验后测角中误差有时相对于角度闭合差为何显得很大? 答:这主要有以下情况: a.先验误差设置不切实际,相对于测角,将测距先验误差设置过高会导致程序认为误差主要来源于角度,而对角度加以较大的改正数,使得评定的测角中误差较大。 b.测量发生错误,主要可能是边长测量错误,使得坐标增量闭合差太大。 c.已知点精度不高。 六、为什么角度闭合差不是平均分配的? 答:严密平差是按最小二乘法平差,角度闭合差不是平均分配的。 近似平差角度闭合差是平均分配的,但如果计算方案里选择了进行反算,则角度、方位角、边长等都是反算后的最终成果,并不是计算的中间成果,角度改正数也就可能有正有负。

单一附合导线测量控制网平差程序

单一符合导线测量控制网平差程序 梁彩艳 (西北石油局工程服务大队,新疆乌鲁木齐830011) 摘要:由于全站仪(光电仪) 的不断普及,导线布网已在测量控制网中广泛应用。为了简化计算,提高平差精度,节约 平差经费,结合实际工作中的一个实例,运用PC —E500 计算器编制了单一符合导线高斯平差程序。 关键词:单一;符合导线;平差程序 1 差原理及程序框图(见图1) 2 实例 在单一符合导线(如图2) 中,已知各起始数据,观测了各折 角方向值,测量了各边长(见表1) ,观测方向中误差δr = ±5″,边长丈量中误差δsi = ±0. 5 simm ,求各导线点的坐标平差值和最弱点4 号点的点位精度(可假设单位权中误差δ0 = ±5″,则观测角权为0. 5 ,观测边权Psi = 100/ Si) 。 图2 单一符合导线示意图 表1 测量数据一览表 点号 已知坐标(m) X Y 编号 已知坐标

方位角 B 3020. 348 - 9049. 801 αAB 226°44′59″ C 3702. 437 - 10133. 399 αC D 57°59′31″ 编号观测角度编号 观测边长 (m) 1 230°32′37″ 1 204. 952 2 180°00′42″ 2 200. 130 3 170°39′22″ 3 345. 153 4 236°48′37″ 4 278. 059 5 192°14′25″ 5 451. 692 6 260°59′01″ 3 平差程序 10 :REM SUB 10 - 190 QIU DAO XIAN DIAN GAI LUE ZUO BIAO 20 :REM SHU ZU”A”WEI FANG WEI J IAO ,”B”WEI GUAN CE ZUO J IAO ,”S”WEI BIAN CHANG,”P”WEI QUAN ,”V”WEI GAI ZHENG SHU ,”MX、MY、M”WEI DAI QIU DIAN ZHONG WU CHA ,”X、Y”WEI ZUO BIAO 30 : INPUT”GUAN CE J IAO GE SHU :N = ”;N 40 :DIM A (N) ,B (N) ,S (N) ,X(2 3 N) , Y(2 3 N) , P (2 3

MATLAB水准网间接平差课程作业程序

条件平差 A=[1 -1 0 0 1 0 0;0 0 1 -1 1 0 0;0 0 1 0 0 1 1;0 1 0 -1 0 0 0]; Q=diag(s); W=zeros(4,1); W(1)=h(1)-h(2)+h(5); W(2)=h(3)-h(4)+h(5); W(3)=h(3)+h(6)+h(7); W(4)=h(2)-h(4)+H(1)-H(2); W=W.*1000; Naa=A*Q*(A'); K=-1.*inv(Naa)*W; V=Q*(A')*K; L=h'+V./1000; X=zeros(1,3); X(1)=H(1)+L(1); X(2)=H(1)+L(2); X(3)=H(2)-L(7); ZWC=sqrt(V'*inv(Q)*V/4); QLL=Q-Q*A'*inv(Naa)*A*Q; ZWC_h5=ZWC*sqrt(QLL(5,5)); 间接平差 h1=1.359; h2=2.009; h3=0.363; h4=1.012; h5=0.657; h6=0.238; h7=-0.595; H1=5.016 H2=6.016 h=[h1 h2 h3 h4 h5 h6 h7]' s=[1.1 1.7 2.3 2.7 2.4 1.4 2.6]' B=[1 0 0 ;0 1 0; 1 0 0;0 1 0 ; -1 1 0 ; -1 0 1 ;0 0 -1 ] p=diag(1./s) l=[0;0;4;3;7;2;0] W=B'*p*l Nbb=B'*p*B x=inv(Nbb)*W V=(B*x-l) H=h+V/1000 Q=inv(Nbb) n=7;

测绘程序设计—实验八 水准网平差程序设计报告

《测绘程序设计》 上机实验报告 (Visual C++.Net) 班级:测绘0901班 学号: 04 姓名:代娅琴 2012年4月29日 实验八平差程序设计基础 一、实验目的 巩固过程的定义与调用 巩固类的创建与使用 巩固间接平差模型及平差计算 掌握平差程序设计的基本技巧与步骤 二、实验内容 水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。 1.水准网间接平差模型: 2.计算示例: 近似高程计算: 3.水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权;

(5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值; (8)精度评定; (9)输出平差结果。 4.水准网高程近似值计算算法 5.输入数据格式示例 实验代码: #pragma once class LevelControlPoint { public: LevelControlPoint(void); ~LevelControlPoint(void); public: CString strName;trName=pstrData[0]; m_pKnownPoint[i].strID=pstrData[0]; m_pKnownPoint[i].H=_tstof(pstrData[1]); m_pKnownPoint[i].flag=1;trName=pstrData[i]; m_pUnknownPoint[i].strID=pstrData[i]; m_pUnknownPoint[i].H=0;lag=0;pBackObj=SearchPointUsingID(pstrData[0]);pFrontObj=SearchPointUsingI D(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID) {return &m_pKnownPoint[i];} } return NULL; } trID==ID) {return &m_pUnknownPoint[i];} } return NULL; } LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID) { LevelControlPoint* cp; cp=SearchKnownPointUsingID(ID); if(cp==NULL) cp=SearchUnknownPointUsingID(ID); return cp; } void AdjustLevel::ApproHeignt(void)lag!=1) { pFrontObj->strID==m_pUnknownPoint[i].strID) && m_pDhObs[j].cpBackObj->flag==1 ) { =m_pDhObs[i].cpBackObj->H - m_pDhObs[i].ObsValue;*/ m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H + m_pDhObs[j].HObsValue; m_pUnknownPoint[i].flag=1;

导线测量平差教程

计算方案的设置 一、导线类型: 1.闭、附合导线(图1) 2.无定向导线(图2) 3.支导线(图3) 4.特殊导线及导线网、高程网(见数据输入一节),该选项适用于所有的导线,但不计算闭合差。而且该类型不需要填写未知点数目。当点击表格最后一行时自动添加一行,计算时删除后面的空行。 5.坐标导线。指使用全站仪直接观测坐标、高程的闭、附合导线。 6.单面单程水准测量记录计算。指仅进行单面读数且仅进行往测而无返测的水准测量记录计算。当数据中没有输入“中视”时可以用作五等、等外水准等的记录计算。当输入了“中视”时可以用作中平测量等的记录计算。 说明:除“单面单程水准测量记录计算”仅用于低等级的水准测量记录计算外,其它类型选项都可以进行平面及高程的平差计算,输入了平面数据则进行平面的平差,输入了高程数据则进行高程的平差,同时输入则同时平差。如果不需进行平面的平差,仅计算闭、附合高程路线,可以选择类型为“无定向导线”,或者选择类型为“闭附合导线”但表格中第一行及最后一行数据(均为定向点)不必输入,因为高程路线不需定向点。 二、概算 1.对方向、边长进行投影改化及边长的高程归化,也可以只选择其中的一项改正。 2.应选择相应的坐标系统,以及Y坐标是否包含500KM。选择了概算时,Y坐标不应包含带号。

三、等级与限差 1.在选择好导线类型后,再选择平面及高程的等级,以便根据《工程测量规范》自动填写限差等设置。如果填写的值不符合您所使用的规范,则再修改各项值的设置。比如现行的《公路勘测规范》的三级导线比《工程测量规范》的三级导线要求要低一些。 2.导线测量平差4.2及以前版本没有设置限差,打开4.2及以前版本时请注意重新设置限差。 四、近似平差与严密平差的选择及近似平差的方位角、边长是否反算 1.近似平差:程序先分配角度闭合差再分配坐标增量闭合差,即分别平差法。 2.严密平差:按最小二乘法原理平差。 3.《工程测量规范》规定:一级及以上平面控制网的计算,应采用严密平差法,二级及以下平面控制网,可根据需要采用严密或简化方法平差。当采用简化方法平差时,应以平差后坐标反算的角度和边长作为成果。 《城市测量规范》规定:四等以下平面控制网可采用近似平差法和按近似方法评定其精度。......采用近似平差方法的导线网,应根据平差后坐标反算的方位角与边长作为成果。 因此,严密平差适用于各种等级的控制网,而近似平差适用于较低等级。当采用近似平差时,应进行方位角、边长反算。 显示角度改正前的坐标闭合差:勾选此项后,程序在“平面计算表”备注栏内显示角度改正前的坐标闭合差,否则显示角度改正后的坐标增量闭合差。为了以示区别,角度改正前的坐标闭合差以Wx、Wy、Ws表示,角度改正后的坐标增量闭合差以fx、fy、fs表示。 五、近似平差设置 1.方位角、边长反算:根据近似平差后的坐标反算方位角、边长、角度等。反算后的方位角、边长、角度等是平差后的最终值,可以作为最终成果使用,否则仅为平差计算的中间结果,不应作为最终成果使用。反算与不反算表格形式是不一样的。注意:反算后,按最终的角度值

相关文档
最新文档