Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _toLatLon(self, lat, lon, LatLon, LatLon_kwds):
'''(INTERNAL) Check B{C{LatLon}} and return an instance.
'''
kwds = _xkwds(LatLon_kwds, datum=self.datum)
r = LatLon(lat, lon, **kwds) # handle .classof
B = _LLEB if self.datum.isEllipsoidal else _LLB
_xinstanceof(B, LatLon=r)
return r
def datum(self, datum):
'''Set this point's datum I{without conversion}.
@arg datum: New datum (L{Datum}).
@raise TypeError: The B{C{datum}} is not a L{Datum}
or not ellipsoidal.
'''
_xinstanceof(Datum, datum=datum)
if not datum.isEllipsoidal:
raise _IsnotError(_ellipsoidal_, datum=datum)
self._update(datum != self._datum)
self._datum = datum
self._utmups = eisu.utmups
self._zone = eisu.zone
if eisu.name:
self.name = eisu.name
elif isint(eisu):
self = int.__new__(cls, eisu)
self._epsg = eisu
self._zone, self._hemisphere = decode2(eisu) # PYCHOK UtmUps2Tuple
elif isstr(eisu):
self = encode(eisu)
else:
u = eisu
_xinstanceof(Utm, Ups, eisu=u)
self = encode(u.zone, hemipole=u.hemisphere, band=u.band) # PYCHOK **kwds
self._utmups = u
if u.name:
self.name = u.name
return self
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')
self._easting = Easting(easting, Error=E)
self._northing = Northing(northing, Error=E)
if band:
_xinstanceof(str, band=band)
self._band = band
if datum:
_xinstanceof(Datum, datum=datum)
if datum != self._datum:
self._datum = datum
if not falsed:
self._falsed = False
if convergence is not self._convergence:
self._convergence = Scalar(convergence, name=_convergence_, Error=E)
if scale is not self._scale:
self._scale = Scalar(scale, name=_scale_, Error=E)
def reframe(self, reframe):
'''Set or clear this point's reference frame.
@arg reframe: Reference frame (L{RefFrame}) or C{None}.
@raise TypeError: The B{C{reframe}} is not a L{RefFrame}.
'''
if reframe is not None:
_xinstanceof(RefFrame, reframe=reframe)
self._reframe = reframe
elif self.reframe is not None:
self._reframe = None
@kwarg h: Optional height (C{meter}).
@kwarg conic: Optional, the conic projection (L{Conic}).
@kwarg name: Optional name (C{str}).
@return: The Lambert location (L{Lcc}).
@raise LCCError: Invalid B{C{h}} or invalid or
negative B{C{e}} or B{C{n}}.
@raise TypeError: If B{C{conic}} is not L{Conic}.
@example:
>>> lb = Lcc(448251, 5411932.0001)
'''
_xinstanceof(Conic, conic=conic)
self._conic = conic
self._easting = Easting(e, falsed=conic.E0 > 0, Error=LCCError)
self._northing = Northing(n, falsed=conic.N0 > 0, Error=LCCError)
if h:
self._height = Height(h, name=_h_, Error=LCCError)
if name:
self.name = name
@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
>>> v = Nvector(0.5, 0.5, 0.7071, 1)
>>> v.toLatLon() # 45.0°N, 045.0°E, +1.00m
'''
NvectorBase.__init__(self, x, y, z, h=h, ll=ll, name=name)
if datum:
_xinstanceof(Datum, datum=datum)
self._datum = datum
@return: The converted point (ellipsoidal C{LatLon}) or
this point if conversion is C{nil}.
@raise TRFError: No B{C{.reframe}} or no conversion
available from B{C{.reframe}} to
B{C{reframe2}}.
@raise TypeError: The B{C{reframe2}} is not a L{RefFrame}.
@example:
>>> p = LatLon(51.4778, -0.0016, reframe=RefFrames.ETRF2000) # default Datums.WGS84
>>> p.convertRefFrame(RefFrames.ITRF2014) # 51.477803°N, 000.001597°W, +0.01m
'''
_xinstanceof(RefFrame, reframe2=reframe2)
if not self.reframe:
raise TRFError(_no_conversion_, txt='%r.reframe %s' % (self, _Missing))
ts = _reframeTransforms(reframe2, self.reframe, self.epoch)
if ts:
c = self.toCartesian()
for t in ts:
c = c._applyHelmert(t, False)
ll = c.toLatLon(datum=self.datum, LatLon=self.classof,
epoch=self.epoch, reframe=reframe2)
# ll.reframe, ll.epoch = reframe2, self.epoch
else:
ll = self
return ll
@arg phi1: Start latitude (C{radians}).
@arg lam21: Longitudinal delta, M{end-start} (C{radians}).
@kwarg datum: Ellipsoidal datum to use (L{Datum}).
@return: Angular distance (C{radians}).
@raise TypeError: Invalid B{C{datum}}.
@see: Functions L{thomas}, L{cosineAndoyerLambert_},
L{cosineForsytheAndoyerLambert_}, L{cosineLaw_},
L{equirectangular_}, L{euclidean_}, L{flatLocal_}/L{hubeny_},
L{flatPolar_}, L{haversine_} and L{vincentys_} and U{Geodesy-PHP
}.
'''
_xinstanceof(Datum, datum=datum)
s2, c2, s1, c1, _, c21 = sincos2(phi2, phi1, lam21)
E = datum.ellipsoid
if E.f and abs(c1) > EPS and abs(c2) > EPS:
r1 = atan(E.b_a * s1 / c1)
r2 = atan(E.b_a * s2 / c2)
j = (r2 + r1) / 2.0
k = (r2 - r1) / 2.0
sj, cj, sk, ck, sl_2, _ = sincos2(j, k, lam21 / 2.0)
h = fsum_(sk**2, (ck * sl_2)**2, -(sj * sl_2)**2)
if EPS < abs(h) < EPS1:
u = 1 / (1 - h)
d = 2 * atan(sqrt(h * u)) # == acos(1 - 2 * h)
sd, cd = sincos2(d)