欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    测绘程序设计基础课程设计报告.docx

    • 资源ID:2059461       资源大小:302.15KB        全文页数:45页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    测绘程序设计基础课程设计报告.docx

    1、中南大学测绘程序设计基础课程设计报告专业班级测绘 1001 班学生姓名李 佳 霖 学生学号0405100111学院地球科学与信息物理学院指导教师范冲老师2012 年 7 月 30 日1、实验目的使学生能够在学习完测绘程序程序设计基础(C+)、测量学、测量平差等课程的基础上,进一步巩固这些知识,并培养学生的综合应用能力。2、实验内容及要求内容:设计一个导线网平差的程序。. 要求:课程设计的第一、二天根据课堂上所讲进行系统设计,对主要的概算与 平差计算要求列出计算的详细步骤,并写出流程图,最后形成系统设计说明书, 并以天为单位制定详细的程序设计计划。进行编程,要求编程规范编写代码。考核:要求讲述编

    2、程思路与具体代码的功能含义,并演示程序。3、系统设计1、需求分析控制网平差程序对野外控制网观测数据进行平差数据处理,其目的就是根据最小二乘原理,消除网中的各种几何矛盾,求出全网各待定元素(未知点的平面坐标或三维坐标)。2、实现功能1). 数据输入:使用外部文件的导入,读取.txt 格式的数据文件实现数据的读取。2). 概算:主要实现近似坐标的概算。3). 平差计算:对观测数据进行精密平差计算,得到平差后的点位坐标,方向观测值,边长观测值等,精度评定。4). 成果输出:控制网图形输出,平差结果报表及其输出,绘制误差椭圆等。数据输入平差计算成果输出边角网平差程序3、系统总体框架近似坐标概算四、实现

    3、思路1、数据输入模块1.1 、数据格式21,31250.2500,11500.41002,33256.5700,10900.8400已知数据,2 为已知点的个数点名,X,Y33,4,5未知点数据,3 为未知点的个数点名81,3,2300.06001,4,3090.35302,5,3643.23402,3,2115.91902,4,4363.61103,5,2169.07303,4,2620.90904,5,3922.8600181,2,0.0000001,3,57.2032101,4,113.1406352,5,0.0000002,3,32.1222922,4,57.501530.观测数据18

    4、 为方向观测值的个数;8 代表距离观测值个数。外业数据采集1.1 描述的.txt 格式数据文件数据输入数据导入数据编辑1.2 、数据输入流图1.3 、具体实现先是定义一个控制点类 CControlPoint,用来定义控制点m_pKnownPoint/m_pUnknownPoint、方向角观测值 CBearingObs、距离观测值CDistObs 的格式,这个类编译好之后,就可以用于数据的读取了。CControlPoint* m_pUnknownPoint;/未知点数组int m_iUnknownPointCount; /未知点个数CControlPoint* m_pKnownPoint; /已

    5、知点数组int m_iKnownPointCount; / 已 知 点 个 数CBearingObs*m_pBearingObs;/方向观测值数组int m_iBearingObsCount;/方向观测值个数CDistObs*m_pDistObs;/距离观测值数组int m_iDistObsCount;/距离观测值个数CBearingObs* m_pZeroBearing;/零方向观测值数据int m_iZeroBearingCount;/零方向观测值个数bool LoadData(const CString& strFileName);CString* SplitString(CString

    6、 str , char split, int iSubStrs);/字符串分割函数按规定格式编辑好数据文件后,将这个 txt 文档导入,通过 MFC 文件读取方法逐行读入数据,然后通过调用分割函数 SplitString,逐行进行分割,将数据保存到定义的动态数组中,这样就实现了数据的读取与保存。2、概算模块(主要是近似坐标的推算)2.1 近似坐标推算公式 1 :按方向观测值计算三角网中待定点的近似坐标 2 按边长观测值计算三边网中待定点的近似坐标先按公式(2)计算三角形的内角,再用公式(1)计算待定点的坐标 3 按方向和边长观测值计算导线网中待定点的近似坐标综合比较上述三种推算近似坐标的方法,

    7、第一和第二种方法,在近似坐标推算时必须有三角形才能计算,适用于三角网。而本次试验采用的是边角网的观测数据,对于第一种只按角推算和第二种只按边推算,显然也是不合适的。而第三种极坐标推算的方法,对所有网形均适用,从通用性和数据合理利用这两面考虑,故采用第三种极坐标推算的方法推算近似坐标。在具体计算中采用逐点解算法,选择已知点或已计算出坐标的点作为起算点, 根据具体的图形,来逐个推算出各点的坐标。这种方法比较容易实现,而对于整体解算的方法,对所有未知点进行整体解算,实现起来太困难。推算流程图如下:3、平差计算模块 1 附有条件的间接平差原理:设未知数个数为 t,观测值个数为 n,条件方程个数为 m误

    8、差方程:V=BX+L 条件方程:AX+W=0根据最小二乘原理:在条件 AX +W=0 下,即求条件极值法,利用拉格朗日不定乘数法:由于此次实验中间接平差更适合编程的特点,故我们选用间接平差。控制网平差程序对野外控制网观测数据进行平差数据处理,其目的就是根据最小二乘原理,消除网中的各种几何矛盾,求出全网各待定元素(未知点的平面坐标或三维坐标)。 2 平差计算步骤:(1) 读取观测数据与已知点坐标数据;(2) 计算未知点近似坐标(用“导线点坐标增量法近似坐标”算法);(3) 计算角度观测值误差方程的系数和常数项;(4) 计算边长观测值误差方程的系数和常数项;(5) 列条件式;(6) 组成误差方程,

    9、得到系数矩阵和常数项矩阵;(7) 定权,得到权矩阵;(8) 组成方程;(9) 解算法方程,求得 dX=dx1 dy1 dx2 dy2 (10) 求得平差后的坐标值 X=X+dX。因为只有 dx 很小时误差方程式、条件方程式才是严密的,因此当 dX 的值较大时应把 X=X_+dX 作为新的近似值重复 1-3 步,直到 dx 中绝对值最大的一个小于给定的限值。(11) 精度评定,计算误差椭圆参数等 3 误差方程式及条件方程式的列立以未知点坐标为平差对象,一个观测值对应一个误差方程式,误差方程式包括两类:方向观测误差方程式和边长观测误差方程式。(1)方向观测误差方程式(2)边长观测误差方程式 4 定

    10、权根据先验方向观测中误差和边长观测中误差来定权(1) 方向观测值的权在等精度方向观测的控制网中,可把方向观测值的权定为 1(2) 边长观测值的权m2mps =2s而 Ms=A+B*S/1000;其中 S 单位为 Km,这样的话 Ms 单位为 mm 5 平差后的坐标值计算求得平差后的坐标值 X=X+dX。因为只有 dx 很小时误差方程式、条件方程式才是严密的,因此当 dX 的值较大时应把 X=X_+dX 作为新的近似值进行迭代, 直到 dx 中绝对值最大的一个小于给定的 0.1mm(注意:这里只是指坐标改正值, 不包括定向改正值,所以在求 dx 中绝对值最大值时,应除去定向改正值,否则会无限迭代

    11、计算,因为定向改正值很大,而且迭代计算时不会进行改正)。V T PVn - t 6 精度评定中误差计算: m0 = 待定点点位误差:,n 为观测值个数,t 为未知数个数Qyymx = m0 Qxx , my = m0m2 + m2xymk = m0误差椭圆元素计算:12Q长半径方位角Q =arctg2xyQxx - QyyQ + Q tg(Q + 90 )0xxxy长半径、短半径E = m0 E = m0Qxx + QxytgQ ,平差计算流程图数据读取,并保存到相应数组中调用坐标概算函数,推算待求点近似坐标否If(MaxAbsDetX(detx)0.1)是进行间接平差组成误差方程,得到系数矩

    12、阵和常数项矩计算边长观测值误差方程的系数和常数项及权计算角度观测值误差方程的系数和常数项及权调用调用平差成果输出结束精度评定4、成果输出模块成果输出控精控制制度网图点统形误成计差椭果圆的绘制具体实现:平差的成果按一定的格式格式化输出到界面上,并以 txt 文档的格式保存。调用绘制控制网图函数和绘制误差椭圆函数实现图形的输出显示, 新建一 Dlg 用于设置误差椭圆的比例系数。五、界面设计图中主要有两个按钮,Open the file and Compute 按钮和 Draw the Ellipse 按钮分别用作打开文件并计算输出和绘制误差椭圆。六、实验总结通过本次实验我在学习完测绘程序程序设计基

    13、础(C+)、测量学、测量平差等课程的基础上,通过实践巩固这些课程上的理论知识,并培养了动手能力, 综合应用的能力。在本次实验当中,主要设计思路参考了之前上课时所编写的水准网平差和单导线平差的思路,其中数据读入模块方法基本一致,需要编写坐标概算和平差计算以及控制网图形及误差椭圆的绘制工作。在实验中遇到了一下的几个问题:1、坐标概算考虑不周,在坐标概算时,只考虑到了已知数据在前面给出的情况, 而如果已知数据出现在后面则会出现 bug,在范老师的指导下,发现并改正了这个小问题;2、平差计算中出现问题,在平差计算时发现改正以后与正确值相差更多了,我自己检查发现在组成法方程时,由于自己疏忽,写错了代码,

    14、改过之后就能够输出了正确结果;3、绘制控制网图形和误差椭圆时,以前的方法是建立单文档程序,在窗口中画图,但是我这次这样做发现在这个里边以前程序中的部分功能实现不了,我想应该是因为那些函数是基于对话框的,所以就将画图的功能放入对话框中实现了。衷心感谢范老师张老师和学长在实验当中对我的指导。附:主要代码TraverseNetAdj.h#pragma once#include ControlPoint.h #include Angle.h #include Matrix.hconst double Ro = 206264.806247; /一弧度对应的秒数class CTraverseNetAdjp

    15、ublic:CTraverseNetAdj(void);CTraverseNetAdj(void);private:CControlPoint* m_pUnknownPoint;/未知点数组int m_iUnknownPointCount; /未知点个数CControlPoint* m_pKnownPoint; /已知点数组int m_iKnownPointCount; / 已 知 点 个 数CBearingObs* m_pBearingObs; /方向观测值数组int m_iBearingObsCount; /方向观测值个数CDistObs* m_pDistObs; /距离观测值数组int

    16、m_iDistObsCount;/距离观测值个数CBearingObs* m_pZeroBearing;/零方向观测值数据int m_iZeroBearingCount;/零方向观测值个数CString* SplitString(CString str , char split, int &iSubStrs);/分割字符串void ApproximateXY();/坐标概算,求近似坐标CControlPoint* SearchKnownPointUsingNAME(CString strNAME);/根据点名查找已知点,返回该点的指针CControlPoint* SearchUnknownPo

    17、intUsingNAME(CString strNAME);/根据点名查找未知知点,返回该点的指针CControlPoint* SearchPointUsingNAME(CString strNAME);/根据点号查找控制点(包括已知点和未知点),返回该点的指针public:void SetUnknownPointSize(int size);/设置未知点数组大小void SetKnownPointSize(int size);/设置已知点数据大小void SetBearingObsSize(int size);/设置方向观测值数组大小void SetDistObsSize(int size)

    18、;/设置距离观测值数组大小void SetZeroBearingSize(int size);/设置零方向观测值数组大小CAngle ZeroBearing(const CBearingObs m_BearingObs);/计算定向零度方向角函数输入一个方向观察值返回测站点的零度定向角public:CAngle Azi(const CControlPoint& P1, const CControlPoint& P2);/已知两点求方位角,输入参数为CControlPoint类型double HDist(const CControlPoint& P1, const CControlPoint&

    19、P2);/求两点之间的距离bool LoadObsData(const CString& strFileName);/从文件中导入数据void RigorousAdjust(const CString& strFileName);/严密平差(间接平差) 计算主函数private:double MaxAbsDetX(const CMatrix& detX);/求未知改正数绝对值最大的void OutMatrixToFile(const CMatrix& mat,CStdioFile& SF);/把矩阵输出到文件中CMatrix Weight(double SigmaAng, double Sig

    20、maDist);/简单定权/计算方向观测方程的系数和常数项void ComBearingObsEff(const CBearingObs& BearingObs, double& Li, double& Aj,double& Bj,double& Ak,double& Bk);/计算距离观测方程的系数和常数项void ComDistObsEff(const CDistObs& DistObs, double& Li,double& Ci, double& Di, double& Ck, double& Dk);/输入一个方向观测对象,查找这一方向观测对象所对应的零方向对象在零方向数组中的位置i

    21、nt SearchZeroBearing(const CBearingObs& BearingObs);/组成误差方程,B 为系数矩阵,L为常数项向量void FormErrorEquations(CMatrix& B, CMatrix& L);/画图public:double dScale;/比例/坐标原点double dOrgX; double dOrgY;intiLineWidth;/线宽COLORREF crColor ; public:void SetScale(double scale);/设置绘图比例void SetOrg(double x, double y);/设置坐标原点v

    22、oid SetLineWidth(int iWidth);/设置线宽void SetColor(COLORREF color);/设置颜色void draw(CDC* pDC, CRect& rect);/绘制图形;TraverseNetAdj.cpp#include StdAfx.h #include TraverseNetAdj.h#include CommonSurveyFunctions.h #include math.h#include CTraverseNetAdj:CTraverseNetAdj(void)/释放动态数组内存if(m_pUnknownPoint!=NULL)del

    23、ete m_pUnknownPoint; m_pUnknownPoint=NULL;if(m_pKnownPoint!=NULL)delete m_pKnownPoint; m_pKnownPoint=NULL;if(m_pBearingObs!=NULL)delete m_pBearingObs; m_pBearingObs=NULL;if(m_pDistObs!=NULL)delete m_pDistObs; m_pDistObs=NULL;if (m_pZeroBearing!=NULL)delete m_pZeroBearing; m_pZeroBearing=NULL;/导线网的已知

    24、点个数不确定,所以不能像单导线那样直接确定已知点个数m_pKnownPoint=NULL;/已知点数组m_iKnownPointCount=0;/已知点个数m_pUnknownPoint=NULL;/未知点数组m_iUnknownPointCount=0;/未知点个数m_pBearingObs=NULL;/角度观测值数组m_iBearingObsCount=0;/角度观测值个数m_pDistObs=NULL;/距离观测值数组m_iDistObsCount=0;/距离观测值个数m_pZeroBearing=NULL;/零方向观测值数组m_iZeroBearingCount=0;/零方向观测值个数

    25、CTraverseNetAdj:CTraverseNetAdj(void)/释放动态数组内存if(m_pUnknownPoint!=NULL)delete m_pUnknownPoint; m_pUnknownPoint=NULL;if(m_pKnownPoint!=NULL)delete m_pKnownPoint; m_pKnownPoint=NULL;if(m_pBearingObs!=NULL)delete m_pBearingObs; m_pBearingObs=NULL;if(m_pDistObs!=NULL)delete m_pDistObs; m_pDistObs=NULL;i

    26、f (m_pZeroBearing!=NULL)delete m_pZeroBearing; m_pZeroBearing=NULL;/设置已知点个数和数组/注意:调用该函数后,原有数据被删除void CTraverseNetAdj:SetKnownPointSize(int size)if(m_pKnownPoint!=NULL)delete m_pKnownPoint; m_pKnownPoint=NULL;m_pKnownPoint=new CControlPointsize;/已知点数组m_iKnownPointCount=size;/已知点个数/设置未知点个数和数组/注意:调用该函数

    27、后,原有数据被删除void CTraverseNetAdj:SetUnknownPointSize(int size)if(m_pUnknownPoint!=NULL)delete m_pUnknownPoint; m_pUnknownPoint=NULL;m_iUnknownPointCount=size; m_pUnknownPoint=new CControlPointsize;/设置方向观测值个数和数组/注意:调用该函数后,原有数据被删除void CTraverseNetAdj:SetBearingObsSize(int size)if(m_pBearingObs!=NULL)dele

    28、te m_pBearingObs; m_pBearingObs=NULL;m_pBearingObs=new CBearingObssize;/方向观测值数组m_iBearingObsCount=size;/方向观测值个数/设置距离观测值个数和数组/注意:调用该函数后,原有数据被删除void CTraverseNetAdj:SetDistObsSize(int size)if(m_pDistObs!=NULL)delete m_pDistObs; m_pDistObs=NULL;m_pDistObs=new CDistObssize;/距离观测值数组m_iDistObsCount=size;/

    29、距离观测值个数/设置零方向观测值个数和数组/注意:调用该函数后,原有数据被删除void CTraverseNetAdj:SetZeroBearingSize(int size)if(m_pZeroBearing!=NULL)delete m_pZeroBearing; m_pZeroBearing=NULL;m_pZeroBearing=new CBearingObssize;/零方向观测值数组m_iZeroBearingCount=size;/零方向观测值个数/已知两个控制点,求P1-P2的方位角CAngle CTraverseNetAdj:Azi(const CControlPoint& P1, const CControlPoint& P2)


    注意事项

    本文(测绘程序设计基础课程设计报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开