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)
x = lon - _cmlon(z) # z before Norway/Svaldbard
if abs(x) > _UTM_ZONE_OFF_MAX:
t = ' '.join((_outside_, _UTM_, _zone_, str(z), 'by', degDMS(x, prec=6)))
raise RangeError(lon=degDMS(lon), txt=t)
if B == 'X': # and 0 <= int(lon) < 42: z = int(lon + 183) // 6 + 1
x = {32: 9, 34: 21, 36: 33}.get(z, None)
if x: # Svalbard
z += 1 if lon >= x else -1
elif B == 'V' and z == 31 and lon >= 3:
z += 1 # SouthWestern Norway
if cmoff: # lon off central meridian
lon -= _cmlon(z) # z after Norway/Svaldbard
return Zone(z), Band(B), Lat(lat), Lon(lon)
f = P.forward(50.9, 1.8) # Calais
self.test('forward', fstr(f, prec=6), '-37518.854545, 230003.561828')
r = P.reverse(*f)
self.test('reverse', fstr(r, prec=6), '50.9, 1.8')
f = P.forward4(50.9, 1.8) # Calais
self.test('forward4', fstr(f, prec=6), '-37518.854545, 230003.561828, 89.586104, 0.999983')
self.testCopy(P)
r = P.reverse(-38e3, 230e3)
self.test('reverse', fstr(r, prec=6), '50.899937, 1.793161')
f = P.forward(*r)
self.test('forward', fstr(f, prec=6), '-38000.0, 230000.0')
r = P.reverse4(-38e3, 230e3)
self.test('reverse4', fstr(r, prec=6), '50.899937, 1.793161, 89.580797, 0.999982')
for LL in LatLons:
r = P.reverse(-38e3, 230e3, LatLon=LL)
self.test('reverse', repr(r), 'LatLon(50°53′59.77″N, 001°47′35.38″E)')
G = CassiniSoldner(51.4934, 0.0098, name='Greenwich')
self.test(repr(G), G, G)
f = G.forward(48 + 50/60.0, 2 + 20/60.0) # Paris
self.test('forward', fstr(f, prec=6), '170557.151692, -293280.6051')
r = G.reverse(*f)
self.test('reverse', fstr(r, prec=6), '48.833333, 2.333333')
h = hypot(*f) # easting + norting ~= distance
d = haversine(*(G.latlon0 + r))
self.test('hypot', h, d, fmt='%.3f', known=abs(d - h) < 1000)
def testStreprs(self):
self.test('anstr', anstr('a-b?_'), 'a-b__')
self.test('fstr', fstr(0.123, prec=-6), '0.123000')
self.test('fstr', fstr(0.123, prec=+6), '0.123')
self.test('fstr', fstr((0.123, 456.789), prec=+6), '0.123, 456.789')
self.test('fstr', fstr(0.123, prec=-5, fmt='%.*e'), '1.23000e-01')
self.test('fstr', fstr(0.123, prec=+5, fmt='%.*e'), '1.23e-01')
try: # coverage
self.test('fstr', fstr(1, fmt='X'), ValueError.__name__)
except ValueError as x:
self.test('fstr', str(x), "fmt ('X'): not '[%.*]F|f|E|e|G|g'")
for f, x in ((1, '1.0'),
(1.0, '1.0'),
(-1, '-1.0'),
# (1e300, '10000<290>40160.'),
(1e1234, 'INF'), # == INF
(INF, 'INF'),
(NAN, 'NAN'),
(NEG0, '-0.0'),
(0.0, '0.0')):
self.test('fstr(%F)' % (f,), fstr(f), x)
for f, x in (('0.0', '0.0'),
('0.00', '0.0'),
c = n.toCartesian()
self.test('toCartesian', c.toStr(0), '[3980581, 97, 4966825]')
self.test('toCartesian', isinstance(c, Cartesian), True)
v = n.toVector3d()
self.test('toVector3D', v.toStr(4), '(0.6228, 0.0, 0.7824)')
n = Nvector(0.5, 0.5, 0.7071)
self.test('Nvector', n, '(0.5, 0.5, 0.7071)')
v = n.toVector3d()
self.test('toVector3D', v.toStr(4), '(0.5, 0.5, 0.7071)')
t = n.to3abh() # DEPRECATED
self.test('to3abh', fstr(t, 4), '0.7854, 0.7854, 0.0')
t = n.to3llh() # DEPRECATED
self.test('to3llh', fstr(t, 3), '45.0, 45.0, 0.0')
t = n.to4xyzh() # DEPRECATED
self.test('to4xyzh', fstr(t, 1), '0.5, 0.5, 0.7, 0.0')
n.H = '' # for test coverage
c = n.toCartesian() # [3194434, 3194434, 4487327]
self.test('toCartesian', c, '[3194434.411, 3194434.411, 4487326.82]')
self.test('toCartesian', isinstance(c, Cartesian), True)
p = c.toLatLon() # 45.0°N, 45.0°E
self.test('toLatLon', p.toStr('d', 2), '45.0°N, 045.0°E, +0.00m') # 45.0°N, 45.0°E
self.test('toLatLon', isinstance(p, LatLon), True)
n = Nvector(0.51, 0.512, 0.7071, 1).toStr(3)
self.test('Nvector', n, '(0.51, 0.512, 0.707, +1.00)')
#
s = Cartesian(3145.5036885, 5387.14337206, 3208.93193301).toLatLon() # WGS84 XXX m, Km, other?
self.test('sat', s, '82.545852°N, 059.719736°E, -6353121.71m' if Nvector or module is V else
self.test('S', d.S, g.S)
self.test('SW', d.SW, g.SW)
self.test('W', d.W, g.W)
self.test('NW', d.NW, g.NW)
self.test('N', d['N'], g.N)
self.test('NE', d['NE'], g.NE)
self.test('E', d['E'], g.E)
self.test('SE', d['SE'], g.SE)
self.test('S', d['S'], g.S)
self.test('SW', d['SW'], g.SW)
self.test('W', d['W'], g.W)
self.test('NW', d['NW'], g.NW)
b = geohash.bounds('u120fxw')
self.test('bounds', fstr(b, prec=8), '52.20428467, 0.11810303, 52.20565796, 0.11947632')
d = geohash.decode('u120fxw')
self.test('decode', fstr(d, prec=4), '52.205, 0.1188')
for g in ('u120fxw', 'geek', 'fur', 'geehpbpbp', 'u4pruydqqvj8', 'bgr96qxvpd46', '0123456789', 'zzzzzz'):
self.test('encode-decode', geohash.encode(*geohash.decode(g)), g)
for p in range(8, 13):
g = Geohash(LL(57.64911, 10.40744), precision=p) # Jutland, Denamrk
self.test('Geohash', g, 'u4pruydqqvj8'[:p], )
self.test('N.E.S.W', g.N.E.S.W == g, 'True')
self.test('E.S.W.N', g.E.S.W.N == g, 'True')
self.test('S.W.N.E', g.S.W.N.E == g, 'True')
self.test('W.N.E.S', g.W.N.E.S == g, 'True')
self.test('N.E.S.S.W.W.N.N.E.S', g.N.E.S.S.W.W.N.N.E.S == g, True) # MCCABE Law of Demeter
self.test('encode', geohash.encode(52.205, 0.1188), 'u120fxw')
self.test('W', d.W, g.W)
self.test('NW', d.NW, g.NW)
self.test('N', d['N'], g.N)
self.test('NE', d['NE'], g.NE)
self.test('E', d['E'], g.E)
self.test('SE', d['SE'], g.SE)
self.test('S', d['S'], g.S)
self.test('SW', d['SW'], g.SW)
self.test('W', d['W'], g.W)
self.test('NW', d['NW'], g.NW)
b = geohash.bounds('u120fxw')
self.test('bounds', fstr(b, prec=8), '52.20428467, 0.11810303, 52.20565796, 0.11947632')
d = geohash.decode('u120fxw')
self.test('decode', fstr(d, prec=4), '52.205, 0.1188')
for g in ('u120fxw', 'geek', 'fur', 'geehpbpbp', 'u4pruydqqvj8', 'bgr96qxvpd46', '0123456789', 'zzzzzz'):
self.test('encode-decode', geohash.encode(*geohash.decode(g)), g)
for p in range(8, 13):
g = Geohash(LL(57.64911, 10.40744), precision=p) # Jutland, Denamrk
self.test('Geohash', g, 'u4pruydqqvj8'[:p], )
self.test('N.E.S.W', g.N.E.S.W == g, 'True')
self.test('E.S.W.N', g.E.S.W.N == g, 'True')
self.test('S.W.N.E', g.S.W.N.E == g, 'True')
self.test('W.N.E.S', g.W.N.E.S == g, 'True')
self.test('N.E.S.S.W.W.N.N.E.S', g.N.E.S.S.W.W.N.N.E.S == g, True) # MCCABE Law of Demeter
self.test('encode', geohash.encode(52.205, 0.1188), 'u120fxw')
self.test('decode', geohash.decode('u120fxw'), "('52.205', '0.1188')")
self.test('decode_error', fstr(geohash.decode_error('u120fxw'), fmt='%*e'), '6.866455e-04, 6.866455e-04')
def testSnyder(self, lat, lon, As, *xys):
ll = lat, lon
t = str(ll)
for A, xy in zip(As, xys):
n = A.__class__.__name__ + t
f = A.forward(lat, lon)
self.test(n, fstr(f[:2], prec=5), fstr(xy, prec=5))
r = A.reverse(f.x, f.y)
self.test(n, fstr(r[2:4], prec=5), fstr(ll, prec=5))
#
p = LatLon(-63.1, -58), LatLon(-72.9, -74), LatLon(-71.9, -102), \
LatLon(-74.9, -102), LatLon(-74.3, -131), LatLon(-77.5, -163), \
LatLon(-77.4, 163), LatLon(-71.7, 172), LatLon(-65.9, 140), \
LatLon(-65.7, 113), LatLon(-66.6, 88), LatLon(-66.9, 59), \
LatLon(-69.8, 25), LatLon(-70.0, -4), LatLon(-71.0, -14), \
LatLon(-77.3, -33), LatLon(-77.9, -46), LatLon(-74.7, -61) # on/around south pole!
self.test('areaOf', areaOf(p, radius=R_M), '1.366270e+13', fmt='%.6e', known=True) # 1.366270368002013e+13'
self.test('perimeterOf', perimeterOf(p, radius=R_M), '1.366270e+13', fmt='%.6e', known=True) # 1.366270368002013e+13
self.test('centroidOf', fstr(centroidOf(p), prec=3), '-72.112, 92.032',)
self.test('isclockwise', isclockwise(p), False)
self.test('points2', p[0].points2(p)[0], len(p))
p = LatLon('66.6S', '88W')
self.test('latlon', fstr(p.latlon, prec=6), '-66.6, -88.0')
self.test('philam', fstr(p.philam, prec=6), '-1.162389, -1.53589')
self.test('to2ab', fstr(p.to2ab(), prec=6), '-1.162389, -1.53589')
if LatLon is LatLon_:
self.test('toStr', p.toStr(prec=6, kwds='test'), "66.6°S, 088.0°W, kwds='test'")
q = p.classof(p.lat, p.lon, name='test')
self.test('__ne__', q != p, False)
self.test('latlonheight', fstr(p.latlonheight, prec=6), '-66.6, -88.0, 0.0')
self.test('philamheight', fstr(p.philamheight, prec=6), '-1.162389, -1.53589, 0.0')
self.test('_N_vector', p._N_vector, '(0.01386, -0.39691, -0.91775)')
self.test('toNvector', p.toNvector().toStr(prec=5), '(0.01386, -0.39691, -0.91775)')
self.test('toNvector', p.toNvector(Nvector=None), '(0.01386, -0.396906, -0.917755)', known=True)
q = p.classof(-66.6, -88)
self.test('classof', q, p)
try:
self.test('R3', E.R3, '6371000.8', fmt='%.1f')
self.test('Rr', E.Rr, '6367449.1', fmt='%.1f') # 6367445.0
self.test('Rs', E.Rs, '6367435.7', fmt='%.1f')
self.test('Rgeocentric', E.Rgeocentric(0), '6378137.000', fmt='%.3f')
self.test('Rgeocentric', E.Rgeocentric(45), '6367489.544', fmt='%.3f')
self.test('Rgeocentric', E.Rgeocentric(90), '6356752.314', fmt='%.3f')
self.test('Rlat', E.Rlat(0), '6378137.000', fmt='%.3f')
self.test('Rlat', E.Rlat(45), '6367444.657', fmt='%.3f')
self.test('Rlat', E.Rlat(90), '6356752.314', fmt='%.3f')
self.test('distance2', fstr(E.distance2( 0, 0, 1, 1), prec=3), '156903.472, 45.192')
self.test('distance2', fstr(E.distance2( 0, 0, 10, 10), prec=3), '1569034.719, 45.192')
self.test('distance2', fstr(E.distance2(40, 40, 50, 50), prec=3), '1400742.676, 37.563')
self.test('distance2', fstr(E.distance2(70, 70, 80, 80), prec=3), '1179164.848, 18.896')
self.test('roc2', fstr(E.roc2(0), prec=3), '6335439.327, 6378137.0')
self.test('roc2', fstr(E.roc2(45), prec=3), '6367381.816, 6388838.29')
self.test('roc2', fstr(E.roc2(90), prec=3), '6399593.626, 6399593.626')
self.test('rocBearing', E.rocBearing( 0, 0), '6335439.327', fmt='%.3f')
self.test('rocBearing', E.rocBearing(45, 45), '6378092.008', fmt='%.3f')
self.test('rocBearing', E.rocBearing(90, 0), '6399593.626', fmt='%.3f')
self.test('rocGauss', E.rocGauss(0), '6356752.314', fmt='%.3f')
self.test('rocGauss', E.rocGauss(45), '6378101.030', fmt='%.3f')
self.test('rocGauss', E.rocGauss(90), '6399593.626', fmt='%.3f')
self.test('rocMean', E.rocMean(0), '6356716.465', fmt='%.3f')
self.test('rocMean', E.rocMean(45), '6378092.008', fmt='%.3f')
self.test('rocMean', E.rocMean(90), '6399593.626', fmt='%.3f')