in metropolis/utils/geo.py [0:0]
def lla_from_ecef(x, y, z):
"""
Compute latitude, longitude and altitude from ECEF XYZ.
All using the WGS84 model.
Altitude is the distance to the WGS84 ellipsoid.
"""
a = WGS84_a
b = WGS84_b
ea = np.sqrt((a ** 2 - b ** 2) / a ** 2)
eb = np.sqrt((a ** 2 - b ** 2) / b ** 2)
p = np.sqrt(x ** 2 + y ** 2)
theta = np.arctan2(z * a, p * b)
lon = np.arctan2(y, x)
lat = np.arctan2(
z + eb ** 2 * b * np.sin(theta) ** 3, p - ea ** 2 * a * np.cos(theta) ** 3
)
N = a / np.sqrt(1 - ea ** 2 * np.sin(lat) ** 2)
alt = p / np.cos(lat) - N
return np.degrees(lat), np.degrees(lon), alt