高斯正反算及换带计算matlab源代码_附截图
[转载]高斯正反算
![[转载]高斯正反算](https://img.taocdn.com/s3/m/d13bd7fbe109581b6bd97f19227916888486b9df.png)
[转载]⾼斯正反算⼤地坐标向笛卡尔坐标转换⾼斯正反算采⽤不同椭球实现⾼斯克⾥格投影,将经纬度坐标转换为⾼斯平⾯坐标:正算⾼斯平⾯坐标转换为不同椭球下的经纬度坐标:反算1void GaussProjectDirect(double a,double efang,double B,double L,double L0,double& x,double &y,double& R)//⾼斯投影正算克⽒2 {34double b=aefangtob(a,efang);5double e2=seconde(a,b);6double W=sqrt(1-efang*sin(B)*sin(B));printf("W=%f",W);7double N=a/W;printf("N=%f",N);8double M=a*(1-efang)/pow(W,3);printf("M=%f",M);9double t=tee(B);10double eitef=eitefang(a,b,B);11double l=L-L0;12//主曲率半径计算13double m0,m2,m4,m6,m8,n0,n2,n4,n6,n8;14 m0=a*(1-efang); n0=a;15 m2=3.0/2.0*efang*m0; n2=1.0/2.0*efang*n0;16 m4=5.0/4.0*efang*m2; n4=3.0/4.0*efang*n2;17 m6=7.0/6.0*efang*m4; n6=5.0/6.0*efang*n4;18 m8=9.0/8.0*efang*m6; n8=7.0/8.0*efang*n6;19//⼦午线曲率半径20double a0,a2,a4,a6,a8;21 a0=m0+m2/2+3*m4/8+5*m6/16+35*m8/128;22 a2=m2/2+m4/2+15*m6/32+7.0/16.0*m8;23 a4=m4/8.0+3.0/16.0*m6+7.0/32.0*m8;24 a6=m6/32+m8/16;25 a8=m8/128;2627double X=a0*B-a2/2*sin(2*B)+a4/4*sin(4*B)-a6/6*sin(6*B)+a8/8*sin(8*B);28 x=X+N/2*t*cos(B)*cos(B)*l*l+N/24*t*(5-t*t+9*eitef+4*pow(eitef,2))*pow(cos(B),4)*pow(l,4)+N/720*t*(61-58*t*t+pow(t,4))*pow(cos(B),6)*pow(l,6);29 y=N*cos(B)*l+N/6*(1-t*t+eitef)*pow(cos(B),3)*pow(l,3)+N/120*(5-18*t*t+pow(t,4)+14*eitef-58*eitef*t*t)*pow(cos(B),5)*pow(l,5);30 R=sqrt(M*N);31 }323334//⾼斯投影反算353637void GaussProjectInvert(double a,double efang,double x,double y,double L0,double &B,double& L,double& R)38 {39double b=aefangtob(a,efang);404142double m0,m2,m4,m6,m8,n0,n2,n4,n6,n8;43 m0=a*(1-efang); n0=a;44 m2=3.0/2.0*efang*m0; n2=1.0/2.0*efang*n0;45 m4=5.0/4.0*efang*m2; n4=3.0/4.0*efang*n2;46 m6=7.0/6.0*efang*m4; n6=5.0/6.0*efang*n4;47 m8=9.0/8.0*efang*m6; n8=7.0/8.0*efang*n6;484950//⼦午线曲率半径51double a0,a2,a4,a6,a8;52 a0=m0+m2/2+3*m4/8+5*m6/16+35*m8/128;53 a2=m2/2+m4/2+15*m6/32+7.0/16.0*m8;54 a4=m4/8.0+3.0/16.0*m6+7.0/32.0*m8;55 a6=m6/32+m8/16;56 a8=m8/128;575859double X=x;60double FBf=0;61double Bf0=X/a0,Bf1=0;62while((Bf0-Bf1)>=0.0001)63 { Bf1=Bf0;64 FBf=a0*Bf0-a2/2*sin(2*Bf0)+a4/4*sin(4*Bf0)-a6/6*sin(6*Bf0)+a8/8*sin(8*Bf0);65 Bf0=(X-FBf)/a0;66 }67double Bf=Bf0;68double Vf=bigv(a,b,Bf);69double tf=tee(Bf);70double Nf=bign(a,b,Bf);71double eiteffang=eitefang(a,b,Bf);72double Bdu=rad_deg(Bf)-1/2.0*Vf*Vf*tf*(pow((y/Nf),2)-1.0/12*(5+3*tf*tf+eiteffang-9*eiteffang*tf*tf)*pow((y/Nf),4)+1.0/360.0*(61+90*tf*tf+45*tf*tf)*pow((y/Nf),6))*180/PI; 73double ldu=1.0/cos(Bf)*(y/Nf+1.0/6.0*(1+2*tf*tf+eiteffang)*pow((y/Nf),3)+1.0/120.0*(5+28*tf*tf+24*tf*tf+6*eiteffang+8*eiteffang*tf*tf)*pow((y/Nf),5))*180.0/PI;747576 B=deg_int(Bdu);77 L=L0+deg_int(ldu);78double W=sqrt(1-efang*sin(B)*sin(B));printf("W=%f\n",W); 79double N=a/W;printf("N=%f\n",N);80double M=a*(1-efang)/pow(W,3);printf("M=%f\n",M);81 R=sqrt(M*N);828384 }。
GAUSSLE坐标正反算fx

GAUSSLE坐标正反算fx-5800程序源程序1.正算主程序Lbi 0:“G”?K:“Z=-1,Q=0,Y=1”?AIf A=-1:Then Prog “ZX”:Prog “GSZS”:IfEnd If A=1:Then Prog “YX”:Prog “GSZS”:IfEnd If A=0:Then Prog “QX”:Prog “GSZS”:IfEnd “X=”:X◢”Y=”:Y◢Goto 0说明:K 正算时所求点的里程A 选择线路,左幅=-1,右幅=1,整体式=0 正算子程序GSZS((P-R)÷(2(H-O)PR))→D:“JIAODU”?M:”JULI(-Z +Y)” ?L(Abs(K-O)) →J:Prog"SUB1":(F-M) →FReturn2. 反算主程序 GSFSLbi 0:?X:?Y:X→Z[2]:Y→Z[3]:“QDXO”?I:"QDY0"?S:"QDLC"?O:"QDFWJ "?G:"ZDLC"?H:"QDR"?P:"ZDR"? R:”Q(Z=-1 ZX=0 Y=1)” ?Q:( (P-R)÷(2(H-O)PR)) →D:(Abs((Y-S)cos(G-90)-(X-I)sin(G-90)) ) →J:0→L:90→M:Lbl 1:Prog "SUB1":((Z[3]-Y)cos(G-90+QJ(1÷P+JD)×180÷π)-(Z[2]-X)sin(G-90+QJ(1÷P +JD) ×180÷π)) →L:If:AbsL<10-6 Then Goto2:Else J+L→J:Go to 1:←┘Lbl 2:0→L:Prog "SUB1":((Z[3]-Y)÷sinF)→L:”K=”: O+J→k◢”L=”:L→L◢Goto 03. 反算,正算子程序(SUB1)0.1184634425→A:0.2393143352→B: 0.2844444444→Z[4]:0.0469100770→C: 0.2307 653449→E: 0.5→Z[1]:(I+J(Acos(G+QCJ(1÷P+CJD)×180÷π)+Bcos(G+QEJ(1÷P+EJD)×180÷π)+Z[4]cos(G+Q Z[1]J(1÷P+Z[1]JD)×180÷π)+Bcos(G+Q(1-E)J(1÷P+(1-E)JD)×180÷π)+Acos(G+Q (1-C)J(1÷P+(1-C)JD) ×180÷π))) →X:(S+J(Asin(G+QCJ(1÷P+CJD)×180÷π)+Bsin(G+QEJ(1÷P+EJD)×180÷π)+Z[4]sin(G+QZ [1]J(1÷P+Z[1]JD)×180÷π)+Bsin(G+Q(1-E)J(1÷P+(1-E)JD)×180÷π)+Asin(G+Q (1-C)J (1÷P+(1-C)JD) ×180÷π))) →Y:(G+QJ(1÷P+JD) ×180÷π+M) →F:(X+LcosF)→X:(Y+LsinF) →Y4. 曲线元要素数据库:ZX/YX/QXIf K<(起点里程):Then Goto 2:IfEndIf K<(ZDLC): Then QDXO →I:QDY0→S:QDLC→O:QDFWJ →G:ZDLC→H:QDR→P:ZDR→R:Q(Z=-1 ZX=0 Y=1)→Q: Goto 3:IfEnd……….(注:如有多个曲线元要素继续添加入数据库ZX/YX/QX中)Lbl 2:”NO”Lbl 3:Return说明:一、程序功能及原理1.功能说明:本程序由两个主程序——正算主程序(GSZS)、反算主程序(GSFS)和两个子程——正算子程序(SUB1)、线元数据库(DAT-M)构成,可以根据曲线段——直线、圆曲线、缓和曲线(完整或非完整型)的线元要素(起点坐标、起点里程、起点切线方位角、终点里程、起点曲率半径、止点曲率半径)及里程边距或坐标,对该曲线段范围内任意里程中边桩坐标进行正反算。
(完整word版)高斯投影正反算 代码

L=l+L01; ///
反算就出
L B
l=L-L02;
B=Bf-(1-(b4-0.12*Z*Z)*Z*Z)*Z*Z*b2;
t=tan(B);
n2=e2*cos(B)*cos(B);
V=sqrt(1+n2);
cB2=pow(cos(B),2);
N=6399698.902-(21562.267-(108.973-0.612*cB2)*cB2)*cB2; //N=c/V;
l=L-111*3600/P // l=((m%6)*3600+n*60+h)/P;
t=tan(B);
n2=e2*cos(B)*cos(B);
V=sqrt(1+n2);
cB2=pow(cos(B),2);
N=6399698.902-(21562.267-(108.973-0.612*cB2)*cB2)*cB2; // N=c/V;
a0=32140.404-(135.3302-(0.7092-0.004*cB2)*cB2)*cB2;
a4=(0.25+0.00252*cB2)*cB2-0.04166;
a6=(0.166*cB2-0.084)*cB2;
a3=(0.3333333+0.001123*cB2)*cB2-0.1666667;
#include "stdafx.h"
#include "iostream.h"
#include "math.h"
#include "stdio.h"
#define P 206264.806247096355
C#高斯正算高斯反算高斯换带等

C#⾼斯正算⾼斯反算⾼斯换带等⾸先,你要确定椭球参数:C#代码1. a = 6378140; //西安80椭球 IGA752. e2 = 0.006694384999588;3. m0 = a * (1 - e2);4. m2 = 3.0 / 2 * e2 * m0;5. m4 = 5.0 / 4 * e2 * m2;6. m6 =7.0 / 6 * e2 * m4;7. m8 = 9.0 / 8 * e2 * m6;8. a0 = m0 + m2 / 2 + (3.0 / 8.0) * m4 + (5.0 / 16.0) * m6 + (35.0 / 128.0) * m8;9. a2 = m2 / 2 + m4 / 2 + 15.0 / 32 * m6 + 7.0 / 16 * m8;10. a4 = m4 / 8 + 3.0 / 16 * m6 + 7.0 / 32 * m8;11. a6 = m6 / 32 + m8 / 16;12. a8 = m8 / 128;13. xx = 0;14. yy = 0;15. _x = 0;16. _y = 0;17. BB = 0;18. LL = 0;下⾯才开始正题:⾼斯正算:把经纬度坐标转换为平⾯坐标C#代码1. void GaussPositive(double B, double L, double L0)2. {3. double X, t, N, h2, l, m, Bmiao, Lmiao;4. int Bdu, Bfen, Ldu, Lfen;5. Bdu = (int)B;6. Bfen = (int)(B * 100) % 100;7. Bmiao = (B - Bdu - Bfen * 0.01) * 10000.0;8. B = Bdu * PI / 180.0 + (Bfen / 60.0) * PI / 180.0 + Bmiao / 3600.0 * PI / 180.0;9. Ldu = (int)L;10. Lfen = (int)(L * 100) % 100;11. Lmiao = (L - Ldu - Lfen * 0.01) * 10000.0;12. L = Ldu * PI / 180.0 + (Lfen / 60.0) * PI / 180 + Lmiao / 3600.0 * PI / 180.0;13. l = L - L0 * PI / 180;14. X = a0 * B - Math.Sin(B) * Math.Cos(B) * ((a2 - a4 + a6) + (2 * a4 - 16.0 / 3.0 * a6) * Math.Sin(B) * Math.Sin(B) + 16.0 / 3.0 * a6 * Math.Pow(Math.Sin(B), 4)) + a8 / 8.0 * Math.Sin(8 * B);15. t = Math.Tan(B);16. h2 = e2 / (1 - e2) * Math.Cos(B) * Math.Cos(B);17. N = a / Math.Sqrt(1 - e2 * Math.Sin(B) * Math.Sin(B));18. m = Math.Cos(B) * l;19. xx = X + N * t * ((0.5 + (1.0 / 24.0 * (5 - t * t + 9 * h2 + 4 * h2 * h2) + 1.0 / 720.0 * (61 - 58 * t * t + Math.Pow(t, 4)) * m * m) * m * m) * m * m);20. yy = N * ((1 + (1.0 / 6.0 * (1 - t * t + h2) + 1.0 / 120.0 * (5 - 18 * t * t + Math.Pow(t, 4) + 14 * h2 - 58 * h2 * t * t) * m * m) * m * m) * m);21. yy = yy + 500000;22. }⾼斯反算:把平⾯坐标转换为经纬度坐标:C#代码1. void GaussNegative(double x, double y, double L0)2.3. double Bf, Vf, l, tf, hf2, Nf, Bmiao, Lmiao;4. int Bdu, Bfen, Ldu, Lfen;4. int Bdu, Bfen, Ldu, Lfen;5. y = y - 500000;6. Bf = hcfansuan(x);7. Vf = Math.Sqrt(1 + e2 / (1 - e2) * Math.Cos(Bf) * Math.Cos(Bf));8. tf = Math.Tan(Bf);9. hf2 = e2 / (1 - e2) * Math.Cos(Bf) * Math.Cos(Bf);10. Nf = a / Math.Sqrt(1 - e2 * Math.Sin(Bf) * Math.Sin(Bf));11. BB = (Bf - 0.5 * Vf * Vf * tf * (Math.Pow(y / Nf, 2) - 1.0 / 12 * (5 + 3 * tf * tf + hf2 - 9 * hf2 * tf * tf) * Math.Pow(y / Nf, 4) + 1.0 / 360 * (61 + 90 * tf * tf + 45 * tf * tf) * Math.Pow(y / Nf, 6))) * 180 / PI;12. Bdu = (int)BB;13. Bfen = (int)((BB - Bdu) * 60);14. Bmiao = ((BB - Bdu) * 60 - Bfen) * 60;15. BB = Bdu + 0.01 * Bfen + 0.0001 * Bmiao;16. l = 1.0 / Math.Cos(Bf) * (y / Nf - 1.0 / 6.0 * (1 + 2 * tf * tf + hf2) * Math.Pow(y / Nf, 3) + 1.0 / 120.0 * (5 + 28 * tf * tf + 24 * Math.Pow(tf, 4) + 6 * hf2 + 8 * hf2 * tf * tf) * Math.Pow(y / Nf, 5)) * 180.0 / PI;17. LL = L0 + l;18. Ldu = (int)LL;19. Lfen = (int)((LL - Ldu) * 60);20. Lmiao = ((LL - Ldu) * 60 - Lfen) * 60;21. LL = Ldu + 0.01 * Lfen + 0.0001 * Lmiao;⾥⾯涉及到的弧长反算:C#代码1. double hcfansuan(double pX)2. {3. double Bf0 = pX / a0;4. double Bf1, Bf2;5. Bf1 = Bf0;6. Bf2 = (pX - F(Bf1)) / a0;7. while ((Bf2 - Bf1) > 1.0E-11)8. {9. Bf1 = Bf2;10. Bf2 = (pX - F(Bf1)) / a0;11. }12. return Bf1;13. }⾼斯换带就⽐较简单了:C#代码1. void GaussZone(double x, double y, double L0, double L0new)2. {3. GaussNegative(x, y, L0);4. GaussPositive(BB, LL, L0new);5. }。
matlab高斯

高斯坐标正反matlab算程序:function [x,y]=zgauss(B,L,B0)%B是弧度为单位%L B0都是一度为单位e2=0.006693421622966; %第一偏心率ee2=0.006738525414683; %第二偏心率a=6378245; %长半轴X=111134.8611*B0-16036.4803*sin(2*B)+16.8281*sin(4*B)-0.022*sin(6*B); %子午弧长p=3600*180/pi; %ρ"W=sqrt(1-e2*(sin(B)^2)); %WN=a/W; %卯酉圈半径t=tan(B);yita=ee2*cos(B)*cos(B); %η的平方l=L-117; %Lll=l*3600;x=X+(N*sin(B)*cos(B)*ll^2)/(2*p^2)+N*sin(B)*(cos(B)^3)*(5-t^2-9*yita) *(ll^4)/(24*p^4);%x坐标y=N*cos(B)*ll/p+N*(cos(B)^3)*(1-t^2+yita)*ll^3/(6*p^3)+N*(cos(B)^5)*( 5-18*t^2+t^4)*ll^5/(120*p^5);%坐标function [BB,l]=fgauss(x,y)%在克拉索夫椭球上e2=0.006693421622966; %第一偏心率ee2=0.006738525414683; %第二偏心率a=6378245; %长半轴a0=111134.8611;Bf(1)=x/a0;Bf(1)=Bf(1)*pi/180; %把度换算成弧度%以下用迭代法解出 Bffor i=1:5Bf(i+1)=(x-(-16036.4803*sin(2*Bf(i))+16.8281*sin(4*Bf(i))-0.022*sin(6 *Bf(i))))/a0*pi/180;end%代入公式计算BBf=Bf(5);tf=tan(BBf);yitaf2=ee2*(cos(BBf)^2);Wf=sqrt(1-e2*(sin(BBf)^2));Mf=a*(1-e2)/Wf;Nf=a/Wf;BB=BBf-tf*y^2/(2*Mf*Nf)+tf^3*(5+3*tf^2+yitaf2-9*yitaf2*tf^2)*y^4/(24* Mf*Nf^3);BB=BB*180/pi;l=y/(Nf*cos(BBf))-(1+2*tf^2+yitaf2)*y^3/(6*Nf^3*cos(BBf))+(5+28*tf^2+ 24*tf^4)*y^5/(120*Nf^5*cos(BBf));我是一名在校大学生,大家在实际生产生活中若有什么关于matlab,和测量有什么问题欢迎来邮件与我联系。
高斯正反算程序代码

#include<math.h>#include<stdio.h>#define PI 3.1415926535897932#define P 206264.806247096355void main(){long double AngleToRadian(long double alfa);long double RadianToAngle(long double alfa);long double Bf(long double a,long double b,long double x);void GSZS(long double a,long double b,long double l,long double B,long double *x,long double *y);void GSFS(long double a,long double b,long double Bf,long double y,long double *B,long double *l);char XZ,XZZF,XZSL; int N,num;long double a,b,B,L,x,y;char YN='O';long double L1,B1,L0,l;long double *pointer_x,*pointer_y;long double FSB,FSL;long double *pointer_B,*pointer_L;long double DH;pointer_B=&FSB;pointer_L=&FSL;pointer_x=&x;pointer_y=&y;printf("\n============================欢迎使用xx投影计算程序============================\n");printf(" 说明\n");printf("1.程序可实现在任意椭球上进行高斯三度带和六度带正算和反算;\n");printf("2.经纬度的输入输出格式为:度分秒,例如:113°05\'13.68466\"输入时为:113.051368466;\n");printf("3.y坐标的输入输出格式为:带号*10E6+500公里+自然坐标,例如:y=18637682.388,18为带号,自然坐标为137682.388;\n");printf("4.其余可按照提示完成,如有疑问可发送Email至gys_long@,我们将尽快为您解答。
高斯正反算及换带计算matlab源代码_附截图

高斯投影坐标正、反算及相邻带的坐标换算MATLAB源代码
L0=input('输入所用中央子午线 L0='); disp('1:克拉索夫斯基椭球 T=0; while (T<1||T>2) T=input('请根据上列选择椭球模型 T='); switch T case 1 a=6378245.0000000000; b=6356863.0187730473; B=x/6367558.4969; B=B+(50221746+(293622+(2350+22*(cos(B))^2)*(cos(B))^2)*(cos(B))^2)*10^(-10)*sin(B)*cos(B); case 2 a=6378140.0000000000; b=6356755.2881575287; B=x/6367452.1328; B=B+(50228976+(293697+(2383+22*(cos(B))^2)*(cos(B))^2)*(cos(B))^2)*10^(-10)*sin(B)*cos(B); otherwise disp('T 值无效 end end e=(sqrt(a^2-b^2))/a; e1=(sqrt(a^2-b^2))/b; V=sqrt(1+(e1^2)*(cos(B))^2); c=(a^2)/b; M=c/(V^3); N=c/V; t=tan(B); n=sqrt((e1^2)*(cos(B))^2); lp1=y/(N*cos(B)); lp2=(1+2*t^2+n^2)*(y^3)/(6*cos(B)*N^3); lp3=(5+28*t^2+24*t^4+6*n^2+8*(n^2)*(t^2))*(y^5)/(120*cos(B)*N^5); l=lp1-lp2+lp3; Bp1=B; Bp2=(t*y^2)/(2*M*N); Bp3=(t/(24*M*N^3))*(5+3*t^2+n^2-9*(n^2)*(t^2))*y^4; Bp4=(t/(720*M*N^5))*(61+90*t^2+45*(t^4))*y^6; B=Bp1-Bp2+Bp3-Bp4; r1=l*sin(B); r2=(1/3)*sin(B)*(cos(B))^2*(l^3)*(1+3*n^2+2*n^4); r3=(1/15)*sin(B)*(cos(B))^2*(l^5)*(2-t^2); r=r1+r2+r3; format long g L=HHD(l)+L0 B=HHD(B) (1-2)'); 2:1975 年国际椭球 3:WGS-84 椭球');
matlab 高斯正反算以及换带

disp('1:克拉索夫斯基椭球 2:1975 年国际椭球 T=0; while (T<1||T>3) T=input('请根据上列选择椭球模型 T='); switch T case 1 a=6378245.0000000000; b=6356863.0187730473;
3:WGS-84 椭球');
r3=(1/15)*sin(B)*(cos(B))^2*(l^5)*(2-t^2); r=r1+r2+r3; format long g L=HHD(l)+L0 B=HHD(B) R=HHD(r) function HDJS disp('你选择的是换带计算') x=input('输入高斯坐标 x='); y=input('输入高斯坐标 y='); L0=input('输入原中央子午线 L0='); disp('1:克拉索夫斯基椭球 2:1975 年国际椭球 T=0; while (T<1||T>3) T=input('请根据上列选择原椭球模型 T='); switch T case 1 a=6378245.0000000000; b=6356863.0187730473; B=x/6367558.4969;
X=111134.861*(B*180/pi)-16036.480*sin(2*B)+16.828*sin(4*B)-0.022*sin(6*B); case 2 a=6378140.0000000000; b=6356755.2881575287; X=111133.005*(B*180/pi)-16038.528*sin(2*B)+16.833*sin(4*B)-0.022*sin(6*B); case 3 a=6378137.0000000000; f=1/298.257223563; b=a*(1-f); X=6367449.1458*B-32009.8185*cos(B)*sin(B)-133.9975*cos(B)*(sin(B))^3-0.6975*c os(B)*(sin(B))^5 otherwise disp('T 值无效 (1-3)'); end end e=(sqrt(a^2-b^2))/a; e1=(sqrt(a^2-b^2))/b; V=sqrt(1+(e1^2)*(cos(B))^2); c=(a^2)/b; M=c/(V^3); N=c/V; t=tan(B); n=sqrt((e1^2)*(cos(B))^2); l=L-L0; xp1=X; xp2=(N*sin(B)*cos(B)*l^2)/2; xp3=(N*sin(B)*((cos(B))^3)*(5-t^2+9*n^2+4*n^4)*l^4)/24; xp4=(N*sin(B)*((cos(B))^5)*(61-58*t^2+t^4)*l^6)/720; x=xp1+xp2+xp3+xp4; yp1=N*cos(B)*l; yp2=N*(cos(B))^3*(1-t^2+n^2)*l^3/6; yp3=N*(cos(B))^5*(5-18*t^2+t^4+14*n^2-58*(n^2)*(t^2))*l^5/120; y=yp1+yp2+yp3;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主程序截图
正算截图
换带计算截图
反算截图
以上是课本算例截图 精度 0.001m 和 0.001” 主程序
程序引用代码
MAIN
程序名称
主程序
高斯投影坐标正、反算及相邻带的坐标换算
disp(' 欢迎使用高斯投影正反算及相邻带的坐标换算程序 ');
a=6378140.0000000000;
b=6356755.2881575287;
B=x/6367452.1328;
B=B+(50228976+(293697+(2383+22*(cos(B))^2)*(cos(B))^2)*(cos(B))^2)*10^(-10)*sin(B)*cos(B);
otherwise
Bp3=(t/(24*M*N^3))*(5+3*t^2+n^2-9*(n^2)*(t^2))*y^4;
高斯投影坐标正、反算及相邻带的坐标换算
Bp4=(t/(720*M*N^5))*(61+90*t^2+45*(t^4))*y^6; B=Bp1-Bp2+Bp3-Bp4; format long g L=HHD(l)+L0 B=HHD(B)
xp3=(N*sin(B)*((cos(B))^3)*(5-t^2+9*n^2+4*n^4)*l^4)/24;
xp4=(N*sin(B)*((cos(B))^5)*(61-58*t^2+t^4)*l^6)/720;
x=xp1+xp2+xp3+xp4;
yp1=N*cos(B)*l;
yp2=N*(cos(B))^3*(1-t^2+n^2)*l^3/6;
disp(' 你选择的是高斯正算 '); B=input(' 输入大地坐标 B=');
L=input(' 输入大地坐标 L=');
L0=input(' 输入所用中央子午线 L0=');
B=DHH(B);
L=DHH(L);
L0=DHH(L0);
disp('1: 克拉索夫斯基椭球
2:1975 年国际椭球
MATLA源B 代码
L00=input(' 输入新中央子午线 L00=');
B=DHH(B);
L=DHH(L);
L00=DHH(L00);
disp('1: 克拉索夫斯基椭球 T=0;
2:1975 年国际椭球
3:WGS-84 椭球 ');
while (T<1||T>2)
T=input(' 请根据上列选择新椭球模型 T=');
e1=(sqrt(a^2-b^2))/b;
V=sqrt(1+(e1^2)*(cos(B))^2);
c=(a^2)/b;
M=c/(V^3);
N=c/V;
t=tan(B);
n=sqrt((e1^2)*(cos(B))^2);
l=L-L00;
xp1=X;
xp2=(N*sin(B)*cos(B)*l^2)/2;
disp('1 :高斯正算
2:高斯反算
3:换带计算 ');
K=0;
while (K<1||K>3)
K=input(' 请根据上列选择计算类型 K=');
switch K
case 1
GSZS;
case 2
GSFS;
case 3 HDJS;
otherwise
disp('K 值无效 ( 1-3)');
end disp(' 程序作者:桂林理工大学
switch T
3:WGS-84 椭球 ');
case 1 a=6378245.0000000000;
b=6356863.0187730473; B=x/6367558.4969;
B=B+(50221746+(293622+(2350+22*(cos(B))^2)*(cos(B))^2)*(cos(B))^2)*10^(-10)*sin(B)*cos(B);
switch T
case 1
a=6378245.0000000000;
b=6356863.0187730473;
B=x/6367558.4969;
B=B+(50221746+(293622+(2350+22*(cos(B))^2)*(cos(B))^2)*(cos(B))^2)*10^(-10)*sin(B)*cos(B); case 2
case 2
高斯投影坐标正、反算及相邻带的坐标换算 MATLA源B 代码
a=6378140.0000000000; b=6356755.2881575287; X=111133.005*(B*180/pi)-16038.528*sin(2*B)+16.833*sin(4*B)-0.022*sin(6*B); otherwise disp('T 值无效 (1-2)'); end end e=(sqrt(a^2-b^2))/a; e1=(sqrt(a^2-b^2))/b; V=sqrt(1+(e1^2)*(cos(B))^2); c=(a^2)/b; M=c/(V^3); N=c/V; t=tan(B); n=sqrt((e1^2)*(cos(B))^2); l=L-L0; xp1=X; xp2=(N*sin(B)*cos(B)*l^2)/2; xp3=(N*sin(B)*((cos(B))^3)*(5-t^2+9*n^2+4*n^4)*l^4)/24; xp4=(N*sin(B)*((cos(B))^5)*(61-58*t^2+t^4)*l^6)/720; x=xp1+xp2+xp3+xp4; yp1=N*cos(B)*l; yp2=N*(cos(B))^3*(1-t^2+n^2)*l^3/6; yp3=N*(cos(B))^5*(5-18*t^2+t^4+14*n^2-58*(n^2)*(t^2))*l^5/120; y=yp1+yp2+yp3; r1=l*sin(B); r2=(1/3)*sin(B)*(cos(B))^2*(l^3)*(1+3*n^2+2*n^4); r3=(1/15)*sin(B)*(cos(B))^2*(l^5)*(2-t^2); r=r1+r2+r3; format lon 4
MATLA源B 代码
程序引用代码
DHH
function HD=DHH(BD) %DHH 是将度化算为弧度的函数 %度的表达形式形如(三十度四十五分二十三秒: D=fix(BD);
Bp3=(t/(24*M*N^3))*(5+3*t^2+n^2-9*(n^2)*(t^2))*y^4;
Bp4=(t/(720*M*N^5))*(61+90*t^2+45*(t^4))*y^6;
B=Bp1-Bp2+Bp3-Bp4;
r1=l*sin(B);
r2=(1/3)*sin(B)*(cos(B))^2*(l^3)*(1+3*n^2+2*n^4);
disp(' 你选择的是换带计算 ')
x=input(' 输入高斯坐标 x=');
y=input(' 输入高斯坐标 y=');
L0=input(' 输入原中央子午线 L0=');
disp('1: 克拉索夫斯基椭球
2:1975 年国际椭球
T=0;
while (T<1||T>2)
T=input(' 请根据上列选择原椭球模型 T=');
disp('T 值无效 (1-2)'); end
end
e=(sqrt(a^2-b^2))/a;
e1=(sqrt(a^2-b^2))/b;
V=sqrt(1+(e1^2)*(cos(B))^2);
c=(a^2)/b;
M=c/(V^3);
N=c/V;
t=tan(B);
n=sqrt((e1^2)*(cos(B))^2);
lp1=y/(N*cos(B));
lp2=(1+2*t^2+n^2)*(y^3)/(6*cos(B)*N^3);
lp3=(5+28*t^2+24*t^4+6*n^2+8*(n^2)*(t^2))*(y^5)/(120*cos(B)*N^5);
l=lp1-lp2+lp3;
Bp1=B;
Bp2=(t*y^2)/(2*M*N);
lp1=y/(N*cos(B)); lp2=(1+2*t^2+n^2)*(y^3)/(6*cos(B)*N^3); lp3=(5+28*t^2+24*t^4+6*n^2+8*(n^2)*(t^2))*(y^5)/(120*cos(B)*N^5);
l=lp1-lp2+lp3; Bp1=B;
Bp2=(t*y^2)/(2*M*N);
刘敬涛 ');
disp(' 指导老师:王新桥 刘斌 卢献健 ');
disp(' 引用请注明出处 '); end
子程序 1
MATLA源B 代码
程序引用代码
GSZS
程序名称
高斯正算
function GSZS %GSZS是将大地坐标换算为高斯坐标的子函数