def toNed(distance, bearing, elevation, Ned=Ned, name=NN): '''Create an NED vector from distance, bearing and elevation (in local coordinate system). @arg distance: NED vector length (C{meter}). @arg bearing: NED vector bearing (compass C{degrees360}). @arg elevation: NED vector elevation from local coordinate frame horizontal (C{degrees}). @kwarg Ned: Optional class to return the NED (L{Ned}) or C{None}. @kwarg name: Optional name (C{str}). @return: An NED vector equivalent to this B{C{distance}}, B{C{bearing}} and B{C{elevation}} (L{Ned}) or if B{C{Ned=None}}, an L{Ned3Tuple}C{(north, east, down)}. @raise ValueError: Invalid B{C{distance}}, B{C{bearing}} or B{C{elevation}}. @JSname: I{fromDistanceBearingElevation}. ''' d = Distance(distance) sb, cb, se, ce = sincos2d(Bearing(bearing), Height(elevation=elevation)) n = cb * d * ce e = sb * d * ce d *= se r = Ned3Tuple(n, e, -d) if Ned is None else \ Ned(n, e, -d) return _xnamed(r, name)
def heightOf(angle, distance, radius=R_M): '''Determine the height above the (spherical) earth after traveling along a straight line at a given tilt. @arg angle: Tilt angle above horizontal (C{degrees}). @arg distance: Distance along the line (C{meter} or same units as B{C{radius}}). @kwarg radius: Optional mean earth radius (C{meter}). @return: Height (C{meter}, same units as B{C{distance}} and B{C{radius}}). @raise ValueError: Invalid B{C{angle}}, B{C{distance}} or B{C{radius}}. @see: U{MultiDop geog_lib.GeogBeamHt<https://GitHub.com/NASA/MultiDop>} (U{Shapiro et al. 2009, JTECH <https://Journals.AMetSoc.org/doi/abs/10.1175/2009JTECHA1256.1>} and U{Potvin et al. 2012, JTECH <https://Journals.AMetSoc.org/doi/abs/10.1175/JTECH-D-11-00019.1>}). ''' r = h = Radius(radius) d = abs(Distance(distance)) if d > h: d, h = h, d if d > EPS: d = d / h # PyChecker chokes on ... /= ... s = sin(Phi_(angle, name='angle', clip=180)) s = fsum_(1, 2 * s * d, d**2) if s > 0: return h * sqrt(s) - r raise InvalidError(angle=angle, distance=distance, radius=radius)
def _angular(distance, radius): # PYCHOK for export '''(INTERNAL) Return the angular distance in radians. @raise ValueError: Invalid B{C{distance}} or B{C{radius}}. ''' return Distance(distance) / Radius_(radius)