《2023年大地测量实习报告.docx》由会员分享,可在线阅读,更多相关《2023年大地测量实习报告.docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023年大地测量实习报告 大地测量综合实习 实习报告 学院 :遥感信息工程学院 姓名 :王海斌 学号 :2023302590134 指导老师 :丁老师 一实习目的和意义 通过编程掌握大地测量的特点,加深对课本中基本公式的理解和运用,提高编程计算的能力通过用VC+语言编写大地坐标解算的一些基本算法程序,使我们巩固和掌握使用MFC进行大地测量解算的基本技能,提高实际动手能力,并通过实际编程了解测绘软件的实现的基本原理。为我们进一步学习大地测量、遥感等专业课程处理解决实际问题奠定基础。 二实习内容 第一部分:大地测量主题解算(高斯正算和高斯反算): 一,函数头文件: #include stdafx
2、.h #include #include #include #include #define NN 8 #define PI 3.141592653589793 #define P 206265 二,控制变量:(数值按课本上给出赋初值); void OuDegree(double ); /声明格式输出控制函数 double A12, B0, L0, A0, Bm, Am, deltaB, deltaL, deltaA, B2, L2, A21; double M, N, Nm, Vm, tm, gm; double a=6378245.0; double e2=0.00669342162296
3、6; double e12=0.006738525414683; double c=6399698.9017827110; 高斯平均引数的正算公式: cout double degreeNN=47,35,44,minuteNN=46,49,12,secondNN=52.6470,36.3300,13.664;/定义3个数组,第一个存放,第二个存放,第三个存放 double B1=(degree0+minute0/60+second0/3600)*PI/180; /将 B1 化成弧度 double L1=(degree1+minute1/60+second1/3600)*PI/180; /将 A
4、1化成弧度 double A1=(degree2+minute2/60+second2/3600)*PI/180; /将 L1 化成弧度 double S=44797.2826; M=(a*(1-e2)/sqrt(pow(1-e2*pow(sin(B1),2),3); N=a/sqrt(1-e2*pow(sin(B1),2); deltaB=B0=S*cos(A1)/M; deltaL=L0=S*sin(A1)/(cos(B1)*N); deltaA=A0=L0*sin(B1); do B0=deltaB; A0=deltaA; L0=deltaL; Bm=B1+B0/2; Am=A1+A0/
5、2; tm=tan(Bm); gm=sqrt(e12)*cos(Bm); Nm=a/sqrt(1-e2*pow(sin(Bm),2); Vm=sqrt(1+e12*pow(cos(Bm),2); deltaB=Vm*Vm*S*cos(Am)*(1+S*S*(sin(Am)*sin(Am)*(2+3*tm*tm+2*gm*gm)+3*gm*gm*cos(Am)*cos(Am)*(tm*tm-1-gm*gm-4*tm*tm*gm*gm)/(24*Nm*Nm)/Nm; deltaL=S*sin(Am)*(1+S*S*(sin(Am)*sin(Am)*tm*tm-cos(Am)*cos(Am)*(1+
6、gm*gm-9*tm*tm*gm*gm)/(24*Nm*Nm)/(Nm*cos(Bm); deltaA=S*sin(Am)*tm*(1+S*S*(cos(Am)*cos(Am)*(2+7*gm*gm+9*tm*tm*gm*gm+5*pow(gm,4)+sin(Am)*sin(Am)*(2+tm*tm+2*gm*gm)/(24*Nm*Nm)/Nm; while(deltaB-B0)1e-10&(deltaL-L0)1e-10&(deltaA-A0)1e-10); B2=B1+deltaB; L2=L1+deltaL; A21=A1+deltaA+PI; cout double degreeNN=
7、47,35,48,36,minuteNN=46,49,04,14,secondNN=52.6470,36.3300,09.6384,45.0505;/定义3个数组,第一个存放,第二个存放,第三个存放 double B1=(degree0+minute0/60+second0/3600)*PI/180; /将 B1 化成弧度 double L1=(degree1+minute1/60+second1/3600)*PI/180; /将 A1化成弧度 double B2=(degree2+minute2/60+second2/3600)*PI/180; /将 L1 化成弧度 double L2=(d
8、egree3+minute3/60+second3/3600)*PI/180; /将 L1 化成弧度 double U,V,r01,r21,r03,s10,s12,s30,t01,t21,t03,T,S; Bm=(B1+B2)/2; deltaB=B2-B1; deltaL=L2-L1; tm=tan(Bm); gm=sqrt(e12)*cos(Bm); Nm=a/sqrt(1-e2*pow(sin(Bm),2); Vm=sqrt(1+e12*pow(cos(Bm),2); r01=Nm*cos(Bm); r21=Nm*cos(Bm)*(1-gm*gm-9*gm*gm*tm*tm)/24; r
9、03=Nm*pow(cos(Bm),3)*tm*tm/24; s10=Nm/(Vm*Vm); s12=Nm*cos(Bm)*cos(Bm)*(-2-3*tm*tm+3*tm*tm*gm*gm)/24; s30=Nm*(gm*gm-tm*tm*gm*gm)/8; t01=tm*cos(Bm); t21=cos(Bm)*tm*(3+2*gm*gm-2*pow(gm,4)/24; t03=pow(cos(Bm),3)*tm*(1+gm*gm)/12; U=r01*deltaL+r21*deltaB*deltaB*deltaL+r03*pow(deltaL,3); V=s10*deltaB+s12*d
10、eltaB*deltaL*deltaL+s30*pow(deltaB,3); deltaA=t01*deltaL+t21*deltaB*deltaB*deltaL+t03*pow(deltaL,3); Am=atan(U/V); S=U/sin(Am); A12=Am-deltaA/2; A21=Am+deltaA/2+PI; cout void OuDegree(double m) int aa,bb; double cc; aa=m*206265/3600; bb=m*206265/60-aa*60; cc=m*206265-aa*3600-bb*60; printf(%d%d%fnn,a
11、a,bb,cc); 四:结果: 1, 正算: 2, 反算: 第二部分:坐标系坐标转换:(MFC)(克氏椭球,国际椭球,WGS84椭球); 一, TCITEM item; item.mask = TCIF_TEXT; item.pszText = 克氏椭球 ; m_tab.InsertItem (0,&item); item.pszText = 1975国际椭球; m_tab.InsertItem (1,&item); item.pszText = WGS84椭球; m_tab.InsertItem (2,&item); 二:Dialog: 三:赋予初值; m_Ld = 111; m_Lm =
12、17; m_Ls = 58.3596; /经度坐标; m_Bd = 30; m_Bm = 45; m_Bs = 25.4425; /纬度坐标; m_x = 0.0; m_y = 0.0; m_nLd = 0; m_nLm = 0; m_nLs = 0; m_nBd = 0; m_nBm = 0; m_nBs = 0; 四:选择坐标计算类型 case 0 : _a = 6378245.0; _b = 6356863.0187730473; break; case 1 : _a = 6378140.0; _b = 6356755.2881575287; break; case 2 : _a = 6
13、378137.0; _b = 6356752.3142; break; e =pow( (_a*_a_b*_b) , 0.5) / _b; m0 = _a * (1e*e * sin(B_r)*sin(B_r) , -0.5); t = tan(B_r); nl_squr = e_*e_ * pow(cos(B_r), 2); l = Le*e * sin(Bf)*sin(Bf) , -0.5); Mf = _a * (1e*e * sin(Bf)*sin(Bf) , -1.5); tf = tan(Bf); nlf_squr = e_*e_ * pow(cos(Bf), 2); double
14、 B_, L_; B_ = Bftf*(61+90*tf*tf+45*pow(tf,4)*pow(m_y,6)/(720*Mf*pow(Nf,5); L_ = 111*PI/180 + m_y/(Nf*cos(Bf) - (1+2*tf*tf+nlf_squr)*pow(m_y,3)/(6*pow(Nf,3)*cos(Bf) + (5+28*tf*tf+24*pow(tf,4)+6*nlf_squr+8*nlf_squr*tf*tf)*pow(m_y,5)/(120*pow(Nf,5)*cos(Bf); double B_s, L_s; int B_d, B_m, L_d, L_m; B_ *
15、= 3600*180/PI; L_ *= 3600*180/PI; m_nBd = int(B_/3600); m_nLd = int(L_/3600); m_nBm = int(B_-m_nBd*3600)/60); m_nLm = int(L_-m_nLd*3600)/60) ; m_nBs = B_-m_nBd*3600-m_nBm*60; m_nLs = L_-m_nLd*3600-m_nLm*60; CDialog:UpdateData( false ); 第三部分:高斯投影带计算; 一三度投影带: void CGuacaltDlg:OnButton1() /三度带投影 / TODO
16、: Add your control notification handler code here if(bzs) int n=int(m_L1/3.0+0.5); L0=3*n*3600; ZSGuaCalculate(); if(bfs) L0=m_mL1*3600; FSGuaCalculate(); UpdateData(false); 二六度投影带; void CGuacaltDlg:OnButton2() /六度带投影 / TODO: Add your control notification handler code here if(bzs) int n=int(m_L1/6.0
17、)+1; L0=(6*n-3)*3600; ZSGuaCalculate(); if(bfs) L0=m_mL1*3600; FSGuaCalculate(); UpdateData(false); 三成果分析 通过数据的输入和输出,并将自己得到的结果与参考结果作出比较,不断改正自己的错误,得到正确的结果; 四实习总结与体会 通过实习,对课堂上所学的有关大地测量结算的内容有了更深的认识和了解,也从本质上了解了大地测量数据的处理方法。对各种算法有了较清楚的了解和掌握。在这次实习过后,对VC+的使用和MFC的理解也有了进一步的加强,仍旧发现MFC是难点。由于水平有限,很多算法太过复杂,对此部分代码不得不借鉴已有的程序,而只能达到大致的理解。但在实习得到最终成果后,还是比较有成就感的,对课程和专业也有了更深的认识,增强了今后学习的兴趣,也明确了今后努力的方向。 十分感谢学院和老师给我们这次实习的机会,使我们加强了课程的学习,跟让我们认识到了自身的不足。 大地测量实习报告 大地测量实习报告 大地测量实习报告 大地测量上机实习报告 大地测量实习报告1 大地测量与工程测量实习报告 大地测量实习总结 大地测量实习总结 大地测量学实习报告 大地测量学实习报告
限制150内