测绘程序实验报告
- 格式:doc
- 大小:42.00 KB
- 文档页数:11
一、实习背景随着我国经济的快速发展,测绘技术在国民经济和社会生活中扮演着越来越重要的角色。
测绘程序设计作为测绘专业的一门重要课程,旨在培养学生的计算机编程能力和测绘数据处理能力。
本次实习是在测绘程序设计课程结束后,为了巩固所学知识,提高实际操作能力而进行的。
二、实习目的1. 熟悉MATLAB软件,掌握其基本操作和编程方法。
2. 学习测绘数据处理方法,提高数据处理能力。
3. 通过实习项目,锻炼编程能力和团队协作能力。
4. 培养严谨的科学态度和良好的职业道德。
三、实习内容本次实习主要分为以下几个部分:1. MATLAB软件学习(1)MATLAB基础操作:了解MATLAB的界面、菜单、命令窗口、工作空间、函数库等。
(2)MATLAB编程基础:掌握MATLAB的数据类型、运算符、控制语句、函数、图形绘制等。
2. 测绘数据处理方法学习(1)坐标转换:学习地理坐标、平面坐标之间的转换方法。
(2)距离测量:掌握距离测量的原理和方法。
(3)角度测量:学习角度测量的原理和方法。
(4)地形分析:了解地形分析的基本原理和方法。
3. 实习项目本次实习项目为“基于MATLAB的测量数据处理与分析”。
具体内容包括:(1)数据导入:将野外实测数据导入MATLAB软件。
(2)坐标转换:将实测数据中的地理坐标转换为平面坐标。
(3)距离测量:计算各测点之间的距离。
(4)角度测量:计算各测点之间的角度。
(5)地形分析:分析地形起伏情况,绘制等高线图。
(6)结果输出:将处理后的数据和分析结果以图表形式输出。
四、实习过程1. 第一阶段:学习MATLAB软件,掌握基本操作和编程方法。
2. 第二阶段:学习测绘数据处理方法,了解坐标转换、距离测量、角度测量、地形分析等原理和方法。
3. 第三阶段:开始实习项目,完成数据导入、坐标转换、距离测量、角度测量、地形分析等工作。
4. 第四阶段:对实习项目进行总结,撰写实习报告。
五、实习成果1. 成功完成实习项目,掌握了测绘数据处理方法。
测绘课程设计实验报告一、教学目标本课程旨在通过学习,使学生掌握测绘学的基本原理和方法,能够熟练使用测绘仪器和软件,具备基本的测绘实践能力。
知识目标上,要求学生了解测绘学的基本概念、测量原理和数据处理方法;技能目标上,要求学生能够操作和使用测绘仪器,进行实地测量和数据处理;情感态度价值观目标上,培养学生对测绘工作的兴趣和责任感,认识测绘工作在国民经济和社会发展中的重要性。
二、教学内容教学内容主要包括测绘学的基本概念、测量原理、数据处理方法和测绘实践。
具体包括:测绘学的基本概念,如地图、测量、定位等;测量原理,如角度测量、距离测量、高程测量等;数据处理方法,如数据平差、坐标转换、地图绘制等;测绘实践,如实地测量、数据处理、成果输出等。
三、教学方法教学方法采用讲授法、讨论法、实验法相结合。
讲授法用于讲解测绘学的基本概念和原理;讨论法用于探讨测绘工作中的实际问题;实验法用于实地测量和数据处理实践。
通过多样化教学方法,激发学生的学习兴趣和主动性,提高学生的实践能力。
四、教学资源教学资源包括教材、实验设备、多媒体资料等。
教材选用具有权威性和实用性的专业教材,为学生提供系统的理论知识;实验设备包括测绘仪器和计算机,用于学生实地操作和实践;多媒体资料包括教学课件、视频等,用于辅助教学,丰富学生的学习体验。
五、教学评估本课程的评估方式包括平时表现、作业、考试等。
平时表现主要评估学生的课堂参与和讨论积极性;作业分为练习题和项目报告,评估学生对知识的理解和应用能力;考试为闭卷考试,评估学生的知识掌握和运用能力。
评估方式客观、公正,全面反映学生的学习成果。
六、教学安排教学安排规定了教学进度、教学时间和教学地点等。
本课程共安排32课时,每周2课时,共计16周完成。
教学时间安排合理、紧凑,确保在有限的时间内完成教学任务。
教学地点选在教室和实验室,方便学生进行实地操作和实践。
七、差异化教学根据学生的不同学习风格、兴趣和能力水平,本课程设计了差异化的教学活动和评估方式。
《测绘程序设计()》上机实验报告(Visual C++.Net)班级:学号:姓名:序号:二零一三年三月目录实验1 Visual Basic环境和程序设计初步 (1)总结 (5)实验2、控制结构程序设计(方位角计算、坐标转换、后方交会) (6)总结 (16)实验1 Visual C++.Net 环境和程序设计初步一、实验内容1. 启动与退出VC++.net ,熟悉VC++.net 的开发环境,通过向导生成基于对话框的应用程序。
使用MSDN 查看命令按钮、标签和文本框的主要属性和方法。
2. 打开Microsoft visual studio 2008 文档,浏览“Visual studio 文档”目录下的内容,并从“Visual studio 文档->Visual C++->示例”目录下下载一个程序,编译并运行之。
3. 设计一个已知三边边长计算三角形面积的程序。
计算模型如下:海伦公式:))()((c p b p a p p S ---=,其中2cb a p ++=二、设计思路1、首先,设计一个窗体,上面有三个静态框和三个文本框用于提示和输入三边a,b,c,还要有一个静态框加一个文本框用于输出面积,还要加三个命令按钮,用于计算,清除和退出;2、然后要对输入的三边进行判断是否合法(即是否可以组成三角形),用if 语句实现,不合法则清零;3、最后将海伦公式写成代码的形式即可。
三、界面设计如下:四、主要代码如下:#include<math.h>void CMy006Dlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码//判断输入是否有误并计算UpdateData(TRUE);if(a+b>c&&a+c>b&&b+c>a){double t;t=(a+b+c)/2;s=sqrt(t*(t-a)*(t-b)*(t-c));}else CMy006Dlg::OnBnClickedButton2();//输入的三边不能构成三角形时则清零UpdateData(FALSE);}void CMy006Dlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码//清除功能a=0;b=0;c=0;s=0;UpdateData(FALSE);}void CMy006Dlg::OnBnClickedButton3(){exit(0);//退出功能// TODO: 在此添加控件通知处理程序代码}五、运行结果如下:六、实验总结本次实验比较简单,主要是熟悉一下Virsual Studio 2008的MFC编程环境,了解编译MFC项目的整个流程。
测绘程序设计实习报告一、实习背景及目的随着科技的不断发展,测绘领域逐渐融入了越来越多的计算机技术,测绘程序设计成为了一项重要的工作。
本次实习旨在让我们了解测绘程序设计的基本流程,掌握测绘程序设计的方法和技巧,提高我们的实际操作能力。
二、实习内容及过程1. 实习内容本次实习主要分为以下几个部分:(1) 熟悉测绘程序设计的基本原理和流程;(2) 学习测绘程序设计的相关软件;(3) 参与实际测绘项目,进行程序设计和调试;(4) 撰写测绘程序设计实习报告。
2. 实习过程(1) 基本原理学习在实习开始阶段,我们首先学习了测绘程序设计的基本原理,包括测绘数据采集、数据处理、图形绘制等。
通过学习,我们了解了测绘程序设计的核心内容和方法。
(2) 软件学习为了更好地进行测绘程序设计,我们学习了AutoCAD、MapGIS、ArcGIS等软件。
这些软件为我们进行测绘程序设计提供了强大的支持,使我们能够更加高效地完成实习任务。
(3) 实际项目参与在掌握了基本原理和软件操作后,我们参与了实际的测绘项目。
项目中,我们负责进行数据处理、图形绘制等工作,通过实际操作,我们深入了解了测绘程序设计的具体应用。
(4) 实习报告撰写在实习结束后,我们根据实习过程中的经验和收获,撰写了测绘程序设计实习报告。
报告中,我们总结了实习过程中遇到的问题及解决方法,并对自己的实习成果进行了分析。
三、实习收获及体会通过本次实习,我们收获了以下几点:1. 掌握了测绘程序设计的基本原理和方法;2. 熟悉了测绘程序设计的相关软件,提高了实际操作能力;3. 了解了测绘程序设计在实际项目中的应用;4. 培养了团队协作能力和解决问题的能力。
同时,我们认识到测绘程序设计不仅需要理论知识,更需要实践操作。
在实习过程中,我们要善于发现问题、解决问题,不断提高自己的实际操作能力。
此外,我们还应注重学习最新的测绘技术和软件,紧跟科技发展的步伐,为我国的测绘事业做出贡献。
实验1 Visual C++.Net环境和程序设计初步1.掌握VC++.net 语言的基本语法;2.理解顺序结构、选择结构和循环结构程序设计的特点及应用;3.掌握对基于对话框的MFC 应用程序设计方法;4.掌握一些简单算法。
5.编写一个方位角计算程序。
提示:先使用反正切函数计算,然后利用坐标增量的符号来判断所在的象限。
设计思路:在按钮下面添加程序。
X Y同时大于0在第一象限,方位角等于arctan(y/x);X>0,Y<0在第二象限,方位角等于arctan(y/x)+90;X<0,Y<0在第三象限,方位角等于arctan(y/x)+180;X<0,Y>0在第四象限,方位角等于arctan(y/x)+270;界面设计:主要代码:// 0145110615 ymh 2.1Dlg.h : 头文件protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:double x;double y;double Q;afx_msg void OnBnClickedOk();afx_msg void OnBnClickedCancel();afx_msg void OnBnClickedButton1();double A;};// 0145110615 ymh 2.1Dlg.cpp : 实现文件#include"stdafx.h"#include"0145110615 ymh 2.1.h"#include"0145110615 ymh 2.1Dlg.h"#include<math.h>#ifdef _DEBUG#define new DEBUG_NEW#endifvoid CMy0145110615ymh21Dlg::OnBnClickedOk()//计算{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);if(x>0){if(y>0){Q=1;A=atan(y/x);}//x大于y大于在第一象限else{Q=4;A=atan(y/x)+270;}//x大于y小于在第四象限}else if(y>0){Q=2;A=atan(y/x)+90;}//x大于y小于在第二象限else{Q=3;A=atan(y/x)+180;}//x小于y小于在第三象限UpdateData(FALSE);//OnOK();}void CMy0145110615ymh21Dlg::OnBnClickedCancel()//清除{// TODO: 在此添加控件通知处理程序代码UpdateData(true);x=0;y=0;Q=0;A=0;UpdateData(false);}void CMy0145110615ymh21Dlg::OnBnClickedButton1()//退出{// TODO: 在此添加控件通知处理程序代码OnCancel();}运行结果:总结第一次做这个实验的时候真的觉得挺难得可是当我经过更难的实验的洗礼之后在返回来看它真是顿时亲切了许多,其实当时是对这个软件不了解简单的东西把它想得很复杂绕来绕去都不知道该怎么实现一些很简单的东西了。
一、实习目的本次测绘工程实习实验旨在通过实际操作,巩固和加深课堂所学理论知识,掌握测绘工程中常用的仪器设备操作方法,提高测量数据的准确性,培养实际工作能力和团队协作精神。
二、实习时间与地点实习时间:2023年X月X日至2023年X月X日实习地点:XX测绘工程实训基地三、实习内容1. 水准测量- 使用S3水准仪进行水准测量,掌握水准测量的基本原理和操作步骤。
- 通过水准测量,了解高程控制网的建立和测量方法。
2. 经纬仪测量- 使用J6经纬仪进行角度测量,掌握角度测量的基本原理和操作步骤。
- 通过经纬仪测量,了解平面控制网的建立和测量方法。
3. 全站仪测量- 使用徕卡307、徕卡407、尼康全站仪进行全站仪测量,掌握全站仪的基本原理和操作步骤。
- 通过全站仪测量,了解地形测量和工程测量的基本方法。
4. 地形图绘制- 学习地形图的绘制方法,包括草图绘制和计算机绘图。
- 通过绘制地形图,提高绘图能力和对地形地貌的认识。
四、实习过程1. 水准测量- 在实习基地,按照水准测量的要求,进行水准点的布设和水准测量。
- 在测量过程中,注意仪器的稳定性、读数的准确性以及水准尺的垂直度。
2. 经纬仪测量- 在实习基地,按照经纬仪测量的要求,进行角度测量。
- 在测量过程中,注意仪器的水平度、读数的准确性以及照准目标的清晰度。
3. 全站仪测量- 在实习基地,按照全站仪测量的要求,进行全站仪测量。
- 在测量过程中,注意仪器的稳定性、读数的准确性以及目标照准的准确性。
4. 地形图绘制- 在实习基地,根据实际测量数据,进行地形图的绘制。
- 在绘图过程中,注意地形图的准确性、清晰度和美观性。
五、实习成果1. 水准测量- 成功完成水准点的布设和水准测量,测量结果准确可靠。
2. 经纬仪测量- 成功完成角度测量,测量结果准确可靠。
3. 全站仪测量- 成功完成全站仪测量,测量结果准确可靠。
4. 地形图绘制- 成功绘制地形图,地形图准确、清晰、美观。
第1篇一、实验目的1. 熟悉测绘工程的基本原理和方法。
2. 掌握水准测量、全站仪测量等基本测量技术的操作流程。
3. 培养实验操作能力和数据处理能力。
4. 提高对测绘工程实际应用的认识。
二、实验原理测绘工程是一门综合性学科,涉及测量学、地图学、地理信息系统等多个领域。
本实验主要涉及水准测量和全站仪测量两种技术。
1. 水准测量:利用水准仪和水准尺,根据重力作用下的水平面原理,测量两点间的高差,从而确定地面的高程。
2. 全站仪测量:利用全站仪,通过光电测距和角度测量,实现对目标点的三维坐标的测量。
三、实验仪器与设备1. 水准仪:用于水准测量,测量两点间的高差。
2. 水准尺:用于水准测量,读取水准仪的读数。
3. 全站仪:用于全站仪测量,测量目标点的三维坐标。
4. 反光棱镜:用于全站仪测量,反射全站仪发出的光束。
5. 计算器:用于数据处理。
四、实验步骤1. 水准测量(1)将水准仪放置在测站上,调整仪器至水平。
(2)将水准尺置于前视点,读取水准尺的读数。
(3)将水准尺移至后视点,读取水准尺的读数。
(4)计算前后视点的高差。
2. 全站仪测量(1)将全站仪对准目标点,调整仪器至水平。
(2)打开全站仪,设置测量模式。
(3)测量目标点的水平角度和垂直角度。
(4)利用全站仪的光电测距功能,测量目标点到全站仪的距离。
(5)根据测量数据,计算目标点的三维坐标。
五、实验数据1. 水准测量数据测站:A前视点:B后视点:C前视点读数:1.234后视点读数:1.567高差:0.3332. 全站仪测量数据目标点:D水平角度:23.45°垂直角度:45.67°距离:123.45m三维坐标:X=100.00m,Y=200.00m,Z=300.00m六、数据处理与分析1. 水准测量数据处理根据水准测量数据,计算A、B两点间的高差为0.333m。
2. 全站仪测量数据处理根据全站仪测量数据,计算目标点D的三维坐标为X=100.00m,Y=200.00m,Z=300.00m。
《测绘程序设计()》上机实验报告(Visual C++.Net)班级:学号:姓名:序号:二零一一年五月实验8 平差程序设计基础1.实验目的:1.1 巩固过程的定义与调用;1.2 巩固类的创建于使用;1.3 巩固间接平差模型与平差计算;1.4 掌握平差程序设计的基本技巧与步骤。
2.实验内容:水准网平差程序设计。
设计一个水准网平差的程序,要求数据从文件中读取。
计算部分也界面无关。
3.设计思路:在本次的实验中,我着重想表现的是一种面向对象的编程思想。
于是,在程序中我设计了4个类:CPoint、CObserve、CMatrix、Leveling,分别定义点的属性、观测数据属性、矩阵和水准网平差计算的属性与方法。
水准网平差计算一般步骤为:(1)读取观测数据和已知数据;(2)计算未知点高程近似值;(3)列高差观测值误差方程;(4)根据水准路线长度计算高差观测值的权;(5)组成法方程;(6)解法方程,求得未知点高程改正数及平差后高程值;(7)求高差观测值残差及平差后高差观测值;(8)精度评定;(9)输出平差结果。
水准网高程近似值计算算法4.界面设计:仅添加了一个button按钮,单击后读取数据,并进行水准网平差计算,计算结果保存在记事本中5.主要代码:文件一: CPoint.h代码:class ControlPoint{public:ControlPoint(void){};~ControlPoint(void){};public:CString pointID; //点号double H; //高程};class CObserve{public:CObserve(void){};~CObserve(void){};public:ControlPoint *pStartObs; //后视点ControlPoint *pEndObs; //前视点double h; //路线长度double dDist; //高差};文件二:Leveling.h代码:#pragma once#include"CPoint.h"#include"Matrix.h"class Leveling{public:Leveling(void);~Leveling(void);private:ControlPoint *m_pKnownPoint; //已知点数组int m_iKnownPointCount; //已知点个数ControlPoint *m_pUnknownPoint; //待测点数组int m_iUnknownPointCount; //待测点个数CObserve *m_pObsData; //观测数据数组int m_iObsDataCount; //观测数据个数public:bool LoadData(const CString &FileName); //从文件中导入数据void OutMatrixToFile(const CMatrix& mat,CStdioFile& SF); //把矩阵输出到文件中void SetKownPointSize(int n); //设置已知点数据大小void SetUnknownPointSize(int n);void SetObsDataSize(int n);CString* SplitString(CString str , char split, int iSubStrs); //分割字符串public://根据点号从已知点数组中找到控制点,并返回该点的指针ControlPoint* SearchKnownPointUsingID(CString pointID);//根据点号从未知点数组中找到控制点,并返回该点的指针ControlPoint* SearchUnknownPointUsingID(CString pointID);//根据点号从未知点和已知点数组中找到控制点,并返回该点的指针ControlPoint* SearchPointUsingID(CString pointID);void ComputeApproximateH(void); //求待测点高差近似值public://组成误差方程,B 为系数矩阵,f为常数项向量void FormErrorEquations(CMatrix& B, CMatrix& f);void Weight(CMatrix& P); //求高差观测值的权阵void IndirectlyAdjust(const CString& strFileName);//间接平差计算主函数};文件三:Leveling.cpp代码:#include"StdAfx.h"#include"Leveling.h"#include"math.h"#include<locale.h>Leveling::Leveling(void){m_pKnownPoint=NULL;m_iKnownPointCount=0;m_pUnknownPoint=NULL;m_iUnknownPointCount=0;m_pObsData=NULL;m_iObsDataCount=0;}Leveling::~Leveling(void){//释放动态数组内存if(m_pUnknownPoint!=NULL){delete[] m_pUnknownPoint;m_pUnknownPoint=NULL;}if(m_pKnownPoint!=NULL){delete[] m_pKnownPoint;m_pKnownPoint=NULL;}if(m_pObsData!=NULL){delete[] m_pObsData;m_pObsData=NULL;}}bool Leveling::LoadData(const CString &FileName){CStdioFile sf; //创建文件对象//以读的形式打开文件,如果打开失败则返回if(!sf.Open(FileName, CFile::modeRead)) return false;CString strLine;BOOL bEOF=sf.ReadString(strLine);//读取第一行,已知点数m_iKnownPointCount= _ttoi((strLine)); //把读取的第一行字符串转换为数值型SetKownPointSize(m_iKnownPointCount);//设置已知点数组大小int n=0;//读取并保存已知点数据for(int i=0;i<m_iKnownPointCount;i++){sf.ReadString(strLine);CString *pstrData=SplitString(strLine,',',n);m_pKnownPoint[i].pointID=pstrData[0];m_pKnownPoint[i].H=_tstof(pstrData[1]);delete[] pstrData;pstrData=NULL;}//开始读取未知知点数据sf.ReadString(strLine);//未知点个数m_iUnknownPointCount= _ttoi((strLine));SetUnknownPointSize(m_iUnknownPointCount); //设置未知点数组大小sf.ReadString(strLine);//未知点点号//读取并保存未知点数据CString *pstrData=SplitString(strLine,',',n);for(int i=0;i<m_iUnknownPointCount;i++){m_pUnknownPoint[i].pointID=pstrData[i];m_pUnknownPoint[i].H=0;}delete[] pstrData;pstrData=NULL;//开始读取观测数据个数sf.ReadString(strLine);//观测数个数m_iObsDataCount= _ttoi((strLine));SetObsDataSize(m_iObsDataCount);//读取并保存观测数据for(int i=0;i<m_iObsDataCount;i++){sf.ReadString(strLine);CString *pstrData=SplitString(strLine,',',n);m_pObsData[i].pStartObs=SearchPointUsingID(pstrData[0]);m_pObsData[i].pEndObs=SearchPointUsingID(pstrData[1]);m_pObsData[i].h=_tstof(pstrData[2]);m_pObsData[i].dDist=_tstof(pstrData[3]);delete[] pstrData;pstrData=NULL;}sf.Close();return true;}void Leveling::SetKownPointSize(int n){m_iKnownPointCount=n;m_pKnownPoint=new ControlPoint[n];}void Leveling::SetUnknownPointSize(int n){m_iUnknownPointCount=n;m_pUnknownPoint=new ControlPoint[n];}void Leveling::SetObsDataSize(int n){m_iObsDataCount=n;m_pObsData=new CObserve[n];}//字符串分割函数CString* Leveling::SplitString(CString str , char split, int iSubStrs) {int iPos = 0; //分割符位置int iNums = 0; //分割符的总数CString strTemp = str;CString strRight;//先计算子字符串的数量while (iPos != -1){iPos = strTemp.Find(split);if (iPos == -1){break;}strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;}if (iNums == 0) //没有找到分割符{//子字符串数就是字符串本身iSubStrs = 1;return NULL;}//子字符串数组iSubStrs = iNums + 1; //子串的数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++){iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength()); strTemp = strRight;pStrSplit[i] = strLeft;}pStrSplit[iNums] = strTemp;return pStrSplit;}//根据点号从已知点数组中找到控制点,并返回该点的指针ControlPoint* Leveling::SearchKnownPointUsingID(CString pointID) {for(int i=0;i<m_iKnownPointCount;i++){if(pointID==m_pKnownPoint[i].pointID){return &m_pKnownPoint[i];}}return NULL;}//根据点号从未知点数组中找到控制点,并返回该点的指针ControlPoint* Leveling::SearchUnknownPointUsingID(CString pointID) {for(int i=0;i<m_iUnknownPointCount;i++){if(pointID==m_pUnknownPoint[i].pointID){return &m_pUnknownPoint[i];}}return NULL;}//根据点号从未知点和已知点数组中找到控制点,并返回该点的指针ControlPoint* Leveling::SearchPointUsingID(CString pointID){ControlPoint* pCP=NULL;pCP=SearchKnownPointUsingID(pointID);if(pCP==NULL){pCP=SearchUnknownPointUsingID(pointID);}return pCP;}void Leveling::ComputeApproximateH(void) //求待测点近似高程{for(int i=0;i<m_iUnknownPointCount;i++){if(m_pUnknownPoint[i].H!=0)continue;for(int j=0;j<m_iObsDataCount;j++){if(m_pUnknownPoint[i].pointID==m_pObsData[j].pStartObs->pointID&&m_pObsData[j].pEndObs->H>0)m_pUnknownPoint[i].H=m_pObsData[j].pEndObs->H-m_pObsData[j].h;elseif(m_pUnknownPoint[i].pointID==m_pObsData[j].pEndObs->pointID&&m_pObsData[j].pStartObs->H>0)m_pUnknownPoint[i].H=m_pObsData[j].pStartObs->H+m_pObsData[j].h;}}}void Leveling::FormErrorEquations(CMatrix& B, CMatrix& f){B.SetSize(m_iObsDataCount, m_iUnknownPointCount);f.SetSize(m_iObsDataCount, 1);//计算系数阵for(int i=0;i<m_iObsDataCount;i++)for(int j=0;j<m_iUnknownPointCount;j++){if(m_pObsData[i].pStartObs->pointID==m_pUnknownPoint[j].pointID) B(i,j)=-1;if(m_pObsData[i].pEndObs->pointID==m_pUnknownPoint[j].pointID)B(i,j)=1;}//计算常数阵for(int i=0;i<m_iObsDataCount;i++)f(i,0)=m_pObsData[i].h-(m_pObsData[i].pEndObs->H-m_pObsData[i].pStartObs->H);}void Leveling::Weight(CMatrix& P) //计算权阵{P.SetSize(m_iObsDataCount,m_iObsDataCount);for(int i=0;i<m_iObsDataCount;i++)for(int j=0;j<m_iObsDataCount;j++){if(i==j)P(i,j)=1.0/m_pObsData[i].dDist;}}void Leveling::IndirectlyAdjust(const CString& strFileName){//使用最小二乘法计算平差值//NBB=BT*P*BCMatrix B; //系数矩阵CMatrix BT; //B的转置矩阵CMatrix NBB; //NBBCMatrix invNbb; //NBB逆阵CMatrix W; //W=BT*P*fCMatrix f; //常数项矩阵CMatrix P; //权阵CMatrix x; //近似值改正项矩阵CMatrix V; //改正项矩阵CMatrix Omiga; //方差CMatrix X; //平差值ComputeApproximateH();FormErrorEquations(B,f); //系数阵Weight(P); //权阵BT=~B; //B的转置矩阵NBB=BT*P*B;invNbb=NBB.Inv();; //NBB逆阵W=BT*P*f;x=invNbb*W;X.SetSize(m_iUnknownPointCount,1);for(int i=0;i<m_iUnknownPointCount;i++){X(i,0)=m_pUnknownPoint[i].H+x(i,0);}//精度评定V=B*x-f;//开始输出间接平差的结果CStdioFile SF;CString strLine;setlocale(LC_ALL,"");if(!SF.Open(strFileName, CFile::modeCreate|CFile::modeWrite)) return;//开始写数据SF.WriteString(_T("----------水准网间接平差结果----------\n"));//写已知点数据strLine.Format(_T("已知点个数:%d\n"),m_iKnownPointCount);SF.WriteString(strLine);for(int i=0;i<m_iKnownPointCount;i++){strLine.Format(_T("%s,%4f\n"),m_pKnownPoint[i].pointID,m_pKnownPoint[i].H);SF.WriteString(strLine);}//待测点平差值strLine.Format(_T("待测点个数:%d\n"),m_iUnknownPointCount);SF.WriteString(strLine);strLine.Format(_T("平差结果:\n"));SF.WriteString(strLine);for(int i=0;i<m_iUnknownPointCount;i++){strLine.Format(_T("%s,%4f\n"),m_pUnknownPoint[i].pointID,X(i,0));SF.WriteString(strLine);}//输出系数阵和常数项SF.WriteString(_T("B矩阵:\r\n"));OutMatrixToFile(B,SF);//输出权矩阵SF.WriteString(_T("\r\nP矩阵(对角阵):\r\n"));OutMatrixToFile(P,SF);SF.WriteString(_T("高差改正数x(mm):\r\n"));OutMatrixToFile(x,SF);SF.WriteString(_T("NBB矩阵:\r\n"));OutMatrixToFile(NBB,SF);SF.WriteString(_T("NBB矩阵的逆矩阵:\r\n"));OutMatrixToFile(invNbb,SF);SF.WriteString(_T("W矩阵:\r\n"));OutMatrixToFile(W,SF);//输出观测值残差SF.WriteString(_T("观测值残差(mm):\r\n"));OutMatrixToFile(V,SF);//计算单位权中误差,并输出Omiga=~V*P*V;double Sigma;Sigma = sqrt(Omiga(0, 0) / (m_iObsDataCount - m_iUnknownPointCount));strLine.Format(_T("单位权中误差(mm):%.4f\r\n"),Sigma);SF.WriteString(strLine);double Qx;SF.WriteString(_T("点位误差(mm):\r\n"));for(int i=0;i<invNbb.Row();i++){Qx=sqrt(invNbb(i,i))*Sigma;strLine.Format(_T("%.4f "),Qx);SF.WriteString(strLine);}SF.WriteString(_T("\r\n"));SF.Close();}//把矩阵输出到文件中void Leveling::OutMatrixToFile(const CMatrix& mat,CStdioFile& SF){CString strLine,strTmp;for(int i=0;i<mat.Row();i++){strLine.Empty();for(int j=0;j<mat.Col();j++){strTmp.Format(_T("%.4f "),mat(i,j));strLine=strLine+strTmp;}SF.WriteString(strLine+_T("\r\n"));}}文件四:Matrix.h代码:#pragma onceclass CMatrix{public:CMatrix(int row=3,int col=3);// copy constructorCMatrix (const CMatrix& m);~CMatrix(void);private:double **dMatData;//保存矩阵元素数据的二维数组int iRow;//矩阵的行int iCol;//矩阵的列public:int Row() const {return iRow;}//返回行int Col() const {return iCol;}//返回列void SetSize (int row, int col);//调整数组的大小,原有数据不变(未测试)double& operator () (int row, int col);//获取矩阵元素double operator() (int row, int col) const;//重载获取矩阵元素函数,只有const 对象能访问CMatrix& operator = (const CMatrix& m) ;//注意:友元函数并不是类自己的成员函数friend CMatrix operator + (const CMatrix& m1,const CMatrix& m2);friend CMatrix operator - (const CMatrix& m1,const CMatrix& m2);friend CMatrix operator * (const CMatrix& m1,const CMatrix& m2);friend CMatrix operator * (const double& num, const CMatrix& m1);friend CMatrix operator * (const CMatrix& m1,const double& num);friend CMatrix operator ~ (const CMatrix& m);//矩阵转置CMatrix Inv();//矩阵求逆void Unit();//生成单位矩阵};文件五:LevelingAdjustDlg.cpp代码:void CLevelingAdjustDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码CFileDialog dlgFile(TRUE,_T("txt"),NULL,OFN_EXPLORER,_T("(文本文件)|*.txt")); //创建打开文件对话框if(dlgFile.DoModal()==IDCANCEL) return;//如果选择取消按钮,则退出CString strFileName=dlgFile.GetPathName();//获取选择的文件的名称Leveling ST;ST.LoadData(strFileName);ST.IndirectlyAdjust(_T("IndirectlyAdjustResult.txt"));MessageBox(_T("计算完毕!\r\n结果保存在Result.txt文件中!"));ShellExecute(this->m_hWnd,_T("open"),_T("notepad.exe"),_T("IndirectlyAdjustResult.txt"),_T(""),SW_SHOW );}6.运行结果:实验的运行结果如下图所示:8.实验总结这次的实验让我对于面对对象的编程思想有了进一步的理解。
《测绘程序设计()》上机实验报告(Visual C++。
Net)班级:测绘1101学号: 0405100731姓名:龚自飞序号:二零一四年六月目录实验1 Visual C++。
Net环境和程序设计初步 (1)实验内容: (1)设计思路: (1)界面设计: (1)主要代码:列出程序的代码,按文件依次列出。
注意代码的书写格式和注释 (2)运行结果: (3)总结 (5)实验1 Visual C++。
Net 环境和程序设计初步实验内容:1. 启动与退出VC++.net ,熟悉VC++。
net 的开发环境,通过向导生成基于对话框的应用程序。
使用MSDN 查看命令按钮、标签和文本框的主要属性和方法。
2. 打开Microsoft visual studio 2008 文档,浏览“Visual studio 文档”目录下的内容,并从“Visual studio 文档->Visual C++—〉示例”目录下下载一个程序,编译并运行之。
3. 设计一个已知三边边长计算三角形面积的程序.计算模型如下: 海伦公式:))()((c p b p a p p S ---=,其中2c b a p ++= 设计思路:(1)、创建名为“gzf1"的 MFC 应用程序;(2)、在窗体上放置4 个文本框、4 个静态框、3 个命令按钮(其中两个缺省);(3)、设置控件属性,如Static1 的Caption 属性设置成“a=”,用于提示Edit框的输入边长a;(4)、把“取消”按钮的Caption 属性改为“退出”;双击前两个按钮,生成Click 消息函数,注释掉重载函数“OnOK ()”。
(5)、为4 个Edit 控件添加绑定变量。
(6)、在相应的函数中添加代码;(7)、运行和调试程序;(8)、保存应用程序。
界面设计:主要代码:gzf1void Cproject01Dlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);double p;p=(a+b+c)/2;S=sqrt(p*(p—a)*(p-b)*(p-c));UpdateData(FALSE);//OnOK();}void Cproject01Dlg::OnBnClickedOk2() {// TODO: 在此添加控件通知处理程序代码a=0;b=0;c=0;S=0;UpdateData(FALSE);}void Cproject01Dlg::OnBnClickedCancel() {// TODO:在此添加控件通知处理程序代码OnCancel();}运行结果:总结总结的书写要求:这是我这学期编写的第一个MFC程序,在这次课前,我们在大一课程设计的时候有接触到相关的MFC编程,不过时隔两年,也陌生了不少。
测绘程序设计实验报告python 实验目的:学习如何使用Python语言编程实现测绘程序设计。
实验内容:1.设计测量平面图的程序2.实现坐标转换功能3.计算计算两点之间的距离实验步骤:1. 使用Pycharm等Python开发工具新建一个python文件2. 导入所需的模块:numpy、math3. 定义函数,实现程序的功能代码如下:1. 设计测量平面图的程序def map_design():print("请输入地图缩放比例:")scale = float(input())print("请输入地图的长度和宽度(m):")length = float(input())width = float(input())area = length * width * scale * scaleprint("地图的面积是:", area, "平方米")2. 实现坐标转换功能def coords_convert():print("请输入原坐标系的坐标(x, y):")x1 = float(input())y1 = float(input())print("请输入目标坐标系的坐标系数(a, b):")a = float(input())b = float(input())x2 = a * x1y2 = b * y1print("转换后的坐标(x, y)为:", x2, y2)3. 计算计算两点之间的距离def distance_calc():print("请输入起始点和结束点的坐标(x1, y1, x2, y2):")x1 = float(input())y1 = float(input())x2 = float(input())y2 = float(input())distance = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)print("两点之间的距离为:", distance, "米")4. 主函数,用于调用其他函数def main():print("***欢迎使用测绘程序设计***")print("请选择要进行的操作:")print("1. 设计测量平面图的程序")print("2. 实现坐标转换功能")print("3. 计算两点之间的距离")choice = int(input())if choice == 1:map_design()elif choice == 2:coords_convert()elif choice == 3:distance_calc()else:print("输入错误,请重新输入")if __name__ == '__main__':main()实验总结:通过这个Python编程实验,我学到了如何使用Python语言编程实现测绘程序设计。
实验1 Visual C++.Net环境和程序设计初步1.掌握 VC++ 语言的基本语法;2.理解顺序结构、选择结构和循环结构程序设计的特点及应用;3.掌握对基于对话框的 MFC 应用程序设计方法;4.掌握一些简单算法。
5.编写一个方位角计算程序。
提示:先使用反正切函数计算,然后利用坐标增量的符号来判断所在的象限。
设计思路:在按钮下面添加程序。
X Y同时大于0在第一象限,方位角等于arctan(y/x);X>0,Y<0在第二象限,方位角等于arctan(y/x)+90;X<0,Y<0在第三象限,方位角等于arctan(y/x)+180;X<0,Y>0在第四象限,方位角等于arctan(y/x)+270;界面设计:主要代码:计同一参考椭球下的三维地心坐标(笛卡儿坐标系)与大地坐标系转换的程序。
(提示:用 do…while 迭代,B、H 初始为 0 进行迭代,直到 H 的精度达到米)注意:东经 0~180(Y>0),西经:0~-180(Y<0)式中,B、L、H 为椭球面上的大地纬度、大地经度、大地高;X、Y、Z 为空间直角坐标;N 为卯酉圈曲率半径,e 为椭球的偏心率,a 为椭球的长半径,b 为椭球的短半径。
(WGS84 椭球参数:长半径 a=6378137m,扁率α=1/)设计思路:在按钮下面设置主程序,按照指导书给的思路编辑公式界面设计:主要代码:写一个后方交会计算程序。
基本原理及计算公式若将 Pa、Pb、Pc 看成权,则 P 点的坐标即为三个已知点的加权平均值计算程序设计步骤(1)设计界面,用于输入 3 个已知点的坐标和三个观测角、和,以及用于输出待定点坐标的文本框(12 个)、静态标签框和 Button 按钮;(2)定义文本框控件变量(Value);(3)根据已知点计算三个内角 A、B、C;(4)计算 Tan(α)、Tan(β)、Tan(γ)、Tan(A)、Tan(B)、Tan(C);(5)计算 Pa、Pb、Pc;(6)计算待定点坐标 Xp、Yp。
界面要求:三个坐标输入框,两个角度输入框一个坐标结果输出框一个计算按钮,一个清除按钮,一个退出按钮。
2.由三角形三个边长求内角函数计算公式:设计思路:通过示例编辑框添加变量,在按钮下面添加程序。
先将α、β、的度分秒之转换成度利用三角形内角和等于180算出γ并将γ转换成弧度。
接着计算三角形的内角,判断P点是否在危险圆上若不在则计算P点坐标若在则弹出“该点在危险圆上”。
界面设计:主要代码:protected:HICON m_hIcon;写一个求任意多边形面积的程序。
提示:通过界面输入数据,并把数据保存在一个二维数组或一个一维的自定义结构体类型的数组中,然后再进行计算。
要求计算部分写成函数的形式,使计算程序与界面无关。
动态数组创建动态数组结构体的定义多边形面积计算原理及算法计算原理:面积计算的算法:提示:显示框用 Cedit 控件变量对每个输入的坐标用 CString str 临时变量格式化,然后用 CEdit 的控件变量插入设计思路:将实现写在按钮在下面。
添加顶点下面实现创建动态数组,确认按钮实现返回数组大小值并将添加的数据显示到显示框中去,通过计算按钮实现多边形面积的计算,清除按钮实现清除输入的数据,退出按钮退出程序。
界面设计:主要代码:"#include"05(3)"#ifdef _DEBUG#define new DEBUG_NEW#endifd % lf %lf \r\n"),t,x,y);(str);px[t-1]=x;py[t-1]=y;UpdateData(FALSE);}void CMy073Dlg::OnBnClickedButton5(){掌握面向对象编程基本思想2. 掌握 VC++ 中创建类3. 掌握建立和使用对象4. 掌握运算符号重载5. 理解类的继承和多态性二、实验内容1.设计一个角度类。
要求该类具有度分秒至度的换算、度至度分秒的换算、度与弧度的换算等功能。
提示:设置一个角度大小属性,并设定该属性为缺省属性;另设一个状态属性,表示当前设置的角度大小的形式;度分秒、度、弧度间的相互转换的方法;定义运算符号(加、减)方法,使得角度类能够像一种普通的数据类型样的方便使用。
设计思路:设计一个角度类在类的头文件里申明度到度分秒的转换、度分秒到度的转换、度到弧度的转换、运算符的重载,在类的.cpp文件中写出具体的函数实现,在按钮下面调用类的各个函数来实现角度的转换。
界面设计:主要代码:DECLARE_MESSAGE_MAP()public:double dmstodgree(double dmg);编制简单的 Cass 数据文件进行数据整理的程序。
整理后的数据文件中要求无重复点数据,且数据按点号大小的升序进行排序。
要求整理后的数据按与原始数据文件同样的格式保存为另外一个文件示例数据“民用园燃气.dat”文件数据格式:总点数点号,编码,X,Y,H…例如:要求:a.用SaveFileDialog和OpenFileDialog控件获取文件打开或保存的文件名。
b.自定义一个测量点数据结构体,其元素包括:点号,编码,X,Y,Hc.用文本框显示原始数据和整理后的数据d..按编程规范进行编码a. 读数据、保存数据、判断一个点数据是否已经存在、排序、在文本框中显示文件内容等可以分别定义成一个子过程或函数。
c.编程技巧打开文件获得总点数根据点数调整数组的大逐行读取数据,判断该点是否已经存在数组中,若不存在,则把该数据存放在数组中根据删除重复点后的总点数,重新调整数组大小按点号大小的升序排序按原数据格式输出到另外一个文件设计思路:在按钮下面设置主程序。
通过打开文件按钮将原文件打开并显示到示例编辑框内,通过保存文件按钮实现对文件分行、删除重复点、排序、保存更改后的文件并把它显示到示例编辑框中等操作。
界面设计:主要代码:xt"));at"));umber=_ttoi(strTmp[0]);oder=strTmp[1];pPoint[i].X=_tstof(strTmp[2]);pPoint[i].Y=_tstof(strTmp[3]);pPoint[i].H=_tstof(strTmp[4]);}if(strTmp!=NULL)umber=pPoint[j].number)delete [] pPoint;umber>pPoint[j].number){t=pPoint[i].number;pPoint[j].number=t;pPoint[i].number=pPoint[j].number;}}}umber,pPoint[i].coder,pPoint[i].X,pPoint[i].Y,pPoint[i].H);}xiugai=xiugai+strOutPut;列数据为一变形监测点的 24 期位移监测结果(分别为X,Y,H),编制程序绘制出该点的变形曲线图,每个方向一个位移序列图。
设计思路:用类DeformationCurve实现原始文件的读入、文件的拆分、画图等功能,调用类的相关函数来实现相应的功能。
界面设计:因为是基于当文本的所以没有界面主要代码:class DeformationCurve : public CWnd{DECLARE_DYNAMIC(DeformationCurve)public:DeformationCurve();virtual ~DeformationCurve();protected:DECLARE_MESSAGE_MAP()public:CString *DeformationCurve::Splitstring(CString str,char split,int &isubstr);void DeformationCurve::ReadData(double *&X,double *&Y,double *&H);void DeformationCurve::Draw(CDC* pDC,CRect& rect);};xt"));f"), pDC->TextOutW(dOrgX-60,dEndY+i*dy,str);}for(int i=0;i<=3;i++){(_T("%.3f"), pDC->TextOutW(dOrgX-120,dEndY+i*dy,str);}for(int i=0;i<=3;i++){(_T("%.3f"), pDC->TextOutW(dOrgX=180,dEndY+i*dy,str);}();=dOrgX+i*dx;ptX[i].y=dOrgY-int((X[i]/*3*dy);}pDC->Polyline(ptX,24);=dOrgX+i*dx;ptY[i].y=dOrgY-int((Y[i]+/*3*dy);}pDC->Polyline(ptY,24);=dOrgX+i*dx;ptH[i].y=dOrgY-int((H[i]*3*dy));}pDC->Polyline(ptH,24);trName=pstrData[0];m_pKnownPoint[i].strID=pstrData[0];m_pKnownPoint[i].H=_tstof(pstrData[1]);m_pKnownPoint[i].flag=1;trName=pstrData[i];m_pUnknownPoint[i].strID=pstrData[i];m_pUnknownPoint[i].H=0;lag=0;pBackObj=SearchPointUsingID(pstrData[0]);pF rontObj=SearchPointUsingID(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_t stof(pstrData[3]);trID==ID){return &m_pKnownPoint[i];}}return NULL;}trID==ID){return &m_pUnknownPoint[i];}}return NULL;}LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID){LevelControlPoint* cp;cp=SearchKnownPointUsingID(ID);if(cp==NULL)cp=SearchUnknownPointUsingID(ID);return cp;}void AdjustLevel::ApproHeignt(void)lag!=1){pFrontObj->strID==m_pUnknownPoint[i].strID)&& m_pDhObs[j].cpBackObj->flag==1 ){ =m_pDhObs[i].cpBackObj->H - m_pDhObs[i].ObsValue;*/m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H +m_pDhObs[j].HObsValue;m_pUnknownPoint[i].flag=1;break;}}if(m_pUnknownPoint[i].flag!=1)pBackObj->strID==m_pUnknownPoint[i].strID) && m_pDhObs[j].cpFrontObj->flag==1 ){ =m_pDhObs[j].cpFrontObj->H-m_pDhObs[j].HObsValue;/*m_pUnknownPoint[i].H=m_pDhObs[i].cpFrontObj->H+m_pDhObs[i].ObsValue;*/m_pUnknownPoint[i].flag=1;break;}}}}if(i==m_iUnknownPointCount-1)lag!=1)ist);p(i,i)=value;}return p;}void AdjustLevel::FormErrorEquation(CMatrix &B, CMatrix &L){(m_iDhObsCount,m_iUnknownPointCount);(m_iDhObsCount,1);for(int i=0;i<m_iDhObsCount;i++)pBackObj->strID);tmpFront=SearchPointUsingID(m_pDhObs[i].cpFrontObj->strID);trID==tmpBack->strID)trID==tmpFront->strID)bsValue-(m_pDhObs[i].cpBackOb j->H-m_pDhObs[i].cpFrontObj->H);*/L(i,0)=m_pDhObs[i].HObsValue-(m_pDhObs[i].cpFrontObj->H -m_pDhObs[i].cpBackObj->H);(_T("%.3f"),L(i,0));L(i,0)=_tstof(tmp);L(i,0)=L(i,0)*1000;+=x(i,0);xt"));xt"));if()==IDCANCEL) return;CString strFileName=();setlocale(LC_ALL,"");CStdioFile sf;if(!(strFileName, CFile::modeCreate|CFile::modeWrite)) return;(LevleContent);();UpdateData(FALSE);}void CIndircLelveDlg::OnBnClickedComputelevel(){f\r\n"), [i].strID,[i].H);LevleContent+=Temp;}(_T("单位权中误差:%.1f mm\r\n"),r0*1000);LevleContent+=Temp;LevleContent+=_T("未知点高程中误差(mm):\r\n");for(int i=0;i< ;i++){();(_T("%s,%.1f\r\n"),[i].strName,Qx[i]*1000);LevleContent+=Temp;}UpdateData(false);}void CIndircLelveDlg::OnBnClickedSavelevleresult(){xt"));if()==IDCANCEL) return;CString strFileName=();setlocale(LC_ALL,"");CStdioFile sf;if(!(strFileName, CFile::modeCreate|CFile::modeWrite)) return;(LevleContent);();UpdateData(FALSE);}二、实验结果打开文件数据:平差结果:四、实验心得这从实验是我们测绘程序设计的最后一次实验,虽然这个学期我们做了好几次相关的实验,但是我却发现自己学的东西也越来越模糊,感觉很多内容都不理解。