测绘程序设计比赛小总结
0x01 说在前面
本文是用于整理个人参加 2023年全国大学生测绘学科创新创业智能大赛 测绘程序设计竞赛(国赛) 所使用的代码而写,如有错误,恳请指出。
如无特殊说明,文中所涉代码默认使用C#(.NET Framework 4.0)完成。
0x02 加载文件
2023年测绘程序设计竞赛所使用的文件均为text文件,读取相对简单。主要思路:使用OpenFileDialog->StreamReader->转换各行内容为string[]。
1 | OpenFileDialog ofd = new OpenFileDialog(); |
为完成构建加载文件,个人使用强类型列表List<T>
,如
1
2
3
4
5
6
7
8
9
10
11
12
13class Point {
public string pointName { get; set; }
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
public Point(string pointName, double X, double Y, double Z) {
this.pointName = pointName;
this.X = X;
this.Y = Y;
this.Z = Z;
}
}
完成后使用List<Point> points = new List<Point>();
声明强类型列表, 对每一行数据进行分离,并使用points.Add(point);
将对象加入列表。
0x03 空间前方交会的计算要点
空间前方交会计算可能是最简单的一个题目。对本题而言,需要构建一个包括9个基本要素、3个辅助坐标、1个投影系数的共计13项数据。
特别注意:像片主距为焦距,理论上无负值。带负值的像片主距为-f。
像空间辅助坐标矩阵的计算公式如下
为便于计算旋转矩阵元素, 建议提前计算好cosφ、cosκ、cosω与sinφ、sinκ、sinω。
结果输出可全部依靠TextBox控件。
0x04 伪距单点定位的计算
关于伪距单点定位,参考书中内容冗余过多,大多无需理解。
重点:
1 卫星数据及其含义:
Sat Clock: dt
Trop Delay: dtrop
CL: L矩阵中的p
P矩阵中的p使用下式计算:
计算结果时,先使用B矩阵、P矩阵、L矩阵,得出dx,再通过dx计算σ0。
Q矩阵本质是dx计算的左半部分!
具体公式可参考书上。
关于数据输出,建议使用DataGridView
,使用dataGridView.DataSource
绑定List<T>
。
0x05 纵横断面计算
纵横断面计算的重点、难点在于高程插值的编写。
推荐构造点类时预留水平距离计算方法,最好可以暂存距离以加强代码运行效率。
为寻找插值点,可自某点起遍历其余所有点与之距离并做好标记(如强类型列表等),再对距离进行排序(对基础较弱者,推荐冒泡排序算法),找出最短的五个距离,分别找到对应点参数,再进行计算。
梯形面积公式: (上底+下底) * 高 / 2。
此处上下底为左右高程差,“高”为两点间距。
0x06 大地主题正反算
挖坑,待填