测绘程序课程设计报告.docx_第1页
测绘程序课程设计报告.docx_第2页
测绘程序课程设计报告.docx_第3页
测绘程序课程设计报告.docx_第4页
测绘程序课程设计报告.docx_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

测绘程序课程设计(VC.net)班 级: xxxxxxx 学 号: xxxxxxx 姓 名: xxxx 题目:xxxxxx 二零一六年七月测绘程序课程设计报告第一部分导线网平差系统设计一、需求分析导线网平差程序功能要求:1.优化设计:根据控制网的观测精度与网形,全面评定网的精度2.数据输入:表格化输入、图形化输入、外部数据倒入3.概算:自动完成各方向的曲率改正及边长的高程归化与投影改化,近似坐标的推算等。4.平差计算:对观测数据进行精密平差计算,得到平差后的点位坐标,方向观测值,边长观测值等,精度评定。5.成果输出:控制网图形输出,平差结果报表及其输出,绘制误差椭圆,打印输出等。6.其它功能:粗差探测与剔除、方差分量估计、闭合差计算、坐标转换、换带计算等。二、总体设计设计七个类:Ccontrolpoint(控制点类):定义控制点坐标信息(测站编号,XY坐标)CDistObs(距离观测值类):距离观测值,测站编号,照准编号CAngleObs(角度观测类):角度观测值,测站编号,照准编号CAngle(角度类):实现角度转换和加减功能CControlNetAdjust.h(导线网平差类)1, loadobsdata函数读取数据获取数值2, 方向观测值误差方程的建立3, 边长观测值误差方程的建立4, 确定权5, 建立法方程并计算坐标改正数dx,dy6, 精度评定7, 输出计算结果到.txt文件CMatrix(矩阵类)CDraw(对话框绘图类)1, 计算结果绘制导线网图形及坐标系2, 绘制未知点误差椭圆3, 实现图形平移,缩放的功能观测数据及其格式设计/自己测试的数据格式已知点个数点号,已知点坐标待测点个数点号观测边总数测站点号,照准点号,观测距离方向观测总数测站点号,照准点号,方向观测值/老师测试的数据格式(最终读取格式)三、详细设计一、 控制网平差模型1、间接平差原理:设未知数个数为t,观测值个数为nV=Bx-f-f=BX0+B0+L其中V为n行1列,B为n行t列,X为t行1列的矩阵根据最小二乘准则应在满足VTPV=min时确定未知参数x列出法方程:Nbbx-fe=0其中Nbb=BTPBfe=BTPf从而求出改正数x;2、精度评定2.1单位权中误差的计算 2.2未知数协因数的计算采用了坐标平差法,实际上法方程系数矩阵的逆就是未知数的协因数阵。它是进行精度评定的基本数据 2.3待定点点位误差2.4误差椭圆三要素长半径方位角Q=12arctg2QxyQxx-Qxy长半径、短半径 E=m0Qxx+QxytgQ,E=m0Qxx+Qxytg(Q+90。)二、 控制网平差的基本步骤概算部分:(1) 针对导线网外业观测数据整理,按一定的数据格式制作数据读取文件(2) 绘制网的略图,绘制观测数据表和已知数据表(例图)(3)(4) 计算近似坐标按照方向观测值计算导线网中待定点的近似坐标xk=xactgB+xbctgA-ya+ybctgA+ctgByk=yactgB+ybctgA-xb+xactgA+ctgB(5) 观测结果规划到标识中心(6) 观测成果结果改化(方向改化和距离改化);/以上两点不懂,稍后探讨(7) 根据平面控制网的几何条件检查观测成果的质量平差要求计算部分:导线网平差程序设计计划及进度表日期程序设计内容备注2016-6-29了解软件工程的基本知识点(进度基本和计划一致)重点:需求分析,详细设计2016-6-30熟悉单导线简易平差计算程序设计和水准网间接平差,归纳总结可以运用到导线网平差程序设计中的思想和方法,理顺程序设计的具体步骤和制作好观测数据文件,复习编程所需要的基本知识点(进度略微超前,完成了控制点类的编写)理清思路,打下基础,2016-7-11、枚举控制点的的参数类型,和对控制点类进行设计2、设计距离观测类,运用控制点类3、设计角度观测值类(添加角度类和矩阵类为现有项后开始控制网平差类的编写)明确成员变量,设计好结果体2016-7-2设计读文件函数,坐标概算函数,具体思路参考书本1,程序分模块,设计单个函数,类 2,矩阵类,角度类较为独立 3,导线网平差类设计,绘制图形使成果可视化 2016-7-31、 设计导线网中会用到的函数(方位角计算函数,距离计算函数)2、 由于0方向值的不确定性,所以必须设计一个确定0向的函数2016-7-4设计导线网平差类(近似平差,加上改正数,计算出平差后待测点坐标)2016-7-5精度评定算法的实现(求出Qx,单位权中误差的计算,点位中误差的计算,方位角及边长中误差的计算,误差椭圆三要素)2016-7-6设计绘图类(利用误差椭圆三要素绘制误差椭圆)/具体步骤参考书上误差椭圆的绘制2016-7-71, 导线网平差系统界面设计2, 计算数据成果输出要求界面友好,功能简洁易懂2016-7-8添加小功能:1、 实现对话框画图2、 实现图形的平移缩放功能答辩查找错误,改正2016-7-9继续答辩,写课程设计报告准备提交成果和答辩2016-7-10提交课程设计报告备注:注释(类的结构,成员变量,成员函数,函数的功能输出)第二部分程序实现及其代码一、课程设计目的1、巩固测绘程序程序设计基础(C+)、测量学、测量平差等课程的基础等知识点2、培养学生的综合运用能力二、课程设计内容设计控制网平差程序三、界面设计及类关系主界面:弹出对话框界面:类关系图:四、程序主要代码Angleobs.h#pragma once/* * 类名: * * * * 描述: * * * * 使用方法: * * * * 历史:*日期* *签名* * * * * * * 外部类:、 * * 2、 * */ #include ControlPoint.h#include Angle.hclass CAngleObs/方向观测值public:CAngleObs();CAngleObs();public:CControlPoint *cpStation;/起始点CControlPoint *cpEnd;/照准点CAngle ObsAngle;/方向观测值;Angleobs.cpp#include StdAfx.h#include AngleObs.hCAngleObs:CAngleObs(void)cpStation=NULL;cpEnd = NULL;ObsAngle = 0;CAngleObs:CAngleObs(void)Distobs.h#pragma once/* * 类名: * * * * 描述: * * * * 使用方法: * * * * 历史:*日期* *签名* * * * * * */ #include ControlPoint.h#include Angle.hclass CDistObs/距离观测值public:CDistObs();CDistObs();public: CControlPoint *cpStart,*cpEnd;/测站与照准点double dDist;/距离观测值;Distobs.cpp#include StdAfx.h#include DistObs.hCDistObs:CDistObs(void)/初始化dDist=0;cpStart=NULL;cpEnd=NULL;CDistObs:CDistObs(void)cpStart=NULL;cpEnd=NULL;ControlPoint.h#pragma once/* * 类名: * * * * 描述: * * * * 使用方法: * * * * 历史:*日期* *签名* * * * * */ class CControlPoint/控制点public:CControlPoint();CControlPoint();double X;double Y;CString ptID;/点号int state;int flg;/一个用于区分已知点,一个用于绘制误差椭圆double dE;double dF;double dQ; /误差椭圆三要素double dMx;double dMy;double dMk;/点位精度;ControlPoint.cpp#include StdAfx.h#include ControlPoint.hCControlPoint:CControlPoint()/初始化X=0;Y=0;ptID = _T();flg=0;state=0;dE=0;dF=0;dQ=0;dMx=0;dMy=0;dMk=0;CControlPoint:CControlPoint()Draw.cpp/对话框画图类部分代码void CDraw:OnPaint()CPaintDC dc(this); / device context for painting/ TODO: 在此处添加消息处理程序代码/ 不为绘图消息调用CDialog:OnPaint()CDC *pDC = GetDlgItem(IDC_STATIC)-GetDC();CRect rect;GetDlgItem(IDC_STATIC)-GetClientRect(&rect);c-ErrorEllipseDraw(pDC,rect);UpdateData(false);void CDraw:OnBnClickedButtonup()/上移Invalidate(true);/刷新控件c-up=c-up-10;OnPaint();void CDraw:OnBnClickedWizfinish()/下移Invalidate(true);c-up=c-up+10;OnPaint();void CDraw:OnBnClickedButtonleft()/左移Invalidate(true);c-left=c-left-10;OnPaint();void CDraw:OnBnClickedButtonright()/右移Invalidate(true);c-left=c-left+10;OnPaint();void CDraw:OnBnClickedButtonbig()/放大Invalidate(true);c-big_sma=c-big_sma*0.9;OnPaint();void CDraw:OnBnClickedButtonsma()/缩小Invalidate(true);c-big_sma=c-big_sma*1.1;OnPaint();ControlNetAdjust.h#pragma once/* * 类名: * * * * 描述: * * * * 使用方法: * * * * 历史:*日期* *签名* * * * * 外部类:ControlPoint.h,AngleObs.h ,DistObs.h,Matrix.h *,Angle.h ,math.h * */ #include ControlPoint.h#include AngleObs.h#include DistObs.h#include Matrix.h#include Angle.h#include math.hclass CControlNetAdjustpublic:CControlNetAdjust();/默认构造函数CControlNetAdjust();private:CControlPoint *m_pUnknowPoint;/未知点数组int m_iUnknowPointCount;/未知点个数CControlPoint *m_pKnowPoint;/已知点数组int m_iKnowPointCount;/已知点个数CAngleObs *m_pAngleObs;/方向观测值数组int m_iAngleObsCount;/方向观测个数CDistObs *m_pDistObs;/距离观测数组int m_iDistObsCount;/距离观测数public:double Anglesigma;double Distsigma;double left;double up;double big_sma;double ALFA;int m_iStationCount;/总测站数bool LoadObsData(const CString &strFileName,CString &screen);/读取数据void CoordinateEstimates();/坐标概算void SetStationCount();/设置总站数大小void CalculateErrorEquations(const CString& strFileName);/计算误差方程void ErrorEllipseDraw(CDC* pDC,CRect& rect);/画图private:CString* SplitString(CString str,char split,int& iSubStrs);/分割函数void SetUnknowPointSize(int size);/设置未知点数组大小void SetKnowPointSize(int size);/设置已知点数组大小void SetAngleObsSize(int size);/设置方向观测值数组大小void SetDistObsSize(int size);/设置距离观测值数组大小CControlPoint* SearchKnownPointUsingID(CString strID);/寻找已知点IDCControlPoint* SearchUnknownPointUsingID(CString strID);/寻找未知点IDCControlPoint* SearchPointUsingID(CString strPointID);/寻找点IDCAngle Azimuth(double dX1,double My1,double dx2,double My2);/求方位角double HDist(CControlPoint* cpStation1,CControlPoint* cpEnd1);/两控制点距离CAngle ZeroAngle(CAngleObs AngleObs);/定位方向角void ComAngleObsEff(CAngleObs AngleObs,double& Fi,double& Ci,double& Di,double& Ck,double& Dk);/计算方向观测方程系数void ComDistObsEff(CDistObs DistObs, double& Fi,double& Ci,double& Di,double& Ck, double& Dk);/计算距离观测方程系数void FixedWeight(CMatrix &p);/权重void OutMatrixToFileP(const CMatrix &mat, CStdioFile &SF);/输出P矩阵上三角阵void OutMatrixToFile(const CMatrix& mat,CStdioFile& SF);/将矩阵输出到文件void GetMaxXY(double& dx,double& dy,double& minx,double &maxy);/获取最大值 void FormErrorEquations(CMatrix& B,CMatrix& f);/组成误差方程;ControlNetAdjust.cpp#include StdAfx.h#include ControlNetAdjust.h#include #include math.hconst double PI=atan(1.0)*4.0;const double EPSILON= 1.0E-12;/极小值const double R0=206264.806247;/弧秒值/初始化CControlNetAdjust:CControlNetAdjust()m_pUnknowPoint=NULL;m_iUnknowPointCount=0;m_pKnowPoint=NULL;m_iKnowPointCount=0;m_pAngleObs=NULL;m_iAngleObsCount=0;m_pDistObs=NULL;m_iDistObsCount=0;m_iStationCount=0;left=0;up=0;big_sma=40;ALFA=0;Anglesigma=5;Distsigma=0.5;CControlNetAdjust:CControlNetAdjust()/析构函数delete m_pUnknowPoint;m_pUnknowPoint=NULL;delete m_pKnowPoint;m_pKnowPoint=NULL;delete m_pAngleObs;m_pAngleObs=NULL;delete m_pDistObs;m_pDistObs=NULL;/设置已知点数组大小void CControlNetAdjust:SetKnowPointSize(int size)if(m_pKnowPoint!=NULL)delete m_pKnowPoint;m_pKnowPoint= NULL;m_iKnowPointCount=0;m_iKnowPointCount=size;m_pKnowPoint = new CControlPointsize;/设置未知点数组大小void CControlNetAdjust:SetUnknowPointSize(int size)if(m_pUnknowPoint!= NULL)delete m_pUnknowPoint;m_pUnknowPoint=NULL;m_iUnknowPointCount=0;m_iUnknowPointCount = size;m_pUnknowPoint= new CControlPointsize;/设置方向观测值数组大小void CControlNetAdjust:SetAngleObsSize(int size)if(m_pAngleObs!=NULL)delete m_pAngleObs;m_pAngleObs= NULL;m_iAngleObsCount=0;m_iAngleObsCount=size;m_pAngleObs= new CAngleObssize;/设置距离观测值数组大小void CControlNetAdjust:SetDistObsSize(int size)if(m_pDistObs!=NULL)delete m_pDistObs;m_pDistObs=NULL;m_iDistObsCount=0;m_iDistObsCount=size;m_pDistObs= new CDistObssize;/根据点号从已知点数组中找到控制点,并返回该点的指针CControlPoint* CControlNetAdjust:SearchKnownPointUsingID(CString strID)for(int i=0;im_iKnowPointCount;i+)if(strID = m_pKnowPointi.ptID)return &m_pKnowPointi;return NULL;CControlPoint* CControlNetAdjust:SearchUnknownPointUsingID(CString strID)/根据点号从未知点数组中找到控制点,并返回该点的指针for(int i =0;im_iUnknowPointCount;i+)if(strID = m_pUnknowPointi.ptID)return &m_pUnknowPointi;return NULL;CControlPoint* CControlNetAdjust:SearchPointUsingID(CString ptID)/根据点号从未知点和已知点数组中找到控制点,并返回该点的指针CControlPoint* pCP=NULL;pCP= SearchKnownPointUsingID(ptID);if(pCP=NULL)pCP= SearchUnknownPointUsingID(ptID);return pCP;CString* CControlNetAdjust: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; /子串的数量= 分割符数量+ 1 CString* pStrSplit; pStrSplit = new CStringiSubStrs; 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; pStrSpliti = strLeft; pStrSplitiNums = strTemp; return pStrSplit;void CControlNetAdjust:SetStationCount()/设置测站数m_iStationCount=m_iKnowPointCount+m_iUnknowPointCount;/bool CControlNetAdjust:LoadObsData(const CString &strFileName,CString &output)/读取数据(自己读取数据格式)/CStdioFile fp;/if(!fp.Open(strFileName,CFile:modeRead)/return false;/CString strLine;/读取已知数据/fp.ReadString(strLine);/SetKnowPointSize(_ttoi(strLine);/output+=strLine;/output+=_T(rn);/int n=0;/for(int i=0;im_iKnowPointCount;i+)/fp.ReadString(strLine);/output+=strLine;/output+=_T(rn);/CString* pstrData=SplitString(strLine,n);/m_pKnowPointi.ptID=pstrData0;/m_pKnowPointi.X=_tstof(pstrData1);/m_pKnowPointi.Y=_tstof(pstrData2);/m_pKnowPointi.state=1;/m_pKnowPointi.flg=1;/delete pstrData;/pstrData=NULL;/读取未知点数据/fp.ReadString(strLine);/output+=strLine;/output+=_T(rn);/SetUnknowPointSize(_ttoi(strLine);/fp.ReadString(strLine);/output+=strLine;/output+=_T(rn);/CString* pstrData=SplitString(strLine,n);/for(int i=0;im_iUnknowPointCount;i+)/m_pUnknowPointi.ptID=pstrDatai;/m_pUnknowPointi.state=2;/m_pUnknowPointi.flg=2;/delete pstrData;/pstrData=NULL;/读取距离观测数据/fp.ReadString(strLine);/output+=strLine;/output+=_T(rn);/SetDistObsSize(_ttoi(strLine);/for(int i=0;im_iDistObsCount;i+)/fp.ReadString(strLine);/output+=strLine;/output+=_T(rn);/CString* pstrData=SplitString(strLine,n);/m_pDistObsi.cpStart=SearchPointUsingID(pstrData0);/m_pDistObsi.cpEnd=SearchPointUsingID(pstrData1);/m_pDistObsi.dDist=_tstof(pstrData2);/delete pstrData;/pstrData=NULL;/读取方向观测值数据/fp.ReadString(strLine);/output+=strLine;/output+=_T(rn);/SetAngleObsSize(_ttoi(strLine);/for(int i=0;im_iAngleObsCount;i+)/fp.ReadString(strLine);/output+=strLine;/output+=_T(rn);/CString* pstrData=SplitString(strLine,n);/m_pAngleObsi.cpStation=SearchPointUsingID(pstrData0);/m_pAngleObsi.cpEnd=SearchPointUsingID(pstrData1);/m_pAngleObsi.ObsAngle=CAngle(_tstof(pstrData2),DMS);/delete pstrData;/pstrData=NULL;/fp.Close();/return true;/bool CControlNetAdjust:LoadObsData(const CString &strFileName,CString &output)/读取数据CStdioFile fp;if(!fp.Open(strFileName,CFile:modeRead)return false;CString strLine;/读取已知数据int n;for(int i=0;i4;i+) fp.ReadString(strLine);output+=strLine;output+=_T(rn);fp.ReadString(strLine);output+=strLine;output+=_T(rn);CString* pstrData1=SplitString(strLine,n);Anglesigma=_tstof(pstrData11);delete pstrData1;pstrData1=NULL;fp.ReadString(strLine);output+=strLine;output+=_T(rn);CString* pstrData2=SplitString(strLine,n);Distsigma=_tstof(pstrData22);delete pstrData2;pstrData2=NULL;fp.ReadString(strLine);output+=strLine;output+=_T(rn);/*CString* pstrData3=SplitString(strLine,n);m_iStationCount=_ttoi(pstrData31);delete pstrData3;pstrData3=NULL;*/fp.ReadString(strLine);output+=strLine;output+=_T(rn);/ENDfp.ReadString(strLine);output+=strLine;output+=_T(rn);CString* pstrData4=SplitString(strLine,n);SetKnowPointSize(_ttoi(pstrData41);delete pstrData4;pstrData4=NULL;for(int i=0;im_iKnowPointCount;i+)fp.ReadString(strLine);output+=strLine;output+=_T(rn);CString* pstrData5=SplitString(strLine,n);m_pKnowPointi.ptID=pstrData50;m_pKnowPointi.X=_tstof(pstrData51);m_pKnowPointi.Y=_tst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论