测量程序设计报告

2018-12-17 10:54

课程设计报告

设计题目: 专 业: 班级学号: 姓 名: 指导教师:

水准网平差程序设计

测绘工程

起屹日期: 2013年6月3日~2013年6月7日

南京工业大学测绘学院

水准网平差程序设计报告

1、课程设计的目的、意义

测绘程序设计是一门实践性很强的课程,且具有很强的综合性,要求学生既要掌握相关数据处理理论知识又要掌握相关的程序分析与设计技术。开展一定程度的数据处理程序分析与设计工作,可以使学生从根本上对问题分析、程序设计等具体问题与方法具有感性的直观了解,打破同学们对程序设计的神秘感与畏难情绪;培养同学们具体问题分析与处理的基本能力;提高解决具体问题的实际动手能力、在不同问题的程序设计实践中培养同学们对程序设计的兴趣,进一步掌握matlab语言、结构化的测绘程序设计技术。

为加深学生对相关理论、技术和方法的理解,掌握测绘数据处理软件的开发特点和技术,在《测绘程序设计》课程结束后安排为期一周的测绘程序设计课程设计。在进一步理解课程相关程序设计的思路、掌握相关技术的前提下,要求每位同学按要求独立进行问题分析、程序设计、功能测试等工作,开发相关程序,达到锻炼学生具体问题分析、程序设计的能力,培养勇于钻研、团结协作的精神。

2、程序文件说明

levelling_data_input.m:将观测数据按照规定格式录入到文本文件中 Readleveling_data.m:读取数据 Calculateleveling.m: 计算近似高程

Conditionleveling.m:条件平差的高程、高差和中误差 Writelevelnetdata.m:生成平差结果,输出到.txt格式文本中 Achievement.m:将所有的分步程序合成最终的程序

3、程序内容

(1)编写函数用于将水准观测数据按标准格式写入txt文本文件

水准数据文件的编排标准格式为:

首行记录 已知点个数、未知点个数、观测值个数;

第二行记录 点号(未知点编号在前,已知点在后); 第三行记录 已知点高程;

第四行开始记录 起始点编号、终点编号、高差观测值(m)、测段距离(km) 函数实现功能:

通过命令窗口分别提示输入已知点个数、未知点个数、观测值个数、水准点编号(未知点在前,已知点在后)、已知点高程、水准测段起始点、终点、高差观测值、测段距离。

将数据文件保存到指定目录下新创建的txt文本文件中。 代码:

function levelling_data_input %将观测数据录入到文本文件中

[filename, pathname] = uiputfile('*.txt', '保存数据文件到'); %通过对话窗口找到或创建要存放观测数据的文本文件,获取他们的文件名路径名 file = [pathname,filename]; fid = fopen(file,'wt');

num_known = input('请输入已知水准点个数:'); num_unknown = input('请输入未知水准点个数:'); num_obs = input('请输入观测值个数:');

fprintf(fid,'%4.0f %4.0f %4.0f\\n',num_known,num_unknown,num_obs); for i = 1:num_unknown

id_bm1 = input(['请输入第',num2str(i),'个未知水准点编号:'],'s'); id_bm1 = upper(id_bm1); fprintf(fid,' %s',id_bm1); end

for i = 1:num_known

id_bm1 = input(['请输入第',num2str(i),'个已知水准点编号:'],'s'); id_bm1 = upper(id_bm1); fprintf(fid,' %s',id_bm1);

height(i) = input(['请输入该已知水准点的高程:']); end

fprintf(fid,'\\n'); for i = 1:num_known

fprintf(fid,' %5.4f',height(i)); end

fprintf(fid,'\\n'); for i = 1:num_obs

start_point = input(['请输入第',num2str(i),'个测段起始点编号:'],'s'); start_point = upper(start_point); end_point = input('终点编号:','s'); end_point = upper(end_point);

height_dif = input('测段高差观测值(m):'); distance = input('测段水准路线长度(km):');

fprintf(fid,'%s %s %4.3f %3.2f\\n',start_point,end_point,height_dif,distance); end fclose('all');

(2)数据读入

对自定义的标准格式的数据文件,可以利用fscanf来读取文本中的信息 [filename, pathname]= uigetfile('*.*'); %文件查找窗口 file=fullfile(pathname, filename); %合并路径文件名 fid=fopen(file,'rt'); % 以读写方式打开文件 %读取第一行

num_known = fscanf(fid,'%f',1); %f'以浮点型格式读取,fid句柄,1是读的数目 num_unknown = fscanf(fid,'%f',1); %f'以浮点型格式读取,fid句柄,1是读的数目 num_obs = fscanf(fid,'%f',1); %f'以浮点型格式读取,fid句柄,1是读的数目 %读取第二行

num_all = num_known+ num_unknown; %计算水准网内所有高程点的个数 for i = 1: num_all

id_bm(i) = {fscanf(fid,'%s',1)}; %将所有的高程点以字符串形式存储在bm数组中

end %读取第三行

height(1: num_unknown)= 0; %给未知点赋予0高程值

height(1+num_unknown: num_all)= fscanf(fid,'%f', num_known);%读取已知点高程值 %读取第四行 for i=1: num_obs

start_point(i) = {fscanf(fid,'%s',1)}; %所有起始点存储在字符串数组中 end_point(i) = {fscanf(fid,'%s',1)}; %所有终点存储在字符串数组中 height_dif(i) = fscanf(fid,'%f',1); %每一段高差存储在浮点型数组中 distance(i) = fscanf(fid,'%f',1); %每一段距离存储在浮点型数组中 end

(3)近似高程计算程序

%近似高程计算

flag(1: num_unknown) = 0;

flag(1+num_unknown: num_all) = 1;%0表示该点近似高程未计算,1表示该点近似高程已计算。 while(1)

for i = 1: num_obs

m = strmatch(start_point(i) ,id_bm); %从id_bm中寻找和起始点一样点号的下标

n = strmatch(end_point(i) ,id_bm); %从id_bm中寻找和终点一样点号的下标

if (flag(m)==0 && flag(n)==1) %如果已知点在起始点,用如下这个公式

height(m) = height(n)-height_dif(i); flag(m) = 1;

end

if (flag(n)==0 && flag(m)==1) %如果已知点在终点,用如下这个公式 height(n) = height(m)+height_dif(i); flag(n) = 1; end end

id_un = find(flag ==0); % 寻找未计算近似高程点的下标 if length(id_un) == 0 %如果无为计算近似高程点,终止循环 break; end


测量程序设计报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2012年11月师级薪酬认证试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: