Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
>>> str(r) # TG 5140 1317
>>> r.toStr(prec=0) # 651409,313177
'''
def _i2c(i):
if i > 7:
i += 1
return chr(_ord_A + i)
e, n, s = self._easting, self._northing, _COMMA_
if prec > 0:
E, e = divmod(e, _100km)
N, n = divmod(n, _100km)
E, N = int(E), int(N)
if 0 > E or E > 6 or \
0 > N or N > 12:
return NN
N = 19 - N
EN = _i2c( N - (N % 5) + (E + 10) // 5) + \
_i2c((N * 5) % 25 + (E % 5))
t = enstr2(e, n, prec, EN)
s = sep
elif -6 < prec < 0:
w = 6 + 1 - prec
t = ['%0*.*f' % (w, -prec, t) for t in (e, n)]
else:
t = ['%06d' % int(t) for t in (e, n)]
return tuple(t) if s is None else s.join(t)
lat, lon = _2fll(lat, lon)
if lat == 90:
lat *= EPS1_2
ix, x = _2divmod2(lon, _LonOrig_M_)
iy, y = _2divmod2(lat, _LatOrig_M_)
g = _str(_Digits, ix + 1, _LonLen) + _str(_Letters, iy, _LatLen)
if p > 0:
ix, x = divmod(x, _M3)
iy, y = divmod(y, _M3)
g += _digit(ix, iy, _M2)
if p > 1:
g += _digit(x, y, _M3)
return NN.join(g)
def __init__(self, x, y, z, h=0, datum=None, ll=None, name=NN):
'''New n-vector normal to the earth's surface.
@arg x: X component (C{meter}).
@arg y: Y component (C{meter}).
@arg z: Z component (C{meter}).
@kwarg h: Optional height above model surface (C{meter}).
@kwarg datum: Optional datum this n-vector is defined
within (L{Datum}).
@kwarg ll: Optional, original latlon (C{LatLon}).
@kwarg name: Optional name (C{str}).
@raise TypeError: If B{C{datum}} is not a L{Datum}.
@example:
>>> from ellipsoidalNvector import Nvector
def __init__(self, zone, hemisphere, easting, northing, band=NN, # PYCHOK expected
datum=Datums.WGS84, falsed=True,
convergence=None, scale=None, name=NN):
'''New L{Utm} UTM coordinate.
@arg zone: Longitudinal UTM zone (C{int}, 1..60) or zone
with/-out (latitudinal) Band letter (C{str},
'01C'..'60X').
@arg hemisphere: Northern or southern hemisphere (C{str},
C{'N[orth]'} or C{'S[outh]'}).
@arg easting: Easting, see B{C{falsed}} (C{meter}).
@arg northing: Northing, see B{C{falsed}} (C{meter}).
@kwarg band: Optional, (latitudinal) band (C{str}, 'C'..'X').
@kwarg datum: Optional, this coordinate's datum (L{Datum}).
@kwarg falsed: Both B{C{easting}} and B{C{northing}} are
falsed (C{bool}).
@kwarg convergence: Optional meridian convergence, bearing
return _NamedTuple.__new__(cls, Lat(lat), Lon(lon), d,
Scalar(c, name=_convergence_),
Scalar(s, name=_scale_))
class UtmUpsBase(_NamedBase):
'''(INTERNAL) Base class for L{Utm} and L{Ups} coordinates.
'''
_band = NN #: (INTERNAL) Latitude band letter ('A..Z').
_convergence = None #: (INTERNAL) Meridian conversion (C{degrees}).
_datum = Datums.WGS84 #: (INTERNAL) L{Datum}.
_easting = 0 #: (INTERNAL) Easting, see B{C{falsed}} (C{meter}).
_Error = None #: (INTERNAL) I{Must be overloaded}.
_epsg = None #: (INTERNAL) toEpsg cache (L{Epsg}).
_falsed = True #: (INTERNAL) Falsed easting and northing (C{bool}).
_hemisphere = NN #: (INTERNAL) Hemisphere ('N' or 'S'), different from pole.
_latlon = None #: (INTERNAL) toLatLon cache (C{LatLon}).
_latlon_args = None #: (INTERNAL) toLatLon args (varies).
_mgrs = None #: (INTERNAL) toMgrs cache (L{Mgrs}.
_northing = 0 #: (INTERNAL) Northing, see B{C{falsed}} (C{meter}).
_scale = None #: (INTERNAL) Grid scale factor (C{scalar}) or C{None}.
# _scale0 = _K0 #: (INTERNAL) Central scale factor (C{scalar}).
_ups = None #: (INTERNAL) toUps cache (L{Ups}).
_utm = None #: (INTERNAL) toUtm cache (L{Utm}).
def __init__(self, easting, northing, band=NN, datum=None, falsed=True,
convergence=None, scale=None):
'''(INTERNAL) New L{UtmUpsBase}.
'''
E = self._Error
if not E:
notOverloaded(self, '_Error')
def encode(zone, hemipole=NN, band=NN):
'''Determine the U{EPSG} code for
a given UTM/UPS zone number, hemisphere/pole and/or Band.
@arg zone: The (longitudinal) UTM zone (C{int}, 1..60) or UPS
zone (C{int}, 0) or UTM zone with/-out (latitudinal)
Band letter (C{str}, '01C'..'60X') or UPS zone
with/-out (polar) Band letter (C{str}, '00A', '00B',
'00Y' or '00Z').
@kwarg hemipole: UTM/UPS hemisphere or UPS projection top/center
pole (C{str}, C{'N[orth]'} or C{'S[outh]'}).
@kwarg band: Optional (latitudinal) UTM or (polar) UPS Band
letter (C{str}).
@return: C{EPSG} code (L{Epsg}).
@raise EPSGError: Invalid B{C{zone}}, B{C{hemipole}} or B{C{band}}.
def nameof(inst):
'''Get the name of an instance.
@arg inst: The object (any C{type}).
@return: The instance' name (C{str}) or C{""}.
'''
return getattr(inst, _name_, NN)
from math import atan, copysign, hypot, log, radians, sin, sqrt
__all__ = _ALL_LAZY.lcc
__version__ = '20.07.08'
_E0_ = 'E0'
_N0_ = 'N0'
_par1_ = 'par1'
_par2_ = 'par2'
_SP_ = 'SP'
class Conic(_NamedEnumItem):
'''Lambert conformal conic projection (1- or 2-SP).
'''
_auth = NN #: (INTERNAL) authorization (C{str}).
_datum = None #: (INTERNAL) Datum (L{Datum}).
_name = 'Conic' #: (INTERNAL) Conic (L{Conic}).
_e = 0 #: (INTERNAL) Ellipsoid excentricity (C{float}).
_E0 = 0 #: (INTERNAL) False easting (C{float}).
_k0 = 1 #: (INTERNAL) Scale factor (C{float}).
_N0 = 0 #: (INTERNAL) false northing (C{float}).
_SP = 0 #: (INTERNAL) 1- or 2-SP (C{int})
_opt3 = 0 #: (INTERNAL) Optional, longitude (C{radians}).
_par1 = 0 #: (INTERNAL) 1st std parallel (C{radians}).
_par2 = 0 #: (INTERNAL) 2nd std parallel (C{radians}).
_phi0 = 0 #: (INTERNAL) Origin lat (C{radians}).
_lam0 = 0 #: (INTERNAL) Origin lon (C{radians}).
_aF = 0 #: (INTERNAL) Precomputed F.
def __init__(self, x, y=None, z=None, h=0, ll=None, datum=None, name=NN):
'''New n-vector normal to the earth's surface.
@arg x: An C{Nvector}, L{Vector3Tuple}, L{Vector4Tuple} or
the C{X} coordinate (C{scalar}).
@arg y: The C{Y} coordinate (C{scalar}) if B{C{x}} C{scalar}.
@arg z: The C{Z} coordinate (C{scalar}) if B{C{x}} C{scalar}.
@kwarg h: Optional height above surface (C{meter}).
@kwarg ll: Optional, original latlon (C{LatLon}).
@kwarg datum: Optional, I{pass-thru} datum (C{Datum}).
@kwarg name: Optional name (C{str}).
@raise TypeError: Non-scalar B{C{x}}, B{C{y}} or B{C{z}}
coordinate or B{C{x}} not an C{Nvector},
L{Vector3Tuple} or L{Vector4Tuple}.
@example:
def __init__(self, latlonh0=0, lon0=0, height0=0, ecef=None, name=NN):
'''New L{EcefCartesian} converter.
@kwarg latlonh0: Either a C{LatLon}, an L{Ecef9Tuple} or C{scalar}
latitude in C{degrees} of the cartesian origin.
@kwarg lon0: Optional C{scalar} longitude of the cartesian origin
in C{degrees} for C{scalar} B{C{latlonh0}}.
@kwarg height0: Optional height of the cartesian origin in C{meter},
vertically above (or below) the surface of the ellipsoid.
@kwarg ecef: An ECEF converter (L{EcefKarney}).
@kwarg name: Optional name (C{str}).
@raise EcefError: If B{C{latlonh0}} not C{LatLon}, L{Ecef9Tuple} or
C{scalar} or B{C{lon0}} not C{scalar} for C{scalar}
B{C{latlonh0}} or C{abs(lat)} exceeds 90°.
@raise TypeError: Invalid B{C{ecef}}, not L{EcefKarney}.