pygeodesy 24.10.24__py2.py3-none-any.whl → 24.12.12__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.10.24.dist-info → PyGeodesy-24.12.12.dist-info}/METADATA +6 -6
- PyGeodesy-24.12.12.dist-info/RECORD +118 -0
- {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.12.12.dist-info}/WHEEL +1 -1
- pygeodesy/__init__.py +5 -5
- pygeodesy/__main__.py +1 -1
- pygeodesy/albers.py +5 -5
- pygeodesy/auxilats/_CX_4.py +1 -1
- pygeodesy/auxilats/_CX_6.py +1 -1
- pygeodesy/auxilats/_CX_8.py +1 -1
- pygeodesy/auxilats/_CX_Rs.py +1 -1
- pygeodesy/auxilats/__init__.py +1 -1
- pygeodesy/auxilats/__main__.py +1 -1
- pygeodesy/auxilats/auxAngle.py +5 -5
- pygeodesy/auxilats/auxDLat.py +6 -6
- pygeodesy/auxilats/auxDST.py +2 -2
- pygeodesy/auxilats/auxLat.py +5 -5
- pygeodesy/auxilats/auxily.py +2 -2
- pygeodesy/azimuthal.py +55 -65
- pygeodesy/basics.py +35 -34
- pygeodesy/booleans.py +37 -37
- pygeodesy/cartesianBase.py +26 -65
- pygeodesy/clipy.py +1 -1
- pygeodesy/constants.py +7 -7
- pygeodesy/css.py +8 -9
- pygeodesy/datums.py +1 -1
- pygeodesy/deprecated/__init__.py +2 -2
- pygeodesy/deprecated/bases.py +1 -1
- pygeodesy/deprecated/classes.py +10 -10
- pygeodesy/deprecated/consterns.py +1 -1
- pygeodesy/deprecated/datum.py +1 -1
- pygeodesy/deprecated/functions.py +23 -13
- pygeodesy/deprecated/nvector.py +1 -1
- pygeodesy/deprecated/rhumbBase.py +1 -1
- pygeodesy/deprecated/rhumbaux.py +1 -1
- pygeodesy/deprecated/rhumbsolve.py +1 -1
- pygeodesy/deprecated/rhumbx.py +1 -1
- pygeodesy/dms.py +1 -1
- pygeodesy/ecef.py +63 -69
- pygeodesy/elevations.py +1 -1
- pygeodesy/ellipsoidalBase.py +106 -121
- pygeodesy/ellipsoidalBaseDI.py +115 -119
- pygeodesy/ellipsoidalExact.py +36 -38
- pygeodesy/ellipsoidalGeodSolve.py +1 -1
- pygeodesy/ellipsoidalKarney.py +1 -1
- pygeodesy/ellipsoidalNvector.py +1 -1
- pygeodesy/ellipsoidalVincenty.py +6 -5
- pygeodesy/ellipsoids.py +7 -8
- pygeodesy/elliptic.py +6 -6
- pygeodesy/epsg.py +1 -1
- pygeodesy/errors.py +25 -25
- pygeodesy/etm.py +84 -76
- pygeodesy/fmath.py +54 -51
- pygeodesy/formy.py +74 -106
- pygeodesy/frechet.py +1 -1
- pygeodesy/fstats.py +1 -1
- pygeodesy/fsums.py +82 -72
- pygeodesy/gars.py +1 -1
- pygeodesy/geodesici.py +4 -4
- pygeodesy/geodesicw.py +16 -15
- pygeodesy/geodesicx/_C4_24.py +2 -2
- pygeodesy/geodesicx/_C4_27.py +2 -2
- pygeodesy/geodesicx/_C4_30.py +2 -2
- pygeodesy/geodesicx/__init__.py +3 -3
- pygeodesy/geodesicx/__main__.py +1 -1
- pygeodesy/geodesicx/gx.py +6 -5
- pygeodesy/geodesicx/gxarea.py +2 -2
- pygeodesy/geodesicx/gxbases.py +2 -2
- pygeodesy/geodesicx/gxline.py +16 -12
- pygeodesy/geodsolve.py +8 -17
- pygeodesy/geohash.py +1 -1
- pygeodesy/geoids.py +6 -6
- pygeodesy/hausdorff.py +1 -1
- pygeodesy/heights.py +3 -3
- pygeodesy/internals.py +64 -80
- pygeodesy/interns.py +2 -3
- pygeodesy/iters.py +1 -1
- pygeodesy/karney.py +4 -4
- pygeodesy/ktm.py +20 -21
- pygeodesy/latlonBase.py +296 -346
- pygeodesy/lazily.py +15 -15
- pygeodesy/lcc.py +5 -5
- pygeodesy/ltp.py +55 -59
- pygeodesy/ltpTuples.py +208 -192
- pygeodesy/mgrs.py +9 -10
- pygeodesy/named.py +153 -3
- pygeodesy/namedTuples.py +58 -7
- pygeodesy/nvectorBase.py +122 -105
- pygeodesy/osgr.py +10 -13
- pygeodesy/points.py +1 -1
- pygeodesy/props.py +3 -3
- pygeodesy/resections.py +26 -26
- pygeodesy/rhumb/__init__.py +2 -2
- pygeodesy/rhumb/aux_.py +2 -2
- pygeodesy/rhumb/bases.py +2 -2
- pygeodesy/rhumb/ekx.py +4 -4
- pygeodesy/rhumb/solve.py +4 -4
- pygeodesy/simplify.py +291 -403
- pygeodesy/solveBase.py +1 -1
- pygeodesy/sphericalBase.py +1 -1
- pygeodesy/sphericalNvector.py +84 -127
- pygeodesy/sphericalTrigonometry.py +66 -71
- pygeodesy/streprs.py +10 -5
- pygeodesy/trf.py +1 -1
- pygeodesy/triaxials.py +23 -16
- pygeodesy/units.py +17 -17
- pygeodesy/unitsBase.py +1 -1
- pygeodesy/ups.py +4 -4
- pygeodesy/utily.py +202 -145
- pygeodesy/utm.py +10 -10
- pygeodesy/utmups.py +1 -1
- pygeodesy/utmupsBase.py +1 -1
- pygeodesy/vector2d.py +17 -17
- pygeodesy/vector3d.py +32 -23
- pygeodesy/vector3dBase.py +22 -19
- pygeodesy/webmercator.py +5 -5
- pygeodesy/wgrs.py +5 -5
- PyGeodesy-24.10.24.dist-info/RECORD +0 -118
- {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.12.12.dist-info}/top_level.txt +0 -0
pygeodesy/utm.py
CHANGED
|
@@ -39,7 +39,7 @@ 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
41
|
_xkwds_get, _xkwds_pop2
|
|
42
|
-
from pygeodesy.fmath import fdot3, hypot, hypot1, _operator
|
|
42
|
+
from pygeodesy.fmath import fdot_, fdot3, hypot, hypot1, _operator
|
|
43
43
|
# from pygeodesy.internals import _under # from .datums
|
|
44
44
|
from pygeodesy.interns import MISSING, NN, _by_, _COMMASPACE_, _N_, \
|
|
45
45
|
_NS_, _outside_, _range_, _S_, _scale0_, \
|
|
@@ -51,19 +51,19 @@ from pygeodesy.props import deprecated_method, property_doc_, \
|
|
|
51
51
|
Property_RO
|
|
52
52
|
from pygeodesy.streprs import Fmt, unstr
|
|
53
53
|
from pygeodesy.units import Band, Int, Lat, Lon, Meter, Zone
|
|
54
|
-
from pygeodesy.utily import atan1, degrees90, degrees180, sincos2
|
|
54
|
+
from pygeodesy.utily import atan1, atan2, degrees90, degrees180, sincos2
|
|
55
55
|
from pygeodesy.utmupsBase import _hemi, _LLEB, _parseUTMUPS5, _to4lldn, \
|
|
56
56
|
_to3zBhp, _to3zll, _UPS_LATS, _UPS_ZONE, \
|
|
57
57
|
_UTM_LAT_MAX, _UTM_ZONE_MAX, \
|
|
58
58
|
_UTM_LAT_MIN, _UTM_ZONE_MIN, \
|
|
59
59
|
_UTM_ZONE_OFF_MAX, UtmUpsBase
|
|
60
60
|
|
|
61
|
-
from math import asinh, atanh,
|
|
62
|
-
|
|
61
|
+
from math import asinh, atanh, cos, cosh, degrees, fabs, radians, \
|
|
62
|
+
sin, sinh, tan, tanh # tan as _tan
|
|
63
63
|
# import operator as _operator # from .fmath
|
|
64
64
|
|
|
65
65
|
__all__ = _ALL_LAZY.utm
|
|
66
|
-
__version__ = '24.
|
|
66
|
+
__version__ = '24.11.26'
|
|
67
67
|
|
|
68
68
|
_Bands = 'CDEFGHJKLMNPQRSTUVWXX' # UTM latitude bands C..X (no
|
|
69
69
|
# I|O) 8° each, covering 80°S to 84°N and X repeated for 80-84°N
|
|
@@ -566,12 +566,12 @@ def toUtm8(latlon, lon=None, datum=None, Utm=Utm, falsed=True,
|
|
|
566
566
|
# easting, northing: Karney 2011 Eq 7-14, 29, 35
|
|
567
567
|
sb, cb = sincos2(b)
|
|
568
568
|
|
|
569
|
-
T
|
|
569
|
+
T = tan(a)
|
|
570
570
|
T12 = hypot1(T)
|
|
571
|
-
S
|
|
571
|
+
S = sinh(E.e * atanh(E.e * T / T12))
|
|
572
572
|
|
|
573
|
-
T_ = T
|
|
574
|
-
H
|
|
573
|
+
T_ = fdot_(T, hypot1(S), -S, T12)
|
|
574
|
+
H = hypot(T_, cb)
|
|
575
575
|
|
|
576
576
|
y = atan2(T_, cb) # ξ' ksi
|
|
577
577
|
x = asinh(sb / H) # η' eta
|
|
@@ -733,7 +733,7 @@ def utmZoneBand5(lat, lon, cmoff=False, **name):
|
|
|
733
733
|
|
|
734
734
|
# **) MIT License
|
|
735
735
|
#
|
|
736
|
-
# Copyright (C) 2016-
|
|
736
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
737
737
|
#
|
|
738
738
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
739
739
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/utmups.py
CHANGED
|
@@ -294,7 +294,7 @@ def utmupsZoneBand5(lat, lon, cmoff=False, **name):
|
|
|
294
294
|
|
|
295
295
|
# **) MIT License
|
|
296
296
|
#
|
|
297
|
-
# Copyright (C) 2016-
|
|
297
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
298
298
|
#
|
|
299
299
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
300
300
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/utmupsBase.py
CHANGED
|
@@ -494,7 +494,7 @@ __all__ += _ALL_DOCS(UtmUpsBase)
|
|
|
494
494
|
|
|
495
495
|
# **) MIT License
|
|
496
496
|
#
|
|
497
|
-
# Copyright (C) 2016-
|
|
497
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
498
498
|
#
|
|
499
499
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
500
500
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/vector2d.py
CHANGED
|
@@ -12,7 +12,7 @@ from pygeodesy.constants import EPS, EPS0, EPS02, EPS4, INF, INT0, \
|
|
|
12
12
|
_1_0, _1_0_1T, _N_1_0, _2_0, _N_2_0, _4_0
|
|
13
13
|
from pygeodesy.errors import _and, _AssertionError, IntersectionError, NumPyError, \
|
|
14
14
|
PointsError, TriangleError, _xError, _xkwds
|
|
15
|
-
from pygeodesy.fmath import fabs, fdot, hypot, hypot2_, sqrt
|
|
15
|
+
from pygeodesy.fmath import fabs, fdot, fdot_, hypot, hypot2_, sqrt
|
|
16
16
|
from pygeodesy.fsums import _Fsumf_, fsumf_, fsum1f_
|
|
17
17
|
from pygeodesy.interns import NN, _a_, _and_, _b_, _c_, _center_, _coincident_, \
|
|
18
18
|
_colinear_, _COMMASPACE_, _concentric_, _few_, \
|
|
@@ -31,7 +31,7 @@ from contextlib import contextmanager
|
|
|
31
31
|
# from math import fabs, sqrt # from .fmath
|
|
32
32
|
|
|
33
33
|
__all__ = _ALL_LAZY.vector2d
|
|
34
|
-
__version__ = '24.
|
|
34
|
+
__version__ = '24.11.21'
|
|
35
35
|
|
|
36
36
|
_cA_ = 'cA'
|
|
37
37
|
_cB_ = 'cB'
|
|
@@ -175,7 +175,7 @@ def _circin6(point1, point2, point3, eps=EPS4, useZ=True, dLL3=False, **Vector_k
|
|
|
175
175
|
C = V(c.x, c.y, c.z, **V_kwds)
|
|
176
176
|
return c, C
|
|
177
177
|
|
|
178
|
-
t, p1, p2, p3 =
|
|
178
|
+
t, p1, p2, p3 = _radii11ABC4(point1, point2, point3, useZ=useZ)
|
|
179
179
|
V, r1, r2, r3 = point1.classof, t.rA, t.rB, t.rC
|
|
180
180
|
|
|
181
181
|
c1, cA = _contact2(t.a, p2, r2, p3, r3, V, _xkwds(Vector_kwds, name=_cA_))
|
|
@@ -251,8 +251,8 @@ def circum4(points, useZ=True, **Vector_and_kwds):
|
|
|
251
251
|
@kwarg useZ: If C{True}, use the points' Z component, otherwise force C{z=INT0}
|
|
252
252
|
(C{bool}).
|
|
253
253
|
@kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the center point
|
|
254
|
-
and
|
|
255
|
-
the
|
|
254
|
+
and optionally, additional B{C{Vector}} keyword arguments, otherwise
|
|
255
|
+
the B{C{points}}' (sub-)class.
|
|
256
256
|
|
|
257
257
|
@return: L{Circum4Tuple}C{(radius, center, rank, residuals)} with C{center} an
|
|
258
258
|
instance of C{B{points}[0]}' (sub-)class or B{C{Vector}} if specified.
|
|
@@ -509,12 +509,12 @@ def radii11(point1, point2, point3, useZ=True):
|
|
|
509
509
|
U{Tangent Circles<https://MathWorld.Wolfram.com/TangentCircles.html>}.
|
|
510
510
|
'''
|
|
511
511
|
try:
|
|
512
|
-
return
|
|
512
|
+
return _radii11ABC4(point1, point2, point3, useZ=useZ)[0]
|
|
513
513
|
except (TypeError, ValueError) as x:
|
|
514
514
|
raise _xError(x, point1=point1, point2=point2, point3=point3)
|
|
515
515
|
|
|
516
516
|
|
|
517
|
-
def
|
|
517
|
+
def _radii11ABC4(point1, point2, point3, useZ=True):
|
|
518
518
|
# (INTERNAL) Tangent, Circum, Incircle, Soddy radii, sides and semi-perimeter
|
|
519
519
|
A = _otherV3d(useZ=useZ, point1=point1, NN_OK=False)
|
|
520
520
|
B = _otherV3d(useZ=useZ, point2=point2, NN_OK=False)
|
|
@@ -589,7 +589,7 @@ def soddy4(point1, point2, point3, eps=EPS4, useZ=True):
|
|
|
589
589
|
@see: Functions L{radii11} and L{circum3} and U{Soddy Circles
|
|
590
590
|
<https://MathWorld.Wolfram.com/SoddyCircles.html>}.
|
|
591
591
|
'''
|
|
592
|
-
t, p1, p2, p3 =
|
|
592
|
+
t, p1, p2, p3 = _radii11ABC4(point1, point2, point3, useZ=useZ)
|
|
593
593
|
|
|
594
594
|
r = t.riS
|
|
595
595
|
c, d = _tricenter3d2(p1, t.rA + r,
|
|
@@ -635,10 +635,10 @@ def triaxum5(points, useZ=True):
|
|
|
635
635
|
b = _1_0_1T * n
|
|
636
636
|
T, R, rk = _np.least_squares3(A, b)
|
|
637
637
|
|
|
638
|
-
def
|
|
639
|
-
return sqrt(_1_0 / x) if x else _0_0
|
|
638
|
+
def _1_sqrt(x):
|
|
639
|
+
return sqrt(_1_0 / x) if x else _0_0 # INF
|
|
640
640
|
|
|
641
|
-
a, b, c = map(
|
|
641
|
+
a, b, c = map(_1_sqrt, T)
|
|
642
642
|
return Triaxum5Tuple(a, b, c, rk, R)
|
|
643
643
|
|
|
644
644
|
|
|
@@ -685,8 +685,8 @@ def trilaterate2d2(x1, y1, radius1, x2, y2, radius2, x3, y3, radius3,
|
|
|
685
685
|
@kwarg eps: Tolerance to check the trilaterated point I{delta} on
|
|
686
686
|
all 3 circles (C{scalar}) or C{None} for no checking.
|
|
687
687
|
@kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return
|
|
688
|
-
|
|
689
|
-
|
|
688
|
+
the trilateration and optionally, additional B{C{Vector}}
|
|
689
|
+
keyword arguments).
|
|
690
690
|
|
|
691
691
|
@return: Trilaterated point as C{B{Vector}(x, y, **B{Vector_kwds})}
|
|
692
692
|
or L{Vector2Tuple}C{(x, y)} if C{B{Vector} is None}.
|
|
@@ -742,14 +742,14 @@ def _trilaterate2d2(x1, y1, radius1, x2, y2, radius2, x3, y3, radius3,
|
|
|
742
742
|
raise IntersectionError(_and(_astr(x3=x3, y3=y3, radius3=r3),
|
|
743
743
|
_astr(x1=x1, y1=y1, radius1=r1)), txt=t)
|
|
744
744
|
|
|
745
|
-
q = (a
|
|
745
|
+
q = fdot_(a, e, -b, d) * _2_0
|
|
746
746
|
if isnear0(q):
|
|
747
747
|
t = _no_(_intersection_)
|
|
748
748
|
raise IntersectionError(_and(_astr(x1=x1, y1=y1, radius1=r1),
|
|
749
749
|
_astr(x2=x2, y2=y2, radius2=r2),
|
|
750
750
|
_astr(x3=x3, y3=y3, radius3=r3)), txt=t)
|
|
751
|
-
t = Vector2Tuple((c
|
|
752
|
-
(a
|
|
751
|
+
t = Vector2Tuple(fdot_(c, e, -b, f) / q,
|
|
752
|
+
fdot_(a, f, -c, d) / q, name=trilaterate2d2.__name__)
|
|
753
753
|
|
|
754
754
|
if eps and eps > 0: # check distances to center vs radius
|
|
755
755
|
for x, y, r in ((x1, y1, r1), (x2, y2, r2), (x3, y3, r3)):
|
|
@@ -871,7 +871,7 @@ def _tri5perturbs(eps, r):
|
|
|
871
871
|
|
|
872
872
|
# **) MIT License
|
|
873
873
|
#
|
|
874
|
-
# Copyright (C) 2016-
|
|
874
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
875
875
|
#
|
|
876
876
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
877
877
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/vector3d.py
CHANGED
|
@@ -20,7 +20,7 @@ from pygeodesy.iters import PointsIter, Fmt
|
|
|
20
20
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
21
21
|
from pygeodesy.named import _name__, _name2__, _xnamed, _xotherError
|
|
22
22
|
from pygeodesy.namedTuples import Intersection3Tuple, NearestOn2Tuple, \
|
|
23
|
-
NearestOn6Tuple, Vector3Tuple # Vector4Tuple
|
|
23
|
+
NearestOn6Tuple, _v2Cls, Vector3Tuple # Vector4Tuple
|
|
24
24
|
# from pygeodesy.nvectorBase import _nsumOf # _MODS
|
|
25
25
|
# from pygeodesy.streprs import Fmt # from .iters
|
|
26
26
|
from pygeodesy.units import _fi_j2, _isDegrees, Radius, Radius_
|
|
@@ -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.11.22'
|
|
35
35
|
|
|
36
36
|
_vector2d = _MODS.into(vector2d=__name__)
|
|
37
37
|
|
|
@@ -272,7 +272,7 @@ class Vector3d(Vector3dBase):
|
|
|
272
272
|
Circles<https://MathWorld.Wolfram.com/TangentCircles.html>}.
|
|
273
273
|
'''
|
|
274
274
|
try:
|
|
275
|
-
return _vector2d.
|
|
275
|
+
return _vector2d._radii11ABC4(self, point2, point3, useZ=True)[0]
|
|
276
276
|
except (TypeError, ValueError) as x:
|
|
277
277
|
raise _xError(x, point=self, point2=point2, point3=point3)
|
|
278
278
|
|
|
@@ -303,6 +303,17 @@ class Vector3d(Vector3dBase):
|
|
|
303
303
|
'''
|
|
304
304
|
return _vector2d.soddy4(self, point2, point3, eps=eps, useZ=True)
|
|
305
305
|
|
|
306
|
+
def toCartesian(self, Cartesian, **Cartesian_kwds):
|
|
307
|
+
'''Return this C{Vector3d} as a C{Cartesian}.
|
|
308
|
+
|
|
309
|
+
@arg Cartesian: The C{Cartesian} class to use.
|
|
310
|
+
@kwarg Cartesian_kwds: Optional, additional C{Cartesian}
|
|
311
|
+
keyword arguments.
|
|
312
|
+
|
|
313
|
+
@return: The C{B{Cartesian}} instance.
|
|
314
|
+
'''
|
|
315
|
+
return _v2Cls(self, Cartesian, Cartesian_kwds)
|
|
316
|
+
|
|
306
317
|
def trilaterate2d2(self, radius, center2, radius2, center3, radius3, eps=EPS4, z=INT0):
|
|
307
318
|
'''Trilaterate this and two other circles, each given as a (2-D) center
|
|
308
319
|
and a radius.
|
|
@@ -497,17 +508,16 @@ def intersection3d3(start1, end1, start2, end2, eps=EPS, useZ=True,
|
|
|
497
508
|
B{C{start2}} (Ccompass C{degrees}).
|
|
498
509
|
@kwarg eps: Tolerance for skew line distance and length (C{EPS}).
|
|
499
510
|
@kwarg useZ: If C{True}, use the Z components, otherwise force C{z=INT0} (C{bool}).
|
|
500
|
-
@kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the
|
|
501
|
-
|
|
502
|
-
|
|
511
|
+
@kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the intersection
|
|
512
|
+
points and optional, additional B{C{Vector}} keyword arguments,
|
|
513
|
+
otherwise B{C{start1}}'s (sub-)class.
|
|
503
514
|
|
|
504
|
-
@return: An L{Intersection3Tuple}C{(point, outside1, outside2)} with
|
|
505
|
-
|
|
515
|
+
@return: An L{Intersection3Tuple}C{(point, outside1, outside2)} with C{point}
|
|
516
|
+
an instance of B{C{Vector}} or B{C{start1}}'s (sub-)class.
|
|
506
517
|
|
|
507
518
|
@note: The C{outside} values is C{0} for lines specified by point and bearing.
|
|
508
519
|
|
|
509
|
-
@raise IntersectionError: Invalid, skew, non-co-planar or otherwise
|
|
510
|
-
non-intersecting lines.
|
|
520
|
+
@raise IntersectionError: Invalid, skew, non-co-planar or otherwise non-intersecting lines.
|
|
511
521
|
|
|
512
522
|
@see: U{Line-line intersection<https://MathWorld.Wolfram.com/Line-LineIntersection.html>}
|
|
513
523
|
and U{line-line distance<https://MathWorld.Wolfram.com/Line-LineDistance.html>},
|
|
@@ -538,9 +548,9 @@ def intersections2(center1, radius1, center2, radius2, sphere=True, **Vector_and
|
|
|
538
548
|
@kwarg sphere: If C{True}, compute the center and radius of the intersection of
|
|
539
549
|
two spheres. If C{False}, ignore the C{z}-component and compute
|
|
540
550
|
the intersection of two circles (C{bool}).
|
|
541
|
-
@kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the
|
|
542
|
-
|
|
543
|
-
|
|
551
|
+
@kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the intersection
|
|
552
|
+
points and optionally, additional B{C{Vector}} keyword arguments,
|
|
553
|
+
otherwise B{C{center1}}'s (sub-)class.
|
|
544
554
|
|
|
545
555
|
@return: If C{B{sphere} is True}, a 2-tuple of the C{center} and C{radius} of the
|
|
546
556
|
intersection of the I{spheres}. For abutting circles, C{radius} is C{0.0}
|
|
@@ -725,12 +735,12 @@ def nearestOn6(point, points, closed=False, useZ=True, **Vector_and_kwds): # ep
|
|
|
725
735
|
@kwarg closed: Optionally, close the path or polygon (C{bool}).
|
|
726
736
|
@kwarg useZ: If C{True}, use the Z components, otherwise force C{z=INT0} (C{bool}).
|
|
727
737
|
@kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the closest
|
|
728
|
-
|
|
729
|
-
|
|
738
|
+
point and optionally, additional B{C{Vector}} keyword arguments,
|
|
739
|
+
otherwise B{C{point}}'s (sub-)class.
|
|
730
740
|
|
|
731
741
|
@return: A L{NearestOn6Tuple}C{(closest, distance, fi, j, start, end)} with the
|
|
732
742
|
C{closest}, the C{start} and the C{end} point each an instance of the
|
|
733
|
-
B{C{Vector}} keyword argument
|
|
743
|
+
B{C{Vector}} keyword argument or if {B{Vector}=None} or not specified,
|
|
734
744
|
an instance of the reference B{C{point}}'s (sub-)class.
|
|
735
745
|
|
|
736
746
|
@raise PointsError: Insufficient number of B{C{points}}
|
|
@@ -854,17 +864,16 @@ def trilaterate3d2(center1, radius1, center2, radius2, center3, radius3,
|
|
|
854
864
|
and C{z}).
|
|
855
865
|
@kwarg eps: Pertubation tolerance (C{scalar}), same units as C{x},
|
|
856
866
|
C{y} and C{z} or C{None} for no pertubations.
|
|
857
|
-
@kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
the B{C{center1}}'s (sub-)class.
|
|
867
|
+
@kwarg Vector_and_kwds: Optional class C{B{Vector}=None} to return the
|
|
868
|
+
trilateration and optionally, additional B{C{Vector}}
|
|
869
|
+
keyword arguments, otherwise B{C{center1}}'s (sub-)class.
|
|
861
870
|
|
|
862
871
|
@return: 2-Tuple with two trilaterated points, each a B{C{Vector}}
|
|
863
872
|
instance. Both points are the same instance if all three
|
|
864
873
|
spheres abut/intersect in a single point.
|
|
865
874
|
|
|
866
|
-
@raise ImportError: Package C{numpy} not found, not installed or
|
|
867
|
-
|
|
875
|
+
@raise ImportError: Package C{numpy} not found, not installed or older
|
|
876
|
+
than version 1.10.
|
|
868
877
|
|
|
869
878
|
@raise IntersectionError: Near-concentric, -colinear, too distant or
|
|
870
879
|
non-intersecting spheres.
|
|
@@ -904,7 +913,7 @@ __all__ += _ALL_DOCS(intersections2, sumOf, Vector3dBase)
|
|
|
904
913
|
|
|
905
914
|
# **) MIT License
|
|
906
915
|
#
|
|
907
|
-
# Copyright (C) 2016-
|
|
916
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
908
917
|
#
|
|
909
918
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
910
919
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/vector3dBase.py
CHANGED
|
@@ -14,7 +14,7 @@ from pygeodesy.constants import EPS, EPS0, INT0, PI, PI2, _copysignINF, \
|
|
|
14
14
|
_float0, isnear0, isnear1, isneg0, \
|
|
15
15
|
_pos_self, _1_0
|
|
16
16
|
from pygeodesy.errors import CrossError, VectorError, _xcallable, _xError
|
|
17
|
-
from pygeodesy.fmath import euclid_, fdot, hypot_, hypot2_
|
|
17
|
+
from pygeodesy.fmath import euclid_, fdot, fdot_, hypot_, hypot2_ # _MODS.fmath.fma
|
|
18
18
|
from pygeodesy.interns import _coincident_, _colinear_, _COMMASPACE_, _xyz_
|
|
19
19
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_DOCS, _ALL_MODS as _MODS
|
|
20
20
|
from pygeodesy.named import _NamedBase, _NotImplemented, _xother3
|
|
@@ -23,12 +23,12 @@ from pygeodesy.props import deprecated_method, Property, Property_RO, \
|
|
|
23
23
|
property_doc_, property_RO, _update_all
|
|
24
24
|
from pygeodesy.streprs import Fmt, strs, unstr
|
|
25
25
|
from pygeodesy.units import Float, Scalar
|
|
26
|
-
from pygeodesy.utily import sincos2,
|
|
26
|
+
from pygeodesy.utily import atan2, sincos2, fabs
|
|
27
27
|
|
|
28
28
|
from math import ceil as _ceil, floor as _floor, trunc as _trunc
|
|
29
29
|
|
|
30
30
|
__all__ = _ALL_LAZY.vector3dBase
|
|
31
|
-
__version__ = '24.
|
|
31
|
+
__version__ = '24.11.24'
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
@@ -141,10 +141,6 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
|
141
141
|
'''Not implemented.'''
|
|
142
142
|
return _NotImplemented(self, other)
|
|
143
143
|
|
|
144
|
-
def __format__(self, *other): # PYCHOK no cover
|
|
145
|
-
'''Not implemented.'''
|
|
146
|
-
return _NotImplemented(self, *other)
|
|
147
|
-
|
|
148
144
|
def __ge__(self, other):
|
|
149
145
|
'''Is this vector longer than or equal to an other vector?
|
|
150
146
|
|
|
@@ -504,9 +500,9 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
|
504
500
|
'''
|
|
505
501
|
X, Y, Z = self.others(other).xyz3
|
|
506
502
|
x, y, z = self.xyz3
|
|
507
|
-
xyz = ((y
|
|
508
|
-
(z
|
|
509
|
-
(x
|
|
503
|
+
xyz = (fdot_(y, Z, -z, Y),
|
|
504
|
+
fdot_(z, X, -x, Z),
|
|
505
|
+
fdot_(x, Y, -y, X))
|
|
510
506
|
|
|
511
507
|
if raiser and self.crosserrors and eps0 > 0 \
|
|
512
508
|
and max(map(fabs, xyz)) < eps0:
|
|
@@ -823,11 +819,12 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
|
823
819
|
'''
|
|
824
820
|
return self._plus(*_xyz3(self.plus_, other_x, *y_z))
|
|
825
821
|
|
|
826
|
-
def rotate(self, axis, theta):
|
|
822
|
+
def rotate(self, axis, theta, fma=False):
|
|
827
823
|
'''Rotate this vector around an axis by a specified angle.
|
|
828
824
|
|
|
829
825
|
@arg axis: The axis being rotated around (L{Vector3d}).
|
|
830
826
|
@arg theta: The angle of rotation (C{radians}).
|
|
827
|
+
@kwarg fma: If C{True}, use fused-multiply-add (C{bool}).
|
|
831
828
|
|
|
832
829
|
@return: New, rotated vector (L{Vector3d}).
|
|
833
830
|
|
|
@@ -846,17 +843,23 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
|
846
843
|
bx, by, bz = r.times(d).xyz3
|
|
847
844
|
sx, sy, sz = r.times(s).xyz3
|
|
848
845
|
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
846
|
+
if fma:
|
|
847
|
+
_fma = _MODS.fmath.fma
|
|
848
|
+
else:
|
|
849
|
+
def _fma(a, b, c):
|
|
850
|
+
return a * b + c
|
|
851
|
+
|
|
852
|
+
x = fdot(p, _fma(ax, bx, c), _fma(ax, by, -sz), _fma(ax, bz, sy))
|
|
853
|
+
y = fdot(p, _fma(ay, bx, sz), _fma(ay, by, c), _fma(ay, bz, -sx))
|
|
854
|
+
z = fdot(p, _fma(az, bx, -sy), _fma(az, by, sx), _fma(az, bz, c))
|
|
852
855
|
else: # unrotated
|
|
853
856
|
x, y, z = self.xyz3
|
|
854
857
|
return self.classof(x, y, z)
|
|
855
858
|
|
|
856
859
|
@deprecated_method
|
|
857
|
-
def rotateAround(self, axis, theta):
|
|
860
|
+
def rotateAround(self, axis, theta):
|
|
858
861
|
'''DEPRECATED, use method C{rotate}.'''
|
|
859
|
-
return self.rotate(axis, theta)
|
|
862
|
+
return self.rotate(axis, theta) # PYCHOK no cover
|
|
860
863
|
|
|
861
864
|
def times(self, factor):
|
|
862
865
|
'''Multiply this vector by a scalar.
|
|
@@ -897,7 +900,7 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
|
897
900
|
#
|
|
898
901
|
# @return: A L{PhiLam2Tuple}C{(phi, lam)}.
|
|
899
902
|
# '''
|
|
900
|
-
# return _MODS.
|
|
903
|
+
# return _MODS.nvectorBase.n_xyz2philam(self.x, self.y, self.z)
|
|
901
904
|
|
|
902
905
|
# @deprecated_method
|
|
903
906
|
# def to2ll(self): # PYCHOK no cover
|
|
@@ -905,7 +908,7 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
|
905
908
|
#
|
|
906
909
|
# @return: A L{LatLon2Tuple}C{(lat, lon)}.
|
|
907
910
|
# '''
|
|
908
|
-
# return _MODS.
|
|
911
|
+
# return _MODS.nvectorBase.n_xyz2latlon(self.x, self.y, self.z)
|
|
909
912
|
|
|
910
913
|
@deprecated_method
|
|
911
914
|
def to3xyz(self): # PYCHOK no cover
|
|
@@ -1047,7 +1050,7 @@ __all__ += _ALL_DOCS(Vector3dBase)
|
|
|
1047
1050
|
|
|
1048
1051
|
# **) MIT License
|
|
1049
1052
|
#
|
|
1050
|
-
# Copyright (C) 2016-
|
|
1053
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1051
1054
|
#
|
|
1052
1055
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1053
1056
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/webmercator.py
CHANGED
|
@@ -36,7 +36,7 @@ from pygeodesy.utily import degrees90, degrees180
|
|
|
36
36
|
from math import atan, atanh, exp, radians, sin, tanh
|
|
37
37
|
|
|
38
38
|
__all__ = _ALL_LAZY.webmercator
|
|
39
|
-
__version__ = '24.
|
|
39
|
+
__version__ = '24.11.06'
|
|
40
40
|
|
|
41
41
|
# _FalseEasting = 0 # false Easting (C{meter})
|
|
42
42
|
# _FalseNorthing = 0 # false Northing (C{meter})
|
|
@@ -314,10 +314,10 @@ def toWm(latlon, lon=None, earth=R_MA, Wm=Wm, **name_Wm_kwds_radius):
|
|
|
314
314
|
L{a_f2Tuple}, L{Ellipsoid} or L{Ellipsoid2}), overridden
|
|
315
315
|
by B{C{latlon}}'s datum if present.
|
|
316
316
|
@kwarg Wm: Optional class to return the WM coordinate (L{Wm}) or C{None}.
|
|
317
|
-
@kwarg name_Wm_kwds_radius: Optional C{B{name}=NN} (C{str}),
|
|
317
|
+
@kwarg name_Wm_kwds_radius: Optional C{B{name}=NN} (C{str}), optionally,
|
|
318
318
|
additional B{C{Wm}} keyword arguments, ignored if C{B{Wm} is
|
|
319
|
-
None} and DEPRECATED keyword argument C{B{radius}=earth},
|
|
320
|
-
|
|
319
|
+
None} and DEPRECATED keyword argument C{B{radius}=earth}, use
|
|
320
|
+
B{C{earth}}.
|
|
321
321
|
|
|
322
322
|
@return: The WM coordinate (B{C{Wm}}) or if C{B{Wm} is None}, an
|
|
323
323
|
L{EasNorRadius3Tuple}C{(easting, northing, radius)}.
|
|
@@ -352,7 +352,7 @@ def toWm(latlon, lon=None, earth=R_MA, Wm=Wm, **name_Wm_kwds_radius):
|
|
|
352
352
|
|
|
353
353
|
# **) MIT License
|
|
354
354
|
#
|
|
355
|
-
# Copyright (C) 2016-
|
|
355
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
356
356
|
#
|
|
357
357
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
358
358
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/wgrs.py
CHANGED
|
@@ -32,7 +32,7 @@ from pygeodesy.utily import ft2m, m2ft, m2NM
|
|
|
32
32
|
from math import floor
|
|
33
33
|
|
|
34
34
|
__all__ = _ALL_LAZY.wgrs
|
|
35
|
-
__version__ = '24.
|
|
35
|
+
__version__ = '24.11.06'
|
|
36
36
|
|
|
37
37
|
_Base = 10
|
|
38
38
|
_BaseLen = 4
|
|
@@ -212,9 +212,9 @@ class Georef(Str):
|
|
|
212
212
|
|
|
213
213
|
@kwarg LatLon: Class to use (C{LatLon}) or C{None}.
|
|
214
214
|
@kwarg height: Optional height (C{meter}), overriding this height.
|
|
215
|
-
@kwarg name_LatLon_kwds: Optional C{B{name}=NN} (C{str}) and
|
|
216
|
-
additional B{C{LatLon}} keyword arguments, ignored if
|
|
217
|
-
|
|
215
|
+
@kwarg name_LatLon_kwds: Optional C{B{name}=NN} (C{str}) and optionally,
|
|
216
|
+
additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon}
|
|
217
|
+
is None}.
|
|
218
218
|
|
|
219
219
|
@return: This georef location (B{C{LatLon}}) or if C{B{LatLon} is None},
|
|
220
220
|
a L{LatLon3Tuple}C{(lat, lon, height)}.
|
|
@@ -424,7 +424,7 @@ __all__ += _ALL_DOCS(decode3, decode5, # functions
|
|
|
424
424
|
|
|
425
425
|
# **) MIT License
|
|
426
426
|
#
|
|
427
|
-
# Copyright (C) 2016-
|
|
427
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
428
428
|
#
|
|
429
429
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
430
430
|
# copy of this software and associated documentation files (the "Software"),
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=r0yjEW8YI02U-NFs0qZF3tqSGbEqYLors4l-upxXJEg,42631
|
|
3
|
-
pygeodesy/__main__.py,sha256=1lE1jMp57iXpvu3TEh2unyT2qvtSa5nJPQn_K7Wmj3E,5442
|
|
4
|
-
pygeodesy/albers.py,sha256=BTeUqKPgygExYBLhRJh8b8FYdwuCIpCuo8ggCw6-Auw,30955
|
|
5
|
-
pygeodesy/azimuthal.py,sha256=erI5DTM0-Nr5YC2LnBTVNbUKlrnnXJUwKe0SCQ7-Soc,50223
|
|
6
|
-
pygeodesy/basics.py,sha256=I1za68bt64DDU7uDobR6EO8DZoNHtfTZHnKdGdH9O8w,30020
|
|
7
|
-
pygeodesy/booleans.py,sha256=0sNGKydX2ALi-VaIdaGhoPoRxmfBvA-Ny66lAH_LVis,73463
|
|
8
|
-
pygeodesy/cartesianBase.py,sha256=82h4wO5OxRRuvwMhGpjdZzeJjYVDWObP_3bhPB1T7TY,46935
|
|
9
|
-
pygeodesy/clipy.py,sha256=hzI6IutTRkbssjPPgAjXv9OcgCIIZchjnMWaHin4YAU,27728
|
|
10
|
-
pygeodesy/constants.py,sha256=X2qvwiHSbCKv-PalJ6u22EJpwCcvSksvFrJdLaxgnZk,19842
|
|
11
|
-
pygeodesy/css.py,sha256=rPr5EcGm_blVt72h-851ytpVxdPhx1MEqqGs3Ppx3eI,25651
|
|
12
|
-
pygeodesy/datums.py,sha256=trFx6KgEjlYY_VC6WViZhH1D-U3tDDDdbZXG6MD2H_U,34057
|
|
13
|
-
pygeodesy/dms.py,sha256=FiI-h3nXngSp624i0KlzHkBqYp5X5ucmvN6fLGi_Xgk,42174
|
|
14
|
-
pygeodesy/ecef.py,sha256=_yy_TIUGsXmEZ7aRcmchbJwTp7x__edx6EPiS3Xznes,59587
|
|
15
|
-
pygeodesy/elevations.py,sha256=4FuVcVNb_D09gmcvUlck344N4f7Jms76SIRrdutvKjk,10801
|
|
16
|
-
pygeodesy/ellipsoidalBase.py,sha256=D5OlvepTLoguqDdMmR50OqiMX44e1kaMM-z7k1NtFvI,55385
|
|
17
|
-
pygeodesy/ellipsoidalBaseDI.py,sha256=-y6JhV_8ZA0uNaIV05MkhCASVmUaXJthM4azJrM5Lbk,38445
|
|
18
|
-
pygeodesy/ellipsoidalExact.py,sha256=wmIGgZyd0cvjswP4KOeDuEcuagjwQQRRq1cmseRoD-Q,16946
|
|
19
|
-
pygeodesy/ellipsoidalGeodSolve.py,sha256=fAT4b3HXkM6i1W_C0rb4vbSxZqr4c6rS7PIvGF2ad7s,16666
|
|
20
|
-
pygeodesy/ellipsoidalKarney.py,sha256=qvJa8kZ4SgaRR2UbjtkcRxw_CRbwhXoUT4Dn_6DJ6Ag,18721
|
|
21
|
-
pygeodesy/ellipsoidalNvector.py,sha256=Ye6O6SIRiiwY6PJG4KD9kZ6GBpKkWWxZWsZC4k3eH-s,30039
|
|
22
|
-
pygeodesy/ellipsoidalVincenty.py,sha256=Eeh-lFB9y65kyYCZ5bc7uRIF9o6UT4lqdkk4EVRi0Pg,25946
|
|
23
|
-
pygeodesy/ellipsoids.py,sha256=PQ4fZtEHN-24ROvEbKzARWquisy__WKvKkaT4SOXVB0,106894
|
|
24
|
-
pygeodesy/elliptic.py,sha256=g_IuxDoVf0npEicUCT3x39GJqo1cfpkalC7aV1Z1hFY,45004
|
|
25
|
-
pygeodesy/epsg.py,sha256=Vq_M1g7Z0x5Noqsmt6OCQkPdYJj4jpWObtixL5pAjDA,8220
|
|
26
|
-
pygeodesy/errors.py,sha256=KtLGXxBeNMagCio5qeNX86NmR4g1GHmoYsSQ093RgfA,32040
|
|
27
|
-
pygeodesy/etm.py,sha256=QMQstkJGAvGS5zrLz_TJ75IRzDOljNXuuwGs8peJkMg,46188
|
|
28
|
-
pygeodesy/fmath.py,sha256=3y_qlxzq4vlOwqJ0vhDaGscAi3XbOyPbU6IISovvOzE,36494
|
|
29
|
-
pygeodesy/formy.py,sha256=8xrs_fSGng-TVKSgDzjR41SBwtbEO4_kS3Lq4kLtX-4,75082
|
|
30
|
-
pygeodesy/frechet.py,sha256=F6TYbOEYSOFcll6nvp4GhqafUWXh1umAKb1QaMYQtuM,34372
|
|
31
|
-
pygeodesy/fstats.py,sha256=8Vn1cwlgCQD444WX8FfAEC-AXQcJDeI9_i14Mizp59U,28288
|
|
32
|
-
pygeodesy/fsums.py,sha256=QEPeyM7wkgqeeWEynUNhJhiqynapRTCh8WzpU1fCREw,103404
|
|
33
|
-
pygeodesy/gars.py,sha256=KRlyZUv1euEl7ZkDYSZG913GAfFMRG2m2hp37ObYY_Y,11829
|
|
34
|
-
pygeodesy/geodesici.py,sha256=4Elhe9Z8tcVFD46K0HKd_TSS24CQmgQGGlDk6DnBnmo,74775
|
|
35
|
-
pygeodesy/geodesicw.py,sha256=y6XVpgSG_s-sqF0Dh2HZwJWjBfKiUTCJoCP9Hc8LIww,28710
|
|
36
|
-
pygeodesy/geodsolve.py,sha256=iimnxLJBwygqy7Lxxl-ZjkJ7HVPD6sUrPW8hUZBxaKo,29356
|
|
37
|
-
pygeodesy/geohash.py,sha256=gDmDI91GOJAdNiAcf9bHq8I581UfPnMmwjWyJlPHRlM,40201
|
|
38
|
-
pygeodesy/geoids.py,sha256=uOvDFPYigoEOPnl7yrzbEN1_pEjo4YP-Nan4zsHI_Vs,82479
|
|
39
|
-
pygeodesy/hausdorff.py,sha256=-aKtRbMefDSoIk4V3wCvNrXPZ7Bqk1P6-XuGuI7o8Zc,34770
|
|
40
|
-
pygeodesy/heights.py,sha256=Gv3b1xC7I0tBvTO-DdmWVW8A3ZV3RKxY3jveUUZso38,42909
|
|
41
|
-
pygeodesy/internals.py,sha256=QPLqHnyTMQirTyjyRqlenCxP3vOq-PPxKnxFlKie0WM,24594
|
|
42
|
-
pygeodesy/interns.py,sha256=t8hQ3Y1QHzVkoQxq8Z9f0YjkpRC0oB0G7hpV894aYjw,23403
|
|
43
|
-
pygeodesy/iters.py,sha256=xPH0ytomvJeKHu717Fjzi3QbRrEikO6n7vqkY_IDz1k,20311
|
|
44
|
-
pygeodesy/karney.py,sha256=UUZqUWlRn7S2YdF2A9bxuBNa-Qkpib9QkpRyGZXQOt8,40466
|
|
45
|
-
pygeodesy/ktm.py,sha256=eUWYKhoPou1AiWiNz-xI8eDr-q-RvKDY6newAmYP26Q,27239
|
|
46
|
-
pygeodesy/latlonBase.py,sha256=9R9O9SeIRXTmHfpR9WOL8-1m0yyG8Ymfth2eGq0mDEo,79070
|
|
47
|
-
pygeodesy/lazily.py,sha256=MSQhTpG8jPYBGsi75yNx9yXEvefQFwzDFnYpW_-Kkc0,46648
|
|
48
|
-
pygeodesy/lcc.py,sha256=oDooTzFHnqsMtSKmmmfEbypHpdlPltfo7Mt0pAO4-_A,25669
|
|
49
|
-
pygeodesy/ltp.py,sha256=ZMdfJHLKeDHSoymmjWfoAZTtrdoADf0O6WccRf53L2w,50745
|
|
50
|
-
pygeodesy/ltpTuples.py,sha256=oNTxtjxmHveMDQvPdQCHl-JzSJJGb1jFRrF8SEG_Ojw,58480
|
|
51
|
-
pygeodesy/mgrs.py,sha256=3grmlAIeJFMDTLwCqlt86n4_kmIGocQ-3I6bIXd9nPo,29833
|
|
52
|
-
pygeodesy/named.py,sha256=D71yA_a3mwELI-rUYSKKKiXGuJQNuUnVXPTDhW5zZyc,52386
|
|
53
|
-
pygeodesy/namedTuples.py,sha256=e0rV1Zb2tbx8fztXcSkUFsRTmZtye8B5i_Hi4vBUndU,28758
|
|
54
|
-
pygeodesy/nvectorBase.py,sha256=Xy1TDcH5UuUelVZ7aSKX85hx3fLlpDkYDhuoZijQ1vI,28644
|
|
55
|
-
pygeodesy/osgr.py,sha256=3Qon_oWuVrIb1vYnd3ae3L5MDkjp_tngyVdiYHuL4to,30821
|
|
56
|
-
pygeodesy/points.py,sha256=Vs9vShhBxebgo7UdHlt7Ov4D4Chfa723BZxV0_kpgGk,64389
|
|
57
|
-
pygeodesy/props.py,sha256=IFykUIfSybnymwxQbMjCJax7uAZl6SVJ-uMjatQPsLc,24564
|
|
58
|
-
pygeodesy/resections.py,sha256=IrPHAHbF9JdBgAVd9LMgXoPgPFRkY8j1G7p0P8y8pdc,43543
|
|
59
|
-
pygeodesy/simplify.py,sha256=vkOtO478sOjZHZBuSFvCaRh72qSDQuzXLQpMK1LKyYI,25232
|
|
60
|
-
pygeodesy/solveBase.py,sha256=DpgFNHmWs1GUwCViAU-9iBsmKLVFNc8kW1zrDNi31FY,18485
|
|
61
|
-
pygeodesy/sphericalBase.py,sha256=lsjzDWm3VUxKTpKASqZJDYw7M_CJ4eCgzp3LiCJvMt8,32110
|
|
62
|
-
pygeodesy/sphericalNvector.py,sha256=lUXLX0fSZ0TcResvJ59N25GKR-qQBZEuXlhK-T6ijY4,56984
|
|
63
|
-
pygeodesy/sphericalTrigonometry.py,sha256=uOSNMlsdp5jEK36bL6750IlMuLdy-cKqOsd4tMhFr1M,64135
|
|
64
|
-
pygeodesy/streprs.py,sha256=ItNnTqkE_TMZtqgsRhDonrRDpi5gXtD44sQ_D3Qfsd0,23418
|
|
65
|
-
pygeodesy/trf.py,sha256=hxh6WA7IibL09dHoGMBKQeSXrRFPsYQV0F-LPAD40v4,119073
|
|
66
|
-
pygeodesy/triaxials.py,sha256=priBlyuraA1VhNbN0gv_UAXuulAwV14XjOBvu_oJA4U,63559
|
|
67
|
-
pygeodesy/units.py,sha256=XUbABlp93Pt9VL_Z_chhYRd-dMvwAMWNNWe54V6gmmM,35314
|
|
68
|
-
pygeodesy/unitsBase.py,sha256=ZZ-VDntCOTjSerQJf9aaLE_J0lozrpmUhynRBaCtg24,14060
|
|
69
|
-
pygeodesy/ups.py,sha256=qRyk3tnQNRD7KgWGPANWOrg6Hxqd9eS7vN8or_tKk4E,23338
|
|
70
|
-
pygeodesy/utily.py,sha256=qLxVVE57PHEu1stJaULIYHZ6G-uNe7Fy_uoQfmNbXUg,36189
|
|
71
|
-
pygeodesy/utm.py,sha256=Ubd6-kZtBEoOzCj-pbHb3gRzuGrWBX6nY9_h1YweV2Q,31091
|
|
72
|
-
pygeodesy/utmups.py,sha256=g2Z_aEOt6fhV9f4fASlW4_K_O_P4zBsBbWfQV11mIKo,13196
|
|
73
|
-
pygeodesy/utmupsBase.py,sha256=S4s1Sehj9jSMy-XRxwtwVstG3QhyVt924V0FHu0cPIk,18730
|
|
74
|
-
pygeodesy/vector2d.py,sha256=O9a3uRIREL2k7G-pnpuacjBcAlKg75MnokjtfJB-nBs,39659
|
|
75
|
-
pygeodesy/vector3d.py,sha256=PaiuJgHCf0bO8nhOai42ut2zk0_DskSNCrOtCuHxw6U,42673
|
|
76
|
-
pygeodesy/vector3dBase.py,sha256=IJdJ-fLApA88HbPZb41vAJzbLlGywpfKn5yT7ia26A0,36108
|
|
77
|
-
pygeodesy/webmercator.py,sha256=fFQtTxIsjOE35_nX_mAgFv1Eov7AdcsCBjT2ONm3qmI,14934
|
|
78
|
-
pygeodesy/wgrs.py,sha256=6dO31uMKF-t-uQz58hdutilE2A5msOs5Bybq5Uq3qgk,15453
|
|
79
|
-
pygeodesy/auxilats/_CX_4.py,sha256=WsxGrwqEhdWBx-K5ocwwDuatIkDTZB-FwrqQITbcNU0,6829
|
|
80
|
-
pygeodesy/auxilats/_CX_6.py,sha256=PsaVhzOdCDyRuZ-SH6ZwbWrf_rAkidtwLuAQTlvv5XQ,11277
|
|
81
|
-
pygeodesy/auxilats/_CX_8.py,sha256=mxk12xvzOMNimyHM74fn9sFB0aUSBLojYqtenYhAekQ,18899
|
|
82
|
-
pygeodesy/auxilats/_CX_Rs.py,sha256=z7UXI7KUyURE44wGuLJE2on6SlgAZzfbay4jkbpON1U,7967
|
|
83
|
-
pygeodesy/auxilats/__init__.py,sha256=ywIs1e5wes3qq3dvCvX0VdxoGtFNQwBmY8Ar-07f9Kg,2881
|
|
84
|
-
pygeodesy/auxilats/__main__.py,sha256=pb0GWDrrg440xNvHvPAz-UTGrLu2uXp4g-RlbkW7P6c,3171
|
|
85
|
-
pygeodesy/auxilats/auxAngle.py,sha256=nr-su1loEbv1uVxg7_cEjH0M1DLyodsulPfq4NVT5kY,16745
|
|
86
|
-
pygeodesy/auxilats/auxDLat.py,sha256=3sq7Wc-ykpVbldNh10IZ3tIlJ7DcQFDlmZ4nOhJEgo0,10969
|
|
87
|
-
pygeodesy/auxilats/auxDST.py,sha256=BSHR0M3hQBR1KjF_BUJHrNzGXr2PblYXUQsMD5L1Kcc,10468
|
|
88
|
-
pygeodesy/auxilats/auxLat.py,sha256=7uxe7mtkY-9uSI3z2wmUNBqzCKyFujIpJU1v-8yDgds,31934
|
|
89
|
-
pygeodesy/auxilats/auxily.py,sha256=X1y4_qC40Th7CgmZILqoQCLAUQoyORcR5W-bN4X0W4I,7882
|
|
90
|
-
pygeodesy/deprecated/__init__.py,sha256=jSwmipBzyIOYIQhiZxZwsIQlqMXPfNaPfVpppBu7zkw,2815
|
|
91
|
-
pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
|
|
92
|
-
pygeodesy/deprecated/classes.py,sha256=gktUr5qYXCm8ztH6lfzFgaHKqMiw1tHc1Vw6i6DEvNA,12377
|
|
93
|
-
pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
|
|
94
|
-
pygeodesy/deprecated/datum.py,sha256=s8Hke053RucP5ACvg3gdX8weQfGM0x59pQyHpY11eOs,1875
|
|
95
|
-
pygeodesy/deprecated/functions.py,sha256=-spa_5k7yRWGd7s4UBObzf9QpAM0o-tgP4S0wX876JY,14122
|
|
96
|
-
pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
|
|
97
|
-
pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
|
|
98
|
-
pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
|
|
99
|
-
pygeodesy/deprecated/rhumbsolve.py,sha256=QprjRfo5T1_C4ovaa1cffAcmNczzkhGIfmybAup9a9w,1431
|
|
100
|
-
pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7ks,1425
|
|
101
|
-
pygeodesy/geodesicx/_C4_24.py,sha256=r5-So2i4z-OFY6NFYERUvhtxYHaYphPRgUUC3PWC5K4,90707
|
|
102
|
-
pygeodesy/geodesicx/_C4_27.py,sha256=Pkpns4kBAHxBcvi0f9l_3GQeE6qcrl123DccEQ593To,134215
|
|
103
|
-
pygeodesy/geodesicx/_C4_30.py,sha256=cseNhROi7DHi77kgdrXXDXO6yiiq00DNcX0HOVf2Rpg,201921
|
|
104
|
-
pygeodesy/geodesicx/__init__.py,sha256=Z-Pq7wWevRZeMdG2qqL7OE1b8hRUubyZE2w1GqF1OzI,2478
|
|
105
|
-
pygeodesy/geodesicx/__main__.py,sha256=wsJPK6lW_PsgVCR1ZJksgGhwxwrsMGSXhYkhpjbknTc,4188
|
|
106
|
-
pygeodesy/geodesicx/gx.py,sha256=yeNpMQbw_uWfs4KOQX8RMAQt6WNsG3zsGgmZRVgbQIk,60612
|
|
107
|
-
pygeodesy/geodesicx/gxarea.py,sha256=cJaXwMMxjQ21RiCGU7c2YLXNmrqkRawHxQxsg7o5gas,19454
|
|
108
|
-
pygeodesy/geodesicx/gxbases.py,sha256=AyvsjiSENqikJK6qpm55rDkUlBSmTDk_-FoqzzMFX1M,6130
|
|
109
|
-
pygeodesy/geodesicx/gxline.py,sha256=zNQF8lz9caHZlsUcL8NfjG02KIza39Q6Qd6XizDp_UI,27537
|
|
110
|
-
pygeodesy/rhumb/__init__.py,sha256=G8qo1yrLhKfd0yWiVUdJbIPj3udcmsgqKZqFD0PYfeA,2207
|
|
111
|
-
pygeodesy/rhumb/aux_.py,sha256=XN0zlNwhU525NdcHko-G_Igvc7-mzXbT7ypcVIt5ADw,16048
|
|
112
|
-
pygeodesy/rhumb/bases.py,sha256=e_ASUIK9ABtORVZaTMiFMGRc3w2wKGNDPdJEfVCp5CU,54162
|
|
113
|
-
pygeodesy/rhumb/ekx.py,sha256=JsmdCatWKqsffF8jCh4HDu5IKt_kHq1qUdmP1LMuofY,24044
|
|
114
|
-
pygeodesy/rhumb/solve.py,sha256=Ko1uHcicoqw7x467IzncjMtppjRs1JC1yqVh_DtTV6k,23905
|
|
115
|
-
PyGeodesy-24.10.24.dist-info/METADATA,sha256=tKtj7Pcqe2Kbx6YfgDvEdUNdDHw0-L4X0xpMStYFGlg,19919
|
|
116
|
-
PyGeodesy-24.10.24.dist-info/WHEEL,sha256=fS9sRbCBHs7VFcwJLnLXN1MZRR0_TVTxvXKzOnaSFs8,110
|
|
117
|
-
PyGeodesy-24.10.24.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
118
|
-
PyGeodesy-24.10.24.dist-info/RECORD,,
|
|
File without changes
|