白塞尔大地主题解算教学提纲
用C语言实现大地主题解算

4
6
4
( 争 寺+
‘ ) c o 5 4 A ’
裴连磊 P E I L i a n — l e i
( 新疆 地 矿 局 测 绘 大 队 , 乌鲁木齐 8 3 0 0 1 7 ) ( X i n j i a n g G e o l o g y a n d Mi n e r a l B u r e a u , S u r v e y i n g a n d Ma p p i n g B r i g a d e , U r u mq i 8 3 0 0 1 7 , C h i n a )
1 - 5计 算经 度 差 改 正 数
本 文的程序 实现 是采用 的 白塞 尔大地 主题 解 算的方 法, 根 据 白塞 尔大地主题解 算的 方法 , 分析得 出适 合计 算 机编程 的大地主题正反 算的具体 实现步骤。 1 白塞尔法大地主题正算思想 已知量 : 大 地线 起点 的纬 度 B , 经度 L , 大地 方位 角 A 1 及大地线长度 S 。 求解量 : 大地线终点 的纬度 B : , 经度 L 2
c 番 一 番 + . .
c _ b ( 薷 4 一 6 一)
2
=
c 0 s u 2 =
L a 1 = s i n u l s i n u 2 I a 2 _ c o s u l c 0 s u 2 b=
C O S Ul s i n u 2 , b 2 = s i n ul C O S U 2
之 值 。 即下 式 :
求解 量 : 大地 线长度 S及起、 终点 处的大地 方位角 A
及 A' 。
A : b ( 1 一 鲁十 击k 6 _ -
2 . 1辅 助计算 w :
大地主题解算

"
S2 2 2 2 2 4 A" A21 A12 S sin Am t m 1 [ cos A ( 2 7 9 t 5 m m m m m) 2 Nm 24N m 2 2 sin 2 Am t m 2 t m 2 m ] 5次项
本节主要内容
• • • • • 大地测量主题解算的一般说明 勒让德级数 高斯平均引数正算公式 高斯平均引数反算公式 高斯平均引数正、反算公式的实现
4.7 大地测量主题解算概述
一、大地测量主题解算的一般说明 大地元素:椭球面上点的大地经度L,大地纬度B,两点间 的大地线长度S,及其正反大地方位角A12,A21。 大地主题解算:已知某些大地元素推求另一些大地元素叫做 大地主题解算;包括正解和反解。
大地线长度和正反方位 角.S sin Am,S cosAm 及A" 计算公式为:
计算出S sin Am,S cosAm及A"后,按下式计算大地线 长度 和正反方位角:
S sin Am t an Am S cos A m S S sin Am S cos Am sin Am cos Am 1 A12 Am A", 2 1 A21 Am A&2 2 3 m cos2 Am 1 t m m 4t m m ] 5次项
L" L2 L1
"
S2 2 2 S sec Bm sin Am 1 [ sin A t m m 2 Nm 24N m 2 2 2 cos2 Am 1 m 9t m m ] 5次项
Am是大地方位角,其值在 0-360之间,设b B2 B1 , l L2 L1 , b看成x, l看成y,平面方位角的象限判 别一样。
大地主题解算

大地主题解算一、实验目的:1. 提高运用计算机语言编程开发的能力;2. 加深对大地主题解算计算公式及辅助参数的理解并掌握计算步骤;3. 通过编程语言实现大地主题解算。
二、工具:Windows XP Mode 环境下的Microsoft Visual C++ 6.0三、注意事项:1. 计算所需变量多,容易混淆;2. 正反算函数的编写;3. 函数调用;4. 弧度与角度之间的转化。
四、实验要求:1. 提交报告,实验总结,编写代码;2. 独立编程,调试运行;3. 上交成果:编写思想,编写过程,问题分析,源代码,计算结果;五、编程过程实现:1. 对白塞尔法大地主题解算有一定的了解,并参考教材P148-P150;2. 由于参数较多,而在C语言环境下很多符号无法定义,需要符合要求的定义符号替代书本上那些无法直接在C语言环境下定义的符号来达到实现实验的目的;3. 程序中采用弧度与度分秒之间转换的函数定义与调用,减轻一定的实验麻烦;4. 在C语言环境下,数学函数fabs代替abs起绝对值作用,atan代替arctan 起反函数作用;5. 程序中尤其注意弧度与角度之间转换,在C语言环境下电脑默认为弧度。
六、源程序代码:#include<stdio.h>#include<math.h>double hudu(double,double,double); /*度分秒转换为弧度*/double du(double); /*弧度转换为度*/double fen(double); /*弧度转换为分*/double miao(double); /*弧度转换为秒*/#define PI 3.1415926void main (void){int k;printf("请选择执行正算或者反算,若执行正算,请输入1;若执行反算,请输入2。
\n");scanf("%d",&k);/*正算*/if(k==1) { double bz,lz,az,S,bz2,lz2,az2,B1,L1,A1,B2,L2,A2,bx,by,lx,ly,ax,ay; int bx2,by2,lx2,ly2,ax2,ay2;doublee2,W1,sinu1,cosu1,sinA0,coto1,sin2o1,cos2o1,sin2o,cos2o,A,B,C,r,t,o0,o,g,sinu2,q; /*以度分秒顺序输入数据*/ printf("请输入大地线起点纬度度分秒\n"); scanf("%lf%lf%lf",&bx,&by,&bz); printf("请输入大地线起点经度度分秒\n"); scanf("%lf%lf%lf",&lx,&ly,&lz); printf("请输入大地方位角度分秒\n"); scanf("%lf%lf%lf",&ax,&ay,&az); printf("请输入大地线长度\n"); scanf("%lf",&S); /*调用函数*/ B1=hudu(bx,by,bz); L1=hudu(lx,ly,lz); A1=hudu(ax,ay,az); /*白塞尔大地主题解算*/ e2=0.006693421622966; W1=sqrt(1-e2*sin(B1)*sin(B1)); sinu1=sin(B1)*(sqrt(1-e2))/W1; cosu1=cos(B1)/W1; sinA0=cosu1*sin(A1);coto1=cosu1*cos(A1)/sinu1; sin2o1=2*coto1/(coto1*coto1+1); cos2o1=(coto1*coto1-1)/(coto1*coto1+1);A=6356863.020+(10718.949-13.474*(1-sinA0*sinA0))*(1-sinA0*sinA0);B=(5354.469-8.978*(1-sinA0*sinA0))*(1-sinA0*sinA0);C=(2.238*(1-sinA0*sinA0))*(1-sinA0*sinA0)+0.006;r=691.46768-(0.58143-0.00144*(1-sinA0*sinA0))*(1-sinA0*sinA0);t=(0.2907-0.0010*(1-sinA0*sinA0))*(1-sinA0*sinA0);o0=(S-(B+C*cos2o1)*sin2o1)/A;sin2o=sin2o1*cos(2*o0)+cos2o1*sin(2*o0);cos2o=cos2o1*cos(2*o0)-sin2o1*sin(2*o0);o=o0+(B+5*C*cos2o)*sin2o/A; g=(r*o+t*(sin2o-sin2o1))*sinA0; /*求B2*/ sinu2=sinu1*cos(o)+cosu1*cos(A1)*sin(o);B2=atan(sinu2/(sqrt(1-e2)*sqrt(1-sinu2*sinu2)));/*求L2*/q=atan(sin(A1)*sin(o)/(cosu1*cos(o)-sinu1*sin(o)*cos(A1))); /*判断q*/ if(sin(A1)>0 && tan(q)>0) q=fabs(q);else if(sin(A1)>0 && tan(q)<0) q=PI-fabs(q); else if(sin(A1)<0 && tan(q)<0) q=-fabs(q); else q=fabs(q)-PI; L2=L1+q-g/3600/180*PI; /*求A2*/A2=atan(cosu1*sin(A1)/(cosu1*cos(o)*cos(A1)-sinu1*sin(o))); /*判断A2*/ if(sin(A1)<0 && tan(A2)>0) A2=fabs(A2); else if(sin(A1)<0&& tan(A2)<0) A2=PI-fabs(A2); else if(sin(A1)>0 && tan(A2)>0) A2=PI+fabs(A2); else A2=2*PI-fabs(A2); /*调用函数*/bx2=(int)(du(B2));by2=(int)(fen(B2)); bz2=miao(B2);lx2=(int)(du(L2));ly2=(int)(fen(L2)); lz2=miao(L2); ax2=(int)(du(A2)); ay2=(int)(fen(A2)); az2=miao(A2); printf("大地线终点纬度度分秒分别为:\n%d\n%d\n%lf\n",bx2,by2,bz2); printf("大地线终点经度度分秒分别为:\n%d\n%d\n%lf\n",lx2,ly2,lz2);} /*反算*/ else if(k==2) { printf("终点大地方位角度分秒分别为:\n%d\n%d\n%lf\n",ax2,ay2,az2);doublebz,lz,bz2,lz2,az,az2,B1,L1,B2,L2,S,A1,A2,bx,by,lx,ly,bx2,by2,lx2,ly2;int ax,ay,ax2,ay2; doublee2,W1,W2,sinu1,sinu2,cosu1,cosu2,L,a1,a2,b1,b2,g,g2,g0,r,p,q,sino,coso,o,sinA0,x, t1,t2,A,B,C,y;/*以度分秒顺序输入数据*/ printf("请输入大地线起点纬度度分秒\n"); scanf("%lf%lf%lf",&bx,&by,&bz);printf("请输入大地线起点经度度分秒\n"); scanf("%lf%lf%lf",&lx,&ly,&lz); printf("请输入大地线终点纬度度分秒\n"); scanf("%lf%lf%lf",&bx2,&by2,&bz2); printf("请输入大地线终点经度度分秒\n"); scanf("%lf%lf%lf",&lx2,&ly2,&lz2); /*调用函数*/B1=hudu(bx,by,bz); L1=hudu(lx,ly,lz); B2=hudu(bx2,by2,bz2); L2=hudu(lx2,ly2,lz2); /*白塞尔大地主题解算*/ e2=0.006693421622966; W1=sqrt(1-e2*sin(B1)*sin(B1)); W2=sqrt(1-e2*sin(B2)*sin(B2)); sinu1=sin(B1)*sqrt(1-e2)/W1; sinu2=sin(B2)*sqrt(1-e2)/W2; cosu1=cos(B1)/W1; cosu2=cos(B2)/W2; L=L2-L1; a1=sinu1*sinu2; a2=cosu1*cosu2;b1=cosu1*sinu2; b2=sinu1*cosu2; /*逐次趋近法求解A1*/g0=-662.904266/3600*PI/180;g=0; r=L; while(1){p=cosu2*sin(r); q=b1-b2*cos(r); A1=atan(p/q);/*判断A1*/if(p>0 && q>0)A1=fabs(A1);else if(p>0 && q<0) A1=PI-fabs(A1); else if(p<0 && q<0) A1=PI+fabs(A1); elseA1=2*PI-fabs(A1);sino=p*sin(A1)+q*cos(A1); coso=a1+a2*cos(r);o=atan(sino/coso); /*判断o*/ if(coso>0) o=fabs(o); else o=PI-fabs(o);sinA0=cosu1*sin(A1);x=2*a1-(1-sinA0*sinA0)*coso;t1=(33523299-(28189-70*(1-sinA0*sinA0))*(1-sinA0*sinA0))*0.0000000001;t2=(28189-94*(1-sinA0*sinA0))*0.0000000001; g2=(t1*o-t2*x*sino)*sinA0; /*检验循环次数*/ printf("\ng2=%lf\ng0=%lf\n",g2,g0); if(g2<=g0) break; elser=L+g2;A=6356863.020+(10708.949-13.474*(1-sinA0*sinA0))*(1-sinA0*sinA0); } /*求解S*/B=10708.938-17.956*(1-sinA0*sinA0); C=4.487;y=((1-sinA0*sinA0)*(1-sinA0*sinA0)-2*x*x)*coso;S=A*o+(B*x+C*y)*sino; /*求解A2*/ A2=atan(cosu1*sin(r)/(b1*cos(r)-b2)); /*判断A2*/ if(p<0 && q<0)A2=fabs(A2);else if(p<0 && q>0) A2=PI-fabs(A2); else if(p>0 && q>0) A2=PI+fabs(A2); elseA2=2*PI-fabs(A2);/*调用函数*/ax=(int)(du(A1));ay=(int)(fen(A1)); az=miao(A1); ax2=(int)(du(A2)); ay2=(int)(fen(A2)); az2=miao(A2);printf("起点大地方位角度分秒分别为:\n%d\n%d\n%lf\n",ax,ay,az);}/*度分秒转换为弧度*/double hudu(double a0,double b0,double c0){double A0; A0=(a0+b0/60+c0/3600)*PI/180; } /*数据错误*/ else printf("数据错误,请重新输入\n"); printf("终点大地方位角度分秒分别为:\n%d\n%d\n%lf\n",ax2,ay2,az2); printf("大地线长度为:%lf\n",S); return A0;}/*弧度转换为度*/double du(double B0){} double x0; x0=(int)(B0*180/PI); return x0;/*弧度转换为分*/double fen(double C0) {double _y,y0;_y=(int)(C0*180/PI);}/*弧度转换为秒*/double miao(double D0) {double _z1,_z2,z0;} _z1=(int)(D0*180/PI); _z2=(int)((D0*180/PI-_z1)*60); z0=(fabs)((double)(((D0*180/PI-_z1)*60-_z2)*60)); return z0; y0=(fabs)((int)((C0*180/PI-_y)*60)); return y0;大地主题解算正算:大地主题解算反算:以上检验数据来自书本P151,P152。
白塞尔大地主题解算的基本思想

白塞尔大地主题解算的基本思想
首先,白塞尔大地主题解算的基本思想之一是建立地壳变形的力学模型。
地壳变形是地球表面的一项重要现象,是由于地质作用和地球内部力
学过程的结果。
地壳变形的力学模型是研究地壳变形的重要方法。
常见的
地壳变形的力学模型有弹性模型、弹塑性模型和拟弹性模型等。
这些模型
可以描述地壳的变形过程,通过对地壳的变形过程进行建模,可以更好地
理解地壳变形的机制和动力学过程。
其次,白塞尔大地主题解算的思想之一是研究现今地球表面的动力学
过程。
地球表面的动力学过程包括板块运动、地震活动、火山喷发等。
这
些过程在地球的长期演化中起着重要的作用。
通过对现今地球表面动力学
过程的研究,可以揭示地球内部的结构和动力学机制,进而更好地理解地
壳变形的成因和发展变化的规律。
第三,白塞尔大地主题解算的基本思想之一是研究地壳变形的成因。
地壳变形的成因是地壳运动的基本原因,也是地球科学研究的一个重要问题。
地壳变形的成因包括构造运动、地壳应力状态的改变、地震活动等。
通过研究地壳变形的成因,可以更好地了解地壳变形的机制和规律,进而
为地震预测和地壳运动的控制提供科学依据。
总之,白塞尔大地主题解算的基本思想是通过建立地壳变形的力学模型,研究现今地球表面的动力学过程,探究地壳变形的成因,揭示地壳变
形与地球动力学过程之间的相互关系,以推动地壳运动的理论和应用研究。
这一思想对于研究地壳运动的机制和规律,了解地壳变形的成因和动力学
过程,提高地震预测和地壳运动控制的水平具有重要意义。
大地测量

作业一:1、 请说明大地测量学与控制测量学的定义,阐述它们之间的关系。
答:大地测量学是在一定时间-空间参考系统中,测量和描绘地球及其他行星体的一门学科。
控制测量学是研究精确测定和描绘地面控制点空间位置及其变化的学科。
控制测量是在大地测量学基本理论基础上以工程建设测量为主要服务对象而发展和形成的。
可以说大地测量学是控制测量学的理论指导,控制测量是大地测量在工程实践中的具体应用。
2、 结合自己的感受,说明学习本课程的目的。
略3、 有两个已知点A 、B ,在A 上架全站仪观测P 点坐标,如图1。
两已知点坐标分别为: A :(100,200),B :(200,300)但在现场操作全站仪时,误将测站A 的坐标输为另一个控制点C 的坐标(200,250),用坐标定向时又误将控制点D 的坐标(200,400)当作B 点输入了仪器,此时测得P 点的 坐标为(300,300),试求P 点的真实坐标应该是多少?(提示:先建以A 为原点的辅助坐标系旋转,再平移)解:(以数学坐标系解,以便和教材公式对应,也可以测量坐标系解,见后图)一、以A 点为原点建立辅助坐标系: 1、 由于先误以C 、D 点数据观测的P 点坐标,设C (A )点为原点,因为αCD =90O ,故CD(AB)方向为90度方向即Y ’’轴,顺时针90度方向为X ’’轴。
P 点在此坐标系中坐标为[x ’’,y ’’]T =[100,50]T2、 实际上αAB =45O ,故以A 点为原点,以真实的方向建立坐标系:AB 逆时针45O 为Y ’轴,顺时针为45O X ’。
此坐标系可由X ’’CY ’’逆时针转θ=45O 得到。
故P 点在此坐标系中坐标为:⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡-=⎥⎦⎤⎢⎣⎡''''cos sin sin cos ''y x y x θθθθ二、坐标系平移:前述[x ’,y ’]T 为以A 点为原点建立的坐标系,实际情况为A 点坐标为(100,200),即将X ’AY ’平移Δx=100, Δy=200可得P 点在XOY 坐标系中实际坐标:⎥⎦⎤⎢⎣⎡∆∆+⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡-=⎥⎦⎤⎢⎣⎡y x y x y x ''''cos sin sin cos θθθθ 三、代入数据⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡-=⎥⎦⎤⎢⎣⎡645.164066.2062001005010045cos 45sin 45sin 45cos O O O Oy x从测量坐标系中求解示意图,注意:测量坐标系的欧勒角正方向为顺时针。
《大地测量学基础》试题

一、解释下列术语(每个2分,共10分)大地水准面球面角超底点纬度高程异常水准标尺零点差二、填空(1-15小题每空1分;16题4分,共36分)1、在地球自转中,地轴方向相对于空间的变化有______和_____。
2、时间的度量单位有______和______两种形式。
3、重力位是______和_____之和,重力位的公式表达式为_______。
4、椭球的形状和大小一般用_______来表示。
5、在大地控制网优化设计中把_____、______和_____作为三个主要质量控制标准。
6、测距精度表达式中,的单位是______,表示的意义是_____;的单位是______,表示的意义是_____。
7、利用测段往返不符值计算的用来衡量水准测量外业观测的精度指标用_____来表示,其意义是______。
8、利用闭合环闭合差计算的用来衡量水准测量外业观测的精度指标用_____来表示,其意义是______。
9、某点在高斯投影3°带的坐标表示为XA=3347256m, YA=37476543m,则该点在6°带第19带的实际坐标为xA=___________________,yA=___________________。
10、精密水准测量中每个测段设置______个测站可消除水准标尺______零点差的影响。
11、点P从B=0°变化到B=90°时,其卯酉圈曲率半径从______变化到_____。
12、某点P的大地纬度B=30°,则该点法线与短轴的交点离开椭球中心的距离为_____。
13、高斯投影中,_____投影后长度不变,而投影后为直线的有_____,其它均为凹向_____的曲线。
14、大地线克莱劳方程决定了大地线在椭球面上的_______;在椭球面上某大地线所能达到的最大纬度为60°,则该大地线穿越赤道时的大地方位角表达式为_____(不用计算出数值)。
白塞尔大地主题正反算

地球椭球 CGCS2000 6378137 6356752.314 6399593.626 1/298.257222101 0.00669438 0.006739497 第一偏心率e2= 第一偏心率e‘2= sinu1= cotσ1= A0= B= β= cos2(σ1+σ0)= sinu2= 大地方位角A21= 第一偏心率e2= u1= u2= cos(2σ‘1+Δσ‘)= ω2 = ω5 = s2= s5= 大地方位角A21= u1= u2= cos(2σ‘1+Δσ‘)= ω2 = ω5 = s2= s5=
2
克拉索夫斯基椭球 BJ54 6378245 6356863.019 6399698.902 1/298.3 0.006693422 0.006738525 BJ54 35°00′00.000000″ 35°00′00.000000″ 0.820055451 1.9591E-09 0.002206928 0.241484809 0.002515577 0.002514192 34°59′59.544529″ BJ54 35°00′00.000000″ 35°00′00.000000″ 0.002508527 4.64788E-09 -4.15588E-09 0.003065877 9.19076E-10 16000.00241 34°59′59.544529″ 35°10′30.957713″ 0.002508527 4.64788E-09 -4.15588E-09 0.003065877 9.19076E-10
IUGG--1979椭球 WGS84 6378137 6356752.314 6399593.626 1/298.257223563 0.00669438 0.006739497 6356863.019 89°59′59.999859″ 16000 0.820055451 -1 6360368.854 0.003351407 -0.005031132 6.90795E-06 35°10′30.957713″ 6378245 34°59′59.544529″ 35°10′30.957713″ 0.820055451 0.003358976 9.24261E-07 0.999451116 -0.000548959 90°00′00.000141″ 35°00′00.000000″ 35°00′00.000000″ 0.820055451 0.003358976 9.24261E-07 0.999451116 -0.000548959
大地主题解算方法综述

是高斯平均 引数 公式 [2O4] 。高斯 ( G auss)提 出把 勒让德 级数 式改化成以 P1、P2 ( P1, P 2 为 大地椭 球面上 的两点 ) 两点 的平均纬度和平 均方 位角为 根据。这 样勒 让德 级数式 中所
第 4期
周振宇等 大地主题解算方法综述
时, 公式还可以得到简化。 3) 用龙格 ) 库塔 ( R ungeOK utta) 法 [ 5] 解 大地 线微 分方
程。它的实质是 用若 干点的 函数 值的线 性组 合, 代替 泰勒
级数展开中 的导数 计算, 又 可保 持必要 的精 度。对于 短距
离大地主题 解算, 可 以只 取一 步; 如果距 离较 长, 可 以分
( L1, B1 ) 和 P 2 ( L2, B2 ) 点间的大地线弧长 S 积分得:
Q B2 - B1 =
p2 cosAdS p1 M
Q L2 - L1 =
p2 p1
N
s inA cosB
dS
( 2)
Q A 2 - A 1 ? 180b=
p2 tanB sinA dS
p1
N
在初等函数 中这 些积分 不能 计算, 所 以其 精确值 不能
椭球的过渡。
白塞尔 ( Besse l) 首先提出并解决了投影条件, 使这一解
法得以实现。
这类公式的特点是计算 公式展 开 e2 或 的幂级 数, 解算
精度与距离 长短无 关。因此 它既 适用于 短距 离解 算, 也适 用于长距离 解算 [ 5] 。其主 要缺 点在 于: 由 S 求 R、由 L 求 K, 或相反的运算, 需要进行迭代。同时还要预先 计算辅助
种, 其中大部 分适用 于短 距离, 一 部分适 用于 中距 离, 只 有几种适用 于长距 离。这几 十种 方法虽 然形 形色色 , 各有 不同, 但 就 其推 导 的 理 论 基 础来 说, 大 致 可 归纳 为 以 下 五类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.计算起点的归化纬度
2.计算辅助函数值,解球面三角形
3.按公式计算相关系数A,B,C以及α,β
4.计算球面长度
5.计算纬度差改正数
6.计算终点大地坐标及大地方位角
反算流程:
1.辅助计算
2.用逐次趋近法同时计算起点大地方位角、球面长度及经差,第一次趋近时,取δ=0。
计算下式,重复上述计算过程2.
C=(2.238*(1-sinA0*sinA0))*(1-sinA0*sinA0)+0.006;
afa=691.46768-(0.58143-0.00144*(1-sinA0*sinA0))*(1-sinA0*sinA0);
beta=(0.2907-1.0E-3*(1-sinA0*sinA0))*(1-sinA0*sinA0);
sigma=sigma0+(B+5*C*cos2)*sin2/A;
delta=(afa*sigma+beta*(sin2-sin2sigma1))*sinA0; //计算经度差改正数
delta=delta/3600*pi/180;
sinu2=sinu1*cos(sigma)+cosu1*cos(A1)*sin(sigma);
B1=(B10+(float)B11/60+B12/3600)*pi/180;
L1=(L10+(float)L11/60+L12/3600)*pi/180;
A1=(A10+(float)A11/60+A12/3600)*pi/180;
W1=sqrt(1-e*e*sin(B1)*sin(B1)); //计算起点规划纬度
白塞尔大地主题解算
白塞尔大地主题解算
方向:
学号:
姓名:
一.基本思路:
基本思想:将椭球面上的大地元素按照白塞尔投影条件投影到辅助球面上,继而在球面上进行大地主题解算,最后在将球面上的计算结果换算到椭球面上。其关键问题是找出椭球面上的大地元素与球面上相应元素之间的关系式,同时解决在球面上进行大地主题解算的方法。
void main()
{
int k,B10,B11,L10,L11,A10,A11,B20,B21,L20,L21,A20,A21;
double B12,L12,A12,B22,L22,A22;
double B1,L1,A1,S,B2,L2,A2,L,pi;
double A,B,C,afa,beta;
B2=atan(sinu2/(sqrt(1-e*e)*sqrt(1-sinu2*sinu2)));
lamda=atan(sin(A1)*sin(sigma)/(cosu1*cos(sigma)-sinu1*sin(sigma)*cos(A1)));
if(sin(A1)>0)
{
if(tan(lamda)>0)
sinu1=sin(B1)*sqrt(1-e*e)/W1; //计算起点规划纬度
cosu1=cos(B1)/W1; //计算起点规划纬度
sinA0=cosu1*sin(A1); //计算辅助函数值
cotsigma1=cosu1*cos(A1)/sinu1; //计算辅助函数值
sin2sigma1=2*cotsigma1/(cotsigma1*cotsigma1+1); //计算辅助函数值
if(sin(A1)>0)
{
if(tan(A2)>0)
A2=pi+fabs(A2);
else
A2=2*pi-fabs(A2);
}
else
{
if(tan(A2)>0)
A2=fabs(A2);
else
A2=pi-fabs(A2);
}
B2=B2*180*3600/pi;
sigma0=(S-(B+C*cos2sigma1)*sin2sigma1)/A;
sin2=sin2sigma1*cos(2*sigma0)+cos2sigma1*sin(2*sigma0);
cos2=cos2sigma1*cos(2*sigma0)-sin2sigma1*sin(2*sigma0);
double a1,a2,b1,b2,p,q,x,y;
double W1,W2,sinu1,sinu2,cosu1,cosu2,sinA0,cotsigma1,sin2sigma1,cos2sigma1,sigma0,sin2,cos2,sigma,sins,coss,delta0,delta,lamda;
pi=4*atan(1);
printf("白塞尔大地主题正算请输入1\n白塞尔大地主题反算请输入2\n");
scanf("%d",&k);
if(k==1)
{
printf("请输入大地线起点纬度B经度L,大地方位角A及大地线长度S:\n");
scanf("%d%d%lf%d%d%lf%d%d%lf%lf",&B10,&B11,&B12,&L10,&L11,&L12,&A10,&A11,&A12,&S);
cos2sigma1=(cotsigma1*cotsigma1-1)/(cotsigma1*cotsigma1+1); //计算辅助函数值
A=6356863.020+(10708.949-13.474*(1-sinA0*sinA0))*(1-sinA0*sinA0);
B=(5354.469-8.798*(1-sinA0*sinA0))*(1-sinA0*sinA0);
lamda=fabs(lamda);
else
lamda=pi-fabs(lamda);
}
else
{
if(tan(lamda)>0)
lamda=fabs(lamda)-pi;
else
lamda=-1*fabs(lamda);
}
L2=L1+lamda-delta;
A2=atan(cosu1*sin(A1)/(cosu1*cos(sigma)*cos(A1)-sinu1*sin(sigma)));
3.计算大地线长度S
4.计算反方位角
二.已知数据
序号
B1(DD.MMSS)
L1 (DD.MMSS)
A12(DD.MMSS)
S12(m)
1
41.01356874
130.10122676
1.4943
8000
三.源代码:
#include <stdio.h>
#include <math.h>
#define e 0.081813334016931499 //克拉索夫斯基椭球体第一偏心率