def rescale0(self, lat, scale0=_K0): '''Set the central scale factor for this UPS projection. @arg lat: Northern latitude (C{degrees}). @arg scale0: UPS k0 scale at B{C{lat}} latitude (C{scalar}). @raise RangeError: If B{C{lat}} outside the valid range and L{rangerrors} set to C{True}. @raise UPSError: Invalid B{C{scale}}. ''' try: s0 = float(scale0) if not 0 < s0: # <= 1.003 or 1.0016? raise ValueError except (TypeError, ValueError): raise InvalidError(scale0=scale0, Error=UPSError) lat = clipDegrees(lat, 90) # clip and force N u = toUps8(abs(lat), 0, datum=self.datum, Ups=_UpsK1) k = s0 / u.scale if self.scale0 != k: self._band = '' # force re-compute self._latlon = self._epsg = self._mgrs = self._utm = None self._scale0 = k
def toWm(latlon, lon=None, radius=R_MA, Wm=Wm, name='', **Wm_kwds): '''Convert a lat-/longitude point to a WM coordinate. @arg latlon: Latitude (C{degrees}) or an (ellipsoidal or spherical) geodetic C{LatLon} point. @kwarg lon: Optional longitude (C{degrees} or C{None}). @kwarg radius: Optional earth radius (C{meter}). @kwarg Wm: Optional class to return the WM coordinate (L{Wm}) or C{None}. @kwarg name: Optional name (C{str}). @kwarg Wm_kwds: Optional, additional B{C{Wm}} keyword arguments, ignored if B{C{Wm=None}}. @return: The WM coordinate (B{C{Wm}}) or an L{EasNorRadius3Tuple}C{(easting, northing, radius)} if B{C{Wm}} is C{None}. @raise ValueError: If B{C{lon}} value is missing, if B{C{latlon}} is not scalar, if B{C{latlon}} is beyond the valid WM range and L{rangerrors} is set to C{True} or if B{C{radius}} is invalid. @example: >>> p = LatLon(48.8582, 2.2945) # 448251.8 5411932.7 >>> w = toWm(p) # 448252 5411933 >>> p = LatLon(13.4125, 103.8667) # 377302.4 1483034.8 >>> w = toWm(p) # 377302 1483035 ''' e, r = None, Radius(radius) try: lat, lon = latlon.lat, latlon.lon if isinstance(latlon, _LLEB): r = latlon.datum.ellipsoid.a e = latlon.datum.ellipsoid.e if not name: # use latlon.name name = nameof(latlon) lat = clipDegrees(lat, _LatLimit) except AttributeError: lat, lon = parseDMS2(latlon, lon, clipLat=_LatLimit) s = sin(radians(lat)) y = atanh(s) # == log(tan((90 + lat) / 2)) == log(tanPI_2_2(radians(lat))) if e: y -= e * atanh(e * s) e, n = r * radians(lon), r * y if Wm is None: r = EasNorRadius3Tuple(e, n, r) else: kwds = _xkwds(Wm_kwds, radius=r) r = Wm(e, n, **kwds) return _xnamed(r, name)
def clipDMS(deg, limit): # PYCHOK no cover '''DEPRECATED, use function L{clipDegrees}. ''' from pygeodesy.dms import clipDegrees return clipDegrees(deg, limit)