- 教育部高等学校测绘类专业教学指导委员会通知官网:比赛通知、结果发布地址;
- 智绘未来B站账号:赛前培训直播和录播;
- 测绘程序设计教材/例程/配套视频:测绘程序设计比赛的官方参考书、参考例程;
- 测绘程序设计比赛讲解-回放:23年李英冰老师做的赛题讲解;
- 罗宏昆的23测绘程序设计仓库CeHuiProgramDesign)/24赛题讲解视频/界面设计视频;
- 我22年省赛的界面设计视频:可以和罗哥的界面设计视频结合着看。
如果您还没接触过 Github,可以看看:Github上手、Git + GitHub 10分钟完全入门。
Github 不支持直接下载文件夹,如果你想单独下载其中一个项目,可以参考:Github | 如何在Github上只下载一个文件或文件夹!?
-
空间数据探索性分析:计算标准误差椭圆、空间权重矩阵、常用空间自相关指数。
参考例程:暂无
-
遥感图像空间前方交会计算:计算立体像对的投影系数、像空间辅助坐标系坐标及地面摄影测量坐标系坐标。
参考例程:书上的例程有错,可以参考矿大罗宏昆的 C# 程序。
-
GNSS空间大气改正计算:常用电离层改正模型、对流层改正模型计算。
参考例程:书上给的例程。
-
纵横断面计算:道路纵断面、横断面的相关点位计算,以及断面面积计算。
参考例程:22年国赛题,书上例程是 VB 的而且读文件的时候有 BUG(有个换行符写错了),可以参考矿大罗宏昆的 C# 程序和我的22年国赛程序。
-
大地线长度计算:根据地球椭球参数和椭球面上的大地经纬度坐标,计算两点之间的大地线长度。
参考例程:书上给的例程,也可以参考大地主题正反算例程,因为大地线长度计算是大地主题反算的一部分。
-
曲线拟合:利用五点光滑法进行曲线拟合。
参考例程:书上给的例程。
-
学C#基础语法
-
学WinForm
- 看看微软官方出的Windows窗体入门;
- 掌握常用的几个控件:SaveFileDialog、OpenFileDialog、DataGridView、RichTextBox、TabControl、MenuStrip、MenuStrip、StatusStrip、ToolStrip、Button、Label、RadioButton、CheckBox、GroupBox;
- 窗体设计看视频教程比较直观,仿照着罗宏昆的视频、我的视频练一练。
-
先把一套题学懂
-
看懂题目和数据文件
-
运行例程,导入数据,计算,记住程序操作逻辑,确认程序能正确运行;
-
看懂例程:①先看例程的界面设计,用到了哪些控件;②类型定义;③程序初始化,也就是主窗体的构造函数;④文件读取,理清数据文件中的数据与变量的对应关系;⑤对着公式看数据处理的代码,看看与公式符不符合;⑥看结果展示、输出计算报告的代码。
-
模仿例程写一遍:①自己新建一个项目,②设计界面,③定义用到的类型,④写数据读取代码,⑤写代码展示读取到的数据,⑥照着题目公式敲数据处理代码,⑦写代码展示计算结果,⑧写代码输出计算报告TXT文件。
-
脱离例程写一遍:按自己的理解来写,写的时候可以看题目,不要看例程,写完之后再跟例程的结果做对照。
-
-
总结一套编程模板,比赛的时候按套路来写程序
-
设计思想:花尽量少的时间,尽可能的让程序更有条理、更模块化、更易扩展。
-
界面设计:保证在五分钟之内能实现;能在属性栏进行的控件配置就在属性栏做,不要写代码。
-
命名风格:字段和变量小写字母开头,类、函数大写字母开头。
-
类型定义:主要就写三个类,创建对应的三个文件,所有字段和方法都写成 Public:
DataCenter
类:一个数据存储类存所有数据,包括,Calculate
类:FileHelper
类:ReadFile()
函数实现读取文件、SaveFile()
函数实现导出计算报告。
-
全局变量:写在
public partial class Form1 : Form
下面,也就是用 Form1 的字段来实现类似于全局变量的效果。DataCenter dataCente = new DataCenter();
:存所有数据;- :存生成的计算报告字段;
- :标识系统执行状态。
-
面向过程:一万行以上的程序才值得好好的进行面向对象设计;程序在三个地方执行:
- 主窗体构造函数:点开程序的时候就会执行,可以放一些初始化的代码,。
- 读取文件按钮的点击事件:创建
FileHelper
类对象,调用其ReadFile()
函数导入数据到dataCenter
,显示读到的数据到的数据到窗体控件上。 - 数据处理按钮的点击事件:
-
-
有闲工夫可以按自己整理的编程模板套路把几个题都练一遍
-
装一个离线版MSDN,除了这个比赛我从来不用C#,语法不一定记得住,比赛时候忘了可以查一下。
-
配置VS2017快捷键
我是学导航的,主要写 C++,C#除了这个比赛就没用到过,
- C# 语法比 C++ 简单,C++ 比 C# 灵活、性能高;
- C# 的 List 对应 C++ 的 Vector;
- C# 的 WinForm 界面设计方式和 C++ Qt 框架类似;
- 基本数据类型:int、double(小数都用double不用float);
- 运算符:和其它编程语言一样:算术运算符、比较运算符、布尔逻辑运算符、位运算符和移位运算符、相等运算符、
- 语句结构:循环语句(for、while、do-while)、条件语句(if-else、switch-case)
- 数组:
- List 泛型集合:(我们写程序不在乎性能,所以能用 List 就别用其它数据结构)
- 类和对象:
- 异常捕获:try-catch,提高程序的鲁棒性,,在导入数据的代码都写在 try 里,
- MessageBox.Show("Test"):弹出一个对话框,显示你设置字符串,类似于命令行程序中的 Console.WriteLine()、C 语言中的 Printf、C++ 中的 std::cout。
- 格式化输出:
- 字符串操作:
- 字符串去空格:可使用 String.Trim、String.TrimStart 和 String.TrimEnd 方法删除任何前导空格或尾随空格。
- 字符串分割:String.Split 方法通过基于一个或多个分隔符拆分输入字符串来创建子字符串数组,
- 字符串拼接:
- 字符串-浮点数转换:
- 左右对齐:Padding
- StreamReader:
- StreamWriter:
- 主窗体 Form 操作:
- 控件常用属性:Text(控制显示内容)、Name(在代码中的对象名)、Dock(定义控件绑定到边缘)、BlackColor(背景颜色)、BackgroundImage(背景图片)、BackgroundImageLayout(背景图片布局)、Visible(控件是否可见)、Enable(控件是否可用)、FlatStyle(设置外观)、Font(字体)、
- SaveFileDialog:保存文件对话框,
- OpenFileDialog:打开文件对话框,
- DataGridView:
- RichTextBox:
- TabControl:
- MenuStrip:菜单栏,
- ToolStrip:工具条,
- StatusStrip:状态栏,一般放在界面最下面,显示程序的执行状态。
- Button:按钮,上面可以显示文字、图片,双击编写它的点击事件函数。
- Label:标签,主要作用就是在窗体上显示文字。
- 单选框RadioButton、复选框**CheckBox:checked 属性指示控件是否除以选中状态,常用GroupBox**给控件分组,可以显示一个组名。
-
点名、B、L、H
-
点名、X、Y、Z
-
点名、X、Y
-
点的集合
- 导入数据的代码都写在
try
中,如果出现啥问题,比如格式出错、选错文件,程序不会因为异常而退出。 - 先创建打开文件对话框 OpenFileDialog 对象,
try
{
OpenFileDialog opf = new OpenFileDialog(); // 创建打开文件对话框对象 opf
opf.Filter = "文本文件|*.txt"; // 文件类型过滤,只显示 .txt 文件
opf.Title = "请选择要导入的文件"; // 显示在打开文件对话框开头的提示词
if (opf.ShowDialog() == DialogResult.OK) // 弹出打开文件对话框
{
StreamReader sr = new StreamReader(opf.FileName); // 创建 StreamReader 对象
data.Points = new List<Point>();
Point point ;
string line = sr.ReadLine();
string[] lines;
data.PointCount = int.Parse(line);
for (int i = 0; i < data.PointCount; i++)
{
lines = sr.ReadLine().Trim().Split(',');
point = new Point(lines[0], double.Parse(lines[1]), double.Parse(lines[2]),double.Parse(lines[3]));
data.Points.Add(point);
}
MessageBox.Show("导入数据文件成功!");
}
else
{
MessageBox.Show("文件打开失败!");
}
}
catch (Exception)
{
MessageBox.Show("文件导入失败,请重新导入!");
throw;
}
- 在 DataGridView 控件的属性栏先
dataGridView1.RowCount = data.PointCount;
for (int i = 0; i < data.PointCount; i++)
{
dataGridView1.Rows[i].Cells[0].Value = data.Points[i].Name;
dataGridView1.Rows[i].Cells[1].Value = data.Points[i].X;
dataGridView1.Rows[i].Cells[2].Value = data.Points[i].Y;
dataGridView1.Rows[i].Cells[3].Value = data.Points[i].Z;
}
-
程序执行状态枚举定义
-
导入数据的时候重置程序执行状态枚举
-
进行某一步计算的时候判断程序执行状态枚举
编程进行三角函数计算的时候一般用弧度(例如:0.5π),生活中常使用角度(例如:60°),经纬度坐标常表示成度分秒(例如 30.3241),所以需要进行转换。
-
弧度转角度
-
角度转弧度
大地测量相关的计算很多都基于旋转椭球,
长半球和扁率
-
下载例程了之后,如何在VS2017中打开?
-
确保 VS 中安装了 C# 语言和 .NET 环境;
-
双击
.sln
是打开解决方案,双击.csproj
是打开项目,一个解决方案可以包含多个项目; -
如果双击没反应,尝试去设置打开方式,选择 VS 打开。
-
-
打开解决方案或项目报错:未能成功构建其中一个或多个项目。
- 可能是程序文件夹没解压,Win11 中压缩文件夹可以直接在资源管理器中点开,看着和普通文件很像,很容易就忘了解压;
- 点
.sln
打开程序失败,可以试试直接点.csproj
打开项目。
-
更改到目标框架
- 安照提示点确认,