pygeodesy 24.5.8__py2.py3-none-any.whl → 24.5.24__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {PyGeodesy-24.5.8.dist-info → PyGeodesy-24.5.24.dist-info}/METADATA +2 -2
- PyGeodesy-24.5.24.dist-info/RECORD +116 -0
- pygeodesy/__init__.py +16 -12
- pygeodesy/__main__.py +9 -10
- pygeodesy/albers.py +42 -42
- pygeodesy/auxilats/__init__.py +1 -1
- pygeodesy/auxilats/__main__.py +7 -10
- pygeodesy/auxilats/auxAngle.py +32 -31
- pygeodesy/auxilats/auxLat.py +81 -51
- pygeodesy/azimuthal.py +123 -124
- pygeodesy/basics.py +165 -176
- pygeodesy/booleans.py +14 -15
- pygeodesy/cartesianBase.py +25 -23
- pygeodesy/clipy.py +3 -3
- pygeodesy/constants.py +8 -6
- pygeodesy/css.py +50 -42
- pygeodesy/datums.py +50 -48
- pygeodesy/dms.py +6 -6
- pygeodesy/ecef.py +27 -27
- pygeodesy/elevations.py +2 -2
- pygeodesy/ellipsoidalBase.py +28 -27
- pygeodesy/ellipsoidalBaseDI.py +8 -7
- pygeodesy/ellipsoidalNvector.py +11 -12
- pygeodesy/ellipsoids.py +41 -35
- pygeodesy/elliptic.py +12 -10
- pygeodesy/epsg.py +4 -3
- pygeodesy/errors.py +35 -13
- pygeodesy/etm.py +62 -53
- pygeodesy/fmath.py +48 -41
- pygeodesy/formy.py +93 -65
- pygeodesy/frechet.py +117 -102
- pygeodesy/fstats.py +52 -46
- pygeodesy/fsums.py +169 -145
- pygeodesy/gars.py +10 -9
- pygeodesy/geodesicw.py +32 -30
- pygeodesy/geodesicx/__init__.py +1 -1
- pygeodesy/geodesicx/__main__.py +4 -4
- pygeodesy/geodesicx/gx.py +40 -32
- pygeodesy/geodesicx/gxarea.py +15 -12
- pygeodesy/geodesicx/gxbases.py +3 -4
- pygeodesy/geodesicx/gxline.py +6 -8
- pygeodesy/geodsolve.py +28 -26
- pygeodesy/geohash.py +47 -44
- pygeodesy/geoids.py +37 -35
- pygeodesy/hausdorff.py +112 -99
- pygeodesy/heights.py +136 -129
- pygeodesy/internals.py +576 -0
- pygeodesy/interns.py +6 -207
- pygeodesy/iters.py +22 -19
- pygeodesy/karney.py +18 -15
- pygeodesy/ktm.py +31 -24
- pygeodesy/latlonBase.py +12 -11
- pygeodesy/lazily.py +140 -218
- pygeodesy/lcc.py +24 -25
- pygeodesy/ltp.py +83 -71
- pygeodesy/ltpTuples.py +7 -5
- pygeodesy/mgrs.py +5 -4
- pygeodesy/named.py +136 -49
- pygeodesy/namedTuples.py +33 -25
- pygeodesy/nvectorBase.py +10 -9
- pygeodesy/osgr.py +14 -12
- pygeodesy/points.py +13 -13
- pygeodesy/props.py +7 -7
- pygeodesy/rhumb/__init__.py +1 -1
- pygeodesy/rhumb/bases.py +3 -2
- pygeodesy/rhumb/solve.py +2 -2
- pygeodesy/solveBase.py +8 -7
- pygeodesy/sphericalTrigonometry.py +5 -5
- pygeodesy/streprs.py +8 -7
- pygeodesy/trf.py +8 -8
- pygeodesy/triaxials.py +67 -63
- pygeodesy/units.py +48 -50
- pygeodesy/unitsBase.py +24 -11
- pygeodesy/ups.py +7 -6
- pygeodesy/utily.py +4 -4
- pygeodesy/utm.py +53 -52
- pygeodesy/utmupsBase.py +11 -8
- pygeodesy/vector2d.py +6 -7
- pygeodesy/vector3d.py +16 -17
- pygeodesy/vector3dBase.py +5 -5
- PyGeodesy-24.5.8.dist-info/RECORD +0 -115
- {PyGeodesy-24.5.8.dist-info → PyGeodesy-24.5.24.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.5.8.dist-info → PyGeodesy-24.5.24.dist-info}/top_level.txt +0 -0
pygeodesy/utm.py
CHANGED
|
@@ -35,16 +35,17 @@ and Henrik Seidel U{'Die Mathematik der Gauß-Krueger-Abbildung'
|
|
|
35
35
|
|
|
36
36
|
from pygeodesy.basics import len2, map2, neg # splice
|
|
37
37
|
from pygeodesy.constants import EPS, EPS0, _K0_UTM, _0_0, _0_0001
|
|
38
|
-
from pygeodesy.datums import _ellipsoidal_datum, _WGS84
|
|
38
|
+
from pygeodesy.datums import _ellipsoidal_datum, _WGS84, _under
|
|
39
39
|
from pygeodesy.dms import degDMS, parseDMS2
|
|
40
40
|
from pygeodesy.errors import MGRSError, RangeError, _ValueError, \
|
|
41
|
-
_xkwds_get
|
|
41
|
+
_xkwds_get, _xkwds_pop2
|
|
42
42
|
from pygeodesy.fmath import fdot3, hypot, hypot1, _operator
|
|
43
|
+
# from pygeodesy.internals import _under # from .datums
|
|
43
44
|
from pygeodesy.interns import MISSING, NN, _by_, _COMMASPACE_, _N_, \
|
|
44
45
|
_NS_, _outside_, _range_, _S_, _scale0_, \
|
|
45
|
-
_SPACE_, _UTM_, _V_, _X_, _zone_
|
|
46
|
-
from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS
|
|
47
|
-
|
|
46
|
+
_SPACE_, _UTM_, _V_, _X_, _zone_
|
|
47
|
+
# from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS # from .named
|
|
48
|
+
from pygeodesy.named import _name__, _name2__, _ALL_LAZY, _MODS
|
|
48
49
|
from pygeodesy.namedTuples import EasNor2Tuple, UtmUps5Tuple, \
|
|
49
50
|
UtmUps8Tuple, UtmUpsLatLon5Tuple
|
|
50
51
|
from pygeodesy.props import deprecated_method, property_doc_, \
|
|
@@ -56,14 +57,14 @@ from pygeodesy.utmupsBase import _hemi, _LLEB, _parseUTMUPS5, _to4lldn, \
|
|
|
56
57
|
_to3zBhp, _to3zll, _UPS_LATS, _UPS_ZONE, \
|
|
57
58
|
_UTM_LAT_MAX, _UTM_ZONE_MAX, \
|
|
58
59
|
_UTM_LAT_MIN, _UTM_ZONE_MIN, \
|
|
59
|
-
_UTM_ZONE_OFF_MAX, UtmUpsBase
|
|
60
|
+
_UTM_ZONE_OFF_MAX, UtmUpsBase
|
|
60
61
|
|
|
61
62
|
from math import asinh, atanh, atan2, cos, cosh, degrees, fabs, \
|
|
62
63
|
radians, sin, sinh, tan, tanh
|
|
63
64
|
# import operator as _operator # from .fmath
|
|
64
65
|
|
|
65
66
|
__all__ = _ALL_LAZY.utm
|
|
66
|
-
__version__ = '24.
|
|
67
|
+
__version__ = '24.05.21'
|
|
67
68
|
|
|
68
69
|
_Bands = 'CDEFGHJKLMNPQRSTUVWXX' # UTM latitude bands C..X (no
|
|
69
70
|
# I|O) 8° each, covering 80°S to 84°N and X repeated for 80-84°N
|
|
@@ -229,12 +230,13 @@ def _to4zBll(lat, lon, cmoff=True, strict=True, Error=RangeError):
|
|
|
229
230
|
return Zone(z), (Band(B) if B else None), Lat(lat), Lon(lon)
|
|
230
231
|
|
|
231
232
|
|
|
232
|
-
def _to7zBlldfn(latlon, lon, datum, falsed,
|
|
233
|
+
def _to7zBlldfn(latlon, lon, datum, falsed, zone, strict, Error, **name_cmoff):
|
|
233
234
|
'''(INTERNAL) Determine 7-tuple (zone, band, lat, lon, datum,
|
|
234
235
|
falsed, name) for methods L{toEtm8} and L{toUtm8}.
|
|
235
236
|
'''
|
|
236
|
-
f =
|
|
237
|
-
|
|
237
|
+
f, n = _xkwds_pop2(name_cmoff, cmoff=falsed) # DEPRECATED
|
|
238
|
+
n = _name__(**n) # _UnexpectedError
|
|
239
|
+
lat, lon, d, n = _to4lldn(latlon, lon, datum, n)
|
|
238
240
|
z, B, lat, lon = _to4zBll(lat, lon, cmoff=f, strict=strict)
|
|
239
241
|
if zone: # re-zone for ETM/UTM
|
|
240
242
|
r, _, _ = _to3zBhp(zone, B)
|
|
@@ -244,7 +246,7 @@ def _to7zBlldfn(latlon, lon, datum, falsed, name, zone, strict, Error, **cmoff):
|
|
|
244
246
|
if f: # re-offset from central meridian
|
|
245
247
|
lon += _cmlon(z) - _cmlon(r)
|
|
246
248
|
z = r
|
|
247
|
-
return z, B, lat, lon, d, f,
|
|
249
|
+
return z, B, lat, lon, d, f, n
|
|
248
250
|
|
|
249
251
|
|
|
250
252
|
class Utm(UtmUpsBase):
|
|
@@ -259,7 +261,7 @@ class Utm(UtmUpsBase):
|
|
|
259
261
|
|
|
260
262
|
def __init__(self, zone=31, hemisphere=_N_, easting=166022, # PYCHOK expected
|
|
261
263
|
northing=0, band=NN, datum=_WGS84, falsed=True,
|
|
262
|
-
gamma=None, scale=None,
|
|
264
|
+
gamma=None, scale=None, **name_convergence):
|
|
263
265
|
'''New L{Utm} UTM coordinate.
|
|
264
266
|
|
|
265
267
|
@kwarg zone: Longitudinal UTM zone (C{int}, 1..60) or zone with/-out
|
|
@@ -276,8 +278,8 @@ class Utm(UtmUpsBase):
|
|
|
276
278
|
@kwarg gamma: Optional meridian convergence, bearing off grid North,
|
|
277
279
|
clockwise from true North (C{degrees}) or C{None}.
|
|
278
280
|
@kwarg scale: Optional grid scale factor (C{scalar}) or C{None}.
|
|
279
|
-
@kwarg
|
|
280
|
-
|
|
281
|
+
@kwarg name_convergence: Optional C{B{name}=NN} (C{str}) and DEPRECATED
|
|
282
|
+
C{B{convergence}=None}, instead use C{B{gamma}=None}.
|
|
281
283
|
|
|
282
284
|
@raise TypeError: Invalid or near-spherical B{C{datum}}.
|
|
283
285
|
|
|
@@ -285,8 +287,11 @@ class Utm(UtmUpsBase):
|
|
|
285
287
|
B{C{northing}}, B{C{band}}, B{C{convergence}} or
|
|
286
288
|
B{C{scale}}.
|
|
287
289
|
'''
|
|
288
|
-
|
|
289
|
-
|
|
290
|
+
c = name_convergence
|
|
291
|
+
if c:
|
|
292
|
+
n, c = _name2__(**c)
|
|
293
|
+
if n:
|
|
294
|
+
self.name = n
|
|
290
295
|
|
|
291
296
|
self._zone, B, _ = _to3zBlat(zone, band)
|
|
292
297
|
|
|
@@ -308,7 +313,7 @@ class Utm(UtmUpsBase):
|
|
|
308
313
|
|
|
309
314
|
self._hemisphere = h
|
|
310
315
|
UtmUpsBase.__init__(self, e, n, band=B, datum=datum, falsed=falsed,
|
|
311
|
-
gamma=gamma, scale=scale, **
|
|
316
|
+
gamma=gamma, scale=scale, **c)
|
|
312
317
|
|
|
313
318
|
def __eq__(self, other):
|
|
314
319
|
return isinstance(other, Utm) and other.zone == self.zone \
|
|
@@ -324,7 +329,7 @@ class Utm(UtmUpsBase):
|
|
|
324
329
|
def __str__(self):
|
|
325
330
|
return self.toStr()
|
|
326
331
|
|
|
327
|
-
def _xcopy2(self, Xtm, name
|
|
332
|
+
def _xcopy2(self, Xtm, **name):
|
|
328
333
|
'''(INTERNAL) Make copy as an B{C{Xtm}} instance.
|
|
329
334
|
|
|
330
335
|
@arg Xtm: Class to return the copy (C{Xtm=Etm}, C{Xtm=Utm} or
|
|
@@ -332,7 +337,7 @@ class Utm(UtmUpsBase):
|
|
|
332
337
|
'''
|
|
333
338
|
return Xtm(self.zone, self.hemisphere, self.easting, self.northing,
|
|
334
339
|
band=self.band, datum=self.datum, falsed=self.falsed,
|
|
335
|
-
gamma=self.gamma, scale=self.scale, name=
|
|
340
|
+
gamma=self.gamma, scale=self.scale, name=self._name__(name))
|
|
336
341
|
|
|
337
342
|
@property_doc_(''' the I{latitudinal} band.''')
|
|
338
343
|
def band(self):
|
|
@@ -370,7 +375,7 @@ class Utm(UtmUpsBase):
|
|
|
370
375
|
n = _FalseNorthing
|
|
371
376
|
return EasNor2Tuple(e, n)
|
|
372
377
|
|
|
373
|
-
def parse(self, strUTM, name
|
|
378
|
+
def parse(self, strUTM, **name):
|
|
374
379
|
'''Parse a string to a similar L{Utm} instance.
|
|
375
380
|
|
|
376
381
|
@arg strUTM: The UTM coordinate (C{str}),
|
|
@@ -385,7 +390,7 @@ class Utm(UtmUpsBase):
|
|
|
385
390
|
@see: Functions L{pygeodesy.parseUPS5} and L{pygeodesy.parseUTMUPS5}.
|
|
386
391
|
'''
|
|
387
392
|
return parseUTM5(strUTM, datum=self.datum, Utm=self.classof,
|
|
388
|
-
name=
|
|
393
|
+
name=self._name__(name))
|
|
389
394
|
|
|
390
395
|
@deprecated_method
|
|
391
396
|
def parseUTM(self, strUTM): # PYCHOK no cover
|
|
@@ -575,7 +580,7 @@ class Utm(UtmUpsBase):
|
|
|
575
580
|
return self._zone
|
|
576
581
|
|
|
577
582
|
|
|
578
|
-
def _parseUTM5(strUTM, datum, Xtm, falsed, Error=UTMError, name
|
|
583
|
+
def _parseUTM5(strUTM, datum, Xtm, falsed, Error=UTMError, **name): # imported by .etm
|
|
579
584
|
'''(INTERNAL) Parse a string representing a UTM coordinate,
|
|
580
585
|
consisting of C{"zone[band] hemisphere easting northing"},
|
|
581
586
|
see L{pygeodesy.parseETM5} and L{parseUTM5}.
|
|
@@ -584,16 +589,11 @@ def _parseUTM5(strUTM, datum, Xtm, falsed, Error=UTMError, name=NN): # imported
|
|
|
584
589
|
if _UTM_ZONE_MIN > z or z > _UTM_ZONE_MAX or (B and B not in _Bands):
|
|
585
590
|
raise Error(strUTM=strUTM, zone=z, band=B)
|
|
586
591
|
|
|
587
|
-
if Xtm is None
|
|
588
|
-
|
|
589
|
-
else:
|
|
590
|
-
r = Xtm(z, h, e, n, band=B, datum=datum, falsed=falsed)
|
|
591
|
-
if name:
|
|
592
|
-
r = _xnamed(r, name, force=True)
|
|
593
|
-
return r
|
|
592
|
+
return UtmUps5Tuple(z, h, e, n, B, Error=Error, **name) if Xtm is None else \
|
|
593
|
+
Xtm(z, h, e, n, band=B, datum=datum, falsed=falsed, **name)
|
|
594
594
|
|
|
595
595
|
|
|
596
|
-
def parseUTM5(strUTM, datum=_WGS84, Utm=Utm, falsed=True, name
|
|
596
|
+
def parseUTM5(strUTM, datum=_WGS84, Utm=Utm, falsed=True, **name):
|
|
597
597
|
'''Parse a string representing a UTM coordinate, consisting
|
|
598
598
|
of C{"zone[band] hemisphere easting northing"}.
|
|
599
599
|
|
|
@@ -614,28 +614,29 @@ def parseUTM5(strUTM, datum=_WGS84, Utm=Utm, falsed=True, name=NN):
|
|
|
614
614
|
|
|
615
615
|
@raise TypeError: Invalid B{C{datum}}.
|
|
616
616
|
'''
|
|
617
|
-
return _parseUTM5(strUTM, datum, Utm, falsed, name
|
|
617
|
+
return _parseUTM5(strUTM, datum, Utm, falsed, **name)
|
|
618
618
|
|
|
619
619
|
|
|
620
620
|
def toUtm8(latlon, lon=None, datum=None, Utm=Utm, falsed=True,
|
|
621
|
-
|
|
622
|
-
zone=None, **cmoff):
|
|
621
|
+
strict=True, zone=None, **name_cmoff):
|
|
623
622
|
'''Convert a lat-/longitude point to a UTM coordinate.
|
|
624
623
|
|
|
625
624
|
@arg latlon: Latitude (C{degrees}) or an (ellipsoidal)
|
|
626
625
|
geodetic C{LatLon} point.
|
|
627
|
-
@kwarg lon: Optional longitude (C{degrees})
|
|
626
|
+
@kwarg lon: Optional longitude (C{degrees}), required
|
|
627
|
+
if B{C{latlon}} is in C{degrees}.
|
|
628
628
|
@kwarg datum: Optional datum for this UTM coordinate,
|
|
629
629
|
overriding B{C{latlon}}'s datum (L{Datum},
|
|
630
630
|
L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}).
|
|
631
631
|
@kwarg Utm: Optional class to return the UTM coordinate
|
|
632
632
|
(L{Utm}) or C{None}.
|
|
633
633
|
@kwarg falsed: False both easting and northing (C{bool}).
|
|
634
|
-
@kwarg name: Optional B{C{Utm}} name (C{str}).
|
|
635
634
|
@kwarg strict: Restrict B{C{lat}} to UTM ranges (C{bool}).
|
|
636
635
|
@kwarg zone: Optional UTM zone to enforce (C{int} or C{str}).
|
|
637
|
-
@kwarg
|
|
638
|
-
|
|
636
|
+
@kwarg name_cmoff: Optional B{C{Utm}} C{B{name}=NN} (C{str})
|
|
637
|
+
and DEPRECATED C{B{cmoff}=True} to offset longitude
|
|
638
|
+
from the zone's central meridian (C{bool}), instead
|
|
639
|
+
use C{B{falsed}=True}.
|
|
639
640
|
|
|
640
641
|
@return: The UTM coordinate (B{C{Utm}}) or if B{C{Utm}} is
|
|
641
642
|
C{None} or not B{C{falsed}}, a L{UtmUps8Tuple}C{(zone,
|
|
@@ -650,17 +651,17 @@ def toUtm8(latlon, lon=None, datum=None, Utm=Utm, falsed=True,
|
|
|
650
651
|
|
|
651
652
|
@raise UTMError: Invalid B{C{zone}}.
|
|
652
653
|
|
|
653
|
-
@raise ValueError: If B{C{lon}} value is missing or
|
|
654
|
-
|
|
654
|
+
@raise ValueError: If B{C{lon}} value is missing or B{C{latlon}}
|
|
655
|
+
is invalid.
|
|
655
656
|
|
|
656
657
|
@note: Implements Karney’s method, using 8-th order Krüger series,
|
|
657
658
|
giving results accurate to 5 nm (or better) for distances
|
|
658
659
|
up to 3,900 Km from the central meridian.
|
|
659
660
|
'''
|
|
660
|
-
z, B, lat, lon, d, f,
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
d = _ellipsoidal_datum(d, name=
|
|
661
|
+
z, B, lat, lon, d, f, n = _to7zBlldfn(latlon, lon, datum,
|
|
662
|
+
falsed, zone, strict,
|
|
663
|
+
UTMError, **name_cmoff)
|
|
664
|
+
d = _ellipsoidal_datum(d, name=n)
|
|
664
665
|
E = d.ellipsoid
|
|
665
666
|
|
|
666
667
|
a, b = radians(lat), radians(lon)
|
|
@@ -680,8 +681,8 @@ def toUtm8(latlon, lon=None, datum=None, Utm=Utm, falsed=True,
|
|
|
680
681
|
A0 = E.A * getattr(Utm, _under(_scale0_), _K0_UTM) # Utm is class or None
|
|
681
682
|
|
|
682
683
|
K = _Kseries(E.AlphaKs, x, y) # Krüger series
|
|
683
|
-
y =
|
|
684
|
-
x =
|
|
684
|
+
y = K.ys(y) * A0 # ξ
|
|
685
|
+
x = K.xs(x) * A0 # η
|
|
685
686
|
|
|
686
687
|
# convergence: Karney 2011 Eq 23, 24
|
|
687
688
|
p_ = K.ps(1)
|
|
@@ -691,21 +692,21 @@ def toUtm8(latlon, lon=None, datum=None, Utm=Utm, falsed=True,
|
|
|
691
692
|
k = E.e2s(sin(a)) * T12 / H * (A0 / E.a * hypot(p_, q_))
|
|
692
693
|
|
|
693
694
|
return _toXtm8(Utm, z, lat, x, y,
|
|
694
|
-
B, d, g, k, f,
|
|
695
|
+
B, d, g, k, f, n, latlon, EPS)
|
|
695
696
|
|
|
696
697
|
|
|
697
698
|
def _toXtm8(Xtm, z, lat, x, y, B, d, g, k, f, # PYCHOK 13+ args
|
|
698
|
-
|
|
699
|
+
n, latlon, eps, Error=UTMError):
|
|
699
700
|
'''(INTERNAL) Helper for methods L{toEtm8} and L{toUtm8}.
|
|
700
701
|
'''
|
|
701
702
|
h = _hemi(lat)
|
|
702
703
|
if f:
|
|
703
704
|
x, y = _false2(x, y, h)
|
|
704
705
|
if Xtm is None: # DEPRECATED
|
|
705
|
-
r = UtmUps8Tuple(z, h, x, y, B, d, g, k, Error=Error, name=
|
|
706
|
+
r = UtmUps8Tuple(z, h, x, y, B, d, g, k, Error=Error, name=n)
|
|
706
707
|
else:
|
|
707
|
-
r =
|
|
708
|
-
|
|
708
|
+
r = Xtm(z, h, x, y, band=B, datum=d, falsed=f,
|
|
709
|
+
gamma=g, scale=k, name=n)
|
|
709
710
|
if isinstance(latlon, _LLEB) and d is latlon.datum: # see ups.toUtm8
|
|
710
711
|
r._latlon5args(latlon, _toBand, f, eps) # XXX weakref(latlon)?
|
|
711
712
|
latlon._gamma = g
|
|
@@ -715,7 +716,7 @@ def _toXtm8(Xtm, z, lat, x, y, B, d, g, k, f, # PYCHOK 13+ args
|
|
|
715
716
|
return r
|
|
716
717
|
|
|
717
718
|
|
|
718
|
-
def utmZoneBand5(lat, lon, cmoff=False, name
|
|
719
|
+
def utmZoneBand5(lat, lon, cmoff=False, **name):
|
|
719
720
|
'''Return the UTM zone number, Band letter, hemisphere and
|
|
720
721
|
(clipped) lat- and longitude for a given location.
|
|
721
722
|
|
|
@@ -737,7 +738,7 @@ def utmZoneBand5(lat, lon, cmoff=False, name=NN):
|
|
|
737
738
|
'''
|
|
738
739
|
lat, lon = parseDMS2(lat, lon)
|
|
739
740
|
z, B, lat, lon = _to4zBll(lat, lon, cmoff=cmoff)
|
|
740
|
-
return UtmUpsLatLon5Tuple(z, B, _hemi(lat), lat, lon, name
|
|
741
|
+
return UtmUpsLatLon5Tuple(z, B, _hemi(lat), lat, lon, **name)
|
|
741
742
|
|
|
742
743
|
# **) MIT License
|
|
743
744
|
#
|
pygeodesy/utmupsBase.py
CHANGED
|
@@ -11,13 +11,14 @@ from pygeodesy.constants import _float, _0_0, _0_5, _N_90_0, _180_0
|
|
|
11
11
|
from pygeodesy.datums import _ellipsoidal_datum, _WGS84
|
|
12
12
|
from pygeodesy.dms import degDMS, parseDMS2
|
|
13
13
|
from pygeodesy.ellipsoidalBase import LatLonEllipsoidalBase as _LLEB
|
|
14
|
-
from pygeodesy.errors import _or, ParseError, _parseX,
|
|
15
|
-
_xkwds,
|
|
14
|
+
from pygeodesy.errors import _or, ParseError, _parseX, _UnexpectedError, \
|
|
15
|
+
_ValueError, _xkwds, _xkwds_not, _xkwds_pop2
|
|
16
|
+
# from pygeodesy.internals import _name__, _under # from .named
|
|
16
17
|
from pygeodesy.interns import NN, _A_, _B_, _COMMA_, _Error_, \
|
|
17
18
|
_gamma_, _n_a_, _not_, _N_, _NS_, _PLUS_, \
|
|
18
|
-
_scale_, _SPACE_, _Y_, _Z_
|
|
19
|
+
_scale_, _SPACE_, _Y_, _Z_
|
|
19
20
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
20
|
-
from pygeodesy.named import _NamedBase,
|
|
21
|
+
from pygeodesy.named import _NamedBase, _xnamed, _name__, _under
|
|
21
22
|
from pygeodesy.namedTuples import EasNor2Tuple, LatLonDatum5Tuple
|
|
22
23
|
from pygeodesy.props import deprecated_method, property_doc_, _update_all, \
|
|
23
24
|
deprecated_property_RO, Property_RO, property_RO
|
|
@@ -26,7 +27,7 @@ from pygeodesy.units import Band, Easting, Northing, Scalar, Zone
|
|
|
26
27
|
from pygeodesy.utily import _Wrap, wrap360
|
|
27
28
|
|
|
28
29
|
__all__ = _ALL_LAZY.utmupsBase
|
|
29
|
-
__version__ = '24.
|
|
30
|
+
__version__ = '24.05.19'
|
|
30
31
|
|
|
31
32
|
_UPS_BANDS = _A_, _B_, _Y_, _Z_ # UPS polar bands SE, SW, NE, NW
|
|
32
33
|
# _UTM_BANDS = _MODS.utm._Bands
|
|
@@ -84,7 +85,7 @@ def _to4lldn(latlon, lon, datum, name, wrap=False):
|
|
|
84
85
|
lat, lon = _Wrap.latlonDMS2(latlon, lon) if wrap else \
|
|
85
86
|
parseDMS2(latlon, lon) # clipped
|
|
86
87
|
d = datum or _WGS84
|
|
87
|
-
return lat, lon, d, (name
|
|
88
|
+
return lat, lon, d, _name__(name, _or_nameof=latlon)
|
|
88
89
|
|
|
89
90
|
|
|
90
91
|
def _to3zBhp(zone, band, hemipole=NN, Error=_ValueError): # imported by .epsg, .ups, .utm, .utmups
|
|
@@ -185,7 +186,9 @@ class UtmUpsBase(_NamedBase):
|
|
|
185
186
|
self._falsed = False
|
|
186
187
|
|
|
187
188
|
if convergence: # for backward compatibility
|
|
188
|
-
gamma =
|
|
189
|
+
gamma, kwds = _xkwds_pop2(convergence, convergence=gamma)
|
|
190
|
+
if kwds:
|
|
191
|
+
raise _UnexpectedError(**kwds)
|
|
189
192
|
if gamma is not self._gamma:
|
|
190
193
|
self._gamma = Scalar(gamma=gamma, Error=E)
|
|
191
194
|
if scale is not self._scale:
|
|
@@ -206,7 +209,7 @@ class UtmUpsBase(_NamedBase):
|
|
|
206
209
|
# self._notOverloaded(callername=_under('Bands'))
|
|
207
210
|
if band not in self._Bands:
|
|
208
211
|
t = _or(*sorted(set(map(repr, self._Bands))))
|
|
209
|
-
raise self._Error(band=band,
|
|
212
|
+
raise self._Error(band=band, txt_not_=t)
|
|
210
213
|
self._band = band
|
|
211
214
|
elif self._band: # reset
|
|
212
215
|
self._band = NN
|
pygeodesy/vector2d.py
CHANGED
|
@@ -30,7 +30,7 @@ from contextlib import contextmanager
|
|
|
30
30
|
# from math import fabs, sqrt # from .fmath
|
|
31
31
|
|
|
32
32
|
__all__ = _ALL_LAZY.vector2d
|
|
33
|
-
__version__ = '24.05.
|
|
33
|
+
__version__ = '24.05.17'
|
|
34
34
|
|
|
35
35
|
_cA_ = 'cA'
|
|
36
36
|
_cB_ = 'cB'
|
|
@@ -282,11 +282,10 @@ def circum4_(*points, **useZ_Vector_and_kwds):
|
|
|
282
282
|
C = map2(float, C)
|
|
283
283
|
R = map2(float, R) # empty if rk < 4 or n <= 4
|
|
284
284
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
r = Radius(sqrt(fsumf_(C[3], *c.x2y2z2)), name=n)
|
|
285
|
+
c = Vector3d(*C[:3], name__=circum4_) # .__name__
|
|
286
|
+
r = Radius(sqrt(fsumf_(C[3], *c.x2y2z2)), name=c.name)
|
|
288
287
|
|
|
289
|
-
c = _nVc(c, **_xkwds(kwds, clas=ps[0].classof, name=
|
|
288
|
+
c = _nVc(c, **_xkwds(kwds, clas=ps[0].classof, name=c.name))
|
|
290
289
|
return Circum4Tuple(r, c, rk, R)
|
|
291
290
|
|
|
292
291
|
|
|
@@ -416,8 +415,8 @@ class _numpy(object): # see also .formy._idllmn6, .geodesicw._wargs, .latlonBas
|
|
|
416
415
|
<https://StackOverflow.com/questions/2992947>} and U{here
|
|
417
416
|
<https://StackOverflow.com/questions/5889142>}.
|
|
418
417
|
'''
|
|
419
|
-
def _Error(
|
|
420
|
-
return _AssertionError(
|
|
418
|
+
def _Error(**kwds):
|
|
419
|
+
return _AssertionError(txt__=self.null_space2, **kwds)
|
|
421
420
|
|
|
422
421
|
np = self.np
|
|
423
422
|
A = np.array(A)
|
pygeodesy/vector3d.py
CHANGED
|
@@ -14,11 +14,11 @@ from pygeodesy.errors import IntersectionError, _ValueError, VectorError, \
|
|
|
14
14
|
from pygeodesy.fmath import euclid, fabs, fdot, hypot, sqrt, fsum1_
|
|
15
15
|
# from pygeodesy.fsums import fsum1_ # from .fmath
|
|
16
16
|
# from pygeodesy.formy import _radical2 # in _intersects2 below
|
|
17
|
-
from pygeodesy.interns import
|
|
18
|
-
|
|
17
|
+
from pygeodesy.interns import _COMMA_, _concentric_, _intersection_, \
|
|
18
|
+
_near_, _negative_, _no_, _too_
|
|
19
19
|
from pygeodesy.iters import PointsIter, Fmt
|
|
20
20
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
21
|
-
from pygeodesy.named import _xnamed, _xotherError
|
|
21
|
+
from pygeodesy.named import _name__, _name2__, _xnamed, _xotherError
|
|
22
22
|
from pygeodesy.namedTuples import Intersection3Tuple, NearestOn2Tuple, \
|
|
23
23
|
NearestOn6Tuple, Vector3Tuple # Vector4Tuple
|
|
24
24
|
# from pygeodesy.nvectorBase import _nsumOf # _MODS
|
|
@@ -31,7 +31,7 @@ from pygeodesy.vector3dBase import Vector3dBase
|
|
|
31
31
|
# from math import fabs, sqrt # from .fmath
|
|
32
32
|
|
|
33
33
|
__all__ = _ALL_LAZY.vector3d
|
|
34
|
-
__version__ = '24.
|
|
34
|
+
__version__ = '24.05.21'
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class Vector3d(Vector3dBase):
|
|
@@ -236,18 +236,18 @@ class Vector3d(Vector3dBase):
|
|
|
236
236
|
'''
|
|
237
237
|
return nearestOn6(self, points, closed=closed, useZ=useZ) # Vector=self.classof
|
|
238
238
|
|
|
239
|
-
def parse(self, str3d, sep=_COMMA_, name
|
|
239
|
+
def parse(self, str3d, sep=_COMMA_, **name):
|
|
240
240
|
'''Parse an C{"x, y, z"} string to a L{Vector3d} instance.
|
|
241
241
|
|
|
242
242
|
@arg str3d: X, y and z string (C{str}), see function L{parse3d}.
|
|
243
243
|
@kwarg sep: Optional separator (C{str}).
|
|
244
|
-
@kwarg name: Optional instance name (C{str}), overriding this name.
|
|
244
|
+
@kwarg name: Optional instance C{B{name}=NN} (C{str}), overriding this name.
|
|
245
245
|
|
|
246
246
|
@return: The instance (L{Vector3d}).
|
|
247
247
|
|
|
248
248
|
@raise VectorError: Invalid B{C{str3d}}.
|
|
249
249
|
'''
|
|
250
|
-
return parse3d(str3d, sep=sep, Vector=self.classof, name=
|
|
250
|
+
return parse3d(str3d, sep=sep, Vector=self.classof, name=self._name__(name))
|
|
251
251
|
|
|
252
252
|
def radii11(self, point2, point3):
|
|
253
253
|
'''Return the radii of the C{Circum-}, C{In-}, I{Soddy} and C{Tangent}
|
|
@@ -677,16 +677,15 @@ def nearestOn(point, point1, point2, within=True, useZ=True, Vector=None, **Vect
|
|
|
677
677
|
p1 = _otherV3d(useZ=useZ, point1=point1)
|
|
678
678
|
p2 = _otherV3d(useZ=useZ, point2=point2)
|
|
679
679
|
|
|
680
|
-
n = nearestOn.__name__
|
|
681
680
|
p, _ = _nearestOn2(p0, p1, p2, within=within)
|
|
682
681
|
if Vector is not None:
|
|
683
|
-
p = Vector(p.x, p.y, **_xkwds(Vector_kwds, z=p.z,
|
|
682
|
+
p = Vector(p.x, p.y, **_xkwds(Vector_kwds, z=p.z, name__=nearestOn))
|
|
684
683
|
elif p is p1:
|
|
685
684
|
p = point1
|
|
686
685
|
elif p is p2:
|
|
687
686
|
p = point2
|
|
688
687
|
else: # ignore Vector_kwds
|
|
689
|
-
p = point.classof(p.x, p.y, _xkwds_get(Vector_kwds, z=p.z),
|
|
688
|
+
p = point.classof(p.x, p.y, _xkwds_get(Vector_kwds, z=p.z), name__=nearestOn)
|
|
690
689
|
return p
|
|
691
690
|
|
|
692
691
|
|
|
@@ -765,8 +764,9 @@ def nearestOn6(point, points, closed=False, useZ=True, **Vector_and_kwds): # ep
|
|
|
765
764
|
return NearestOn6Tuple(v, sqrt(c2), f, j, s, e)
|
|
766
765
|
|
|
767
766
|
|
|
768
|
-
def _nVc(v, clas=None,
|
|
767
|
+
def _nVc(v, clas=None, Vector=None, **Vector_kwds_name): # in .vector2d
|
|
769
768
|
# return a named C{Vector} or C{clas} instance
|
|
769
|
+
name, Vector_kwds = _name2__(**Vector_kwds_name)
|
|
770
770
|
if Vector is not None:
|
|
771
771
|
v = Vector(v.x, v.y, v.z, **Vector_kwds)
|
|
772
772
|
elif clas is not None:
|
|
@@ -810,7 +810,7 @@ def parse3d(str3d, sep=_COMMA_, Vector=Vector3d, **Vector_kwds):
|
|
|
810
810
|
except (TypeError, ValueError) as x:
|
|
811
811
|
raise VectorError(str3d=str3d, cause=x)
|
|
812
812
|
return _xnamed((Vector3Tuple(v) if Vector is None else # *v
|
|
813
|
-
Vector(*v, **Vector_kwds)), parse3d.__name__
|
|
813
|
+
Vector(*v, **Vector_kwds)), name__=parse3d) # .__name__
|
|
814
814
|
|
|
815
815
|
|
|
816
816
|
def sumOf(vectors, Vector=Vector3d, **Vector_kwds):
|
|
@@ -831,9 +831,8 @@ def sumOf(vectors, Vector=Vector3d, **Vector_kwds):
|
|
|
831
831
|
except (TypeError, ValueError) as x:
|
|
832
832
|
raise VectorError(vectors=vectors, Vector=Vector, cause=x)
|
|
833
833
|
x, y, z = t[:3]
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
Vector(x, y, z, **_xkwds(Vector_kwds, name=n))
|
|
834
|
+
return Vector3Tuple(x, y, z, name__=sumOf) if Vector is None else \
|
|
835
|
+
Vector(x, y, z, **_xkwds(Vector_kwds, name__=sumOf)) # .__name__
|
|
837
836
|
|
|
838
837
|
|
|
839
838
|
def trilaterate2d2(x1, y1, radius1, x2, y2, radius2, x3, y3, radius3,
|
|
@@ -930,7 +929,7 @@ def trilaterate3d2(center1, radius1, center2, radius2, center3, radius3,
|
|
|
930
929
|
center3=center3, radius3=radius3)
|
|
931
930
|
|
|
932
931
|
|
|
933
|
-
def _xyzhdn3(xyz, height, datum, ll): # in .cartesianBase, .nvectorBase
|
|
932
|
+
def _xyzhdn3(xyz, height, datum, ll, **name): # in .cartesianBase, .nvectorBase
|
|
934
933
|
'''(INTERNAL) Get a C{(h, d, name)} 3-tuple.
|
|
935
934
|
'''
|
|
936
935
|
h = height or _xattr(xyz, height=None) \
|
|
@@ -940,7 +939,7 @@ def _xyzhdn3(xyz, height, datum, ll): # in .cartesianBase, .nvectorBase
|
|
|
940
939
|
d = datum or _xattr(xyz, datum=None) \
|
|
941
940
|
or _xattr(ll, datum=None)
|
|
942
941
|
|
|
943
|
-
return h, d,
|
|
942
|
+
return h, d, _name__(name, _or_nameof=xyz)
|
|
944
943
|
|
|
945
944
|
|
|
946
945
|
__all__ += _ALL_DOCS(intersections2, sumOf, Vector3dBase)
|
pygeodesy/vector3dBase.py
CHANGED
|
@@ -15,8 +15,7 @@ from pygeodesy.constants import EPS, EPS0, INT0, PI, PI2, _copysignINF, \
|
|
|
15
15
|
_pos_self, _0_0, _1_0
|
|
16
16
|
from pygeodesy.errors import CrossError, VectorError, _xcallable, _xError
|
|
17
17
|
from pygeodesy.fmath import euclid_, fdot, hypot_, hypot2_
|
|
18
|
-
from pygeodesy.interns import
|
|
19
|
-
_COMMASPACE_, _xyz_
|
|
18
|
+
from pygeodesy.interns import _coincident_, _colinear_, _COMMASPACE_, _xyz_
|
|
20
19
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_DOCS, _ALL_MODS as _MODS, \
|
|
21
20
|
_sys_version_info2
|
|
22
21
|
from pygeodesy.named import _NamedBase, _NotImplemented, _xother3
|
|
@@ -27,10 +26,11 @@ from pygeodesy.streprs import Fmt, strs, unstr
|
|
|
27
26
|
from pygeodesy.units import Float, Scalar
|
|
28
27
|
# from pygeodesy.utily import sincos2 # _MODS
|
|
29
28
|
|
|
29
|
+
# from builtints import hash, int, isinstance, map, max, round, type, zip
|
|
30
30
|
from math import atan2, ceil, fabs, floor, trunc
|
|
31
31
|
|
|
32
32
|
__all__ = _ALL_LAZY.vector3dBase
|
|
33
|
-
__version__ = '24.
|
|
33
|
+
__version__ = '24.05.19'
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
@@ -43,7 +43,7 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
|
43
43
|
# _y = INT0 # Y component
|
|
44
44
|
# _z = INT0 # Z component
|
|
45
45
|
|
|
46
|
-
def __init__(self, x_xyz, y=INT0, z=INT0, ll=None, name
|
|
46
|
+
def __init__(self, x_xyz, y=INT0, z=INT0, ll=None, **name):
|
|
47
47
|
'''New L{Vector3d} or C{Vector3dBase} instance.
|
|
48
48
|
|
|
49
49
|
The vector may be normalised or use x, y, z for position and
|
|
@@ -59,7 +59,7 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
|
59
59
|
@kwarg z: Z component of vector (C{scalar}), ignored if B{C{x_xyz}}
|
|
60
60
|
is not C{scalar}, otherwise same units as B{C{x_xyz}}.
|
|
61
61
|
@kwarg ll: Optional latlon reference (C{LatLon}).
|
|
62
|
-
@kwarg name: Optional name (C{str}).
|
|
62
|
+
@kwarg name: Optional C{B{name}=NN} (C{str}).
|
|
63
63
|
|
|
64
64
|
@raise VectorError: Invalid B{C{x_xyz}}.
|
|
65
65
|
'''
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=aWftpUqOeH1Uul8uN_kDAXbFL0TqLXDhynBhCmgpxoQ,40733
|
|
3
|
-
pygeodesy/__main__.py,sha256=qMFG3caY8ZXWu6uGiemzyT4OqTFZnsFtlxcGCAgkVJw,4637
|
|
4
|
-
pygeodesy/albers.py,sha256=g2AVlpV8JO2AYFCthoIbRC2h1OJqjb9P3hpwF0C3TI8,30994
|
|
5
|
-
pygeodesy/azimuthal.py,sha256=tc4JxgLi-0jzU08m4Bvi-t-kzHXYPeGuzL3j_tyVFUA,50125
|
|
6
|
-
pygeodesy/basics.py,sha256=GWsiv-Zl2qOZoW7wPwIG7yLd2FwYLUvsq8c6hZdgsFE,28453
|
|
7
|
-
pygeodesy/booleans.py,sha256=HZbwoL-S7Ww9d4C2D1BVqXfmcuqqVpEVSU9_S0uyUyo,74204
|
|
8
|
-
pygeodesy/cartesianBase.py,sha256=I3q29mRdBB3NCDmPoJsJ0QOFfLzkdMWc8X9zG4IwJyA,47264
|
|
9
|
-
pygeodesy/clipy.py,sha256=VU3ynQ1IZ0v5hJlicqD48oW0imRgiL5_ZzRPrIjpfPw,27683
|
|
10
|
-
pygeodesy/constants.py,sha256=RxO8dMe_3AEfmZyKaRIy_44QnOTdEpzgYwimN0_w9Qs,19113
|
|
11
|
-
pygeodesy/css.py,sha256=sKXsahUiyruDcUk-tGjA6mxq-xzwBoBKxKo9_b2uBmY,25394
|
|
12
|
-
pygeodesy/datums.py,sha256=gJZPgV4bELZvZ8Sj2zE3MBysVtsLxqsN8zm0xjOKvpo,33851
|
|
13
|
-
pygeodesy/dms.py,sha256=op3MU-59CoJQRdybnu21aVM9wtocd_-XFNAZFqmozSo,44439
|
|
14
|
-
pygeodesy/ecef.py,sha256=47zX9rr7MdWY0K9shMqLbxGIb13MkNEUDDxtGigFwHE,59682
|
|
15
|
-
pygeodesy/elevations.py,sha256=ZTxzLWHLUrghFI9Fkl0ZGHzdiLDe0y3ImGUsfxFg6Qc,10814
|
|
16
|
-
pygeodesy/ellipsoidalBase.py,sha256=dqEmBFguS_Q0K95VaBN7oZOVEaxHuicLCrqIuj1QM7w,56639
|
|
17
|
-
pygeodesy/ellipsoidalBaseDI.py,sha256=MSuQI3PlJAHL7gtVy4t0qkm1QP3zeHqbkG4tnMDWDIg,38510
|
|
18
|
-
pygeodesy/ellipsoidalExact.py,sha256=a_2C6S6hGRumavy5giRoC9QAhnjqpujiXyu92od6nKo,16951
|
|
19
|
-
pygeodesy/ellipsoidalGeodSolve.py,sha256=xfNcb70AuPbIiJUqhisIfg6pCQBqXyQffBNuESEGCfU,16833
|
|
20
|
-
pygeodesy/ellipsoidalKarney.py,sha256=FoOsfNf96oHuGa9k4AB42y_UUBuOkh4xMW7PFGF63SA,19246
|
|
21
|
-
pygeodesy/ellipsoidalNvector.py,sha256=vHVKSfR86LnIapGlwl5_uCaEuQGdm0e89mwE6Ay-394,30323
|
|
22
|
-
pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7cn4,26004
|
|
23
|
-
pygeodesy/ellipsoids.py,sha256=SxMsivNnE9ibUjQGd0d24H0SzoSjh6jfhLWjasOWpao,119946
|
|
24
|
-
pygeodesy/elliptic.py,sha256=XRVpmpdm3hbztM4P-qhWKQizbgsXDUxWujgmOrIpgiQ,42428
|
|
25
|
-
pygeodesy/epsg.py,sha256=ldHoLWqJWR4FUiBVnDTtrI_e7TNjjtr9OkxDlri1g5E,8165
|
|
26
|
-
pygeodesy/errors.py,sha256=RHZ_f1zcOIyLQYProiQznaAOhojbDPDR4XbblXJMuS0,27232
|
|
27
|
-
pygeodesy/etm.py,sha256=joEhU2lw9ehRv101nRpZvXq8hOYAEzdcYFpif9_obfk,44585
|
|
28
|
-
pygeodesy/fmath.py,sha256=MylYc4nkVtDWI6U-R4hGmXcq-9tUUBmnlM795weezec,33477
|
|
29
|
-
pygeodesy/formy.py,sha256=Rces4Q5ecED0WVfuI9mQzeyHE54LDowYfI6faBHpyeA,74536
|
|
30
|
-
pygeodesy/frechet.py,sha256=qgee-ISBtT7Ov3rJkcd_t-WeXTbeNoMSQuMa0j3MyQc,33512
|
|
31
|
-
pygeodesy/fstats.py,sha256=23XqQRoegfeE4xEbbcgcsuw4JGEAe0OPvR8Jn2W8U-8,28414
|
|
32
|
-
pygeodesy/fsums.py,sha256=M9btYPykj5JHvO4gg6wkKPGKlg9R4ZfdoFFKcgmQVno,78284
|
|
33
|
-
pygeodesy/gars.py,sha256=fCiWBJ4kOJxPfNOxadX-OzBGDXj7C9g02NuGHiZa_88,11342
|
|
34
|
-
pygeodesy/geodesicw.py,sha256=5yjJ2rLekSsjT7e-Km6v592ZcFlA41flQP_E42jU9Sw,26901
|
|
35
|
-
pygeodesy/geodsolve.py,sha256=3GLI2_4gglzTpZwKchNzAv-XhWFBzWRKjcWsjCC3dvI,21900
|
|
36
|
-
pygeodesy/geohash.py,sha256=HwukecfkWvyfz9LHKfoA-WddQHYot_mB04o0lyWrKyU,32382
|
|
37
|
-
pygeodesy/geoids.py,sha256=EwZJ50qRXeZb1591N99hnamM_EC2NP6MIhLb5swVHf4,80605
|
|
38
|
-
pygeodesy/hausdorff.py,sha256=LJULGbDop4xqiWeRH5-Uayvk5WVCZQpxK4PCYu4kqSs,34192
|
|
39
|
-
pygeodesy/heights.py,sha256=tjr-5eb8UXn2MAp6-157sb6qxPREFk5dtDjHtBgIgZ8,42528
|
|
40
|
-
pygeodesy/interns.py,sha256=WuQe08kItPIwSJ9J1bUxI5yVOX_eNfpGIMpKHzoCqAw,30245
|
|
41
|
-
pygeodesy/iters.py,sha256=CfU365eE9F4oWZbBx0qTEvfodMhpa8rGOepLIv67xF8,20181
|
|
42
|
-
pygeodesy/karney.py,sha256=lYdsSHis8xQJVS1V0F3cphx6Dhgd77xTlMOdVR8MN8I,34994
|
|
43
|
-
pygeodesy/ktm.py,sha256=sCvbLvJItavlruilAyjeZ0sOZx2yJumzGe_UiIVbGi4,27315
|
|
44
|
-
pygeodesy/latlonBase.py,sha256=LimCMj91J3Q4D_rTu7VN7c63cLL_KzxXagFQfedobmc,77730
|
|
45
|
-
pygeodesy/lazily.py,sha256=YeOQQ2Tu0LTD-AMDABc0bemeLRKTteTEJXJDl3_7vZU,48645
|
|
46
|
-
pygeodesy/lcc.py,sha256=yNpmAdOwv3HNh2ZLopF5QtvDokeQYCmnxSc8UFUPHO4,25737
|
|
47
|
-
pygeodesy/ltp.py,sha256=8se8dYG7LG__Ru0FoK939DJBF9GCQGeJik_Un1Im8Xw,48609
|
|
48
|
-
pygeodesy/ltpTuples.py,sha256=iKzvDfv33HfmEevjNISUS4c9KXIkiISEkVlQopyKgfY,55769
|
|
49
|
-
pygeodesy/mgrs.py,sha256=GJ-vG54E2zSLtROyqJ_kj8fHH-8jWGf3kVe7gb8993o,28978
|
|
50
|
-
pygeodesy/named.py,sha256=MzYSWAckYfwJKIdG7duN-6pt1byb9_ZZ7772czjma50,48269
|
|
51
|
-
pygeodesy/namedTuples.py,sha256=msEYvQKj4oCW35Kx80RpeQXY85A1G0O3GEqsysLaV2M,27288
|
|
52
|
-
pygeodesy/nvectorBase.py,sha256=WJY5ylZ_HCeM1wGL7ryEecJphEYibp-EAWL0piKlMG8,28766
|
|
53
|
-
pygeodesy/osgr.py,sha256=voC1rbOe4dnS_EjaDaRDRUQ4MoG7puMBEMV6lcAuIBI,31029
|
|
54
|
-
pygeodesy/points.py,sha256=QNAAF0r7iqSXFr_6aQm-wW7f6vU3KusWVhXEMVeVo58,64442
|
|
55
|
-
pygeodesy/props.py,sha256=rPVqHSnowuDeQR95zFKGwmY0356X2WGW-yRsL2fODCo,21500
|
|
56
|
-
pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
|
|
57
|
-
pygeodesy/simplify.py,sha256=FT3AzXiFjFfvwJ-X2q8iA9cQOUVdBT1vD_BIskM3gK8,25223
|
|
58
|
-
pygeodesy/solveBase.py,sha256=cBe3QQWEaJlPWUlXoiYo1eFMh4z6GDZbQyt8ZiwMfos,16687
|
|
59
|
-
pygeodesy/sphericalBase.py,sha256=sH2WwmY_RL0STyr1OhtCDKvGhO0Ks7o3V-MHLddpiHQ,31944
|
|
60
|
-
pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
|
|
61
|
-
pygeodesy/sphericalTrigonometry.py,sha256=Q9qsqzIK43xBken2G8uP9snPXPuBoZ20pMHqbT_IjG0,64216
|
|
62
|
-
pygeodesy/streprs.py,sha256=8t10NwrS3DmuX6Qig0TDIR7bEWRFmnQUwV1_ItL9zd0,23940
|
|
63
|
-
pygeodesy/trf.py,sha256=4gVtF780EEZEqWwMBDe4x1AEkIz3hB8h4l0_0NXWM5U,118903
|
|
64
|
-
pygeodesy/triaxials.py,sha256=nYFQcLimivcxpeXMj9a83iWuENDU1gI-2zNgCkZzL0U,61549
|
|
65
|
-
pygeodesy/units.py,sha256=ofFTYc7mF9wOpfvpYHN83dGszMM18rTdsxfEXVzaIko,38705
|
|
66
|
-
pygeodesy/unitsBase.py,sha256=xRZlNlO7S47Mwy0FGBg_cefvB4fEtWFM5dAE-Nlw-NE,13111
|
|
67
|
-
pygeodesy/ups.py,sha256=07AG-Rb1D4EvmN3g-xk3ZxKzyaNYvOzztcyYbx7t8jc,23229
|
|
68
|
-
pygeodesy/utily.py,sha256=jP82RmCPCVghxTQv4ZRuIS89afmsD-roz2iafHfyHXA,36128
|
|
69
|
-
pygeodesy/utm.py,sha256=0qF5Kjw8Wf9zxGWOaCF-LSweibat-EkHvvmy7dFO_KE,30981
|
|
70
|
-
pygeodesy/utmups.py,sha256=u2hlWSnmZKwR-ApgKw16R9p75sW_yaqQAmbcBUE8Zfg,13007
|
|
71
|
-
pygeodesy/utmupsBase.py,sha256=KetB8R0uRYU6X8nLG3JkBHUr1OfNlChKa0isgvm8Yq8,18807
|
|
72
|
-
pygeodesy/vector2d.py,sha256=pSvfpFoSa5R37o9tSmRma7KsjNnN9GwTDG9rhFOEmfA,35004
|
|
73
|
-
pygeodesy/vector3d.py,sha256=6ZLYLhZJoOM6UVJlbV8segkVXcFt38HA-SywCdWsynM,44972
|
|
74
|
-
pygeodesy/vector3dBase.py,sha256=wJpEcgHlJ5Qu0Us7CKuNDepZQzo6a-RvqZbA2-O4-ko,35583
|
|
75
|
-
pygeodesy/webmercator.py,sha256=1IXiAHBXTm5kMCp5gEI67oBJeRXD7BiPVI7bcRRX1U4,14918
|
|
76
|
-
pygeodesy/wgrs.py,sha256=AKUrYRCC67lOeJ6vUDAiGb_mY6R3ZwflXpOaP3wauOg,14774
|
|
77
|
-
pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
|
|
78
|
-
pygeodesy/auxilats/_CX_6.py,sha256=x4hrHxunjqqkEsZbVW1dyn3R5mR8EWYOuX77RzDEyh4,14856
|
|
79
|
-
pygeodesy/auxilats/_CX_8.py,sha256=t-OO48t4cCOsOgMi1FoyPw2DQqybVZFsgQMqAYP-jKY,25304
|
|
80
|
-
pygeodesy/auxilats/__init__.py,sha256=yOa5RDYOOed9Z4dvcKlatH0JBgohAJ8ADXjU9mZGTfQ,2881
|
|
81
|
-
pygeodesy/auxilats/__main__.py,sha256=TVN8evCKEzBKdANU5-Ucps8bZySqBTQmEGU4hy_U1cw,2980
|
|
82
|
-
pygeodesy/auxilats/auxAngle.py,sha256=LEa1GVR1EOYnTxR-mBLUj4mGoLO6jRrpsyG4v7N8W_0,16727
|
|
83
|
-
pygeodesy/auxilats/auxDLat.py,sha256=U3BHF6AkW5--nrwH9whL5wZVIZLH_keRLfUz6c6KBx4,10950
|
|
84
|
-
pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
|
|
85
|
-
pygeodesy/auxilats/auxLat.py,sha256=U6thEwMEoUm4OFb2_JviEtEn2-nqyVjNbII7oyMf0hM,31282
|
|
86
|
-
pygeodesy/auxilats/auxily.py,sha256=ZiCFedYcr32O6TWQ_dcnwMrc9TgogyuhNSbR77WMDpg,8240
|
|
87
|
-
pygeodesy/deprecated/__init__.py,sha256=ZRGqgwSdvtKSYZdw09-LPuGa_i0jMHWKIwrPG3r1hHs,2815
|
|
88
|
-
pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
|
|
89
|
-
pygeodesy/deprecated/classes.py,sha256=PXgss-2kEu3bzaxvSeVZJGdcRqsdi_6_aRqsESyUQKQ,11662
|
|
90
|
-
pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
|
|
91
|
-
pygeodesy/deprecated/datum.py,sha256=KfuMA64LYGMj1voW2uai2RGcugtWdpvlOL6UHJvpTeQ,1875
|
|
92
|
-
pygeodesy/deprecated/functions.py,sha256=-Ckor43KBiCDa7rbwY5kHvrs5xwuixTlw1TZpNSBgrU,13647
|
|
93
|
-
pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
|
|
94
|
-
pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
|
|
95
|
-
pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
|
|
96
|
-
pygeodesy/deprecated/rhumbsolve.py,sha256=QprjRfo5T1_C4ovaa1cffAcmNczzkhGIfmybAup9a9w,1431
|
|
97
|
-
pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7ks,1425
|
|
98
|
-
pygeodesy/geodesicx/_C4_24.py,sha256=kS4XMR9m7iBs01V8K0Oz9qTYmjN-icIQGpc_8iwVhig,90750
|
|
99
|
-
pygeodesy/geodesicx/_C4_27.py,sha256=bPbj2Ckrn9WJglm3SNTXyMkULNwANM0tCQ-LKxP1L58,134258
|
|
100
|
-
pygeodesy/geodesicx/_C4_30.py,sha256=QZO8p971ztJwDGLOaJYgIhklztz9GlqbtS-xRP_E7o4,201964
|
|
101
|
-
pygeodesy/geodesicx/__init__.py,sha256=GmuEpkVmz5GagH10fSHCH0QWdh9y-xojuGRmWJ6TKAw,2446
|
|
102
|
-
pygeodesy/geodesicx/__main__.py,sha256=xn4URUZ8Dois3gp6_JaCThTfhVmBJBPx70LvWyZhSIQ,3168
|
|
103
|
-
pygeodesy/geodesicx/gx.py,sha256=E1WTVXsOC1jhc1xDmhCW-IEzqF0oOu74jAsIFt9YwRI,61304
|
|
104
|
-
pygeodesy/geodesicx/gxarea.py,sha256=J-osK7YMZTMUQUtkf-sBMdGABOmLlxcnjTYkacFobkQ,19251
|
|
105
|
-
pygeodesy/geodesicx/gxbases.py,sha256=vmqPnZGh_k7Fwev9oYoIzAZKdFFOydAXa372pHrzfMI,5279
|
|
106
|
-
pygeodesy/geodesicx/gxline.py,sha256=gy0RT7DbcAvnSPqNl0FiqYpN00LBuJM-P9KcyasQvhU,27465
|
|
107
|
-
pygeodesy/rhumb/__init__.py,sha256=MbwdmdduXd3fOWuS1mFdgyKBPBf7Ju1DzRf5D8w0Rok,2207
|
|
108
|
-
pygeodesy/rhumb/aux_.py,sha256=W4HkgoHAQz_aWaysfsmOA5010nCGvBfUs2Q-bymnHYU,16660
|
|
109
|
-
pygeodesy/rhumb/bases.py,sha256=kzU_Dgt4FNPMgTg5rqbw-HiNpflDPKpmq9jhPbQmR4U,53851
|
|
110
|
-
pygeodesy/rhumb/ekx.py,sha256=lF3tZ-ZY9fPJV8y1kgHW-7EOZCyb3gJr-kR-jj5Fbf8,23871
|
|
111
|
-
pygeodesy/rhumb/solve.py,sha256=NZfwx7xv5UriQs7A0c7ZhoxxVUeAT15UwXK_jtwEXQw,27802
|
|
112
|
-
PyGeodesy-24.5.8.dist-info/METADATA,sha256=iiCbD7PToGDSIyOreeEG4YnJO2j2TZRnNvKeQdOVLQQ,19363
|
|
113
|
-
PyGeodesy-24.5.8.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
114
|
-
PyGeodesy-24.5.8.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
115
|
-
PyGeodesy-24.5.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|