def toEtm8(latlon, lon=None, datum=None, Etm=Etm, falsed=True, name='', zone=None, **cmoff): '''Convert a lat-/longitude point to an ETM coordinate. @param latlon: Latitude (C{degrees}) or an (ellipsoidal) geodetic C{LatLon} point. @keyword lon: Optional longitude (C{degrees}) or C{None}. @keyword datum: Optional datum for this ETM coordinate, overriding B{C{latlon}}'s datum (C{Datum}). @keyword Etm: Optional (sub-)class to return the ETM coordinate (L{Etm}) or C{None}. @keyword falsed: False both easting and northing (C{bool}). @keyword name: Optional B{C{Utm}} name (C{str}). @keyword zone: Optional UTM zone to enforce (C{int} or C{str}). @keyword cmoff: DEPRECATED, use B{C{falsed}}. Offset longitude from the zone's central meridian (C{bool}). @return: The ETM coordinate (B{C{Etm}}) or a L{UtmUps8Tuple}C{(zone, hemipole, easting, northing, band, datum, convergence, scale)} if B{C{Etm}} is C{None} or not B{C{falsed}}. The C{hemipole} is the C{'N'|'S'} hemisphere. @raise EllipticError: No convergence. @raise ETMError: Invalid B{C{zone}}. @raise TypeError: If B{C{latlon}} is not ellipsoidal. @raise RangeError: If B{C{lat}} outside the valid UTM bands or if B{C{lat}} or B{C{lon}} outside the valid range and L{rangerrors} set to C{True}. @raise ValueError: If B{C{lon}} value is missing or if B{C{latlon}} is invalid. ''' z, B, lat, lon, d, f, name = _to7zBlldfn(latlon, lon, datum, falsed, name, zone, ETMError, **cmoff) lon0 = _cmlon(z) if f else None x, y, g, k = d.exactTM.forward(lat, lon, lon0=lon0) t = z, lat, x, y, B, d, g, k, f return _toXtm8(Etm, t, name, latlon, d.exactTM)
def toLatLon(self, LatLon=None, unfalse=True, **unused): # PYCHOK expected '''Convert this ETM coordinate to an (ellipsoidal) geodetic point. @kwarg LatLon: Optional, ellipsoidal class to return the geodetic point (C{LatLon}) or C{None}. @kwarg unfalse: Unfalse B{C{easting}} and B{C{northing}} if falsed (C{bool}). @return: This ETM coordinate as (B{C{LatLon}}) or a L{LatLonDatum5Tuple}C{(lat, lon, datum, convergence, scale)} if B{C{LatLon}} is C{None}. @raise EllipticError: No convergence. @raise TypeError: If B{C{LatLon}} is not ellipsoidal. @example: >>> from pygeodesy import ellipsoidalVincenty as eV, Etm >>> u = Etm(31, 'N', 448251.795, 5411932.678) >>> ll = u.toLatLon(eV.LatLon) # 48°51′29.52″N, 002°17′40.20″E ''' xTM, d = self.exactTM, self.datum # double check that this and exactTM's ellipsoids stil match if xTM._E != d.ellipsoid: t = repr(d.ellipsoid) raise ETMError(repr(xTM._E), txt=_incompatible(t)) if self._latlon and self._latlon_args == (xTM, unfalse): return self._latlon5(LatLon) f = not unfalse e, n = self.to2en(falsed=f) # f = unfalse == self.falsed # == unfalse and self.falsed or (not unfalse and not self.falsed) # == unfalse if self.falsed else not unfalse # == unfalse if self.falsed else f if self.falsed: f = unfalse lon0 = _cmlon(self.zone) if f else None lat, lon, g, k = xTM.reverse(e, n, lon0=lon0) ll = _LLEB(lat, lon, datum=d, name=self.name) ll._convergence = g ll._scale = k self._latlon_to(ll, xTM, unfalse) return self._latlon5(LatLon)