大地测量实习报告_大地测量实习报告范文

2020-02-28 实习报告 下载本文

大地测量实习报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“大地测量实习报告范文”。

大地测量综合实习

实习报告

学院 :遥感信息工程学院

姓名 :王海斌 学号 :2008302590134 指导老师 :丁老师

一.实习目的和意义

通过编程掌握大地测量的特点,加深对课本中基本公式的理解和运用,提高编程计算的能力通过用VC++语言编写大地坐标解算的一些基本算法程序,使我们巩固和掌握使用MFC进行大地测量解算的基本技能,提高实际动手能力,并通过实际编程了解测绘软件的实现的基本原理。为我们进一步学习大地测量、遥感等专业课程处理解决实际问题奠定基础。

二.实习内容

第一部分:大地测量主题解算(高斯正算和高斯反算):

一,函数头文件:

#include “stdafx.h”

#include #include #include #include

#define NN 8 #define PI 3.14***93 #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.***;double e12=0.***;double c=6399698.9017827110;高斯平均引数的正算公式:

cout

double degree[NN]={47,35,44},minute[NN]={46,49,12},second[NN]={52.6470,36.3300,13.664};//定义3个数组,第一个存放°,第二个存放′,第三个存放″

double B1=(degree[0]+minute[0]/60+second[0]/3600)*PI/180;//将 B1 化成弧度

double L1=(degree[1]+minute[1]/60+second[1]/3600)*PI/180;//将 A1化成弧度

double A1=(degree[2]+minute[2]/60+second[2]/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/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+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 degree[NN]={47,35,48,36},minute[NN]={46,49,04,14},second[NN]={52.6470,36.3300,09.6384,45.0505};//定义3个数组,第一个存放°,第二个存放′,第三个存放″

double B1=(degree[0]+minute[0]/60+second[0]/3600)*PI/180;//将 B1 化成弧度

double L1=(degree[1]+minute[1]/60+second[1]/3600)*PI/180;//将 A1化成弧度

double B2=(degree[2]+minute[2]/60+second[2]/3600)*PI/180;//将 L1 化成弧度

double L2=(degree[3]+minute[3]/60+second[3]/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;r03=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*deltaB*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′%f″nn”,aa,bb,cc);} 四:结果:

1,正算:

2,反算:

第二部分:坐标系坐标转换:(MFC)(克氏椭球,国际椭球,WGS—84椭球);

一,TCITEM item;

item.mask = TCIF_TEXT;

item.pszText = “ 克氏椭球 ”;

m_tab.InsertItem(0,&item);

item.pszText = “1975国际椭球”;

m_tab.InsertItem(1,&item);

item.pszText = “ WGS—84椭球”;

m_tab.InsertItem(2,&item);二:Dialog:

三:赋予初值;

m_Ld = 111;m_Lm = 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 = 6378137.0;

_b = 6356752.3142;

break;}

e =pow((_a*_a_b*_b), 0.5)/ _b;

m[0] = _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 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_ *= 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: 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)+1;

L0=(6*n-3)*3600;

ZSGuaCalculate();}

if(bfs){

L0=m_mL1*3600;

FSGuaCalculate();} UpdateData(false);三.成果分析

通过数据的输入和输出,并将自己得到的结果与参考结果作出比较,不断改正自己的错误,得到正确的结果; 四.实习总结与体会

通过实习,对课堂上所学的有关大地测量结算的内容有了更深的认识和了解,也从本质上了解了大地测量数据的处理方法。对各种算法有了较清楚的了解和掌握。在这次实习过后,对VC++的使用和MFC的理解也有了进一步的加强,仍旧发现MFC是难点。由于水平有限,很多算法太过复杂,对此部分代码不得不借鉴已有的程序,而只能达到大致的理解。但在实习得到最终成果后,还是比较有成就感的,对课程和专业也有了更深的认识,增强了今后学习的兴趣,也明确了今后努力的方向。

十分感谢学院和老师给我们这次实习的机会,使我们加强了课程的学习,跟让我们认识到了自身的不足。

《大地测量实习报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
大地测量实习报告
点击下载文档
相关专题 大地测量实习报告范文 实习报告 测量 大地 大地测量实习报告范文 实习报告 测量 大地
[实习报告]相关推荐
    [实习报告]热门文章
      下载全文