in metropolis/utils/geo.py [0:0]
def topocentric_from_lla(lat, lon, alt, reflat, reflon, refalt):
"""
Transform from lat, lon, alt to topocentric XYZ.
>>> lat, lon, alt = -10, 20, 100
>>> np.allclose(topocentric_from_lla(lat, lon, alt, lat, lon, alt),
... [0,0,0])
True
>>> x, y, z = topocentric_from_lla(lat, lon, alt, 0, 0, 0)
>>> np.allclose(lla_from_topocentric(x, y, z, 0, 0, 0),
... [lat, lon, alt])
True
"""
T = np.linalg.inv(ecef_from_topocentric_transform(reflat, reflon, refalt))
x, y, z = ecef_from_lla(lat, lon, alt)
tx = T[0, 0] * x + T[0, 1] * y + T[0, 2] * z + T[0, 3]
ty = T[1, 0] * x + T[1, 1] * y + T[1, 2] * z + T[1, 3]
tz = T[2, 0] * x + T[2, 1] * y + T[2, 2] * z + T[2, 3]
return tx, ty, tz