logo资料库

测量平差程序设计(包含源码注解).doc

第1页 / 共100页
第2页 / 共100页
第3页 / 共100页
第4页 / 共100页
第5页 / 共100页
第6页 / 共100页
第7页 / 共100页
第8页 / 共100页
资料共100页,剩余部分请下载后查看
1.1高斯投影正算
高斯投影正算问题是利用大地地理坐标系坐标(B,L)来计算其对应的高斯平面直角坐标系坐标(x,y)的理
1.2 高斯投影反算
测绘程序设计技术基础 测绘工程专业 目 录 第一章 绪 论...........……………………………………………………………………………………………………………………2 第一节 本课程的相关内容……………………………………………………………….………………………………………2 第二节 结构化程序设计………………………………………………………………….………………………………………3 第三节 控制网的数据结构………………………………………………………………………………………………………4 第四节 C++特征与 Visual C++6.0 开发环境……………………………………………………………………………………7 第二章 通用函数模块编写……………………………………………………………………………………………………………15 第一节 矩阵相关函数……………………………………………………………………………………………………………15 附录:相关函数源代码……………………………………………………………………………………………………………17 第二节 角度制与弧度制的相互转化……………………………………………………………………………………………21 第三节 测量正反算函数…………………………………………………………………………………………………………22 第四节 标准正态分布分位数函数………………………………………………………………………………………………24 第三章 通用平差程序………………………………………………………………………………………………...……………….26 第一节 间接平差………………………………………………………………………………………………...……………….26 附录:相关函数………………………………………………………………………………………………...……….………….27 第二节 抗差估计………………………………………………………………………………………………...……………….30 第四章 高程网平差程序…………………………………………………………………………………………………...………….33 第一节 概述………………………………………………………………………………………………...…………………….33 附 录:极大权法平差函数………………………………………………………………………………………………...……….35 第二节 高程网的输入数据……………………………………………………………………………………...……………….35 第三节 高程网的结构与函数………………………………………………………………………………………………...….36 第四节 高程网间接平差……………………………………………………………………….…………..…………………….37 附 录:高程网平差相关函数……………………………………………………………………………………………….…….38 第五节 高程网秩亏平差…………………………………………………………………………………….…...………………43 第六节 水准网闭合差统计……………………………………………………………………………………...……………….45 第七节 高程网优化设计……………………………………………………………………….…………….………….……….46 第五章 平面网平差…………………………………………………………………………….…………….…….………………….48 第一节 概述…………………………………………………………………………………….…………...……………..….….48 第二节 边角网最小二乘平差…………………………………………………………………………………...……………….48 第三节 平面网数据输入格式…………………………………………………………………………………...……………….50 第四节 近似坐标计算…………………………………………………………………………………...……………………….51 第五节 结构与函数设计………………………………………………………………………………………...……………….53 附 录: 平面网平差相关函数…………………………………………………………………………………...……………….55 第六节 三角网方向观测精度估算……………………………………………………………………………...……………….80 附 录: 方向观测精度估算函数…………………………………………………………………………………...…………….81
第七节 平面控制网优化设计…………………………………………………………………………………...……………….82 第六章 GPS 向量网平差…………………………………………………………………………………….…….………….……….84 第一节 概述…………………………………………………………………………………...………………………………….84 第二节 GPS 向量网平差………………………………………………………………………………………...……………….86 第三节 结构与函数设计………………………………………………………………………………………...……………….87 附 录: GPS 平差相关函数…………………………………………………………………………………...………………….88 第七章 测量坐标系转化…………………………………………………………………………………….…….………….……….96 第一节 空间直角坐标与大地坐标系的转化……………………………………………………………...…………………….96 第二节 高斯投影坐标变换……………………………………………………………………………………...……………….97 第三节 任意坐标系的转换………………………………………………………………………………………...…………….98 第一章 绪 论 第一节 本课程的相关内容 1. 本课程主要内容 测绘程序设计是大题目,在测绘工作与科学研究中,很多情况下都可以使用计算机。测绘工程所涉及 的数据计算、绘图、数据库管理、数据分析等,都可以使用计算机来完成。从一般含义上说,测绘工作包 含计算和绘图两个方面的内容。关于计算机绘图有相关课程讲述,所以,这门课程的主要内容集中在测绘 工程的相关计算上面,而其中,主要讲述关于平差计算的程序设计问题。 本课程主要讲述以下内容: (1) 数据结构 在控制网数据处理中,数据组织是非常重要的内容,在这里我们主要讲述图的概念, 以及使用图表示控制网的数据。 (2) 常用工具函数编写 这里主要讲数据处理中经常需要用到的一些工具函数,如角度-弧度互化的 函数,测量正反算函数,矩阵计算函数等。 (3) 基本平差程序 使用计算机的方法处理间接平差的结构与过程。 (4) 高程网平差 将高程网平差表示为基本平差结构,使用基本平差程序处理水准网、三角高程网 平差的相关问题。 (5) 边角网平差 处理边角网平差的过程与问题。 (6) GPS 向量网平差 处理观测值为 GPS 基线向量的三维坐标平差问题。 (7) 测量坐标系转化 2. 平差程序计算特点 相对于手工计算,平差程序计算的主要特点是计算速度快、精度高、数据处理自动化,从而把人从繁 重的计算工作中解放出来。 从程序设计的角度看,程序设计与平差计算相对独立。在平差手工计算时,我们总是面对需要计算的 具体问题,所以其数据是特定的,计算过程由人实时控制;在计算机程序计算中,在程序设计时数据是抽 象的,必须考虑到实际计算中问题的多样性,以及数据计算过程的自动化,所以在程序设计时必须考虑需 要处理的所有问题的普遍性和规律性。 另外,相对于手工计算,在程序计算时,选择平差方法的依据不同。在手工计算时,我们通常希望尽 量降低计算工作量。当必要观测数 t>多余观测数 r 时,我们可以选择条件平差;当必要观测数 t<多余观测 数 r 时,我们可以选择间接平差,这样,可以降低平差计算量。然而,在计算机程序计算时,由于计算机计 算的快速高效性,我们不是很关心计算量的问题,而把主要精力集中于方法实现的现实性方面,也就是要 求该方法具有较强的规律性,便于程序设计的技术实现。 在平差程序设计中,使用间接平差,对于一般控制网,误差方程形式统一、规律性强、便于程序设计; 而使用条件平差,误差方程形式多样,规律性差,不利于程序设计。所以,在本课程中,我们主要使用间 1
接平差方法进行程序设计。 总之,我们在选择数学模型的时候,一定要考虑算法同计算机程序设计的特点相统一。 3. 平差程序的基本要求 平差程序设计与其它程序设计相同,应当满足一定的要求。 (1)程序逻辑结构简单,清晰易读,符合结构化程序设计要求,便于扩展; (2)运算速度快,占用内存小,内外存之间的交换不宜过于频繁; (3)数学模型及计算方法正确、先进,计算结果精度高; (4)适应性强,便于移植,充分考虑各种可能形式,尽量满足不同要求与需要; (5)方便用户,操作简便。数据输入与用户作业方式与习惯相统一,输出明了、齐全;尽量减少手工 处理工作量,操作简便;人机交互性要强。 上述要求,既体现在平差程序的总体设计中,也贯穿于平差程序设计的各个环节中。 4. 平差程序的设计步骤 (1) 结构总体设计 (2) 数据结构设计 (3) 确定软件各组成部分的算法及数据组织 (4) 选定某种表达式来描述各种算法 (5) 程序编写 (6) 程序调试 (7) 编写用户使用说明 5. 学习本课程的基本要求 (1) 掌握 C 语言基本技术,并应用于测绘程序的编写中; (2) 熟悉《测量平差基础》、《控制网平差基础》等理论知识; (3) 基本掌握结构化程序设计方法; (4) 勤思考,勤动手,多练、多问,阅读、编写相关功能程序。 第二节 结构化程序设计 结构化程序设计是计算机软件技术高度发展的产物,是大规模、工业化软件开发的基础。C 语言是结构 化程序设计思想成熟与完善的标志,至今,仍然是计算机软件开发的主要语言之一。模块的概念是软件工 程的基本概念之一。 1. 模块化程序设计相关概念 模块——执行某一特定任务的数据结构和程序代码。 模块的性质  内部特征     外部特征    模块的局部数据  实现模块功能的程序代   模块接口(输入、输出  模块的功能  码 ,引用的全局变量,调 用的其他模块) 在 C 语言中,每个模块与一个函数(function)相对应。 模块化——将待开发的软件分解成若干个小的模块,以使每个模块可以独立地开发、测试,最后组 装成完整的软件。软件模块化的目的在于使软件的结构清晰,降低软件开发难度、容易阅读理解、测试 和修改。 划分模块的原则: 2
(1) 按功能划分模块,要求每个模块包含单一、具体的功能 (2) 使每个模块独立性好,这就要求一个模块具有较强的内聚性和较弱的耦合性。方便于模块的 独立开发、调试,同时,使模块具有很好的移植性。 划分模块时,应当尽量减小模块间的耦合性,例如尽可能地使用局部变量就可以减小模块之间的耦合 性。划分模块时,采用层次结构进行分析: (1) 最上层模块是对系统整体功能的抽象; (2) 下层模块是对上层模块的逐步细化描述; (3) 重复(2),得出便于实现的独立性好的模块,直到下层模块不可再分为止。在最下层,对“怎 么做”作出精确的描述。 2. 平差程序模块化 图 1.1 平差程序模块化 第三节 控制网的数据结构 1. 基本概念 测量平差程序处理的对象是程序所适应的各种测量控制网问题。因此,这类程序总是同一定的网形相 联系的。一个具体的控制网通常是以图形方式直接绘出的,为了用计算机进行控制网的平差计算,就需要 将具体的网形转化为一系列的数据,然后才能输入计算机进行处理。这种将网形转化为一系列数据的工作 和过程称为“网形数字化”。网形数字化所得到的一组数据就是控制网的数据结构。 数据结构所涉及的范围是广泛的。在每个具体问题中,数据元素及其关系是确定的,而且都有其特定 的含义。对测量平差而言,其数据结构就是表达一个控制网的全部数据的集合,包括已知数据、观测数据、 网形数据(网图数据)及其关系。 为了使用数学方法表示控制网的结构,需要用到图论的相关概念。图论是研究事物之间关系的一种数 学方法,下面对之一概念作简单的介绍。 2. 图及其数字化 2.1 图的定义 图论是研究事物之间关系的一种数学方法,在图论中,用点表示事物,用线段表示事物之间的联系, 3
这些点称为图的顶点,线段称为图的边。对于控制网,其中元素及其关系可以使用图论的方法进行研究。 图是由点和边构成的,可以定义为定点集 V 与边集 E 的和,记为 G=(V,E) 例如对于图 1.2 所示问题,可以得出如下图论分析结果 G  V   E      4321 ,,,       3124433221 ,,,,,,,,,       上述边集中元素(1,2),(2,3)等称为点偶。若点偶中顶点的顺序可以任意,称这种图为无向图,反之, 称为有向图。 对于有向图采用符号 G=表示。其中点偶也采用尖括弧表示,尖括弧中顶点的顺序是固定的。对 图 1.2 具有四个点的无向图 于图 1.3,可以表示如下: G  V   E    4321  ,,,  2,4,4,3,2,3,3,2,1,2,3,1,2,1          图 1.3 具有四个点的有向图 对于有 n 个顶点的无向图,边的最大数目为: 2 Cn  ( nn  2/)1 对于有 n 个顶点的有向图,边的最大数目为: 2 Pn  ( nn  )1 2.2 图的数学表示方法 对图的数学表示方法有以下三种:相关矩阵,邻接表和边目录。 1)相关矩阵:如果 i,j 两点有边相连,则矩阵第 i 行、第 j 列元素为 1,反之为 0;对角线上元素永远 为零。 对于如图 1.2 所示的无向图,用相关矩阵表示如下: 4
0110 1101 1011 0110             无向图特点:关于主对角线对称,通常只需写出一半即可。 对于如图 1.3 所示的有向图,用相关矩阵表示如下: 0110 0101 1010 0010             有向图特点:通常不是对称矩阵,需要写出矩阵全部元素。 2)邻接表:按照图中的顶点顺序,将与该点边相连的所有点(可达顶点)排成一行,所有这些行所构 成的表叫邻接表。 对于如图 1.3 所示的有向图,用邻接表表示如下(表 1.1): 该表可由对应的相关矩阵产生。为节省内存,通常将邻接表排成一行。为识别可达顶点所属的行号,需要 给出表 1.1 中每行含有的可达顶点数,从而构成可达顶点数表和可达顶点表。如表 1.2 所示: 3 3 4 2 1 2 2 表 1.1 邻接表 2 2 2 1 2 3 表 1.2 邻接表 1 3 2 4 2 在表 1.2 中,第一行为可达顶点数表;第二行为可达顶点表。 与有向图类似,无向图的邻接表也可以由相应相关矩阵产生。 3)边目录:按照图的定义,图由顶点集 V 和边集 E 组成。然而,边集实际上包含了所有点集的信息(除 非图中包含孤立的点,这种情况在控制网中是不会出现的),所以可以只用边集 E 来表示图。这种用两 端点号表示图中边所构成的表成为边目录。下面对于有向图的例子做简单的说明。 对于如图 1.3 所示的有向图,用边目录表示如下(表 1.3): 3 2 1 2 表 1.3 有向图的边目录 2 3 1 2 1 3 3 4 4 2 在表 1.3 中,每一列表示一条边,第一行中的点为起点号,第二行中的点为终点号。 对于无向图,表示方法与有向图类似。需要注意的是,为了使每条边只表示一次,采用最小点号原则。 也就是起点号由小到大排列,边不重复表示。 以上三种方法,在数学上是统一的。也就是说,只要知道一种表示,其它两种就可以相应生成。 3 各种方法的比较 相关矩阵、邻接表和边目录都能表示出图的全部点和边。其中,相关矩阵方法冗余度最大,对角线上 元素全为零,其余位置上也存在大量的数据冗余。另外,相关矩阵不能反映出各边的邻接关系,这对于控 制网平差计算极为不利。 对于有向图,邻接表要比边目录节省许多内存空间。因为这两种方法第二行元素完全相同,但在第一 5
行,邻接表只需列出可达顶点数,所以比边目录占用存储空间少。对于无向图,邻接表和边目录体积相当, 两种方法均可以采用。 在控制网平差中,使用邻接表占用内存小,使用边目录更加直观。所以这两种方法均可以采用,更重 要的原因在于这两种方法可以根据需要调整边的邻接关系。 2.4 有序邻接表和边目录 为了反映图中同一顶点上各边的邻接关系,无论是邻接表还是边目录都应该按照顶点序号和每顶点上 各边的相邻次序按一定的顺序排列(顺时针方向),如此形成的邻接表和边目录称为有序邻接表和有序边目 录。控制网平差需要用到有序邻接表和有序边目录,不加说明,我们仍称为邻接表和边目录。 3. 控制网的数据结构 3.1 图与控制网的映射 图的元素与测量控制网元素之间存在如下所示的对应关系: 图的顶点对应于测量控制点; 有向图的边对应于控制网的有向边(方向观测值、高差线路、基线坐标分量等); 无向图的边对应于控制网的无向边(单向测距边)。 另外,图也可以用于研究控制网的其它关系,例如,图的顶点用来表示三角形,图的边则表示三角形 的邻接关系等。 3.2 控制网数据结构的组成 控制网的数据包括已知数据、观测数据、网形数据三个部分。其中,前两个部分是我们所熟悉的,网 形数据是需要我们用图论方法表示的信息。根据上面的讨论,我们可以使用有向图或者无向图的方法表示 控制网中数据之间存在的各种关系。 3.3 控制网数据结构应满足的条件 1)充分性条件:数据结构中应当包含足够多的数据,以保证能构成所需的控制网。也就是要充分表示 网点及其关系。例如,对于边长交会的情况,按照数学理论方面的要求,在有两个已知点的情况下,似 乎测量两条边就足够了,实际上,我们知道,这时候可以计算出两个点的坐标。也就是说解不唯一,或 者说不满足充分性要求,这时必须增加约束条件数据,从而得到唯一的计算结果。 2)必要性条件:数据结构中只包含构网必须的数据,无冗余数据。程序设计不大可能忽视充分性条件, 因为充分性条件不满足,很容易发现。对于必要性条件,则很可能由于算法实现的难度而转嫁于用户头 上,要求用户输入一些属于冗余信息的数据,从而加重用户的工作量。我们应当重视必要性条件,这也 是软件是否完善与成熟的主要标志之一。 第四节 C++特征与 Visual C++6.0 开发环境 在这门课中,我们需要应用 C++程序设计中的一些特征,在课间实习与集中实习中,需要使用 Visual C++6.0 开发相关程序(dos 版 C++程序),在此对相关内容作简要的介绍。.CPP 1.C++特征 1.1 重载 重载是 C++在 C 的基础上对函数功能的扩展。利用重载机制,可以对具有相似功能的函数在定义时使 用相同的函数名,从而方便用户的使用。 例如:在 C 语言中,为定义不同类型数据相加的操作,必须使用不同的函数名来定义一组函数。 Iplus() 整数相加; Dplus() 实数相加; Fplus() 浮点数相加; Cplus() 字符串相加。 6
对于不同类型的数据计算必须由用户调用不同的函数,这无疑增加了用户使用程序的负担。在 C++语 言中,可以使用更简洁的方法处理这种问题。对以上四种计算可以只使用一个函数名 plus 定义相关的不同 函数。计算机函数编译的区别标志在于函数的参数不同。也就是说,计算机根据同名函数参数不同来区别 相关函数。在应用时,就可以以一个相同的函数名调用一族函数。这就是 C++语言函数重载的概念。 很明显,函数重载的应用,方便了程序的编写与用户的使用。使用相同名字定义的一族函数叫重载函 数。使用一个已经存在的函数名定义一个新函数叫对原有函数的重载。 定义重载函数的关键在于相关函数应当具有不同的参数。参数不同体现在两个方面:函数参数的类型 不同或函数参数的个数不同。 对于上例问题,可以定义一组重载函数(函数定义略): int plus(int a, int b); double plus(double a, double b); float plus(float a, float b); char* plus(char * a, char* b); 在应用时,系统根据调用函数参数的不同直接调用相关函数,如: int d=plus(2,14); cout< int Plus(int & x, int & y) { x++; y++; return x+y; } 定义 main()函数 void mian() { Int a(5),b(10),c; c=plus(a,b); cout<
分享到:
收藏