高斯正反算(零误差)
[转载]高斯正反算
[转载]⾼斯正反算⼤地坐标向笛卡尔坐标转换⾼斯正反算采⽤不同椭球实现⾼斯克⾥格投影,将经纬度坐标转换为⾼斯平⾯坐标:正算⾼斯平⾯坐标转换为不同椭球下的经纬度坐标:反算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 }。
高斯投影正反算
高斯投影正反算学院:资源与环境工程工程学院专业:测绘工程 学号:X51414012:超一、高斯投影概述想象有一个椭圆柱面横套在地球椭球体外面,并与某一条子午线相切,椭圆柱的中心轴通过椭球体的中心,然后用一定投影方法,将中央子午线两侧各一定经差围的地区投影到椭圆柱面上,再将此柱面展开即成为投影面。
高斯投影由于是正形投影,故保证了投影的角度不变性,图形的相似性以及在某点各方向上长度比的同一性。
由于采用了同样法则的分带投影,这即限制了长度变形,又保证了在不同投影带中采用相同的简便公式和数表进行变形引起的各项改正的计算,并且带与带间的互相换算也能用相同的公式和方法进行。
高斯投影的这些优点必将使它得到广泛的推广和具有国际意义。
二、高斯投影坐标正算公式1.高斯投影必须满足以下三个条件 1)中央子午线投影后为直线 2)中央子午线投影后长度不变 3)投影具有正形性质,即正形投影条件2.高斯正算公式推导1)由第一个条件可知,由于地球椭球体是一个旋转椭球体,所以高斯投影必然有这样一个性质,即中央子午线东西两侧的投影必然对称于中央子午线。
2)由于高斯投影是换带投影,在每带经差l是不大的,lρ是一个微小量,所以可以将X=X (l,q ),Y=Y (l ,q )展开为经差为l 的幂级数,它可写成如下的形式X=m 0+m 2l 2+m 4l 4+…Y=m 1l+m 3l 2+m 5l 5+…式中m 0,m1,m2,…是待定系数,他们都是纬度B 的函数。
3)由第三个条件:∂y ∂l =∂x ∂q 和∂x ∂l =-∂y∂q ,将上式分别对l 和q 求偏导2340123423401234...........x m m l m l m l m l y n n l n l n l n l =+++++=+++++可得到下式0312123403121234111,,,, 234111,,,,234dm dm dm dm n n n n dq dq dq dq dn dn dn dn m m m m dq dq dq dq ⎧====⎪⎪⎨⎪=-=-=-=-⎪⎩经过计算可以得出232244524632235242225sin cos sin cos (594)224 sin cos (6158)720cos cos (1)6cos (5181458)120N N x X B B l B B t l NB B t t l Ny N B l B t l NB t t t l ηηηηη=+⋅+-+++-+=⋅+-++-++-三、高斯投影坐标反算公式推导1.思路:级数展开,应用高斯投影三个条件,待定系数法求解。
高斯投影正反算公式
⾼斯投影正反算公式⾼斯投影坐标正反算⼀、基本思想:⾼斯投影正算公式就是由⼤地坐标(L ,B )求解⾼斯平⾯坐标(x ,y ),⽽⾼斯投影反算公式则是由⾼斯平⾯坐标(x ,y )求解⼤地坐标(L ,B )。
⼆、计算模型:基本椭球参数:椭球长半轴a椭球扁率f椭球短半轴:(1)b a f =-椭球第⼀偏⼼率:e a= 椭球第⼆偏⼼率:e b'=⾼斯投影正算公式:此公式换算的精度为0.001m6425644223422)5861(cos sin 720)495(cos 24cos sin 2l t t B B N l t B simB N l B B N X x ''+-''+''++-''+''?''+=ρηηρρ 5222425532233)5814185(cos 120)1(cos 6cos l t t t B N l t B N l B N y ''-++-''+''+-''+''?''=ηηρηρρ其中:⾓度都为弧度B 为点的纬度,0l L L ''=-,L 为点的经度,0L 为中央⼦午线经度; N 为⼦午圈曲率半径,1222(1sin )N a e B -=-;tan t B =; 222cos e B η'=1803600ρπ''=*其中X 为⼦午线弧长:2402464661616sin cos ()(2)sin sin 33X a B B B a a a a a B a B ??=--++-+02468,,,,a a a a a 为基本常量,按如下公式计算:200468242684468686883535281612815722321637816323216128m a m m m m m m a m m m a m m m m a m a ?=++++=+++=++=+ =??02468,,,,m m m m m 为基本常量,按如下公式计算:22222020426486379(1);;5;;268m a e m e m m e m m e m m e m =-====;⾼斯投影反算公式:此公式换算的精度为0.0001’’.()()()()2222243246532235242225053922461904572012cos 6cos 5282468120cos f f f f f f f f f f f f f f f f f f f f f ff f f f f f ft t B B y t t yM N M N t y t t yM N y y l t N B N B y t t t N B L l L ηηηηη=-+++--++=-+++++++=+其中: 0L 为中央⼦午线经度。
高斯坐标正反算
正形投影的一般条件基本出发点:在正形投影中,长度比与方向无关。
1、长度比的通用公式如图4-42,在微分直角三角形P1P2P3及P1′P2′P3′中有:其中l=L-L0,L0通常是中央子午线的经度,L是P点的经度令:()()222222d=d cos dd=d dS M B N B ls x y++(1)m平方可为:()()()22222222222d d d d dd d cos d dcos dcoss x y x ymS M B N B l M BN B lN B++⎛⎫===⎪⎡⎤⎝⎭+⎛⎫+⎢⎥⎪⎝⎭⎢⎥⎣⎦(2)为简化公式,令:ddcosM BqN B=dc o sB M BqN B=⎰(3) q称为等量纬度,因为它只与纬度B有关。
这样,式(2)可表示为:()()222222d dd dx ymr q l+=⎡⎤+⎣⎦(4)我们投影的目的是:建立平面坐标xy和大地坐标BL之间的函数关系,由式(3)可知,即建立xy和bl的函数关系。
令()(),,x x l q y y l q==(5) 对上式进行全微分可得:d d dd d dx xx q lq ly yy q lq l∂∂⎧=+⎪∂∂⎪⎨∂∂⎪=+⎪∂∂⎩(6)将上式代入式(1)中第二项,并令:2222x yEq qx x y yFq l q lx yGl l⎧⎛⎫⎛⎫∂∂=+⎪ ⎪ ⎪∂∂⎪⎝⎭⎝⎭⎪∂∂∂∂⎪=+⎨∂∂∂∂⎪⎪∂∂⎛⎫⎛⎫⎪=+⎪ ⎪∂∂⎪⎝⎭⎝⎭⎩(7)可得: ()()()()222d d 2d d d s E q F q l G l =++ (8) 则式(4)可写为: ()()()()()()222222d 2d d d d d E q F q l G l m r q l ++=⎡⎤+⎣⎦ (9)2 柯西-黎曼条件在上式引入方向,如图4-42所示:2313d d cot d d P P M B q A PP r l l === (10) 即: d tan d l A q = (11)将式(11)代入式(9)可得:注意sec 1cos A A =()()()()()222222222222222d 2tan d tan d d tan d 2tan tan sec cos 2sin cos sin E q F A q G A q m r q A q E F A G A r AE AF A AG A r ++=⎡⎤+⎣⎦++=++=(12)要想让m 和A 无关,必须使F=0,E=G ,即22220x x y y q l q l x y x y q q l l ∂∂∂∂⎧+=⎪∂∂∂∂⎪⎨⎛⎫⎛⎫∂∂∂∂⎛⎫⎛⎫⎪+=+⎪ ⎪ ⎪ ⎪⎪∂∂∂∂⎝⎭⎝⎭⎝⎭⎝⎭⎩ (13) 由上式第一式可得:y y x q l x lq∂∂∂∂∂=-∂∂∂(14)代入第二式可得: 222222y x y y x lq q q q x q ∂⎛⎫⎪⎡⎤⎛⎫⎛⎫⎛⎫⎛⎫∂∂∂∂∂⎝⎭+=+⎢⎥ ⎪ ⎪ ⎪ ⎪∂∂∂∂⎢⎥⎝⎭⎝⎭⎝⎭⎝⎭⎛⎫∂⎣⎦⎪∂⎝⎭(15) 消去公共项可得: 22x y q l ⎛⎫∂∂⎛⎫= ⎪ ⎪∂∂⎝⎭⎝⎭ (16)开方并代入式(13)的第一项:x y q l x y lq ∂∂⎧=⎪∂∂⎪⎨∂∂⎪=-⎪∂∂⎩ (17)高斯投影坐标正算高斯投影三条件:L0为直线;L0长度不变;正形投影 1、幂级数展开公式(x 偶y 奇)l /ρ微小量(ρ''=206265),可进行级数展开,可得:2402435135x m m l m l y m l m l m l ⎧=+++⎪⎨=+++⎪⎩(18) 式中mi 为待定系数,是q 、B 的函数。
高斯正算和高斯反算精度
高斯正算和高斯反算精度高斯正算和高斯反算是地理测量中常用的计算方法,用于求解地球上两点之间的距离、方位角和坐标等问题。
高斯正算是根据已知起点坐标、方位角和距离,计算出终点的坐标;而高斯反算则是根据已知起点和终点的坐标,计算出两点之间的距离和方位角。
高斯正算是地理测量中常用的一种计算方法,通过已知起点的坐标、方位角和距离,计算出终点的坐标。
这种方法主要基于高斯投影的理论,通过将地球表面的曲面投影到平面上,使得计算更加简便。
在进行高斯正算时,首先需要确定起点的坐标、方位角和距离,然后通过一系列的计算步骤,得到终点的坐标。
高斯正算可以应用于各种地理测量问题,例如导航定位、地图制作等。
在进行高斯反算时,已知起点和终点的坐标,需要计算出两点之间的距离和方位角。
与高斯正算相反,高斯反算是从已知坐标求解未知距离和方位角的过程。
通过一系列的计算步骤,可以得到两点之间的距离和方位角。
高斯反算也是地理测量中常用的计算方法,可以应用于测量控制点、确定地理位置等方面。
高斯正算和高斯反算的精度是地理测量中非常重要的指标。
精度是指测量结果与真实值之间的偏差程度,通常用误差来表示。
在进行高斯正算和高斯反算时,精度的提高可以通过多种方式实现。
首先,使用更加精确的测量设备和仪器可以提高计算结果的精度。
其次,选择合适的计算方法和算法也可以提高精度。
此外,对输入数据的准确性进行检查和验证,以及进行误差分析和修正,也是提高精度的关键步骤。
在实际应用中,高斯正算和高斯反算的精度要求因任务而异。
对于一般的地理测量任务,如导航定位、地图制作等,一般要求精度在几米到十几米之间。
而对于精密测量任务,如大地测量、工程测量等,精度要求可能在毫米甚至更高。
为了满足不同任务的精度要求,需要根据具体情况选择合适的测量方法和技术,以及进行精确的数据处理和分析。
高斯正算和高斯反算是地理测量中常用的计算方法,用于求解地球上两点之间的距离、方位角和坐标等问题。
在进行高斯正算和高斯反算时,需要选择合适的计算方法和算法,并注意精度的控制和提高。
(整理)高斯投影坐标正反算公式
高斯投影坐标正反算公式未知2010-04-03 10:47:15 本站§高斯投影坐标正反算公式任何一种投影①坐标对应关系是最主要的;②如果是正形投影,除了满足正形投影的条件外( C-R 偏微分方程),还有它本身的特殊条件。
1.1 高斯投影坐标正算公式: B, x,y高斯投影必须满足以下三个条件:①中央子午线投影后为直线;②中央子午线投影后长度不变;③投影具有正形性质,即正形投影条件。
由第一条件知中央子午线东西两侧的投影必然对称于中央子午线,即 (8-10) 式中, x 为的偶函数, y 为的奇函数;,即,如展开为的级数,收敛。
( 8-33 )式中是待定系数,它们都是纬度 B 的函数。
由第三个条件知:(8-33) 式分别对和 q 求偏导数并代入上式(8-34)上两式两边相等,其必要充分条件是同次幂前的系数应相等,即(8-35)(8-35) 是一种递推公式,只要确定了就可依次确定其余各系数。
由第二条件知 : 位于中央子午线上的点,投影后的纵坐标 x 应等于投影前从赤道量至该点的子午线弧长 X ,即 (8-33) 式第一式中,当时有:(8-36)顾及 ( 对于中央子午线 )得:(8-37,38)(8-39)依次求得并代入 (8-33) 式,得到高斯投影正算公式(8-42)1.2 高斯投影坐标反算公式x,y B,投影方程:(8-43)满足以下三个条件:①x 坐标轴投影后为中央子午线是投影的对称轴;② x 坐标轴投影后长度不变;③投影具有正形性质,即正形投影条件。
高斯投影坐标反算公式推导要复杂些。
①由 x 求底点纬度 ( 垂足纬度 ), 对应的有底点处的等量纬度,求 x,y 与的关系式,仿照 (8-10) 式有,由于 y 和椭球半径相比较小 (1/16.37) ,可将展开为 y 的幂级数;又由于是对称投影, q必是 y 的偶函数,必是 y 的奇函数。
(8-45)是待定系数,它们都是 x 的函数 .由第三条件知:,, (8-21)(8-45) 式分别对 x 和 y 求偏导数并代入上式上式相等必要充分条件,是同次幂 y 前的系数相等,第二条件,当 y=0 时,点在中央子午线上,即 x=X ,对应的点称为底点,其纬度为底点纬度,也就是 x=X 时的子午线弧长所对应的纬度,设所对应的等量纬度为。
高斯公式正负
高斯公式正负
高斯公式是数学和物理中非常重要的一个公式,它可以用来计算积分,特别是在计算一些难以直接求解的积分时。
正负号的判断在高斯公式中是一个关键问题,因为它决定了积分的方向和曲面的闭合性。
如果所积分的曲面是闭合的,那么方向就是负号。
这是因为闭合曲面内的积分值是有限的,而闭合曲面外的积分值是无限的,所以方向向内是负号。
相反,如果所给的曲面不是闭合的,这时需要作辅助面使其成为闭合的曲面。
这时,方向向里为负号,外为正号。
这是因为辅助面内的积分值是有限的,而辅助面外的积分值也是有限的,所以方向向外是正号。
高斯公式的正负号判断是一个相对复杂的问题,需要综合考虑曲面的形状、积分的方向以及积分的范围等因素。
在实际应用中,需要根据具体情况进行判断,而且有时候可能需要借助一些辅助工具或方法来帮助判断正负号。
总之,正确理解高斯公式的正负号判断对于正确应用高斯公式非常重要。
高斯投影正反算
高斯投影正反算LT2340123423401234...........q m m y m y m y m y l n n y n y n y n y '''''=+++++'''''=+++++3.引入高斯投影条件之一:正形条件4.由于可得到00n '=,带入上式可得到 2402435135...........q m m y m y l n y n y n y '''=+++'''=+++5.引入高斯投影条件之三:中央子午线投影后长度不变001122223322442255sec sec 122sec (12)6sec (56)24sec (5286)120f f f f f f f f f f f f f f f f f f f m q B dm n dx N t B dn m dx N B n t N t B m t N B n t N ηηη'=⎧⎪'⎪'==⎪⎪⎪''=-=-⎪⎪⎪⎨'=-++⎪⎪⎪'=++⎪⎪⎪⎪'=++⎪⎩四、高斯投影的特点1.当l 等于常数时,随着B 的增加x 的值增大,y 的值减小,无论B 值为正或为负,y 值不变。
这就是说,椭球面上除中央子午线外,其它子午线投影后,均向中央子午线弯曲,并向两极收敛,同时还对称于中央子午线和赤道。
2.当B 等于常数时,随着l 的增加,x 值和y 值都增大。
所以在椭球面上对称于赤道的纬圈,投影后仍成为对称的曲线,同时与子午线的投影曲线互相垂直凹向两极。
3.据中央子午线越远的子午线,投影后弯曲越厉害,长度变形越大。
五、MATLAB编程实现坐标正反算1.编写main函数function maindisp('欢迎使用高斯投影正反算及相邻带的坐标换算程序');disp('1:高斯正算 2:高斯反算 3:换带计算');K=0;while (K<1||K>3)K=input('请根据上列选择计算类型 K=');switch Kcase 1GSZS;case 2GSFS;case 3HDJS;otherwisedisp('K 值无效(1-3)');enddisp('程序作者:亚里士多墩');disp('指导老师:亚里士多德');end2.编写高斯正算GSZS函数function GSZS%GSZS 是将大地坐标换算为高斯坐标的子函数%此函数要调用 DHH 和 HHD 两个子函数%此函数包含子午线收敛角的计算disp('你选择的是高斯正算');B=input('输入大地坐标 B=');L=input('输入大地坐标 L=');L0=input('输入所用中央子午线 L0=');B=DHH(B);L=DHH(L);L0=DHH(L0);disp('1:克拉索夫斯基椭球 2:1975 年国际椭球 3:WGS-84 椭球');T=0;while (T<1||T>3)T=input('请根据上列选择椭球模型 T=');switch Tcase 1a=6378245.0000000000;b=6356863.0187730473;X=111134.861*(B*180/pi)-16036.480*sin(2*B)+16.828*sin(4*B)-0.022*sin (6*B);case 2a=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 3a=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*cos(B)*(sin(B))^5;otherwisedisp('T 值无效(1-3)');endende=(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)*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 long gxyR=HHD(r)End3.编写高斯反算公式GSFS函数function GSZS%GSZS 是将大地坐标换算为高斯坐标的子函数%此函数要调用 DHH 和 HHD 两个子函数%此函数包含子午线收敛角的计算disp('你选择的是高斯正算');B=input('输入大地坐标 B=');L=input('输入大地坐标 L=');L0=input('输入所用中央子午线 L0=');B=DHH(B);L=DHH(L);L0=DHH(L0);disp('1:克拉索夫斯基椭球 2:1975 年国际椭球 3:WGS-84 椭球');T=0;while (T<1||T>3)T=input('请根据上列选择椭球模型 T=');switch Tcase 1a=6378245.0000000000;b=6356863.0187730473;X=111134.861*(B*180/pi)-16036.480*sin(2*B)+16.828*sin(4*B)-0.022*sin (6*B);case 2a=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 3a=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*cos(B)*(sin(B))^5;otherwisedisp('T 值无效(1-3)');endende=(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)*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 long gxyR=HHD(r)End六、代码测试1.L=111°47'24〞.8974,B=31°04'41〞.6832,L0=111°2.L=111.47532575,B=31.23484275,L0=1113.L=114.20,B=30.30,L0=1114.L=118.54152206,B=32.24576522,L0=117。
高斯公式正负
高斯公式正负在我们学习高等数学的过程中,高斯公式(Gauss formula)是一个非常重要的定理。
它可以帮助我们快速求解一些复杂的数学问题。
但是,在使用高斯公式时,我们需要正确判断其正负号,以便将其应用于实际问题。
本文将详细介绍高斯公式的正负号含义及其应用。
首先,我们来回顾一下高斯公式的基本概念和公式。
高斯公式是空间几何中的一个重要定理,它描述了空间中两个向量的内积与它们的模长的关系。
高斯公式的公式如下:GB = Σ(μi * vi)其中,GB 表示两个向量GB 的内积,μi 表示向量GB 的第i 个分量,vi 表示向量V 的第i 个分量。
在高斯公式中,正负号有着重要的意义。
当我们计算GB 时,如果GB 的正负号与μi 和vi 的正负号一致,那么GB 就是一个正数。
反之,如果GB 的正负号与μi 和vi 的正负号相反,那么GB 就是一个负数。
在实际应用中,我们需要根据题目条件来判断高斯公式的正负号。
例如,在空间向量几何中,高斯公式可以用于判断两个向量之间的角度。
如果我们想要计算向量GB 和向量V 之间的夹角,我们可以使用高斯公式:GB = μ1 * v1 + μ2 * v2 + μ3 * v3如果GB 的值是正数,那么向量GB 和向量V 之间的夹角位于第一象限或第四象限,即它们之间的角度在0° 到90° 之间。
如果GB 的值是负数,那么向量GB 和向量V 之间的夹角位于第二象限或第三象限,即它们之间的角度在90° 到180° 之间。
为了更好地理解高斯公式的正负号应用,我们来看一个例子。
假设我们有两个向量GB 和V,它们的分量分别为:GB:μ1 = 2,μ2 = 3,μ3 = 1V:v1 = 1,v2 = 2,v3 = 1根据高斯公式,我们可以计算GB 和V 的内积:GB · V = 2 * 1 + 3 * 2 + 1 * 1 = 7由于GB 和V 的正负号相同,所以它们之间的角度位于第一象限,即它们之间的角度在0° 到90° 之间。
高斯正反算
VB下高斯坐标变换的实现曾圣陈伟高斯-克吕格(Gauss-Kruger)投影,是一种“等角横切圆柱投影”。
德国数学家、物理学家、天文学家高斯(Carl Friedrich Gauss,1777一 1855)于十九世纪二十年代拟定,后经德国大地测量学家克吕格(Johannes Kruger,1857~1928)于 1912年对投影公式加以补充,故名。
设想用一个圆柱横切于球面上投影带的中央经线,按照投影带中央经线投影为直线且长度不变和赤道投影为直线的条件,将中央经线两侧一定经差范围内的球面正形投影于圆柱面.高斯-克吕格(Gauss-Kruger)投影是横轴墨卡托投影的变种,高斯-克吕格投影是“等角横切圆柱投影”,投影后中央经线保持长度不变,即比例系数为1。
高斯-克吕格投影的东伪偏移是500公里,投影北伪偏移为零。
高斯-克吕格投影正解公式:已知(B,L)值求解(X,Y),(原点纬度 0,中央经度L0)上面公式中东纬偏移FE = 500000米(本程序中中只设计加500000米的常数,如还要带号的话FE = 500000+ 带号 * 1000000米);高斯-克吕格投影比例因子k0 = 1高斯-克吕格投影反解公式:已知(X,Y)求解(B,L),(原点纬度 0,中央经度L0)a -- 椭球体长半轴b -- 椭球体短半轴f -- 扁率e -- 第一偏心率e’ -- 第二偏心率N -- 卯酉圈曲率半径R -- 子午圈曲率半径B -- 纬度,L -- 经度,单位弧度(RAD)X -- 纵直角坐标, Y -- 横直角坐标,单位米(M) 关于椭球体参数,我国常用的3个椭球体参数如下:程序实现:'高斯正算求XPublic Function X(ByVal B#, ByVal L#, ByVal L0#) As DoubleDim n#, T#, T2#, m#, m2#, ng2#Dim S#, C#X = A1 * B + A2 * Sin(2 * B) + A3 * Sin(4 * B) + A4 * Sin(6 * B)? '子午线弧长S = Sin(B)C = Cos(B)T = Tan(B)T2 = T * Tn = a / Sqr(1 - e12 * S * S)'卯酉圈曲率半径m = C * (L - L0)m2 = m * mng2 = C * C * e12 / (1 - e12)????X = X + n * T * ((0.5 + ((5 - T2 + 9 * ng2 + 4 * ng2 * ng2) / 24# + (61 - 58 * T2 + T2 * T2) * m2 / 720#) * m2) * m2)?End Function'高斯正算求YPublic Function Y(ByVal B#, ByVal L#, ByVal L0#) As DoubleDim n#, T#, T2#, m#, m2#, ng2#Dim S#, C#S = Sin(B)C = Cos(B)T = Tan(B)T2 = T * Tn = a / Sqr(1 - e12 * S * S)m = C * (L - L0)m2 = m * mng2 = C * C * e12 / (1 - e12)Y = n * m * (1 + m2 * ((1 - T2 + ng2) / 6# + m2 * (5 - 18 * T2 + T2 * T2 + 14 * ng2 - 58 * ng2 * T2) / 120#))Y = Y + Y0End Function'高斯反算求B(纬度)Public Function B(ByVal X#, ByVal Y#) As DoubleDim S#, C#, T#, T2#, n#, ng2#, V#, yN#Dim preB0#, B0#Dim eta#Y = Y - Y0B0 = X / A1DopreB0 = B0B0 = (X - (A2 * Sin(2 * B0) + A3 * Sin(4 * B0) + A4 * Sin(6 * B0))) / A1 If Abs(B0 - preB0) < 0.000000001 Then Exit DoLoopS = Sin(B0)C = Cos(B0)T = Tan(B0)T2 = T * Tn = a / Sqr(1 - e12 * S * S)ng2 = C * C * e12 / (1 - e12)V = Sqr(1 + ng2)yN = Y / nB = B0 - (yN * yN - (5 + 3 * T2 + ng2 - 9 * ng2 * T2) * yN * yN * yN * yN / 12# + (61 + 90 * T2 + 45 * T2 * T2) * yN * yN * yN * yN * yN * yN / 360#) * V * V * T / 2#End Function程序运行界面:检测数据:(1)、已知在北京坐标系下中央子午线:117度,纬度B:28度32分14.5秒,经度L:116度54分12.3秒正算求解北方向X、东方向Y值。
高斯投影正反算编程一.高斯投影正反算基本公式
高斯投影正反算编程一.高斯投影正反算基本公式(1)高斯正算基本公式(2)高斯反算基本公式以上主要通过大地测量学基础课程得到,这不进行详细的推导,只是列出基本公式指导编程的进行。
二.编程的基本方法和流程图(1)编程的基本方法高斯投影正反算基本上运用了所有的编程基本语句,本文中是利用C++语言进行基本的设计。
高斯正算中对椭球参数和带宽的选择主要运用了选择语句。
而高斯反算中除了选择语句的应用,在利用迭代算法求底点纬度还应用了循环语句。
编程中还应特别注意相关的度分秒和弧度之间的相互转换,这是极其重要的。
(2)相关流程图1)正算2)反算三.编程的相关代码(1)正算# include "stdio.h"# include "stdlib.h"# include "math.h"# include "assert.h"#define pi (4*atan(1.0))int i;struct jin{double B;double L;double L0;};struct jin g[100];main(int argc, double *argv[]){FILE *r=fopen("a.txt","r");assert(r!=NULL);FILE *w=fopen("b.txt","w");assert(r!=NULL);int i=0;while(fscanf(r,"%lf %lf %lf",&g[i].B,&g[i].L,&g[i].L0)!=EOF){double a,b;int zuobiao;printf("\n请输入坐标系:北京54=1,西安80=2,WGS84=3:");scanf("%d",&zuobiao);getchar();if(zuobiao==1){a=6378245;b=6356863.0187730473;}if(zuobiao==2){a=6378140;b=6356755.2881575287;}if(zuobiao==3){a=6378137;b=6356752.3142;} //选择坐标系//double f=(a-b)/a;double e,e2;e=sqrt(2*f-f*f);e2=sqrt((a/b)*(a/b)-1);//求椭球的第一,第二曲率//double m0,m2,m4,m6,m8;double a0,a2,a4,a6,a8;m0=a*(1-e*e);m2=3*e*e*m0/2;m4=5*e*e*m2/4;m6=7*e*e*m4/6;m8=9*e*e*m6/8;a0=m0+m2/2+3*m4/8+5*m6/16+35*m8/128;a2=m2/2+m4/2+15*m6/32+7*m8/16;a4=m4/8+3*m6/16+7*m8/32;a6=m6/32+m8/16;a8=m8/128;double Bmiao,Lmiao, L0miao;Bmiao=(int)(g[i].B)*3600.0+(int)((g[i].B-(int)(g[i].B))*100.0)*60.0+( g[i].B*100-(int)(g[i].B*100))*100.0;Lmiao=(int)(g[i].L)*3600.0+(int)((g[i].L-(int)(g[i].L))*100.0)*60.0+(g [i].L*100-(int)(g[i].L*100))*100.0;L0miao=(int)(g[i].L0)*3600.0+(int)((g[i].L0-(int)(g[i].L0))*100.0)*60. 0+(g[i].L0*100-(int)(g[i].L0*100))*100.0;double db;db=pi/180.0/3600.0;double B1,L1,l;B1=Bmiao*db;L1= Lmiao*db;l=L1-L0miao*db;//角度转化为弧度//double T=tan(B1)*tan(B1);double n=e2*e2*cos(B1)*cos(B1);double A=l*cos(B1);double X,x,y;X=a0*(B1)-a2*sin(2*B1)/2+a4*sin(4*B1)/4-a6*sin(6*B1)/6+a8*sin(8*B1)/8;//求弧长//double N=a/sqrt(1-e*e*sin(B1)*sin(B1));int Zonewide;int Zonenumber;printf("\n请输入带宽:3度带或6度带Zonewide=");scanf("%d",&Zonewide);getchar();if(Zonewide==3){Zonenumber=(int)((g[i].L-Zonewide/2)/Zonewide+1);}else if(Zonewide==6){Zonenumber=(int)g[i].L/Zonewide+1;}else{printf("错误");exit(0);}//选择带宽//doubleFE=Zonenumber*1000000+500000;//改写为国家通用坐标//y=FE+N*A+A*A*A*N*(1-T*T+n*n)/6+A*A*A*A*A*N*(5-18*T*T+T *T*T*T+14*n*n-58*n*n*T*T)/120;x=X+tan(B1)*N*A*A/2+tan(B1)*N*A*A*A*A*(5-T*T+9*n*n+4*n*n *n*n)/24+tan(B1)*N*A*A*A*A*A*A*(61-58*T*T+T*T*T*T)/720;printf("\n所选坐标系的转换结果:x=%lf y=%lf\n",x,y);fprintf(w,"%lf %lf\n",x,y);//输出结果到文本文件//}fclose(r);fclose(w);system("pause");return 0;}(2)反算# include "stdio.h"# include "stdlib.h"# include "math.h"# include "assert.h"#define pi (4*atan(1.0))double X,Y,B1,B2,B3,F,t;double m0,m2,m4,m6,m8;double a0,a2,a4,a6,a8,a1,b1;double BB,LL,Bf;double e,e1;int d,m,s,i,zuobiao;double sort(double,double);struct jin{double x;double y;double L0;};struct jin g[100];//x,y,L0为输入量:x,y坐标和中央子午线经度// main(int argc, double *argv[]){FILE *r=fopen("c.txt","r");assert(r!=NULL);FILE *w=fopen("d.txt","w");assert(r!=NULL);int i=0;while(fscanf(r,"%lf %lf %lf",&g[i].x,&g[i].y,&g[i].L0)!=EOF)//文件为空,无法打开//{double a1=6378245.0000000000;//克拉索夫斯基椭球参数//double b1=6356863.0187730473;double a75=6378140.0000000000;//1975国际椭球参数//double b75=6356755.2881575287;double a84=6378137.0000000000;//WGS-84系椭球参数//double b84=6356752.3142000000;double M,N;//mouyou圈曲率半径,子午圈曲率半径//double t,n;double A,B,C;double BB,LL,Bf,LL0,BB0;double a,b;printf("\n选择参考椭球:1=克拉索夫斯基椭球,2=1975国际椭球,3=WGS-84系椭球:");scanf("%d",&zuobiao);getchar();if(zuobiao==1){a=a1;b=b1;}if(zuobiao==2){a=a75;b=b75;}if(zuobiao==3){a=a84;b=b84;}//选择参考椭球,求解第一偏心率e,第二偏心率e1// Bf=sort(a,b);//调用求解底点纬度的函数//double q=sqrt(1-e*e*sin(Bf)*sin(Bf));double G=cos(Bf);M=a*(1-e*e)/(q*q*q);N=a/q;double H,I;A=g[i].y/N;H=A*A*A;I=A*A*A*A*A;t=tan(Bf);n=e1*cos(Bf);B=t*t;C=n*n;BB0=Bf-g[i].y*t*A/(2*M)+g[i].y*t*H/(24*M)*(5+3*B+C-9*B*C)-g[i] .y*t*I/(720*M)*(61+90*B+45*B*B);LL0=g[i].L0*pi/180.0+A/G-H/(6*G)*(1.0+2*B+C)+I/(120*G)*(5.0+28 *B+24*B*B+6*C+8*B*C);//利用公式求解经纬度//int Bdu,Bfen,Ldu,Lfen;double Bmiao,Lmiao;Ldu=int(LL0/pi*180);Lfen=int((LL0/pi*180)*60-Ldu*60);Lmiao=LL0/pi*180*3600-Ldu*3600-Lfen*60;Bdu=int(BB0/pi*180);Bfen=int((BB0/pi*180)*60-Bdu*60);Bmiao=BB0/pi*180*3600-Bdu*3600-Bfen*60;//将弧度转化为角度//printf("\n所选坐标系的转换结果:%d度%d分%lf秒%d 度%d分%lf秒\n",Bdu,Bfen,Bmiao,Ldu,Lfen,Lmiao);fprintf(w,"%d°%d’%lf”%d°%d’%lf”\n",Bdu,Bfen,Bmiao,Ldu,Lfen,Lmiao);//将结果输出到文本文件//}fclose(r);fclose(w);system("pause");return 0;}double sort(double a,double b){double e,e1;e=sqrt(1-(b/a)*(b/a));e1=sqrt((a/b)*(a/b)-1);double m0,m2,m4,m6,m8;double a0,a2,a4,a6,a8;m0=a*(1-e*e);m2=3*e*e*m0/2;m4=5*e*e*m2/4;m6=7*e*e*m4/6;m8=9*e*e*m6/8;a0=m0+m2/2+3*m4/8+5*m6/16+35*m8/128;a2=m2/2+m4/2+15*m6/32+7*m8/16;a4=m4/8+3*m6/16+7*m8/32;a6=m6/32+m8/16;a8=m8/128;B1=g[i].x/a0;do{F=-a2*sin(2*B1)/2+a4*sin(4*B1)/4-a6*sin(6*B1)/6+a8*sin(8*B1 )/8;B2=(g[i].x-F)/a0;B3=B1;B1=B2;} while(fabs(B3-B2)>10e-10);//利用迭代算法求解底点纬度//return B2; }。
高斯正反算
3、CComboBox 控件的使用 (1)在 CFormView 中添加 CComboBox 控件(同时添加控件变量 m_combo),并设置参 数“Type”为“DropList”:
图 6 设置 CComboBox 控件的属性 (2)在 OnInitalUpdate 函数中添加 CComboBox 控件的显示数据
实验四 参心大地坐标转换及 高斯坐标正反算实验
4.1 实验目的
坐标转换是空间实体的位置描述, 是从一种坐标系统变换到另一种坐标系统的过程。 通 过建立两个坐标系统之间一一对应关系来实现。坐标转换问题的详细了解对于测量很重要, 也是测绘专业人员必须了解掌握的一项基本知识。 本节实验将引领大家实现测量程序设计中 2 项基本的坐标转换方法:参心大地坐标与参心空间直角坐标转换以及高斯坐标正反算。
第一偏心率平方 =0.00669438499959 WGS-84 椭球两个最常用的几何常数: 长半轴: 6378137±2(m) 短半轴 b=6356752.3142m 扁 率 α=1/298.257223563
第二偏心率平方=0.00673950181947
第一偏心率平方 =0.00669437999013 第二偏心率平方 =0.00673949674223 (2)高斯投影正算公式:
(3)同时,添加设置 ListCtrl 列项的代码:
m_list1.InsertColumn(0, _T("序号"),LVCFMT_CENTER,40); m_list1.InsertColumn(1, _T("X"),LVCFMT_CENTER,100);
m_list1.InsertColumn(2, _T("Y"),LVCFMT_CENTER,100); m_list1.InsertColumn(3, _T("Z"),LVCFMT_CENTER,100);
高斯正算名词解释
高斯正算名词解释
高斯正算是一种数学方法,用于解决统计学上的问题。
它是由德国数
学家卡尔·弗里德里希·高斯在19世纪提出的。
高斯正算可以应用于概率论和统计学的各个领域,例如统计推断、回
归分析和假设检验等。
其目的是通过对数据进行数学建模和分析,从
而得出对总体特征和参数的估计。
高斯正算基于假设总体服从正态分布(高斯分布),即呈钟形曲线。
通过样本数据的收集和分析,利用高斯正算可以计算出总体的平均值、标准差和置信区间等统计指标,从而对总体进行估计和推断。
高斯正算在实际应用中十分重要,可以帮助研究人员和决策者基于数
据做出准确的判断和决策。
通过对样本数据的高斯正算,我们可以对
总体特征有更深入的了解,并且在实际问题中进行预测和优化。
高斯坐标反算
高斯坐标反算高斯坐标反算是一种数学方法,主要用于计算和反解高斯坐标系中的点。
高斯坐标系在数学、物理学、工程学等领域中具有广泛的应用,但由于其复杂性,许多问题需要使用其他数学模型来解决。
高斯坐标反算正是为了解决这个问题而出现的。
高斯坐标系是由卡尔·弗里德里希·高斯在19世纪提出的。
它是一种以原点为中心,以某个常数r为半径的坐标系。
在这种坐标系中,点的位置可以用一个三维的数值表示,即x、y、z,而与坐标对应的点的高斯坐标则是一个由两个标量组成的有向线段,即(x/r, y/r)。
高斯坐标反算是一种计算高斯坐标系中点的方法,可以通过已知的点和高斯坐标来反算出该点的坐标。
然而,需要注意的是,由于高斯坐标系中的点通常具有相反的符号,因此高斯坐标反算的实际应用范围受到了很大的限制。
高斯坐标反算在数学领域中具有重要的作用,尤其是在微积分中。
例如,高斯坐标反算可以用来计算函数的导数,这在微积分中是非常有用的。
此外,高斯坐标反算还可以用于解决一些物理学问题,如计算电磁场中的电场强度等。
然而,高斯坐标反算在实际应用中仍然存在许多问题需要解决。
由于高斯坐标系中的点通常具有相反的符号,因此需要对点进行翻转,才能得到与给定点坐标对应的在高斯坐标系中的坐标。
这使得高斯坐标反算在实际应用中的灵活性受到了很大限制。
此外,由于高斯坐标系中的点通常需要在坐标系中移动,因此高斯坐标反算也存在计算量大、效率低的问题。
尽管如此,随着计算机技术的发展,高斯坐标反算仍然在不断发展和改进。
目前,许多高效的计算和存储方案已经应用于高斯坐标系中点的研究中,使得高斯坐标反算在计算和反解高斯坐标系中的点时,能够取得更好的性能。
总之,高斯坐标反算是一种重要的数学方法,具有广泛的应用价值。
虽然它仍然存在许多问题需要解决,但随着科技的不断发展,这些问题也将得到有效解决。
高斯公式的正负方向
高斯公式的正负方向一、什么是高斯公式高斯公式,也称为高斯散度定理,是微积分中的重要定理之一。
它是由德国数学家高斯在19世纪提出的,用于描述矢量场的流量与场的源或汇的关系。
高斯公式是一个重要的工具,在物理学、工程学和应用数学等领域有着广泛的应用。
二、高斯公式的正向推导高斯公式可以通过对一个闭合曲面上的矢量场进行积分得到。
设闭合曲面为S,矢量场为F,根据高斯公式,对于任意一个闭合曲面S,有:∮S F·dS = ∭V ∇·F dV其中,∮S表示对闭合曲面S进行曲面积分,F·dS表示矢量场F在曲面元dS上的点积,∭V表示对空间V进行体积积分,∇·F表示矢量场F的散度。
高斯公式的正向推导可以通过将闭合曲面S划分成无穷小的曲面元,并对每一个曲面元进行积分,然后将这些积分结果相加得到。
具体推导过程较为复杂,可以参考相关的数学教材进行学习。
三、高斯公式的负向应用与正向推导相反,高斯公式的负向应用是通过已知高斯公式的形式,来求解特定问题。
下面以一个具体的例子来说明。
例:计算电场的通量假设有一个点电荷位于原点,电荷量为Q。
我们希望计算这个点电荷在一个以原点为球心的球面上的电场通量。
根据高斯公式,电场通量可以通过对球面上电场的散度进行积分来计算。
由于点电荷的电场具有球对称性,散度只与距离原点的距离有关。
因此,我们可以选择一个以原点为球心的球面来计算电场通量。
对于球面上的任意一个点P,球面元dS的法向量与电场的方向相同。
因此,电场在球面上的点积可以简化为E·dS=E*dS。
根据高斯公式,电场通量可以表示为:∮S E·dS = ∭V ∇·E dV由于电场是由点电荷产生的,根据库仑定律,电场的散度为零。
因此,上式中的∇·E=0。
所以电场通量为零。
四、高斯公式在物理学中的应用高斯公式在物理学中有广泛的应用,特别是在电磁学和流体力学中。
以下是一些常见的应用领域:1. 电场和磁场的分析:通过高斯公式,可以计算电场和磁场在一个闭合曲面上的通量,从而得到场的性质和分布情况。
4850-5800高斯5点通用公式正反算(验证正确)适用于各种线形
Gauss-Legendre 5点通用公式坐标正反算CASIOfx-4850P程序一、(4850程序)正反算主程序(ZFS)Deg↵"1.KL⇒XY":"2.XY⇒KL":N:I"X0":S"Y0":○"K0":G"F0":H"KN":P" R0":R"RN":Q"Q(-Z+Y)":D=(P-R)÷(2(H-○)PR): M=180÷π:N=1⇒Goto1:≠⇒Goto2↵Lbl1:{KL}:KL:J=Abs(K-○):Prog"SUB1":"X=":X◢"Y=":Y◢"FWJ=":F -90→DMS◢Goto1↵Lbl2:{XY}:XY:Z[2]=X:Z[3]=Y:Prog"SUB2":"K=":○+J◢"L=":L◢Goto2↵2.正算子程序(SUB1)A=0.1184634425:B=0.2393143352:Z[4]=0.2844444444:C=0.046910077:E= 0.2307653449:Z[1]=0.5: X=I+J(Acos(G+QCM J(1÷P+CJD))+Bcos(G+QE MJ (1÷P+EJD))+Z[4]cos(G+QZ[1]J M(1÷P+Z[1]JD))+Bco s(G+Q(1-E)JM(1÷P +(1-E)JD))+Acos(G+Q(1-C)JM(1÷P+(1-C)JD))):Y=S+J(Asin(G+QCJM(1÷P+CJD))+Bsin(G+QEJM(1÷P+EJD))+Z[4]sin(G+QZ[1]J M(1÷P+Z[1]JD))+B sin(G+Q(1-E)JM(1÷P+(1-E)JD))+Asin(G+Q(1-C)JM(1÷P+(1-C)JD))):F= G+QJM(1÷P+JD) +90:X=X+LcosF:Y=Y+LsinF↵3. 反算子程序(SUB2)J=Abs((Y-S)cos(G-90)-(X-I)sin(G-90)):L=0:Lbl0:Prog"SUB1":L=(Z [3]-Y)cos(G-90+QJM(1÷P+JD))-(Z[2]-X)sin(G-90+QJM(1÷P+JD)):AbsL <1E-6⇒Goto1:≠⇒J=J+L:Goto0↵Lbl1:L=0:Prog"SUB1":L=(Z[3]-Y)÷sinF↵二、(4850程序带数据库)正反算主程序(ZFS)反算时需输入里程以判断属于哪段线元Deg↵"1.KL⇒XY":"2.XY⇒KL":N:M=180÷π:N=1⇒Goto1:≠⇒Goto2↵Lbl1:{TL}:TL:Prog"DATA":D=(P-R)÷(2(H-○)PR):J=Abs(K-○):Pro g"SUB1":"X=":X◢"Y=":Y◢"FWJ=":F-90→DMS◢Goto1↵Lbl2:{XYT}:XYT:Prog"DATA":D=(P-R)÷(2(H-○)PR):Z[2]=X:Z[3]=Y:Prog"SUB2":"K=":○+J◢"L=":L◢Goto2↵2.正算子程序(SUB1)----与无数据库版相同3.反算子程序(SUB2)----与无数据库版相同4.数据库(DATA)---锦赤铁路T≤172554.99⇒I=4638500.956:S=536490.9244:○=167000:G=-77°50′0. 9″:H=172554.99:P=10∧45:R=10∧45:Q=0:Goto1T≤172624.99⇒I=463967 1.6805:S=531060.7017:○=172554.99:G=-77°50′0.9″:H=172624.99:P =10∧45:R=2000:Q=-1:Goto1T≤172840.8458⇒I=4639686.033:S=530992. 19:○=172624.99:G=-78°50′10.53″:H=172840.8458:P=2000:R=2000:Q =-1:Goto1T≤172910.8458⇒I=4639716.328:S=530778.5764:○=172840. 8458:G=-85°01′12.26″:H=172910.8458:P=2000:R=10∧45:Q=-1:Goto1T≤177000⇒I=4639721.59:S=530708.7755:○=172910.8458:G=-86°01′21.89″:H=177000:P=10∧45:R=10∧45:Q=0:Goto1↵Lbl1:T<167000⇒"CHAO XIAN"◢≠⇒T>177000⇒"CHAO XIAN"◢三、(5800程序)正反算主程序(ZFS)Deg↵"1.KL⇒XY":"2.XY⇒KL":?N:"X0"?I:"Y0"?S:"K0"?○:"F0"?G:"KN"? H:"R0"?P:"RN"?R:"Q(-Z+Y)"?Q:(P-R)÷(2(H-○)PR)→D:180÷π→M:N =2⇒Goto2↵Lbl1:?K:?L:Abs(K-○)→J:Prog"SUB1":"X=":X◢"Y=":Y◢"FWJ=":F-9 0►DMS◢Goto1↵Lbl2:?X:?Y:X→Z[2]:Y→Z[3]:Prog"SUB2":"K=":○+J→K◢"L=":L◢Goto2↵2.正算子程序(SUB1)0.1184634425→A:0.2393143352→B:0.2844444444→Z[4]:0.046910077→C:0.2307653449→E:0.5→Z[1]:I+J(Acos(G+QCJM(1÷P+CJD))+Bcos(G+QE JM(1÷P+EJD))+Z[4]cos(G+QZ[1]J M(1÷P+Z[1]JD))+Bcos(G+Q(1-E)JM(1÷P+(1-E)JD))+Acos(G+Q(1-C)JM(1÷P+(1-C)JD)))→X:S+J(Asin(G+QCJM (1÷P+CJD))+Bsin(G+QEJ M(1÷P+EJD))+Z[4]sin(G+QZ[1]J M(1÷P+Z[1]J D))+Bsin(G+Q(1-E)JM(1÷P+(1-E)JD))+Asin(G+Q(1-C)JM(1÷P+(1-C)JD)))→Y:G+QJM(1÷P+JD) +90→F:X+Lcos(F)→X:Y+Lsin(F)→Y↵3. 反算子程序(SUB2)Abs((Y-S)cos(G-90)-(X-I)sin(G-90))→J:0→L↵Lbl0:Prog"SUB1":(Z[3]-Y)cos(G-90+QJM(1÷P+JD))-(Z[2]-X)sin(G-90 +QJM(1÷P+JD))→L:If Abs(L)<0.000001:Then0→L:Prog"SUB1":(Z[3] -Y)÷sin(F)→L:Else J+L→J:Goto0:IfEnd↵四、(5800程序带数据库)正反算主程序(ZFS)Deg↵"1.KL⇒XY":"2.XY⇒KL":?N:180÷π→M:N=2⇒Goto2↵Lbl1:"KP"?T:?L:Prog"DATA":(P-R)÷(2(H-○)PR)→D:Abs(T-○)→J:Pr og"SUB1":"X=":X◢"Y=":Y◢"FWJ=":F-90►DMS◢Goto1↵Lbl2:?X:?Y:"KP"?T:Prog"DATA":(P-R)÷(2(H-○)PR)→D:X→Z[2]:Y →Z[3]:Prog"SUB2":"K=":○+J→T◢"L=":L◢Goto2↵2.正算子程序(SUB1)---与无数据库版相同3.反算子程序(SUB2)---与无数据库版相同4.数据库(DATA)---锦赤铁路167000→○:172554.99→H:If T≤H:Then4638500.956→I:536490.9244→S:-77°50′0.9″→G:10^(45)→P:10^(45)→R:0→Q:Goto1:IfEnd↵H→○:172624.99→H:If T≤H:Then 4639671.6805→I:531060.7017→S:-77°50′0.9″→G:10^(45)→P:2000→R:-1→Q:Goto 1:IfEnd↵H→○:172840.8458→H:If T≤H:Then 4639686.033→I:530992.19→S:-7 8°50′10.53″→G:2000→P:2000→R:-1→Q:Goto 1:IfEnd↵H→○:172910.8458→H:If T≤H:Then 4639716.328→I:530778.5746→S: -85°01′12.26″→G:2000→P:10^(45)→R:-1→Q:Goto 1:IfEnd↵H→○:177000→H:If T≤H:Then 4639721.59→I:530708.7755→S:-86°0 1′21.89″→G:10^(45)→P:10^(45)→R:0→Q:Goto 1:IfEnd↵Lbl1:If T<167000 or T>177000:Then"CHAO XIAN"◢Stop:IfEnd:Return↵说明:一、程序功能及原理1.功能说明:本程序由一个主程序和两个子程——正算子程序(SUB1)、反算子程序(SUB2)构成,可以根据曲线段——直线、圆曲线、缓和曲线(完整或非完整型)的线元要素(起点坐标、起点里程、起点切线方位角、终点里程、起点曲率半径、止点曲率半径)及里程边距或坐标,对该线元段范围内任意里程中边桩坐标进行正反算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//84的椭球final double a = 6378137;final double Alfa = 1.0 / 298.257223563;double centreL, x, y, b, e1, ee;double a0, a2, a4, a6, a8, Bf0;double[] Coeficient_a0 = new double[5];double sinBf, cosBf;double FBf, Bf1, dB, bf;double c, v, Nf, Mf, tf;double itaf, dietaB, dietaL;double B, L;double dmsB, dmsL, dmsCentreL1;double radlat, radlon, radl0, l;double sb, cb, t, ita, X, N;public String MakeProject(double L, double B, double CentreLon) //高斯正算{/*输入已知数据:经度\纬度\ 中央子午线*/dmsB = B;dmsL = L;dmsCentreL1 = CentreLon;radlat = DMSTORAD(dmsB);radlon = DMSTORAD(dmsL);radl0 = DMSTORAD(dmsCentreL1);l = radlon - radl0;b = a * (1 - Alfa);sb = Math.sin(radlat);cb = Math.cos(radlat);t = sb / cb;e1 = Math.sqrt((a / b) * (a / b) - 1);ee = Math.sqrt(1 - (b / a) * (b / a));ita = e1 * cb;a0a2a4a6a8(a, ee, Coeficient_a0);a0 = Coeficient_a0[0];a2 = Coeficient_a0[1];a6 = Coeficient_a0[3];a8 = Coeficient_a0[4];X = a0 * radlat - sb * cb * ((a2 - a4 + a6) + (2 * a4 - 16 * a6 / 3) * sb * sb + 16 * a6 * sb * sb * sb * sb / 3.0);//计算卯酉圈半径Nc = a * a / b;v = Math.sqrt(1 + e1 * e1 * cb * cb);N = c / v;//计算未知点的坐标x = X + N * sb * cb * l * l / 2 + N * sb * cb * cb * cb * (5 - t * t + 9 * ita * ita + 4 * ita * ita * ita * ita) * l * l * l * l / 24 + N * sb * cb * cb * cb * cb * cb * (61 - 58 * t * t + t * t * t * t) * l * l * l * l * l * l / 720;y = N * cb * l + N * cb * cb * cb * (1 - t * t + ita * ita) * l * l * l / 6 + N * cb * cb * cb * cb * cb * (5 - 18 * t * t + t * t * t * t + 14 * ita * ita - 58 * ita * ita * t * t) * l * l * l * l * l / 120;//输出未知点坐标return (y + 500000)+","+x;}public Point MoveProject(double CentreLon, double X1, double Y1){centreL = CentreLon * Math.PI / 180.0;x = X1;while(Y1>1000000)Y1=Y1-1000000;y = Y1 - 500000.0;b = a * (1 - Alfa);e1 = Math.sqrt((a / b) * (a / b) - 1);//第二偏心率ee = Math.sqrt(1 - (b / a) * (b / a));a0a2a4a6a8(a, ee, Coeficient_a0);a0 = Coeficient_a0[0];a2 = Coeficient_a0[1];a4 = Coeficient_a0[2];a8 = Coeficient_a0[4];Bf0 = x / a0;do{sinBf = Math.sin(Bf0); cosBf = Math.cos(Bf0);FBf = -sinBf * cosBf * ((a2 - a4 + a6) + (2.0 * a4 - 16.0 * a6 / 3.0) * sinBf * sinBf +(16.0 / 3.0) * a6 * (sinBf * sinBf * sinBf * sinBf));Bf1 = (x - FBf) / a0;dB = Bf1 - Bf0;Bf0 = Bf1;} while (Math.abs(dB * 180.0 / Math.PI * 3600.0) > 0.00001);bf = Bf1;c = a * a / b;v = Math.sqrt(1 + e1 * e1 * Math.cos(bf) * Math.cos(bf));Nf = c / v;Mf = c / (v * v * v);tf = Math.sin(bf) / Math.cos(bf);itaf = e1 * Math.cos(bf);dietaB = tf * Math.pow(y, 2) / (2 * Mf * Nf) - tf * (5 + 3 * Math.pow(tf, 2) + Math.pow(itaf, 2) - 9 * Math.pow(tf, 2) * Math.pow(itaf, 2)) * Math.pow(y, 4) / (24 * Mf * Math.pow(Nf, 3)) + (61 + 90 * Math.pow(tf, 2) + 45 * Math.pow(tf, 4)) * Math.pow(y, 6) / (720 * Mf * Math.pow(Nf, 5));dietaL = y / (Nf * Math.cos(bf) + (1 + 2 * tf * tf + itaf * itaf) * Math.cos(bf) * y * y / (6 * Nf)) + (5 + 44 * tf * tf + 32 * tf * tf * tf * tf - 2 * itaf * itaf - 16 * itaf * itaf * tf * tf) / (360 * Nf * Nf * Nf * Mf * Mf * Math.cos(bf));B = bf - dietaB;L = centreL + dietaL;dmsB = RADTODMS(B);dmsL = RADTODMS(L);return new Point(dmsL , dmsB);}public void a0a2a4a6a8(double a, double e, double[] Coeficient_a0){double m0, m2, m4, m6, m8;m0 = a * (1 - e * e);m2 = 3 * e * e * m0 / 2;m4 = 5 * e * e * m2 / 4;m6 = 7 * e * e * m4 / 6;m8 = 9 * e * e * m6 / 8;Coeficient_a0[0] = m0 + m2 / 2 + 3 * m4 / 8 + 5 * m6 / 16 + 35 * m8 / 128;Coeficient_a0[1] = m2 / 2 + m4 / 2 + 15 * m6 / 32 + 7 * m8 / 16;Coeficient_a0[2] = m4 / 8 + 3 * m6 / 16 + 7 * m8 / 32;Coeficient_a0[3] = m6 / 32 + m8 / 16;Coeficient_a0[4] = m8 / 128;}static int intSignOfDms, intSignOfRad;static double radAngle, dmsAngle;public static double DMSTORAD(double dmsAngle1){intSignOfDms = 1;if (dmsAngle1 < 0) intSignOfDms = -1;dmsAngle1 = Math.abs(dmsAngle1);radAngle = dmsAngle1 * Math.PI / 180.0;radAngle = radAngle * intSignOfDms;return radAngle;}public static double RADTODMS(double radAngle){intSignOfRad = 1;if (radAngle < 0) intSignOfRad = -1;radAngle = Math.abs(radAngle);dmsAngle = radAngle * 180 / Math.PI;dmsAngle = dmsAngle * intSignOfRad;return dmsAngle;}。