ECEF2BLH

ECEF2BLH

学习和理解推到过程:https://blog.csdn.net/charlee44/article/details/119979831

LLA坐标系转ECEF坐标系

LLA坐标系下的(lon,lat,alt)转换为ECEF坐标系下点(X,Y,Z)
{ X = ( N + a l t ) c o s ( l a t ) ∗ c o s ( l o n ) Y = ( N + a l t ) c o s ( l a t ) s i n ( l o n ) Z = ( N ( 1 − e 2 ) + a l t ) s i n ( l a t ) \begin{cases}X =(N+alt)cos(lat)*cos(lon) \\Y=(N+alt)cos(lat)sin(lon) \\Z =(N(1-e^2)+alt)sin(lat)\end{cases} X=(N+alt)cos(lat)cos(lon)Y=(N+alt)cos(lat)sin(lon)Z=(N(1e2)+alt)sin(lat)
2)其中e为椭球偏心率,N为基准椭球体的曲率半径
{ e 2 = ( a 2 − b 2 a 2 ) N = a 1 − e 2 s i n 2 ( l a t ) \begin{cases}e^2=(\frac{a^2-b^2}{a^2}) \\N=\frac{a}{\sqrt{1-e^2sin^2(lat)}}\end{cases} {e2=(a2a2b2)N=1e2sin2(lat) a
3)由于WGS-84下极扁率f=(a−b)/a 偏心率e和极扁率f之间的关系:

img
f = ( a − b ) / a f=(a-b)/a f=(ab)/a

e 2 = ( a 2 − b 2 ) a 2 = ( a − b ) ( a + b ) a 2 = ( a − b ) ( 2 a − ( a − b ) ) a 2 = ( a − b ) a ∗ ( 2 a − ( a − b ) ) a = f ∗ ( 2 − f ) e^2 = \frac{(a^2-b^2)}{a^2} \\= \frac{(a-b)(a+b)}{a^2} \\= \frac{(a-b)(2a-(a-b))}{a^2} \\= \frac{(a-b)}{a}*\frac{(2a-(a-b))}{a} \\= f*(2-f) e2=a2(a2b2)=a2(ab)(a+b)=a2(ab)(2a(ab))=a(ab)a(2a(ab))=f(2f)

(4) 坐标转换公式也可以为
{ X = ( N + a l t ) c o s ( l a t ) ∗ c o s ( l o n ) Y = ( N + a l t ) c o s ( l a t ) s i n ( l o n ) Z = ( N ( 1 − f ) 2 + a l t ) s i n ( l a t ) \begin{cases}X =(N+alt)cos(lat)*cos(lon) \\Y=(N+alt)cos(lat)sin(lon) \\Z =(N(1-f)^2+alt)sin(lat)\end{cases} X=(N+alt)cos(lat)cos(lon)Y=(N+alt)cos(lat)sin(lon)Z=(N(1f)2+alt)sin(lat)
(5) 坐标转换公式也可以为
1 − f = 1 − ( a − b ) / a = a − a + b a = b a 1-f = 1-(a-b)/a \\=\frac{a-a+b}{a} \\=\frac{b}{a} 1f=1(ab)/a=aaa+b=ab

{ X = ( N + a l t ) c o s ( l a t ) ∗ c o s ( l o n ) Y = ( N + a l t ) c o s ( l a t ) s i n ( l o n ) Z = ( N ∗ a 2 b 2 + a l t ) s i n ( l a t ) \begin{cases}X =(N+alt)cos(lat)*cos(lon) \\Y=(N+alt)cos(lat)sin(lon) \\Z =(N*\frac{a^2}{b^2}+alt)sin(lat)\end{cases} X=(N+alt)cos(lat)cos(lon)Y=(N+alt)cos(lat)sin(lon)Z=(Nb2a2+alt)sin(lat)

ECEF坐标系转LLA坐标系

l o n = a r c t a n ( y x ) a l t = p c o s ( l a t ) − N l a t = a r c t a n [ z p ∗ ( 1 − e 2 ∗ N N + a l t ) − 1 ] p = x 2 + y 2 \\ lon = arctan(\frac{y}{x}) \\alt = \frac{p}{cos(lat)-N} \\ lat = arctan[\frac{z}{p}*(1-e^2*\frac{N}{N+alt})^{-1}] \\ p = \sqrt{x^2+y^2} lon=arctan(xy)alt=cos(lat)Nplat=arctan[pz(1e2N+altN)1]p=x2+y2

具体求解算法参考:坐标系转换之LLA、ECEF、ENU互转 – MathSword数值计算软件

算法二

大地经纬度坐标与地心地固坐标的的转换_地心坐标转换为经纬度坐标matlab-CSDN博客

BLH->XYZ

将P点所在的子午椭圆放在平面上,以圆心为坐标原点,建立平面直接坐标系:

imglink4

对照地心地固坐标系,很容易得出:

{ Z = y X = x ∗ c o s L Y = x ∗ s i n L \begin{cases}Z = y\\X=x*cosL\\Y =x*sinL\end{cases} Z=yX=xcosLY=xsinL (1)

椭球上一点 P P P:

imglink5

​ 图(1)

满足:

a 2 x 2 + b 2 y 2 = 1 a^2x^2+b^2y^2=1 a2x2+b2y2=1 (1-2)

对x求导,有:

d y d x = − b 2 a 2 x y \frac{\mathrm{d}y}{\mathrm{d}{x}}= -\frac{b^2}{a^2}\frac{x}{y} dxdy=a2b2yx (2)

又根据解析几何可知,函数曲线(椭圆)某一点(就是P点)的倒数为该点切线的斜率,也就是正切值:
d y d x = t a n ( 9 0 o + B ) = − c o t B (3) \frac{dy}{dx} = tan(90^o + B) = -cotB \tag{3} dxdy=tan(90o+B)=cotB(3) (3)

联立公式(2)(3),可得:

y = b 2 a 2 t a n B = x ( a 2 − ( a 2 − b 2 ) a 2 ) t a n B = x ( 1 − a 2 − b 2 a 2 ) t a n B y=\frac{b^2}{a^2}tanB\\=x(\frac{a^2-(a^2-b^2)}{a^2})tanB\\=x(1-\frac{a^2-b^2}{a^2})tanB y=a2b2tanB=x(a2a2(a2b2))tanB=x(1a2a2b2)tanB

又: e = a 2 − b 2 a e=\frac{\sqrt{a^2-b^2}}{a} e=aa2b2 ,所以:

y = x ( 1 − e 2 ) t a n B (4) y = x(1-e^2)tanB \tag{4} y=x(1e2)tanB(4) (4)

其中,e为椭圆第一偏心率

令Pn的距离为N,那么显然有:

x=NcosB (4-2)

根据(4)式可得:
y = N ( 1 − e 2 ) s i n B y = N(1-e^2)sinB y=N(1e2)sinB (4-3)

将其带入(1)式,可得到椭球上P点的坐标为:

{ X = N c o s B c o s L Y = N c o s B s i n L Z = N ( 1 − e 2 ) s i n B \begin{cases}X =NcosBcosL\\Y=NcosBsinL\\Z =N(1-e^2)sinB\end{cases} X=NcosBcosLY=NcosBsinLZ=N(1e2)sinB
那么唯一的未知量就是Pn的长度N了,将(4)式带入到椭圆方程式(1.2):

x 2 a 2 + x 2 ( 1 − e 2 ) 2 t a n 2 B b 2 ) = 1 \frac{x^2}{a^2}+\frac{x^2(1-e^2)^2tan^2B }{b^2})=1 a2x2+b2x2(1e2)2tan2B)=1

又: e 2 = a 2 − b 2 a 2 e^2 = \frac{a^2-b^2}{a^2} e2=a2a2b2 故: b 2 = a 2 ( 1 − e 2 ) b^2= a^2(1-e^2) b2=a2(1e2),则

x 2 a 2 + x 2 ( 1 − e 2 ) 2 t a n 2 B a 2 ( 1 − e 2 ) ) = x 2 ( 1 + ( 1 − e 2 ) t a n 2 B ) a 2 = 1 \frac{x^2}{a^2}+\frac{x^2(1-e^2)^2tan^2B }{a^2(1-e^2)})=\frac{x^2(1+(1-e^2)tan^2B)}{a^2} = 1 a2x2+a2(1e2)x2(1e2)2tan2B)=a2x2(1+(1e2)tan2B)=1,等式两边乘以 a 2 c o s 2 B a^2cos^2B a2cos2B

x 2 [ c o s 2 B + ( 1 − e 2 ) s i n 2 B ] = a 2 c o s 2 B x^2[cos^2B +(1-e^2)sin^2B] = a^2cos^2B x2[cos2B+(1e2)sin2B]=a2cos2B

x 2 [ c o s 2 B + s i n 2 B − e 2 s i n 2 B ] = x 2 ( 1 − e 2 s i n 2 B ) = a 2 c o s 2 B x^2[cos^2B + sin^2B - e^2sin^2B] = x^2(1-e^2sin^2B) = a^2cos^2B x2[cos2B+sin2Be2sin2B]=x2(1e2sin2B)=a2cos2B

简化为:

x = a c o s B 1 − e 2 s i n 2 B x=\frac{acosB}{\sqrt{1-e^2sin^2B}} x=1e2sin2B acosB (6)

联立(5)(6)得:

N = a s q r t 1 − e 2 s i n 2 B N = \frac{a}{sqrt{1-e^2sin^2B}} N=sqrt1e2sin2Ba (6-2)

通过式(5)式(6),可以计算椭球上某一点的坐标。但这个点并不是我们真正要求的点,我们要求的点P(B,L,H)是椭球面沿法向量向上H高度的点:img

​ 图(2)

P点在椭球面上的点为 P 0 P_0 P0,那么根据矢量相加的性质,有:

P = P 0 + H . n P = P_0 + H.n P=P0+H.n (6-3)

其中, P 0 P_0 P0也就是式(5),而n是 P 0 P_0 P0在椭球面的返现单位矢量。

矢量在任意位置的方向都是一样的,那么我们可以假设存在一个单位球(球的半径为单位1),将法线单位矢量移动到球心位置,可得法线单位矢量为:

n = [ c o s B c o s L c o s B s i n L s i n B ] n = \left [ \begin{matrix} cosBcosL \\ cosBsinL \\ sinB \end{matrix} \right] n= cosBcosLcosBsinLsinB (7)

因此有

P = [ x y z ] = [ ( N + H ) c o s B c o s L ( N + H ) c o s B s i n L [ N ( 1 − e 2 ) + H ] s i n B ] P = \left [ \begin{matrix} x \\y \\z \end{matrix}\right ]=\left[ \begin{matrix} (N+H)cosBcosL \\(N+H)cosBsinL \\ [N(1-e^2)+H]sinB \end{matrix}\right] P= xyz = (N+H)cosBcosL(N+H)cosBsinL[N(1e2)+H]sinB (8)

其中:

$ N = \frac{a}{\sqrt{1-e2sin2B}}$$ (9)

XYZ->BLH

根据式(8),可知,:

Y X = ( N + H ) c o s B s i n L ( N + H ) c o s B c o s L = t a n L \frac{Y}{X} = \frac{(N+H)cosBsinL}{(N+H)cosBcosL} = tanL XY=(N+H)cosBcosL(N+H)cosBsinL=tanL

故,经度:

L = a r c t a n ( Y X ) L = arctan(\frac{Y}{X}) L=arctan(XY) (10)

不过纬度B就不是那么好算了,首先需要计算法线Pn在赤道两侧的长度。根据图1,有

y = P Q s i n B y=PQsinB y=PQsinB

与式(4-3)比较可得:

P Q = N ( 1 − e 2 ) PQ=N(1−e2) PQ=N(1e2)

显然,由于

P n = N = P Q + Q n Pn=N=PQ+Qn Pn=N=PQ+Qn

有: Q n = N e 2 Qn=Ne2 Qn=Ne2

接下来如下图所示,对图1做辅助线:

imglink7

图(3)

有:

{ P P ‘ ‘ = Z O P ‘ ‘ = x 2 + y 2 P P ‘ ‘ ‘ = O K p = Q K p s i n B = N e 2 s i n B P ‘ ‘ P ‘ ‘ ‘ = P P ‘ ‘ + P P ‘ ‘ ‘ \begin{cases} PP^{``}=Z \\ OP^{``} = \sqrt{x^2+y^2}\\ PP^{```} = OK_p = QK_psinB=Ne^2sinB \\ P^{``}P^{```}= PP^{``} + PP^{```}\end{cases} PP‘‘=ZOP‘‘=x2+y2 PP‘‘‘=OKp=QKpsinB=Ne2sinBP‘‘P‘‘‘=PP‘‘+PP‘‘‘

因而可得:

t a n B = Z + N e 2 s i n B x 2 + x 2 tanB=\frac{Z+Ne^2sinB}{\sqrt{x^2+x^2}} tanB=x2+x2 Z+Ne2sinB (11)

这个式子两边都有待定量B,需要用迭代法进行求值。具体可参看代码实现,初始的待定值可取

t a n B = z x 2 + y 2 tanB= \frac{z}{\sqrt{x^2+y^2}} tanB=x2+y2 z

大地纬度B已知,那么求高度H就非常简单了,直接根据式(8)中的第三式逆推可得:

$H = \frac{Z}{sinB} - N(1-e^2) $ (12)

汇总三式,可得:

{ L = a r c t a n ( Y X ) t a n B = Z + N e 2 s i n B x 2 + x 2 H = Z s i n B − N ( 1 − e 2 ) \begin{cases} L= arctan(\frac{Y}{X}) \\ tanB=\frac{Z+Ne^2sinB}{\sqrt{x^2+x^2}} \\H = \frac{Z}{sinB} - N(1-e^2) \end{cases} L=arctan(XY)tanB=x2+x2 Z+Ne2sinBH=sinBZN(1e2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值