人人范文网 范文大全

大地测量上机实习报告

发布时间:2020-03-03 11:22:55 来源:范文大全 收藏本文 下载本文 手机版

题目: 大地测量学上机实习

学 号:

姓 名: 班 级:

专 业: 测绘工程 课程名称: 大地测量学基础 课程老师:

大地测量学上机实习报告

一、实习目的:

了解大地测量学的定义以及作用,让同学们充分了解大地测量学在现代社会的重要地位及其广泛的应用,让同学们体验大地测量的一些解题计算方法与运用。也让同学们对于复杂的测绘计算如何用计算机通过编程来解决,同时对于坐标转化和高斯投影的处理方法进行一定的了解。

二、实习任务:

1、

2、空间坐标转换编程; 高斯投影正算编程;

3、高斯投影反算编程;

三、实习时间与地点:

地点:核工楼410教室;

时间:每周四上午一二节课,共三周;

四、实习仪器:

电脑,C++编程软件;

5、实习步骤: 5.1实验方法步骤

1、先了解书本上关于大地主题解算的步骤;

2、根据公式用VC编写程序

3、对编写的程序代码进行调试运行 5.1.1大地坐标空间直角坐标系转换

X(NH)cosBcosL1)空间大地坐标系向空间直角坐标系的转换公式为:Y(NH)cosBsinLZ[N(1e2)H]sinB式中,Na,a为椭球的长半轴,N为椭球的卯酉圈曲率半径a=6378.137km W W1e2sin2B,e2a2b2a2,e为椭球的第一偏心率,b=6356.7523141km。

2)程序代码 #include #include #define PI 3.1415926535897932384626433832795 double rad(double a,double b,double c) {b=b+c/60; a=a+b/60;

a=a/180*PI; return a;} void deg(double d,int *d1,int *d2,double *d3) {d=d/PI; *d1=(int)d; *d2=(int)((d-*d1)*60); *d3=((d-*d1)*60-*d2)*60;} void X1(double a1,double e) {double l,b,h,x,y,z,a,b1,c,n,w; printf("please input L:\n"); scanf("%lf%lf%lf",&a,&b1,&c); l=rad(a,b1,c);

b为椭球的短半轴 printf("please input B:\n"); scanf("%lf%lf%lf",&a,&b1,&c); b=rad(a,b1,c); printf("please input H:\n"); scanf("%lf",&h); w=sqrt((1-e*e*sin(b)*sin(b))); n=a1/w; x=(n+h)*cos(b)*cos(l); y=(n+h)*cos(b)*sin(l); z=(n*(1-e*e)+h)*sin(b); printf("X=%f\nY=%f\nZ=%f\n",x,y,z);} void X2(double a1,double e) {double l,b,h,x,y,z,n,w,m,g,m1,g1,l3,b3;int l1,l2,b1,b2; printf("please input X:\n"); scanf("%lf",&x); printf("please input Y:\n"); scanf("%lf",&y); printf("please input Z:\n"); scanf("%lf",&z); l=atan2(y,x); do{m=(z+a1*e*e*g/sqrt(1+g*g-e*e*g*g))/sqrt(x*x+y*y); m1=atan(m); g1=atan(g); m1=m1/PI*180*3600; g1=g1/PI*180*3600; g=m;} while(sqrt((m1-g1)*(m1-g1))>0.0001); b=atan(m); w=sqrt(1-e*e*sin(b)*sin(b)); n=a1/w; h=sqrt(x*x+y*y)/cos(b)-n; deg(l,&l1,&l2,&l3); deg(b,&b1,&b2,&b3); printf("L=%d°%d'%2.6f''\nB=%d°%d'%2.6f''\nH=%5.6fm\n",l1,l2,l3,b1,b2,b3,h);} void f(int a) {double a1,e,e2;int b,c; printf("please input L,B,H→X,Y,Z:请输入1 或 X,Y,Z→L,B,H:请输入2\n"); scanf("%d",&b); printf("请选择参考椭球面:\n克拉索夫斯基椭球(请输入1) \n或 IUGG 1975椭球(请输入2) \n或 CGCS 2000椭球(请输入3)\n或WGS-84椭球体(请输入4)"); scanf("%d",&c); if (c==1){a1=6378245.0000,e2=0.00669342162297;} else if (c==2){a1=6378140.0000,e2=0.00669438499959;} else if (c==3){a1=6378137.0000,e2=0.00669438002290;} else if (c==4){a1=6378137.0000,e2=0.00669437999013;}; e=sqrt(e2); if (b==1)X1(a1,e); else if(b==2)X2(a1,e);} main() {int a=1; do {f(a); printf("A,B,0\n"); scanf("%d",&a);} while(a); } 调试运行:

5.1.2高斯投影正算

1)由第二条件知 : 位于中央子午线上的点,投影后的纵坐标 x 应等于投影前从赤道量至该点的子午线弧长 X ,即 (8-33) 式第一式中,当 有:

顾及 ( 对于中央子午线 )

得:

依次求得

并代入 (8-33) 式,得到高斯投影正算公式

2)程序代码: #include #include #define PI 3.1415926 #define p 206265 #define e 0.00669437999013 #define e1 0.00673949674227 main() { double m0,m2,m4,m6,m8,a0,a2,a4,a6,a8; double B,X,t,n,N,W,x,y,l; float dd,mm,; int a=6378137; printf("选择WGS-84坐标系\n"); printf("input the B"); scanf("%lf%lf%lf",&dd,&mm,&); B=(dd+mm/60.0+/3600.0)*PI/180.0; W=sqrt(1-e*sin(B)*sin(B)); N=a/W; n=e1*cos(B)*cos(B); t=tan(B); m0=a*(1-e); m2=3/2*e*m0; m4=5/4*e*m2; m6=7/6*e*m4; m8=9/8*e*m6; a0=m0+m2/2+3/8*m4+5/16*m6+35/128*m8; a2=m2/2+m4/2+15/32*m6+7/16*m8; a4=m4/8+3/16*m6+7/32*m8; a6=m6/32+m8/16; a8=m8/128; X=a0*B-a2/2*sin(2*B)+a4/4*sin(4*B)-a6/6*sin(6*B)+a8/8*sin(8*B); printf("X=%lf",X); printf("输入经差l\n"); scanf("%lf",&l);

x=X+(N/(2*p*p))*sin(B)*cos(B)*l*l+(N/(24*p*p*p*p))*sin(B)*cos(B)*cos(B)*cos(B)*(5-t*t+9*n)*l*l*l*l; y=(N/p)*cos(B)*l+(N/(6*p*p*p))*cos(B)*cos(B)*cos(B)*(1-t*t+n)*l*l*l+(N/(120*p*p*p*p*p))*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*(5-18*t*t+t*t*t*t)*l*l*l*l*l; printf("x=%lf\ny=%lf\n",x,y); return 0; } 运行调试结果:

5.1.3高斯投影反算 公式

BBftftf2MfNf5fy2tf24MfN3f53t2f22429tyfff720MfNNfy6190t2t4y6f45flyy32212tffcosBf6N3cosBffy5120N5fcosBf2)程序代码: #include #include

528t2f224t422f6f8ftf#define PI 3.1415926535897932 #define P 206264.806247096355 void main() { long double RadianToAngle(long double alfa); long double Bf(long double a,long double b,long double x); void GSFS(long double a,long double b,long double Bf,long double y,long double *B,long double *l); long double a,b,x,y,L0; long double FSB,FSL; long double *pointer_B,*pointer_L; long double DH; pointer_B=&FSB; pointer_L=&FSL; a=6378140.0000000000;b=6356755.2881575287; printf("请输入x坐标和y坐标:(输入时x坐标和y坐标之间用逗号隔开)\n"); scanf("%lf,%lf",&x,&y); FSB=Bf(a,b,x); DH=floor(y/1000000); y=y-DH*1000000-500000; GSFS(a,b,FSB,y,pointer_B,pointer_L); FSB=RadianToAngle(FSB); FSL=RadianToAngle(FSL); L0=DH*6-3; printf("\n\t===========================计算结果===========================\n"); printf("\n\t\tB=%-20.10lf\t\tL=%-20.10lf\n",FSB,DH*6-3+FSL); printf("\n\t===============\n"); } long double RadianToAngle(long double alfa) { long double alfa1,alfa2; alfa=alfa*180./PI; alfa1=floor(alfa)+floor((alfa-floor(alfa))*60.)/100.; alfa2=(alfa*60.-floor(alfa*60.))*0.006; alfa1+=alfa2; return(alfa1); } long double Bf(long double a,long double b,long double x) { long double e,m0,m2,m4,m6,m8; long double a0,a2,a4,a6,a8; long double B,FB,Bn1,Bn; int n=0; e=(sqrt(a*a-b*b))/a; m0=a*(1-e*e); m2=3.0/2.0*e*e*m0; m4=5.0/4.0*e*e*m2; m6=7.0/6.0*e*e*m4; m8=9.0/8.0*e*e*m6; a0=m0+m2/2.0+3.0/8.0*m4+5.0/16.0*m6+35.0/128.0*m8; a2=m2/2.0+m4/2.0+15.0/32.0*m6+7.0/16.0*m8; a4=m4/8.0+3.0/16.0*m6+7.0/32.0*m8; a6=m6/32.0+m8/16.0; a8=m8/128.0; B=x/a0; FB=a2/2.0*sin(2*B)-a4/4.0*sin(4*B)+a6/6.0*sin(6*B)-a8/8.0*sin(8*B); do { Bn=B; B=(x+FB)/a0; FB=a2/2.0*sin(2*B)-a4/4.0*sin(4*B)+a6/6.0*sin(6*B)-a8/8.0*sin(8*B); Bn1=B; } while(fabs((Bn1-Bn)*P)>=0.000000000001); return(B); } void GSFS(long double a,long double b,long double Bf,long double y,long double *B,long double *l) { long double e,e1,V,t,u2; long double n0,n2,n4,n6,n8,sin2B,sin4B,sin6B,sin8B,N; e=(sqrt(a*a-b*b))/a; e1=(sqrt(a*a-b*b))/b; V=sqrt(1+e1*e1*cos(Bf)*cos(Bf)); t=tan(Bf); u2=e1*e1*cos(Bf)*cos(Bf); n0=a; n2=1.0/2.0*e*e*n0; n4=3.0/4.0*e*e*n2; n6=5.0/6.0*e*e*n4; n8=7.0/8.0*e*e*n6; sin2B=pow(sin(Bf),2); sin4B=pow(sin(Bf),4); sin6B=pow(sin(Bf),6); sin8B=pow(sin(Bf),8); N=n0+n2*sin2B+n4*sin4B+n6*sin6B+n8*sin8B;

*B=Bf-1.0/2.0*V*V*t*((y/N)*(y/N)-1.0/12.0*(5+3*t*t+u2-9*u2*t*t)*pow((y/N),4)+1.0/360.0*(61+90*t*t+45*pow(t,4))*pow((y/N),6)); *l=1.0/cos(Bf)*((y/N)-1.0/6.0*(1+2*t*t+u2)*pow((y/N),3)+1.0/120.0*(5+28*t*t+24*pow(t,4)+6*u2+8*u2*t*t)*pow(y/N,5)); } 3)运行结果:

7、实习总结:

通过这次大地坐标转换及高斯投影正反算程序代码编写设计的上机操作学习,我更加了解了如何运用计算机编程去处理复杂的测绘计算,并且也知道了对于编程时遇到的一般问题该如何解决,对于坐标转换和高斯正反算的一些理念也有一定的了解。本次实习,利用计算机编程来实现测量数据的处理,让我对坐标系之间的转化,高斯投影正反算的原理以及计算过程有了更深刻的理解和记忆,感觉受益匪浅。不过在本次实习期间,也出现了一些小问题。在编写程序的时候,略显生疏,花费了较多的时间,以后有待提高;对于计算公式中的有的字母,忘记其所代表的具体意义,不过最终通过复习,搞明白每一个字母的含义。

实习就是一个理论与实践相结合的过程,希望自己能在这一方面有更大的进步!

大地测量实习报告

大地测量实习报告

大地测量实习报告

大地测量实习报告1

万方科技学院大地测量实习报告

大地测量实习总结

大地测量实习总结

大地测量与工程测量实习报告

计算机上机实习报告

上机实习报告2

大地测量上机实习报告
《大地测量上机实习报告.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档