@@ -35,11 +35,13 @@ def __init__(self):
3535#%% to AER (azimuth, elevation, range)
3636def ecef2aer (x , y , z , lat0 , lon0 , h0 , ell = EarthEllipsoid (), deg = True ):
3737 xEast , yNorth , zUp = ecef2enu (x , y , z , lat0 , lon0 , h0 , ell , deg = deg )
38+
3839 return enu2aer (xEast , yNorth , zUp , deg = deg )
3940
4041
4142def eci2aer (eci , lat0 , lon0 , h0 , t ):
4243 ecef = eci2ecef (eci , t )
44+
4345 return ecef2aer (ecef [:, 0 ], ecef [:, 1 ], ecef [:, 2 ], lat0 , lon0 , h0 )
4446
4547
@@ -59,11 +61,14 @@ def enu2aer(e, n, u, deg=True):
5961
6062def geodetic2aer (lat , lon , h , lat0 , lon0 , h0 , ell = EarthEllipsoid (), deg = True ):
6163 e , n , u = geodetic2enu (lat , lon , h , lat0 , lon0 , h0 , ell , deg = deg )
64+
6265 return enu2aer (e , n , u , deg = deg )
6366
6467
6568def ned2aer (n , e , d , deg = True ):
69+
6670 return enu2aer (e , n , - d , deg = deg )
71+
6772#%% to ECEF
6873def aer2ecef (az , el , srange , lat0 , lon0 , alt0 , ell = EarthEllipsoid (), deg = True ):
6974 """
@@ -115,12 +120,14 @@ def eci2ecef(eci, t):
115120
116121 for i in range (N ):
117122 ecef [i , :] = _rottrip (gst [i ]) @ eci [i , :]
123+
118124 return ecef
119125
120126
121127def enu2ecef (e1 , n1 , u1 , lat0 , lon0 , alt0 , ell = EarthEllipsoid (), deg = True ):
122128 x0 , y0 , z0 = geodetic2ecef (lat0 , lon0 , alt0 , ell , deg = deg )
123129 dx , dy , dz = _enu2uvw (e1 , n1 , u1 , lat0 , lon0 , deg = deg )
130+
124131 return x0 + dx , y0 + dy , z0 + dz
125132
126133
@@ -135,14 +142,18 @@ def geodetic2ecef(lat, lon, alt, ell=EarthEllipsoid(), deg=True):
135142 x = (N + alt ) * cos (lat ) * cos (lon )
136143 y = (N + alt ) * cos (lat ) * sin (lon )
137144 z = (N * (ell .b / ell .a )** 2 + alt ) * sin (lat )
145+
138146 return x , y , z
139147
140148
141149def ned2ecef (n , e , d , lat0 , lon0 , h0 , ell = EarthEllipsoid (), deg = True ):
150+
142151 return enu2ecef (e , n , - d , lat0 , lon0 , h0 , ell , deg = deg )
152+
143153#%% to ECI
144154def aer2eci (az , el , srange , lat0 , lon0 , h0 , t , ell = EarthEllipsoid (), deg = True ):
145155 x , y , z = aer2ecef (az , el , srange , lat0 , lon0 , h0 , ell , deg )
156+
146157 return ecef2eci (np .column_stack ((x , y , z )), t )
147158
148159
@@ -202,6 +213,7 @@ def ecef2enu(x, y, z, lat0, lon0, h0, ell=EarthEllipsoid(), deg=True):
202213
203214 return _uvw2enu (x - x0 , y - y0 , z - z0 , lat0 , lon0 , deg = deg )
204215
216+
205217def ecef2enuv (u , v , w , lat0 , lon0 , deg = True ):
206218 """
207219 for VECTOR i.e. between two points
@@ -330,21 +342,25 @@ def eci2geodetic(eci, t):
330342
331343 """ a.k.a. eci2lla() """
332344 ecef = eci2ecef (eci , t )
345+
333346 return ecef2geodetic (ecef [:, 0 ], ecef [:, 1 ], ecef [:, 2 ])
334347
335348
336349def enu2geodetic (e , n , u , lat0 , lon0 , h0 , ell = EarthEllipsoid (), deg = True ):
337350 x , y , z = enu2ecef (e , n , u , lat0 , lon0 , h0 , ell , deg = deg )
351+
338352 return ecef2geodetic (x , y , z , ell , deg = deg )
339353
340354
341355def ned2geodetic (n , e , d , lat0 , lon0 , h0 , ell = EarthEllipsoid (), deg = True ):
342356 x , y , z = enu2ecef (e , n , - d , lat0 , lon0 , h0 , ell , deg = deg )
357+
343358 return ecef2geodetic (x , y , z , ell , deg = deg )
344359#%% to NED
345360
346361def aer2ned (az , elev , slantRange , deg = True ):
347362 e , n , u = aer2enu (az , elev , slantRange , deg = deg )
363+
348364 return n , e , - u
349365
350366
@@ -353,30 +369,33 @@ def ecef2ned(x, y, z, lat0, lon0, h0, ell=EarthEllipsoid(), deg=True):
353369 for coordinate POSITION
354370 """
355371 e , n , u = ecef2enu (x , y , z , lat0 , lon0 , h0 , ell , deg = deg )
372+
356373 return n , e , - u
357374
358375def ecef2nedv (u , v , w , lat0 , lon0 , deg = True ):
359376 """
360377 for VECTOR between two points
361378 """
362379 e , n , u = ecef2enuv (u , v , w , lat0 , lon0 , deg = deg )
380+
363381 return n , e , - u
364382
365383def geodetic2ned (lat , lon , h , lat0 , lon0 , h0 , ell = EarthEllipsoid (), deg = True ):
366384 e , n , u = geodetic2enu (lat , lon , h , lat0 , lon0 , h0 , ell , deg = deg )
385+
367386 return n , e , - u
368387
369388#%% shared functions
370389
371390def get_radius_normal (lat_radians , ell ):
372391 a = ell .a
373392 b = ell .b
393+
374394 return a ** 2 / sqrt (
375395 a ** 2 * (cos (lat_radians ))** 2 + b ** 2 *
376396 (sin (lat_radians ))** 2 )
377397
378398
379-
380399def str2dt (t ):
381400 """
382401 output: datetime
@@ -460,6 +479,7 @@ def azel2radec(az_deg, el_deg, lat_deg, lon_deg, t):
460479
461480 return sky .ra .deg , sky .dec .deg
462481
482+
463483def radec2azel (ra_deg , dec_deg , lat_deg , lon_deg , t ):
464484 if Time is None :
465485 raise ImportError ('You need to install AstroPy' )
0 commit comments