def __new__(cls, cll, precision=3, name=NN): '''New L{Georef} from an other L{Georef} instance or georef C{str} or from a C{LatLon} instance or lat-/longitude C{str}. @arg cll: Cell or location (L{Georef} or C{str}, C{LatLon} or C{str}). @kwarg precision: Optional, the desired georef resolution and length (C{int} 0..11), see function L{wgrs.encode} for more details. @kwarg name: Optional name (C{str}). @return: New L{Georef}. @raise RangeError: Invalid B{C{cll}} lat- or longitude. @raise TypeError: Invalid B{C{cll}}. @raise WGRSError: INValid or non-alphanumeric B{C{cll}}. ''' h = None if isinstance(cll, Georef): g, p = _2geostr2(str(cll)) self = Str.__new__(cls, g) self._latlon = LatLon2Tuple(*cll._latlon) self._precision = p # cll._precision if cll._name: self._name = cll._name elif isstr(cll): if ',' in cll: lat, lon, h = _2fllh(*parse3llh(cll, height=None)) g = encode(lat, lon, precision=precision, height=h) # PYCHOK false self = Str.__new__(cls, g) self._latlon = LatLon2Tuple(lat, lon) else: self = Str.__new__(cls, cll.upper()) self._decode() else: # assume LatLon try: lat, lon, h = _2fllh(cll.lat, cll.lon) h = getattr(cll, _height_, h) except AttributeError: raise _xStrError(Georef, cll=cll) # Error=WGRSError g = encode(lat, lon, precision=precision, height=h) # PYCHOK false self = Str.__new__(cls, g) self._latlon = LatLon2Tuple(lat, lon) if h not in (None, MISSING): self._height = Height(h) if self._precision is None: self._precision = _2Precision(precision) if name: self.name = name return self
def __new__(cls, cll, precision=3, name=''): '''New L{Georef} from an other L{Georef} instance or georef C{str} or from a C{LatLon} instance or lat-/longitude C{str}. @param cll: Cell or location (L{Georef} or C{str}, C{LatLon} or C{str}). @keyword precision: Optional, the desired georef resolution and length (C{int} 0..11), see function L{wgrs.encode} for more details. @keyword name: Optional name (C{str}). @return: New L{Georef}. @raise RangeError: Invalid B{C{cll}} lat- or longitude. @raise TypeError: Invalid B{C{cll}}. @raise WGRSError: INValid or non-alphanumeric B{C{cll}}. ''' if isinstance(cll, Georef): g, p = _2geostr2(str(cll)) self = str.__new__(cls, g) self._latlon = LatLon2Tuple(*cll._latlon) self._name = cll._name self._precision = p # cll._precision elif isinstance(cll, _Strs): if ',' in cll: lat, lon, h = _2fllh(*parse3llh(cll, height=None)) g = encode(lat, lon, precision=precision, height=h) # PYCHOK false self = str.__new__(cls, g) self._latlon = LatLon2Tuple(lat, lon) self._precision = precision if h not in (None, _MISSING): self._height = h else: self = str.__new__(cls, cll.upper()) self._decode() else: # assume LatLon try: lat, lon, h = _2fllh(cll.lat, cll.lon) h = getattr(cll, 'height', h) except AttributeError: raise _IsNotError('valid', **{Georef.__name__: cll}) g = encode(lat, lon, precision=precision, height=h) # PYCHOK false self = str.__new__(cls, g) self._latlon = LatLon2Tuple(lat, lon) self._precision = precision if h not in (None, _MISSING): self._height = h if name: self.name = name return self
def __new__(cls, cll, precision=1, name=NN): '''New L{Garef} from an other L{Garef} instance or garef C{str} or from a C{LatLon} instance or lat-/longitude C{str}. @arg cll: Cell or location (L{Garef} or C{str}, C{LatLon} or C{str}). @kwarg precision: Optional, the desired garef resolution and length (C{int} 0..2), see function L{gars.encode} for more details. @kwarg name: Optional name (C{str}). @return: New L{Garef}. @raise RangeError: Invalid B{C{cll}} lat- or longitude. @raise TypeError: Invalid B{C{cll}}. @raise GARSError: INValid or non-alphanumeric B{C{cll}}. ''' if isinstance(cll, Garef): g, p = _2garstr2(str(cll)) self = Str.__new__(cls, g) self._latlon = LatLon2Tuple(*cll._latlon) self._name = cll._name self._precision = p # cll._precision elif isstr(cll): if ',' in cll: lat, lon = _2fll(*parse3llh(cll)) cll = encode(lat, lon, precision=precision) # PYCHOK false self = Str.__new__(cls, cll) self._latlon = LatLon2Tuple(lat, lon) else: self = Str.__new__(cls, cll.upper()) self._decode() else: # assume LatLon try: lat, lon = _2fll(cll.lat, cll.lon) except AttributeError: raise _xStrError(Garef, cll=cll) # Error=GARSError cll = encode(lat, lon, precision=precision) # PYCHOK false self = Str.__new__(cls, cll) self._latlon = LatLon2Tuple(lat, lon) if self._precision is None: self._precision = _2Precision(precision) if name: self.name = name return self
def parse(self, strllh, height=0, sep=_COMMA_, name=NN): '''Parse a string representing a similar, spherical C{LatLon} point, consisting of C{"lat, lon[, height]"}. @arg strllh: Lat, lon and optional height (C{str}), see function L{parse3llh}. @kwarg height: Optional, default height (C{meter}). @kwarg sep: Optional separator (C{str}). @kwarg name: Optional instance name (C{str}), overriding this name. @return: The similar point (spherical C{LatLon}). @raise ParseError: Invalid B{C{strllh}}. ''' from pygeodesy.dms import parse3llh r = self.classof(*parse3llh(strllh, height=height, sep=sep)) return _xnamed(r, name or self.name, force=True)
def __new__(cls, cll, precision=None, name=NN): '''New L{Geohash} from an other L{Geohash} instance or C{str} or from a C{LatLon} instance or C{str}. @arg cll: Cell or location (L{Geohash} or C{str}, C{LatLon} or C{str}). @kwarg precision: Optional, the desired geohash length (C{int} 1..12), see function L{geohash.encode} for some examples. @kwarg name: Optional name (C{str}). @return: New L{Geohash}. @raise TypeError: Invalid B{C{cll}}. @raise GeohashError: INValid or non-alphanumeric B{C{cll}}. ''' if isinstance(cll, Geohash): gh = _2geostr(str(cll)) self = Str.__new__(cls, gh) elif isstr(cll): if ',' in cll: lat, lon = _2fll(*parse3llh(cll)) gh = encode(lat, lon, precision=precision) self = Str.__new__(cls, gh) self._latlon = lat, lon else: gh = _2geostr(cll) self = Str.__new__(cls, gh) else: # assume LatLon try: lat, lon = _2fll(cll.lat, cll.lon) except AttributeError: raise _xStrError(Geohash, cll=cll) # Error=GeohashError gh = encode(lat, lon, precision=precision) self = Str.__new__(cls, gh) self._latlon = lat, lon if name: self.name = name return self
def parse(self, strll, height=0, sep=','): '''Parse a string representing lat-/longitude point and return a C{LatLon}. The lat- and longitude must be separated by a sep[arator] character. If height is present it must follow and be separated by another sep[arator]. Lat- and longitude may be swapped, provided at least one ends with the proper compass direction. For more details, see functions L{parse3llh} and L{parseDMS} in module L{dms}. @param strll: Lat, lon [, height] (C{str}). @keyword height: Optional , default height (C{meter}). @keyword sep: Optional separator (C{str}). @return: The point (spherical C{LatLon}). @raise ValueError: Invalid I{strll}. ''' return self.classof(*parse3llh(strll, height=height, sep=sep))
def parse(self, strll, height=0, datum=None, sep=','): '''Parse a string representing this C{LatLon} point. The lat- and longitude must be separated by a sep[arator] character. If height is present it must follow and be separated by another sep[arator]. Lat- and longitude may be swapped, provided at least one ends with the proper compass direction. For more details, see functions L{parse3llh} and L{parseDMS} in sub-module L{dms}. @param strll: Lat, lon [, height] (string). @keyword height: Optional, default height (C{meter} or C{None}). @keyword datum: Optional, default datum (L{Datum}). @keyword sep: Optional separator (string). @return: The point (L{LatLonEllipsoidalBase}). @raise ValueError: Invalid B{C{strll}}. ''' from pygeodesy.dms import parse3llh a, b, h = parse3llh(strll, height=height, sep=sep) return self.classof(a, b, height=h, datum=datum or self.datum)
def parse(self, strllh, height=0, datum=None, sep=_COMMA_, name=NN): '''Parse a string representing a similar, ellipsoidal C{LatLon} point, consisting of C{"lat, lon[, height]"}. @arg strllh: Lat, lon and optional height (C{str}), see function L{parse3llh}. @kwarg height: Optional, default height (C{meter} or C{None}). @kwarg datum: Optional datum (L{Datum}), overriding this datum I{without conversion}. @kwarg sep: Optional separator (C{str}). @kwarg name: Optional instance name (C{str}), overriding this name. @return: The similar point (ellipsoidal C{LatLon}). @raise ParseError: Invalid B{C{strllh}}. ''' from pygeodesy.dms import parse3llh a, b, h = parse3llh(strllh, height=height, sep=sep) r = self.classof(a, b, height=h, datum=self.datum) if datum not in (None, self.datum): r.datum = datum return _xnamed(r, name or self.name, force=True)