Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
ECEF (Earth centered, Earth fixed) x,y,z
x : "ndarray"
ECEF x coordinate (meters)
y : "ndarray"
ECEF y coordinate (meters)
z : "ndarray"
ECEF z coordinate (meters)
Notes
------
if srange==NaN, z=NaN
"""
# Origin of the local system in geocentric coordinates.
x0, y0, z0 = geodetic2ecef(lat0, lon0, alt0, ell, deg=deg)
# Convert Local Spherical AER to ENU
e1, n1, u1 = aer2enu(az, el, srange, deg=deg)
# Rotating ENU to ECEF
dx, dy, dz = enu2uvw(e1, n1, u1, lat0, lon0, deg=deg)
# Origin + offset from origin equals position in ECEF
return x0 + dx, y0 + dy, z0 + dz
if h0 < 0:
raise ValueError("Intersection calculation requires altitude [0, Infinity)")
if ell is None:
ell = Ellipsoid()
a = ell.semimajor_axis
b = ell.semimajor_axis
c = ell.semiminor_axis
el = tilt - 90.0 if deg else tilt - pi / 2
e, n, u = aer2enu(az, el, srange=1.0, deg=deg) # fixed 1 km slant range
u, v, w = enu2uvw(e, n, u, lat0, lon0, deg=deg)
x, y, z = geodetic2ecef(lat0, lon0, h0, deg=deg)
value = -(a ** 2) * b ** 2 * w * z - a ** 2 * c ** 2 * v * y - b ** 2 * c ** 2 * u * x
radical = (
a ** 2 * b ** 2 * w ** 2
+ a ** 2 * c ** 2 * v ** 2
- a ** 2 * v ** 2 * z ** 2
+ 2 * a ** 2 * v * w * y * z
- a ** 2 * w ** 2 * y ** 2
+ b ** 2 * c ** 2 * u ** 2
- b ** 2 * u ** 2 * z ** 2
+ 2 * b ** 2 * u * w * x * z
- b ** 2 * w ** 2 * x ** 2
- c ** 2 * u ** 2 * y ** 2
+ 2 * c ** 2 * u * v * x * y
- c ** 2 * v ** 2 * x ** 2
)
ell : Ellipsoid, optional
reference ellipsoid
deg : bool, optional
degrees input/output (False: radians in/out)
Results
-------
e : "ndarray"
East ENU
n : "ndarray"
North ENU
u : "ndarray"
Up ENU
"""
x1, y1, z1 = geodetic2ecef(lat, lon, h, ell, deg=deg)
x2, y2, z2 = geodetic2ecef(lat0, lon0, h0, ell, deg=deg)
return uvw2enu(x1 - x2, y1 - y2, z1 - z2, lat0, lon0, deg=deg)
reference ellipsoid
deg : bool, optional
degrees input/output (False: radians in/out)
Results
-------
e : "ndarray"
East ENU
n : "ndarray"
North ENU
u : "ndarray"
Up ENU
"""
x1, y1, z1 = geodetic2ecef(lat, lon, h, ell, deg=deg)
x2, y2, z2 = geodetic2ecef(lat0, lon0, h0, ell, deg=deg)
return uvw2enu(x1 - x2, y1 - y2, z1 - z2, lat0, lon0, deg=deg)