解析空三航带法区域网平差程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解析空三航带法区域网平差程序设计
随着新一代GPS系统在各个方面的高速发展,摄影测量技术已经被运用于国土资源监测、气象监测和天体科学等多个领域之中。摄影测量技术也被逐渐运用到测绘科学中,丰富测绘学科测量技术手段的同时,摄影测量促进测量学的发展。从摄影测量应用到生产的各个环节,人们对摄影测量的精度要求从未停止过,工程项目对摄影测量的测量精度也提出更高的要求。
本文通过摄影测量的解析空中三角测量方法,在整个目标范围内,将航测线路的模型点作为摄影测量辅助位置观测值,在一个区域范围内,利用多条航带构建一个模型网,再进行整体平差计算出区域网内各航带位置的改正系数,从而解算出航带中各个加密点的三维地表位置数据。以这种数学模型和平差方法為基础,研究相应的算法,编写出相应的程序进行测试,通过实例计算并对最终结果进行精度评定。
1 Visual Studio简介
1.1 什么是Visual Studio
C# 编程语言作为美国Microsoft Corporation为Visual Studio (以下简称VS)开发环境下推出的一种简洁、类型安全的面向对象的计算机编程语言,软件程序开发的相关工作人员可以通过它编写在.NET Framework上运行的各种安全、可靠的应用程序。
1.2 C#所具有的特点
C#具有以下突出特点:
(1)C#的语法结构简单明了。其最大的特点就是不允许对计算机系统的内存进行控制,去掉了复杂的指针操作。
(2)彻底的面向对象设计。C#编程语言拥有面向对象的计算机语言的全部特征:封装、继承和多态。
(3)与Web紧密结合。C#编程语言支持绝大多数的Web标准,例如HTML、XML、SOAP等语言。
(4)强大的安全机制。能够自动处理在程序设计中常见的问题,较为高级的垃圾回收机制让普通编码基本忽略内存释放问题。
(5)兼容性好。由于C#编程语言应用着.NET的编程语言规范设计(CLS),因此可以与其他的编程语言进行开发的组件相互兼容。
(6)灵活的版本處理技术。由于C#作为一门开发语言本身就带有了针对版本管理系统,因此程序员能够更加容易地开发程序和更好的维护程序的后期使用情况。
(7)完善的错误、异常处理机制。C#提供系统多线程控制,可能是所有语言中多线程和异步变成最方便的。
(8)易有经验的程序员学习。C#能够适应C或者C++语言设计的函数,所以不会丢失C或者C++本身带有的作用。由于C#和它们之间的继承的关系,C#对于C或者C++就功能方面很类似,精通相关语言的程序工作人员能够很方便的转向C#。
2 解析摄影测量区域网空中三角测量
航带法空三测量是解析空三测量加密的三种方法之一,该方法的主要研究对象是单条航空摄影航带所构建的模型。
首先,将单个独立模型经由模型连接的方法连成一整个航带模型,每一条航带模型都是有很多个单个模型组合成,而每个独立模型由许多个立体像对构成,最后获得构成航带自由网的模型,将整个航带模型作为单个模型进行航带自由网进行绝对定向。
由于每个单个模型中的许多立体像对中都存在着误差,积累下来的误差会随着立体像对的组合不断的传递到下一个层次中,由立体像对积累到单个独立模型,再由单个独立模型整合到自由网,在这过程中产生的误差甚至会使整个航带自由网的结果发生巨大的扭曲变形。
所以在航带模型经过绝对定向之后,针对模型的线性改正将会是重中之重,这是解算出加密点的地面摄影测量坐标必不可少的步骤。
3 航带法空中三角测量区域网平差程序设计
3.1 技术路线
3.2 程序的界面设计
界面是表现软件好坏最直观的的形式,界面的好与不好直接表达了使用者对软件的感受。高质量的界面可以给使用者带来轻松快乐的想法,反之对于低水平的设计,会让使用者在直觉上产生反感,再有效的功能都会在使用者的担心和放弃中流逝。
对于本次航带法区域网平差程序的设计,我将做一个能够按步骤显示计算进度流程的设计,运用多个C#的DatagridView控件,一步一步的表示出计算的步骤,在计算的过程中也加入了许多MessageBox消息弹出窗口的提示。
设计的思想是将两条航带的数据经过相对定向计算,模型拼接已经绝对定向的解算后,寻找两条航带的连接点,并用Excel表格进行数据的保存,然后选择特定的控制点和经过绝对定向解算之后的模型点,作为一条航带的数据,分别对两条航带和连接点进行数据的导入。对于存储航带数据的Excel表格将设置为sheet1存储控制点的坐标数据,sheet2将存储与控制点对应的模型点的坐标数据,而对于存储连接点数据的Excel表格将设置为sheet1存储第一条下连接点坐标数据,sheet2存储第二条航带上连接点坐标,然后根据第三章所建立的数学模型设计的相关代码来计算这个航带网所需的非线性改正数,然后每一步都将根据所需的要求使用DatagridView来显示解算的结果,最终求出这两条航带的改正系数,如图2所示。
3.3 数据的导入和保存
以对程序中第一条航带的数据导入、导出数据作为例子表示:
(1)运用IO流的方式打开处理好的Excel表格文件,并将表格数据导入new_openfile中:
OpenFileDialog new_openfile = new OpenFileDialog();
new_openfile.Filter = “(EXCEL)*.xls|*.xls";
(2)判断表格的数据是否为空
new_openfile.ShowDialog()== DialogResult.OK
(3)若导入的数据不为空,则将对Excel表格的文件的位置进行获取并连接到Excel文件的数据库中,建立ss作为读取表格中sheet
的数据,sc作为读取文件位置的数据:
string ss = null;
string cs = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + new_openfile.FileName + ";Excel 8.0;HDR=Yes;IMEX=1";
OleDbConnection CNN = new OleDbConnection(cs);
CNN.Open();
(4)历遍Excel文件的Sheet,并显示每个Sheet名:
DataTable ttable = CNN.GetSchema("Tables");
foreach (DataRow row in ttable.Rows)
if (row["Table_Type"].ToString()== "TABLE")
ss = "select * from [sheet1$]";
OleDbCommand CMD = new OleDbCommand(ss,CNN);
OleDbDataReader RAD = CMD.ExecuteReader();
DataTable tab = new DataTable();
(5)建立一个名为row的数组,并将数据导入
for (int i = 0; i RAD.FieldCount; i++)
tab.Columns.Add(RAD.GetName(i),RAD.GetField¬Type (i));
DataRow row1;
while (RAD.Read())
{row1 = tab.NewRow();
for (int j = 0; j tab.Columns.Count; j++)
{row1[j] = RAD.GetValue(j);}
tab.Rows.Add(row1);}
(6)之后将读取到的数据导入dataGridView 中,最后将数据值读入相对于的数组中:
dataGridView1.DataSource = tab;
kzddata1 = new double[dataGridView1.RowCount - 1,dataGridView1.ColumnCount];
for (int i = 0; i dataGridView1.RowCount - 1; i++)