大地主題解算(深度干貨-超精)_第1頁
大地主題解算(深度干貨-超精)_第2頁
大地主題解算(深度干貨-超精)_第3頁
大地主題解算(深度干貨-超精)_第4頁
大地主題解算(深度干貨-超精)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、大地主題解算(正算)代碼與白塞爾大地主題解算大地主題解算(正算)代碼:根據(jù)經(jīng)緯度和方向角以及距離計算另外一點坐標(biāo)新建模塊->拷貝下面的大地主題(正算)代碼,調(diào)用方法示例:起點經(jīng)度:116.235(度)終點緯度:37.435(度)方向角:50(度)長度:500(米)終點經(jīng)緯度("經(jīng)度,緯度")=Computation(37.435,116.235,50,500) Const Pi = 3.1415926535898Private a, b, c, alpha, e, e2, W, V As Double'a 長軸半徑'b 短軸'c 極曲率半徑&#

2、39;alpha 扁率'e 第一偏心率'e2 第二偏心率'W 第一基本緯度函數(shù)'V 第二基本緯度函數(shù)Private B1, L1, B2, L2 As Double'B1 點1的緯度'L1 點1的經(jīng)度'B2 點1的緯度'L2 點2的經(jīng)度Private S As Double '''''大地線長度Private A1, A2 As Double'A1 點1到點2的方位角'A2 點2到點1的方位角Function Computation(STARTLAT, STARTLONG,

3、ANGLE1, DISTANCE As Double) As String B1 = STARTLAT L1 = STARTLONG A1 = ANGLE1 S = DISTANCE a = 6378245 b = 6356752.3142 c = a 2 / b alpha = (a - b) / a e = Sqr(a 2 - b 2) / a e2 = Sqr(a 2 - b 2) / b B1 = rad(B1) L1 = rad(L1) A1 = rad(A1) W = Sqr(1 - e 2 * (Sin(B1) 2) V = W * (a / b) Dim W1 As Doubl

4、e E1 = e ''''第一偏心率 '/ 計算起點的歸化緯度 W1 = W ''Sqr(1 - e1 * e1 * Sin(B1 ) * Sin(B1 ) sinu1 = Sin(B1) * Sqr(1 - E1 * E1) / W1 cosu1 = Cos(B1) / W1 '/ 計算輔助函數(shù)值 sinA0 = cosu1 * Sin(A1) cotq1 = cosu1 * Cos(A1) sin2q1 = 2 * cotq1 / (cotq1 2 + 1) cos2q1 = (cotq1 2 - 1) / (cotq1 2

5、+ 1) '/ 計算系數(shù)AA,BB,CC及AAlpha, BBeta的值。 cos2A0 = 1 - sinA0 2 e2 = Sqr(a 2 - b 2) / b k2 = e2 * e2 * cos2A0 Dim aa, BB, CC, EE22, AAlpha, BBeta As Double aa = b * (1 + k2 / 4 - 3 * k2 * k2 / 64 + 5 * k2 * k2 * k2 / 256) BB = b * (k2 / 8 - k2 * k2 / 32 + 15 * k2 * k2 * k2 / 1024) CC = b * (k2 * k2 /

6、 128 - 3 * k2 * k2 * k2 / 512) e2 = E1 * E1 AAlpha = (e2 / 2 + e2 * e2 / 8 + e2 * e2 * e2 / 16) - (e2 * e2 / 16 + e2 * e2 * e2 / 16) * cos2A0 + (3 * e2 * e2 * e2 / 128) * cos2A0 * cos2A0 BBeta = (e2 * e2 / 32 + e2 * e2 * e2 / 32) * cos2A0 - (e2 * e2 * e2 / 64) * cos2A0 * cos2A0 '/ 計算球面長度 q0 = (S

7、 - (BB + CC * cos2q1) * sin2q1) / aa sin2q1q0 = sin2q1 * Cos(2 * q0) + cos2q1 * Sin(2 * q0) cos2q1q0 = cos2q1 * Cos(2 * q0) - sin2q1 * Sin(2 * q0) q = q0 + (BB + 5 * CC * cos2q1q0) * sin2q1q0 / aa '/ 計算經(jīng)度差改正數(shù) theta = (AAlpha * q + beta * (sin2q1q0 - sin2q1) * sinA0 '/ 計算終點大地坐標(biāo)及大地方位角 sinu2 =

8、sinu1 * Cos(q) + cosu1 * Cos(A1) * Sin(q) B2 = Atn(sinu2 / (Sqr(1 - E1 * E1) * Sqr(1 - sinu2 * sinu2) * 180 / Pi lamuda = Atn(Sin(A1) * Sin(q) / (cosu1 * Cos(q) - sinu1 * Sin(q) * Cos(A1) * 180 / Pi If (Sin(A1) > 0) Then If (Sin(A1) * Sin(q) / (cosu1 * Cos(q) - sinu1 * Sin(q) * Cos(A1) > 0) Th

9、en lamuda = Abs(lamuda) Else lamuda = 180 - Abs(lamuda) End If Else If (Sin(A1) * Sin(q) / (cosu1 * Cos(q) - sinu1 * Sin(q) * Cos(A1) > 0) Then lamuda = Abs(lamuda) - 180 Else lamuda = -Abs(lamuda) End If End If L2 = L1 * 180 / Pi + lamuda - theta * 180 / Pi A2 = Atn(cosu1 * Sin(A1) / (cosu1 * Co

10、s(q) * Cos(A1) - sinu1 * Sin(q) * 180 / Pi If (Sin(A1) > 0) Then If (cosu1 * Sin(A1) / (cosu1 * Cos(q) * Cos(A1) - sinu1 * Sin(q) > 0) Then A2 = 180 + Abs(A2) Else A2 = 360 - Abs(A2) End If Else If (cosu1 * Sin(A1) / (cosu1 * Cos(q) * Cos(A1) - sinu1 * Sin(q) > 0) Then A2 = Abs(A2) Else A2

11、= 180 - Abs(A2) End If End If Computation = L2 & "," & B2End FunctionPrivate Function rad(ByVal angle_d As Double) As Double rad = angle_d * Pi / 180End Function白塞爾大地主題解算一、 正算代碼:#include<stdio.h>#include<math.h>#define ee 0.006693421622966#define I 3.141592653double F(d

12、ouble,double,double);void main(void) double A1,B1,L1,S,A2,B2,L2;double x1,x2,x3,y1,y2,y3,z1,z2,z3;double W1,sinu1,sinu2,cosu1,sinA0;double cota1,cos2a1,sin2a1,cosA0A0;double A,B,C,d,e,a0,a1,m;double n,a,Q,R;printf("請輸入數(shù)據(jù)B1= ");scanf("%lf %lf %lf",&x1,&x2,&x3);B1=F(x1,

13、x2,x3);printf("請輸入數(shù)據(jù)L1= ");scanf("%lf %lf %lf",&y1,&y2,&y3);L1=F(y1,y2,y3);printf("請輸入A1= ");scanf("%lf %lf %lf",&z1,&z2,&z3); A1=F(z1,z2,z3);printf("請輸入S= ");scanf("%lf",&S); printf("B1=%.9fn",B1);prin

14、tf("L1=%.9fn",L1);printf("A1=%.9fn",A1);printf("S=%fn",S);/*計算起點的規(guī)劃緯度*/W1=sqrt(1-ee*sin(B1)*sin(B1); sinu1=sin(B1)*sqrt(1-ee)/W1;cosu1=cos(B1)/W1; printf("W1=%.9fn",W1);printf("sinu1=%.9fn",sinu1);printf("cosu1=%.9fn",cosu1);/*計算輔助函數(shù)值*/sinA

15、0=cosu1*sin(A1); cota1=cosu1*cos(A1)/sinu1;sin2a1=2*cota1/(cota1*cota1+1);cos2a1=(cota1*cota1-1)/(cota1*cota1+1); printf("sinA0=%.9fn",sinA0);printf("cota1=%.9fn",cota1);printf("sin2a1=%.9fn",sin2a1);printf("cos2a1=%.9fn",cos2a1);/*計算系數(shù)ABC及de*/cosA0A0=1-sinA0*

16、sinA0; A=6356755.288+(10710.341-(13.534*cosA0A0)*cosA0A0;B=(5355.171-9.023*cosA0A0)*cosA0A0;C=(2.256*(cosA0A0)*cosA0A0+0.006;d=691.46768-(0.58143-0.00144*cosA0A0)*cosA0A0;e=(0.2907-cosA0A0*0.0010)*cosA0A0;printf("cosA0A0=%.9fn",cosA0A0);printf("A=%.3fn",A);printf("B=%.6fn&qu

17、ot;,B);printf("C=%.9fn",C);printf("d=%.7fn",d);printf("e=%.9fn",e);/*計算球面長度*/a0=(S-(B+C*cos2a1)*sin2a1)/A; m=sin2a1*cos(2*a0)+cos2a1*sin(2*a0);n=(cos2a1)*(cos(2*a0)-(sin2a1)*(sin(2*a0);a=a0+(B+5*C*n)*m/A;printf("a0=%.9fn",a0);printf("m=%.9fn",m);prin

18、tf("n=%.9fn",n);printf("a=%.9fn",a);/*計算經(jīng)度差改正數(shù)*/Q=(d*a+(e*(m-sin2a1)/3600/180*I)*sinA0;printf("Q=%.7fn",Q);/*計算終點大地坐標(biāo)及大地方位角*/sinu2=sinu1*cos(a)+cosu1*cos(A1)*sin(a);B2=180*atan(sinu2/(sqrt(1-ee)*(sqrt(1-sinu2*sinu2)/I;R=180*atan(sin(A1)*sin(a)/(cosu1*cos(a)-sinu1*sin(a)

19、*cos(A1)/I;printf("sinu2=%.9fn",sinu2);printf("B2=%fn",B2);printf("R=%fn",R*180/I);/*確定R的值*/if(sin(A1)>0 && tan(R)>0)R=abs(R);else if(sin(A1)>0 && tan(R)<0)R=I-abs(R);else if(sin(A1)<0 && tan(R)<0)R=-abs(R);elseR=abs(R)-I;/*確定L2

20、A2的值*/L2=(L1*180/I+R-(Q/206265*180/I);A2=atan(cosu1*sin(A1)/(cosu1*cos(a)*cos(A1)-sinu1*sin(a);if(sin(A1)<0&&tan(A2)>0)A2=(fabs(A2)*180/I;else if(sin(A1)<0&&tan(A2)<0)A2=(I-fabs(A2)*180/I;else if(sin(A1)>0&&tan(A2)>0)A2=(I+fabs(A2)*180/I;elseA2=(2*I-fabs(A2)

21、*180/I;printf("A2=%3fn B2=%3fn L2=%3fn",A2,B2,L2);double F(double a2,double b2,double c2)double d2;d2=(double)(a2+1.0*b2/60+1.0*c2/3600);d2=(d2/180)*I;return (d2);運行結(jié)果:二、 反算代碼:#include<stdio.h>#include<math.h>#define ee 0.006693421622966#define I 3.141592653double F(double,doub

22、le,double);void main(void) double B1,B2,L1,L2,A1,A2,S,Y;double W1,W2,L,Q,R,A,B,C;double x,y,z,p,q;double x1,x2,x3,y1,y2,y3,z1,z2,z3,w1,w2,w3;double a1,a2,b1,b2,m,n;double sinp,cosp,sinu1,sinu2,cosu1,cosu2,sinA0,cosA0;Q=0;q=0;printf("請輸入起始數(shù)據(jù)B1= ");scanf("%lf %lf %lf",&x1,&

23、x2,&x3);B1=F(x1,x2,x3);printf("請輸入起始數(shù)據(jù)L1= ");scanf("%lf %lf %lf",&y1,&y2,&y3);L1=F(y1,y2,y3);printf("請輸入起始數(shù)B2= ");scanf("%lf %lf %lf",&z1,&z2,&z3);B2=F(z1,z2,z3);printf("請輸入起始數(shù)據(jù)L2= ");scanf("%lf %lf %lf",&w1,

24、&w2,&w3);L2=F(w1,w2,w3);printf("B1=%fn",B1);printf("L1=%.9fn",L1);printf("B2=%.9fn",B2);printf("L2=%.9fn",L2);/*輔助計算*/W1=sqrt(1-ee*sin(B1)*sin(B1);W2=sqrt(1-ee*sin(B2)*sin(B2);sinu1=sin(B1)*sqrt(1-ee)/W1;sinu2=sin(B2)*(sqrt(1-ee)/W2;cosu1=cos(B1)/W1;co

25、su2=cos(B2)/W2;L=L2-L1;a1=sinu1*sinu2;a2=cosu1*cosu2;b1=cosu1*sinu2;b2=sinu1*cosu2;printf("W1=%.9fn",W1);printf("W2=%.9fn",W2);printf("sinu1=%.9fn",sinu1);printf("sinu2=%.9fn",sinu2);printf("cosu1=%.9fn",cosu2);printf("L=%.9fn",L);printf(&q

26、uot;a1=%.9fn",a1);printf("a2=%.9fn",a2);printf("b1=%.9fn",b1);printf("b2=%.9fn",b2);/*用逐次趨近法同時計算起點大地方位角、球面長度及經(jīng)差R*/do R=L+Q; x=cosu2*sin(R); y=b1-b2*cos(R); A1=atan(x/y); if(x>0&&y>0) A1=fabs(A1); else if(x>0&&y<0) A1=I-fabs(A1); else if(x<0&&y<0) A1=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論