python座標系轉換 GNSS學習筆記 座標轉換

2021-10-11 12:41:25 字數 3717 閱讀 7626

gnss 座標轉換

gnss計算主要涉及三個座標系,地心地固座標系,地理座標系和站心座標系。這裡主要介紹一下三個座標的含義和轉換公式。

地心地固座標系如圖x,y,z表示 (ecef座標系),以地心o為座標原點,z軸指向協議地球北極,x軸指向參考子午面與地球赤道的交點,也叫地球座標系。一般gnss座標計算都在地心地固座標系下進行的。由於地球是橢圓形,有wgs-84和cgc2000等多種標準

地理座標系則通過經度(longitude),緯度(latitude)和高度(altitude)來表示地球的位置,也叫經緯高座標系(lla座標系)。

站心座標係以使用者所在位置p為座標原點,三個軸分別指向東向,北向和天向,也叫東北天座標系(enu座標系)。站心座標系的天向方向和地理座標系的高度方向是一致的。站心座標係用在慣性導航和衛星俯仰角計算中較多。

引數wgs-84

cgc200

基準橢球體的長半徑a

6378137.0 m

6378137.0 m

基準橢球體的極扁率f

1/298.257223565

1/298.257223563

地球自轉角速度we

7.2921151467*1e-5

7.2921151467*1e-5

地球引力和地球質量的乘積gm

3986004.418*1e8

3986004.418*1e8

光速2.99792458*1e8 m/s

2.99792458*1e8 m/s

lla座標系轉ecef座標系

lla座標系下的(lon,lat,alt)轉換為ecef座標系下點(x,y,z)

\[\begin

x=(n+alt)cos(lat)cos(lon)\\

y=(n+alt)cos(lat)sin(lon)\\

z=(n(1-e^2)+alt)sin(lat)

\end\]

其中e為橢球偏心率,n為基準橢球體的曲率半徑

\[\begin

e^2=\frac\\

n=\frac}

\end\]

由於wgs-84下極扁率\(f=\frac\),偏心率e和極扁率f之間的關係:

\[e^2=f(2-f)

座標轉換公式也可以為

\[\begin

x=(n+alt)cos(lat)cos(lon)\\

y=(n+alt)cos(lat)sin(lon)\\

z=(n(1-f)^2+alt)sin(lat)

\end\]

\[n=\frac}

python實現

def lla2ecef(lat,lon,alt):

wgs84_a = 6378137.0

wgs84_f = 1/298.257223565

wgs84_e2 = wgs84_f*(2-wgs84_f)

deg2rad = math.pi/180.0

rad2deg = 180.0/math.pi

lat *= deg2rad

lon *= deg2rad

n = wgs84_a/(math.sqrt(1-wgs84_e2*math.sin(lat)*math.sin(lat)))

x = (n+alt)*math.cos(lat)*math.cos(lon)

y = (n+alt)*math.cos(lat)*math.sin(lon)

z = (n*(1-wgs84_f)*(1-wgs84_f)+alt)*math.sin(lat)

return [x,y,z]

ecef座標系轉lla座標系

ecef座標系下點(x,y,z)轉換為lla座標系下的(lon,lat,alt)

\[lon=arctan(\frac)

\[alt=\frac

\[lat=arctan\bigg[\frac\bigg(1-e^2\frac\bigg)^\bigg]

\[p=\sqrt

一開始lon是未知的,可以假設為0,經過幾次迭代之後就能收斂

ecef座標系轉enu座標系

使用者所在座標點\(p_0=(x_0,y_0,z_0)\),,計算點\(p=(x,y,z)\)在以點\(p_\)為座標原點的enu座標系位置\((e,n,u)\)這裡需要用到lla座標系的資料,\(p_0\)的lla座標點為\(lla_0=(lon_0,lat_0,alt_0)\)

\[\begin

\left[ \begin

\delta\\\delta\\\delta

\end

\right]=

\left[ \begin

x\\y\\z\end\right]-

\left[ \begin

x_0\\y_0\\z_0\end\right]

\end

\[\begin

\left[ \begin

e\\n\\u

\end

\right]=s\cdot

\left[ \begin

\delta\\\delta\\\delta

\end

\right]

\end=

\left[ \begin

-sin(lon_0) & cos(lon_0) & 0 \\

-sin(lat_0)cos(lon_0) & -sin(lat_0)sin(lon_0) & cos(lat_0) \\

cos(lat_0)cos(lon_0) & cos(lat_0)sin(lon_0) & sin(lat_0)

\end \right]\cdot

\left[ \begin

\delta\\\delta\\\delta

\end

\right]

即座標變換矩陣\(s=\left[ \begin

-sin(lon_0) & cos(lon_0) & 0 \\

-sin(lat_0)cos(lon_0) & -sin(lat_0)sin(lon_0) & cos(lat_0) \\

cos(lat_0)cos(lon_0) & cos(lat_0)sin(lon_0) & sin(lat_0)

\end \right]\)

enu座標系轉ecef座標系

\(s\)為單位正交矩陣

\[\mathbf^=\mathbf^\mathrm

反之\[\begin

\left[ \begin

\delta\\\delta\\\delta\end

\right]=s^\cdot\left[ \begin

e\\n\\u\end \right]=

\mathbf^\mathrm\cdot\left[ \begin

e\\n\\u\end \right]

\end

lla座標系轉enu座標系

上述可以看到,從lla座標系轉換到enu座標系有較多計算量,在考慮地球偏心率\(e\)很小的前提下,可以做一定的近似公式計算

\[\left[ \begin

\delta e\\ \delta n \\ \delta u

\end

\right]=

\left[\begin

a\cdot cos(lat)\cdot \delta lon & 0 & 0 \\

0 & a \cdot \delta lat & 0 \\

0 & 0 & \delta alt

\end

\right]

Python地理座標系和投影座標系轉換

地心地固座標系 earth centered,earth fixed,ecef 簡稱地心座標系。地理座標系統 geographic coordinate system,gcs 1 座標系是地心座標系,用經緯度表示球面上的點。世界大地測量系統 world geodetic system,wgs 比如w...

python 天文座標系轉換

ga ra2az.py 2021.01.07 by from astropy import units as u 單位 from astropy.time import time from astropy.coordinates import skycoord from astropy.coordi...

座標系轉換

根據halcon的演算法,設座標系1 影象 的點 px,py 座標系2 世界 的點為 qx,qy 則 qx px qy hommat2d py 1 1 其中 hommat2d為乙個3乘3的矩陣,且第三行為 0,0,1 1 0 tx cos phi sin phi 0 1 sin theta 0 sx...