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

下载本文档

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

文档简介

1、测绘程序课程设计报告一、课程设计概述:1、课程设计目的使学生能够在学习完VC.net程序设计基础、测量学、测量平差等课程的基础上,进一步巩固这些知识,并培养学生的综合应用能力。2、课程设计时间7月18日7月31日,共两周时间。3、课程设计内容设计一个边角网平差的程序。二、系统设计:1、需求分析控制网平差程序对野外控制网观测数据进行平差数据处理,其目的就是根据最小二乘原理,消除网中的各种几何矛盾,求出全网各待定元素,即未知点的平面坐标或三维坐标。2、实现功能2.1 优化设计:根据控制网的观测精度与网形,全面评定网的精度2.2 数据输入:使用外部数据倒入,通过读取.txt格式观测文件实现数据输入2

2、.3 概算:主要是进行近似坐标的推算。2.4 平差计算:对观测数据进行精密平差计算,得到平差后的点位坐标,方向观测值,边长观测值等,精度评定。2.5 成果输出:控制网图形输出,绘制误差椭圆,以及平差结果导出到txt文件中。3、系统总体框架导线网平差系统4、数据输入模块4.1 文件格式定义:7Surveyor,panlinRecorder,panlinDate,2011-7-19Meteorogy,30,100,0.7AngleAccuracy,2DistanceAccuracy,2,2StationCount,5StationName,1,2,3,4,5ENDHeaderGivendataCo

3、or,21,31250.25,11500.412,33256.57,10900.84ENDGivendata文件头,说明观测信息已知数据,其中:Coor是指已知点,Dist指已知边,Angle指已知角,三者后边的数值是指,已知数据个数。ObsdataAngle,181,2,01,3,57.2032101,4,113.1406352,5,02,3,32.1222922,4,57.5015302,1,98.2612733,1,03,2,56.2537793,5,172.5339443,4,282.2953834,1,04,2,26.0954124,3,46.3617984,5,77.5946715

4、,4,05,3,39.0017795,2,70.195151Dist,811,3,2300.0601,4,3090.3532,5,3643.2342,3,2115.9192,4,4363.6113,5,2169.073Angle为方向观测标志,18为方向观测值个数,所以从下行开始的18行均为方向观测值Dist为边长观测标志,8为边长观测值个数,所以从下行开始的8行均为边长观测值3,4,2620.9094,5,3922.860ENDObsdataH观测数据结束标志需要注意的是,StationCountStationName并不见指测站数和测站名,而是指控制点数和控制点名(主要是指节点网,这种情况

5、中并不是所有的点都进行摆站了,如附合导线,有一个已知点就没有摆站观测)。对StationName的说明:未 摆 站 的 已 知 占 八、摆 站 的 已 知 占 八、未 知 占 八、StationName,1,2,3,4,54.2 数据输出流图文 件 导 入数据编辑数据输入4.3 具体实施先是定义一个类CcontrolPoint,这个类可以没有.cpp文件,只是用来定义控制点ControlPointData、方向角观测值CBearingObs、距离观测值CdistObs,以及头文件fileheader的格式,这个类编译好之后,就可以为数据输入服务了。数据输入的具体实施是,在Ccontrolnet

6、AdjustmentDlg.h中定义以下几个公有变量:fileheaderheader;/头文件实现头文件输入ControlPointData*KnownPoint;/已知点intKnownPointCount;/已知点个数CDistObs*KnownDist;/已知边intKnownDistCount;已知边个数CBearingObs*KnownBearing;/已知方向角intKnownBearingCount;/已知方向角个数实现已知数据的输入CDistObs*ObsDist;/观测边intObsDistCount;/观测边个数CBearingObs*ObsBearing;/观测方向角i

7、ntObsBearingCount;/观测方向角个数实现观测数据的输入这样在txt文件导入之后,通过MFC文件读取方法逐行读入数据,然后通过调用分割函数SplitString,通过ENDHeaderGivendata这些标志,逐行进行分割,将值赋给上述变量中,这样就把数据导入到程序中了。5、近似坐标推算模块:5.1 近似坐标推算原理:5.1.1 按方向观测值计算三角网中待定点的近似坐标(前方交会)(1)XaCtgBXbCtgAyayctgActgByaCtgBybCtgAXaXbctgActgB5.1.2 按边长观测值计算三边网中待定点的近似坐标(边长交会),先按公式计算三角形的内角,再用公式

8、(1)计算待定点的坐标i,cos (S2 s2 S22s0sl1 ,)B cos (SoS2Si22s0 s25.1.3 按方向和边长观测值计算导线网中待定点的近似坐标tabdxk xa d costVk Va d sintXa d cos(tab AVa d sin(tab A)比较上述三种方法可以发现,第一和第二种方法,在近似坐标推算时必须搜索三角形,才能计算,换句话来说就是适用于三角网,在通用性上显然不合理。而且,本次试验采用的是边角网的观测数据,对于第一种只按角推算和第二种只按边推算,显然也是不合适的。而第三种极坐标推算的方法,对所有网形均适用,从通用性和数据合理利用这两面考虑,所以我

9、采用第三种极坐标推算的方法。在具体计算中采用逐点解算法,选择已知点或已计算出坐标的点作为起算点,根据具体的图形,来逐个推算出各点的坐标。这种方法比较容易实现,而对于整体解算的方法,对所有未知点进行整体解算,实现起来太困难。5.2 计算流图坐标输入系统再次从i=0循环否5.3 具体实施在文件读入数据时,文件头中有StationName这一项,在读入控制点名后,就会动态创建类型为类ControlPointData对象的数组header.StationCoor,然后把已知点数据传入到header.StationCoor中。header.StationCoor创建的目的就是进行存储所有的控制点坐标,方

10、便以后的数据调用和数据更新。经过上述中5.3的循环计算,这样所有的未知点近似坐标均已经计算出来,存入到这个数据中。需要注意的是,在近似坐标推算中,循环计算一次之后,必须判断是否所有未知点的近似坐标已经推算出来,没有的话再进行循环计算。(这样做主要是为了防止在节点控制网中,当未知点很多时,可能推算到一个点之后,它所连得所有控制点均为坐标未知点,这样在一次循环中就会跳过这个控制点,这个点的近似坐标就没有计算出来。而在下一次循环中,它所连得控制点中就会有坐标已知点,这样这个点的近似坐标就计算出来了)。6、平差计算模块平差有两种方式,一种是条件平差,一种是间接平差。条件方程式较少,占用内存小,但条件方

11、程与网形有关,很难编制通用的程序o间接平差一个观测值就是一个误差方程,占用内存相对较大,但易于编程解算,容易编制通用的程序。从程序编制和程序的通用性考虑,所以选择间接平差的方法。6.1 平差计算原理:6.1.1 间接平差基本原理设:观测值为L,其权为P,相应的改正数为V,必要观测值个数为t,选定未知数X,则有误差方程VBXL根据最小二乘原理:vTpvmin,求极值,(VTPV)TVTL-2VTP2VTPB0xxBTPV0,BTP(BXL)0,BTPBXBTPL0,得:法方程:BTPBXBTPL0法方程的解:X(BTPB)1BTPL、VTPV/(nt)单位权中误差:6.1.2 间接平差流程6.1

12、.2.1 列出误差方程及条件式 定权 组成法方程 解算法方程,求得dX=dx1dy1dx2dy 平差后的坐标值计算X=X+dX。 精度评定,计算误差椭圆参数等6.1.3 误差方程的列立以未知点坐标为平差对象,一个观测值对应一个误差方程式,误差方程式包括两类:方向观测误差方程式和边长观测误差方程式(1)方向观测误差方程式般形式:VZaXbYaXbYl其中:jjijiijiijjijjijaijsinTij0bD0 ,bij ijcosTj0Di0lijZi0Tij0Lij48ZiY° Y0Tij0 a9tg VmX

13、 j Xi当测站点i为已知点时:Vj 当照准点j为已知点时:Vij当侧站点和照准点都为已知点时: (2)边长观测误差方程式乙 aij Xj b Yj lij乙 aij XibijYilijV Z lij j ijVijl .ijcosTij0 XisinTij0 YcosTij0 XjsinTij0 Yjlijs j0般取测站起始方向(零方向)的近似坐标方位角作为定向角近似值当测站点i为已知点时: 当照准点j为已知点时:VijVijSij0为近似坐标计算而得,Sij为实测边长cosTij0XjsinTij0YjlijcosTj0XisinTj0Ylj6.1.4 定权(1)方向观测值的权在等精度

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

15、测值个数,t为未知数个数m0-nt待定点点位误差:mxmo.Qxx,mymoQyy22mkmo.mxmy误差椭圆元素计算:长半径方位角Q1arctg2Qxy2QxxQyy长半径、短半径em。;QxxQxytgQ,Emo.QxxQxytg(Q900)6.2平差计算流程图:一些运算覆,可以实现矩阵转置、求逆、相乘、相减得运算,所以就可以计算出Nbb=(B)*P*B;Nvv=(-1)*(B)*P*L);Dx=(Nbb.Inv()*Nvv),改正数计算出来之后,将坐标改正数加到原有近似坐标上,判断如果坐标改正数的最大值(绝对值)大于0.1mm(注意是大于0.1mmt是迭代终止条件,不要写成小于0.1m

16、m),重复上述步骤继续迭代计算,直到坐标改正数的最大值(绝对值)小于0.1mm迭代计算终止,这时求出的坐标即为平差后坐标。坐标改正数Dx求出来之后,就可以求得观测值改正数矩阵V,V求出来之后,就可以计算出单位权中误差m0,进而计算出点位中误差、误差椭圆参数。7、成果输出模块成果输出模块有两方面,一方面是平差结果的输出,另一方面是图形绘制。对于平差结果的输出这一方面,主要是输出方向观测成果表、距离观测成果表、精度评定以及控制点成果表这四方面内容,对于这部分的输出比较容易实现,只要建立Cstring对象,调用库函数.format()来定义输出格式,来进行格式化输出,就很容易实现。对于图形的绘制,需

17、要链接到另一个Dialog来绘制,这涉及到一些建类、数据传输的内容,下面详细介绍这部分内容。7.1图形绘制流程图:绘图调用主绘图函数添加消息函数72具体头施函数Error曰lipseDraw由于绘图在另一个Dialog中进行,所以必一在CcontroinetAdjustmehtDlg中能够调用绘图的Dialogo主要是在建立Dialog之后,给这个Dialog添加一个类DrawGraph,这样就可以在CcontrolnetAdjustmentDlg中通过建立DrawGraph的对象draw,通过调用库函数draw.DoModal()来打开Dialog了。不过在这之前要进行数据传输,主要是在Cc

18、ontrolnetAdjustmentDlg中通过调用Draw的成员变量,将值传输到类DrawGraph中。之后在类DrawGraph中添加消息函数OnPaint(),这样在在CcontrolnetAdjustmentDlg中调用库函数draw.DoModal()之后,就会跳到类DrawGraph中的消息函数OnPaint()进行绘I在函数OnPaint()中会调用函数StepLength,通过比较实际坐标的最大值、最小值,以及窗口大小来确定绘图的步长。之后调用函数ControlNet来进行主要的绘图工作,主要是坐标轴、控制网网形、误差椭圆、以及绘图比例尺的绘制,其中误差椭圆的绘制时调用函数E

19、rrorEllipseDraw来绘制。程序设计计划与进度表:编号:完成内容:日期:1系统的总体设计、编制作业进度表7月18日7月19日2数据输入7月20日3近似坐标的推算7月20日4平差计算7月21日7月22日5控制网网形、误差椭圆的绘制7月23日6代码修改、程序整改、修饰工作7月24日7月25日7实验报告的编写7月26日7月28日程序代码:1. ControlPoint.h#pragmaonce#include"Angle.h"classControlPointDatapublic:doubleX,Y;/坐标值CStringstrName;/控制点名doubledE,dF

20、;/误差椭圆的长半轴和短半轴CAngledAlfa;/误差椭圆长半轴的方位角doubledMx,dMy,dM;/点位误差doubleQxx,Qyy,Qxy;/协因数;/距离观测值类classCDistObspublic:CDistObs(void)dDist=0;CDistObs(void);public:ControlPointDatacpStart,cpEnd;/起点和终点doubledDist;/距离观测值;/方向观测值类classCBearingObspublic:CBearingObs(void);CBearingObs(void);public:ControlPointDatacp

21、Station;/测站点ControlPointDatacpObject;/照准点CAngleangleObsValue;/方向观测值;classMeteo/气象参数public:doubletemperature;/温度doublepressure;/气压doublehumidity;/相对湿度;classDistanceAccu/仪器距离观测精度信息public:doublea;doubleb;classfileheaderpublic:CStringSurveyor;/观测值CStringRecorder;/记录者CStringDate;/观测日期MeteoMeteorogy;/气象参数

22、doubleAngleAccuracy;/仪器方向观测精度信息DistanceAccuDistanceAccuracy;/仪器距离观测精度信息intStationCount;/控制点个数intOriAngleCount;/测站个数ControlPointData*StationCoor;/控制点坐标信息;2. ControlnetAdjustmentDlg.h#pragmaonce#include"ControlPoint.h"#include"Matrix.h"/CControlnetAdjustmentDlg对话框classCControlnetAd

23、justmentDlg:publicCDialog/构造publicCControlnetAdjustmentDlg(CWnd*pParent=NULL);/标准构造函数CControlnetAdjustmentDlg();/析构函数/对话框数据enumIDD=IDD_CONTROLNETADJUSTMENT_DIALOG;protected:virtualvoidDoDataExchange(CDataExchange*pDX);/DDX/DDV支持/实现protected:HICONm_hIcon;/生成的消息映射函数virtualBOOLOnInitDialog();afx_msgvoi

24、dOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()public:doubleAzimuth(doubleX1,doubleY1,doubleX2,doubleY2);/求方位角,返回弧度intsgn(doubleX);/符号函数doubleOutX(CStringstrName);/导出XdoubleOutY(CStringstrName);/导出YintKnoworUnKnow(CStringstrName);/判断一个控制

25、点是否已知,已知返回,未知返回-1doubleMax(CMatrixB,intm,intn);/求矩阵中最大值doubleXKnoworUnKnow();/求控制点坐标中是否还存在未知点,存在返回,不存在返回-1CStringObsdata;/显示观测数据afx_msgvoidOnBnClickedRadio1();/数据读入CString*SplitString(CStringstr,charsplit,int&iSubStrs);/分割函数voidadjustment(CMatrix&B,CMatrix&L,CMatrix&P);/平差函数fileheade

26、rheader;/头文件ControlPointData*KnownPoint;/已知点intKnownPointCount;/已知点个数CDistObs*KnownDist;/已知边intKnownDistCount;/已知边个数CBearingObs*KnownBearing;/已知方向角intKnownBearingCount;/已知方向角个数CDistObs*ObsDist;/观测边intObsDistCount;/观测边个数CBearingObs*ObsBearing;/观测方向角intObsBearingCount;/观测方向角个数CStringOutData;/用来输出计算信息(

27、概算、平差等)afx_msg voidafx_msg voidafx_msg voidafx_msg voidafx_msg voidOnBnClickedRadio2();/坐标推算OnBnClickedRadio3();/平差计算OnBnClickedRadio4();/文件保存OnBnClickedRadio5();/网图显示OnBnClickedOk();/清屏;3. ControlnetAdjustmentDlg.cpp#include"stdafx.h"#include"ControlnetAdjustment.h"#include"

28、;ControlnetAdjustmentDlg.h"#include"ControlPoint.h"#include<locale.h>#include"math.h"#include"Matrix.h"#include"DrawGraph.h"#ifdef_DEBUG#definenewDEBUG_NEW#endifpParent /*=NULL*/ ) / 标CControlnetAdjustmentDlg:CControlnetAdjustmentDlg(CWnd*准构造函数:CDia

29、log(CControlnetAdjustmentDlg:IDD,pParent),Obsdata(_T(""),OutData(_T("")m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);KnownDist=NULL;/初始化KnownPoint=NULL;KnownBearing=NULL;ObsDist=NULL;ObsBearing=NULL;header.StationCoor=NULL;CControlnetAdjustmentDlg:CControlnetAdjustmentDlg()/析构函

30、数/释放空间if(KnownPoint!=NULL)deleteKnownPoint;KnownPoint=NULL;if(KnownDist!=NULL)deleteKnownDist;KnownDist=NULL;if(KnownBearing!=NULL)deleteKnownBearing;KnownBearing=NULL;if(ObsDist!=NULL)deleteObsDist;ObsDist=NULL;if(ObsBearing!=NULL)deleteObsBearing;ObsBearing=NULL;if(header.StationCoor!=NULL)deleteh

31、eader.StationCoor;header.StationCoor=NULL;char split, int &CString*CControlnetAdjustmentDlg:SplitString(CStringstr,iSubStrs)/分割函数intiPos=0;/分割符位置intiNums=0;/分割符的总数CStringstrTemp=str;CStringstrRight;/先计算子字符串的数量while(iPos!=-1)iPos=strTemp.Find(split);if(iPos=-1)break;strRight=strTemp.Mid(iPos+1,st

32、r.GetLength();strTemp=strRight;iNums+;if(iNums=0)/没有找到分割符/子字符串数就是字符串本身iSubStrs=1;returnNULL;/子字符串数组iSubStrs=iNums+1;/子串的数量=分割符数量+1CString*pStrSplit;pStrSplit=newCStringiSubStrs;strTemp=str;CStringstrLeft;for(inti=0;i<iNums;i+)iPos=strTemp.Find(split);/左子串strLeft=strTemp.Left(iPos);/右子串strRight=st

33、rTemp.Mid(iPos+1,strTemp.GetLength();strTemp=strRight;pStrSpliti=strLeft;pStrSplitiNums=strTemp;returnpStrSplit;voidCControlnetAdjustmentDlg:OnBnClickedRadio1()/数据读入/TODO:在此添加控件通知处理程序代码CFileDialogdlgFile(TRUE,_T("txt"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("(文本文件)|*.txt");if(

34、dlgFile.DoModal()=IDCANCEL)return;CStringstrFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");CStdioFilesf;if(!sf.Open(strFileName,CFile:modeRead)return;CStringstrLine;intn1;CString*strTmp=NULL;while(strLine!=_T("ENDHeader")/读取文件头sf.ReadString(strLine);Obsdata+=strLine;Obsdata+

35、=_T("rn");if(strLine!=_T("ENDHeader")strTmp=SplitString(strLine,',',n1);elsebreak;if(strTmp0="Surveyor")header.Surveyor=strTmp1;elseif(strTmp0="Recorder")header.Recorder=strTmp1;elseif(strTmp0="Date")header.Date=strTmp1;elseif(strTmp0="M

36、eteorogy")header.Meteorogy.temperature=_tstof(strTmp1);header.Meteorogy.pressure=_tstof(strTmp2);header.Meteorogy.humidity=_tstof(strTmp3);elseif(strTmp0="AngleAccuracy")header.AngleAccuracy=_tstof(strTmp1);elseif(strTmp0="DistanceAccuracy")header.DistanceAccuracy.a=_tstof(s

37、trTmp1);header.DistanceAccuracy.b=_tstof(strTmp2);elseif(strTmp0="StationCount")header.StationCount=_ttoi(strTmp1);header.StationCoor=newControlPointDataheader.StationCount;elseif(strTmp0="StationName")/控制点坐标初始化for(inti=0;i<header.StationCount;i+)header.StationCoori.strName=st

38、rTmpi+1;header.StationCoori.X=0;header.StationCoori.Y=0;if(strTmp!=NULL)/释放内存deletestrTmp;strTmp=NULL;sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");if(strLine="Givendata")/读取已知数据while(strLine!=_T("ENDGivendata")sf.ReadString(strLine);Obsdata+=strLine;Obsdata

39、+=_T("rn");' ,n1);if(strLine!=_T("ENDGivendata")strTmp=SplitString(strLine,elsebreak;if(strTmp0="Coor")KnownPointCount=_ttoi(strTmp1);KnownPoint=newControlPointDataKnownPointCount;if(strTmp!=NULL)/释放内存deletestrTmp;strTmp=NULL;for(inti=0;i<KnownPointCount;i+)sf.Re

40、adString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");strTmp=SplitString(strLine,',',n1);KnownPointi.strName=strTmp0;KnownPointi.X=_tstof(strTmp1);KnownPointi.Y=_tstof(strTmp2);if(strTmp!=NULL)/释放内存deletestrTmp;strTmp=NULL;elseif(strTmp0="Dist")KnownDistCount=_ttoi(strTmp1

41、);KnownDist=newCDistObsKnownDistCount;if(strTmp!=NULL)/释放内存deletestrTmp;strTmp=NULL;for(inti=0;i<KnownDistCount;i+)sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");strTmp=SplitString(strLine,',',n1);KnownDisti.cpStart.strName=strTmp0;KnownDisti.cpEnd.strName=strTmp1;Kno

42、wnDisti.dDist=_tstof(strTmp2);if(strTmp!=NULL)/释放内存deletestrTmp;strTmp=NULL;elseif(strTmp0="Angle")KnownBearingCount=_ttoi(strTmp1);KnownBearing=newCBearingObsKnownBearingCount;if(strTmp!=NULL)/释放内存deletestrTmp;strTmp=NULL;for(inti=0;i<KnownBearingCount;i+)sf.ReadString(strLine);Obsdata

43、+=strLine;Obsdata+=_T("rn");strTmp=SplitString(strLine,',',n1);KnownBearingi.cpStation.strName=strTmp0;KnownBearingi.cpObject.strName=strTmp1;KnownBearingi.angleObsValue(DMS)=_tstof(strTmp2);if(strTmp!=NULL)/释放内存deletestrTmp;strTmp=NULL;for(inti=0;i<KnownPointCount;i+)/将已知点数据传到S

44、tationCoor中for(intj=0;j<header.StationCount;j+)if(KnownPointi.strName=header.StationCoorj.strName)header.StationCoorj.X=KnownPointi.X;header.StationCoorj.Y=KnownPointi.Y;sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");if(strLine="Obsdata")/读取观测数据while(strLine!=_T(&qu

45、ot;ENDObsdata")sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");if(strLine!=_T("ENDObsdata")strTmp=SplitString(strLine,',',n1);elsebreak;if(strTmp0="Angle")ObsBearingCount=_ttoi(strTmp1);ObsBearing=newCBearingObsObsBearingCount;if(strTmp!=NULL)/释放内

46、存deletestrTmp;strTmp=NULL;for(inti=0;i<ObsBearingCount;i+)sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");strTmp=SplitString(strLine,',',n1);ObsBearingi.cpStation.strName=strTmp0;ObsBearingi.cpObject.strName=strTmp1;ObsBearingi.angleObsValue(DMS)=_tstof(strTmp2);if(str

47、Tmp!=NULL)/释放内存deletestrTmp;strTmp=NULL;elseif(strTmp0="Dist")ObsDistCount=_ttoi(strTmp1);ObsDist=newCDistObsObsDistCount;if(strTmp!=NULL)/释放内存deletestrTmp;strTmp=NULL;for(inti=0;i<ObsDistCount;i+)sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");,n1);strTmp=SplitStrin

48、g(strLine,','ObsDisti.cpStart.strName=strTmp0;ObsDisti.cpEnd.strName=strTmp1;ObsDisti.dDist=_tstof(strTmp2);if(strTmp!=NULL) / 释放内存deletestrTmp;strTmp=NULL;if(strTmp!=NULL)/释放内存deletestrTmp;strTmp=NULL;intfor count=0;(inti=0;i<ObsBearingCount;i+)if(ObsBearingi.angleObsValue(DMS)=0)count+=

49、1;header.OriAngleCount=count;/确定测站数sf.Close();/关闭文件UpdateData(FALSE);constdoublepi=3.1415926;doubleCControlnetAdjustmentDlg:Azimuth(doubleX1,doubleY1,doubleX2,doubleY2)/求方位角,返回弧度doubledx,dy;dx=X2-X1;dy=Y2-Y1+0.0001;return(pi-sgn(dy)*pi/2-atan(dx/dy);intCControlnetAdjustmentDlg:sgn(doubleX)/符号函数if(X&

50、gt;=0)return1;elsereturn-1;doubleCControlnetAdjustmentDlg:OutX(CStringstrName)/导出Xfor(inti=0;i<header.StationCount;i+)if(header.StationCoori.strName=strName)return(header.StationCoori.X);doubleCControlnetAdjustmentDlg:OutY(CStringstrName)/导出Yfor(inti=0;i<header.StationCount;i+)if(header.Statio

51、nCoori.strName=strName)return(header.StationCoori.Y);intCControlnetAdjustmentDlg:KnoworUnKnow(CStringstrName)/判断一个控制点是否已知,已知返回,未知返回-1inta;for(inti=0;i<KnownPointCount;i+)if(KnownPointi.strName=strName)a=1;break;elsea=-1;returna;doubleCControlnetAdjustmentDlg:Max(CMatrixB,intm,intn)/求矩阵中最大值doublea

52、=0;for(inti=0;i<m;i+)for(intj=0;j<n;j+)if(fabs(B(i,j)>a)a=fabs(B(i,j);returna;doubleCControlnetAdjustmentDlg:XKnoworUnKnow()/求控制点坐标中是否还存在未知点,存在返回,不存在返回-1doublea;for(inti=0;i<header.StationCount;i+)if(header.StationCoori.X=0)a=1;break;elsea=-1;returna;voidCControlnetAdjustmentDlg:OnBnClic

53、kedRadio2()/坐标推算/TODO:在此添加控件通知处理程序代码dofor(inti=0;i<header.StationCount;i+)if(header.StationCoori.X=0)for(intj=0;j<ObsBearingCount;j+)if(ObsBearingj.cpObject.strName=header.StationCoori.strName)&&(OutX(ObsBearingj.cpStation.strName)!=0)for(intk=0;k<ObsBearingCount;k+)if(ObsBearingk.c

54、pStation.strName=ObsBearingj.cpStation.strName)&&(OutX(ObsBearingk.cpObject.strName)!=0)doubleKnowAzi;KnowAzi=Azimuth(OutX(ObsBearingk.cpObject.strName),OutY(ObsBearingk.cpObject.strName),OutX(ObsBearingk.cpStation.strName),OutY(ObsBearingk.cpStation.strName);/返回弧度doublelangle;/左角langle=ObsBearingj.angleObsValue(RAD)-ObsBearingk.angleObsValue(RA

温馨提示

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

评论

0/150

提交评论