def toUtmUps8(latlon, lon=None, datum=None, falsed=True, Utm=Utm, Ups=Ups, pole='', name='', **cmoff): '''Convert a lat-/longitude point to a UTM or UPS coordinate. @arg latlon: Latitude (C{degrees}) or an (ellipsoidal) geodetic C{LatLon} point. @kwarg lon: Optional longitude (C{degrees}) or C{None}. @kwarg datum: Optional datum to use this UTM coordinate, overriding B{C{latlon}}'s datum (C{Datum}). @kwarg falsed: False both easting and northing (C{bool}). @kwarg Utm: Optional class to return the UTM coordinate (L{Utm}) or C{None}. @kwarg Ups: Optional class to return the UPS coordinate (L{Ups}) or C{None}. @kwarg pole: Optional top/center of UPS (stereographic) projection (C{str}, C{'N[orth]'} or C{'S[outh]'}). @kwarg name: Optional name (C{str}). @kwarg cmoff: DEPRECATED, use B{C{falsed}}. Offset longitude from zone's central meridian, for UTM only (C{bool}). @return: The UTM or UPS coordinate (B{C{Utm}} respectively B{C{Ups}}) or a L{UtmUps8Tuple}C{(zone, hemipole, easting, northing, band, datum, convergence, scale)} if B{C{Utm}} respectively B{C{Ups}} is C{None} or B{C{cmoff}} is C{False}. @raise RangeError: If B{C{lat}} outside the valid UTM or UPS bands or if B{C{lat}} or B{C{lon}} outside the valid range and L{rangerrors} set to C{True}. @raise TypeError: If B{C{latlon}} is not ellipsoidal or B{C{lon}} value is missing. @raise UTMUPSError: UTM or UPS validation failed. @raise ValueError: Invalid B{C{lat}} or B{C{lon}}. @see: Functions L{toUtm8} and L{toUps8}. ''' lat, lon, d, name = _to4lldn(latlon, lon, datum, name) z, B, p, lat, lon = utmupsZoneBand5(lat, lon) f = falsed and cmoff.get('cmoff', True) if z == _UPS_ZONE: u = toUps8(lat, lon, datum=d, falsed=f, Ups=Ups, pole=pole or p, name=name) else: u = toUtm8(lat, lon, datum=d, falsed=f, Utm=Utm, name=name) return u
def toUps(self, pole='N', falsed=True): '''Convert this C{LatLon} point to a UPS coordinate. @keyword pole: Optional top/center of (stereographic) projection (C{str}, 'N[orth]' or 'S[outh]'). @keyword falsed: False easting and northing (C{bool}). @return: The UPS coordinate (L{Ups}). @see: Function L{toUps8}. ''' if self._ups is None: from pygeodesy.ups import toUps8, Ups # PYCHOK recursive import self._ups = toUps8(self, datum=self.datum, Ups=Ups, pole=pole, falsed=falsed) return self._ups
def toUps(self, pole=NN, eps=EPS, falsed=True, **unused): '''Convert this UTM coordinate to a UPS coordinate. @kwarg pole: Optional top/center of the UPS projection, (C{str}, 'N[orth]'|'S[outh]'). @kwarg eps: Optional convergence limit, L{EPS} or above (C{float}), see method L{Utm.toLatLon}. @kwarg falsed: False both easting and northing (C{bool}). @return: The UPS coordinate (L{Ups}). ''' u = self._ups if u is None or u.pole != (pole or u.pole) or falsed != bool(u.falsed): from pygeodesy.ups import toUps8, Ups # PYCHOK recursive import ll = self.toLatLon(LatLon=_LLEB, eps=eps, unfalse=True) self._ups = u = toUps8(ll, Ups=Ups, falsed=falsed, pole=pole, strict=False) return u