pygeodesy 24.6.9__py2.py3-none-any.whl → 24.7.7__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.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/METADATA +2 -2
- PyGeodesy-24.7.7.dist-info/RECORD +117 -0
- pygeodesy/__init__.py +39 -32
- pygeodesy/__main__.py +6 -1
- pygeodesy/albers.py +2 -2
- pygeodesy/auxilats/__init__.py +1 -1
- pygeodesy/auxilats/auxAngle.py +40 -39
- pygeodesy/auxilats/auxDLat.py +3 -2
- pygeodesy/auxilats/auxLat.py +16 -18
- pygeodesy/auxilats/auxily.py +1 -1
- pygeodesy/azimuthal.py +10 -10
- pygeodesy/basics.py +16 -4
- pygeodesy/booleans.py +4 -4
- pygeodesy/cartesianBase.py +11 -14
- pygeodesy/css.py +14 -18
- pygeodesy/datums.py +6 -6
- pygeodesy/deprecated/__init__.py +1 -1
- pygeodesy/deprecated/classes.py +25 -4
- pygeodesy/deprecated/datum.py +3 -3
- pygeodesy/deprecated/functions.py +6 -8
- pygeodesy/dms.py +23 -27
- pygeodesy/ecef.py +4 -4
- pygeodesy/elevations.py +4 -4
- pygeodesy/ellipsoidalBase.py +23 -28
- pygeodesy/ellipsoidalBaseDI.py +19 -23
- pygeodesy/ellipsoidalExact.py +3 -3
- pygeodesy/ellipsoidalGeodSolve.py +15 -23
- pygeodesy/ellipsoidalKarney.py +37 -60
- pygeodesy/ellipsoidalNvector.py +38 -44
- pygeodesy/ellipsoidalVincenty.py +11 -14
- pygeodesy/ellipsoids.py +107 -101
- pygeodesy/errors.py +109 -48
- pygeodesy/etm.py +32 -44
- pygeodesy/formy.py +55 -58
- pygeodesy/frechet.py +18 -20
- pygeodesy/fsums.py +3 -3
- pygeodesy/gars.py +3 -4
- pygeodesy/geodesici.py +1696 -0
- pygeodesy/geodesicw.py +15 -15
- pygeodesy/geodesicx/__init__.py +4 -4
- pygeodesy/geodesicx/gx.py +34 -55
- pygeodesy/geodesicx/gxbases.py +20 -8
- pygeodesy/geodesicx/gxline.py +93 -88
- pygeodesy/geodsolve.py +108 -59
- pygeodesy/geohash.py +26 -34
- pygeodesy/geoids.py +28 -37
- pygeodesy/hausdorff.py +17 -18
- pygeodesy/heights.py +2 -2
- pygeodesy/internals.py +46 -13
- pygeodesy/interns.py +2 -2
- pygeodesy/karney.py +78 -15
- pygeodesy/ktm.py +13 -16
- pygeodesy/latlonBase.py +17 -19
- pygeodesy/lazily.py +28 -25
- pygeodesy/lcc.py +28 -31
- pygeodesy/ltp.py +7 -8
- pygeodesy/ltpTuples.py +71 -73
- pygeodesy/mgrs.py +8 -9
- pygeodesy/named.py +19 -10
- pygeodesy/nvectorBase.py +9 -10
- pygeodesy/osgr.py +9 -9
- pygeodesy/points.py +6 -6
- pygeodesy/rhumb/__init__.py +1 -1
- pygeodesy/rhumb/aux_.py +5 -5
- pygeodesy/rhumb/bases.py +30 -31
- pygeodesy/rhumb/ekx.py +3 -4
- pygeodesy/rhumb/solve.py +21 -22
- pygeodesy/solveBase.py +177 -123
- pygeodesy/sphericalBase.py +10 -11
- pygeodesy/sphericalNvector.py +13 -13
- pygeodesy/sphericalTrigonometry.py +86 -97
- pygeodesy/streprs.py +4 -34
- pygeodesy/triaxials.py +48 -43
- pygeodesy/units.py +208 -275
- pygeodesy/unitsBase.py +115 -107
- pygeodesy/ups.py +26 -31
- pygeodesy/utily.py +8 -8
- pygeodesy/utm.py +35 -40
- pygeodesy/utmups.py +43 -46
- pygeodesy/utmupsBase.py +8 -9
- pygeodesy/vector3d.py +26 -27
- pygeodesy/vector3dBase.py +6 -7
- pygeodesy/webmercator.py +19 -21
- pygeodesy/wgrs.py +18 -20
- PyGeodesy-24.6.9.dist-info/RECORD +0 -116
- {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/top_level.txt +0 -0
pygeodesy/ellipsoidalNvector.py
CHANGED
|
@@ -23,13 +23,13 @@ The Journal of Navigation (2010), vol 63, nr 3, pp 395-417.
|
|
|
23
23
|
# make sure int/int division yields float quotient, see .basics
|
|
24
24
|
from __future__ import division as _; del _ # PYCHOK semicolon
|
|
25
25
|
|
|
26
|
-
from pygeodesy.basics import issubclassof, map2, _xinstanceof
|
|
26
|
+
from pygeodesy.basics import issubclassof, map2, _xinstanceof, _xsubclassof
|
|
27
27
|
from pygeodesy.datums import _earth_ellipsoid, _ellipsoidal_datum, _WGS84
|
|
28
28
|
# from pygeodesy.dms import F_D, toDMS # _MODS
|
|
29
29
|
from pygeodesy.ellipsoidalBase import CartesianEllipsoidalBase, \
|
|
30
30
|
_nearestOn, LatLonEllipsoidalBase, \
|
|
31
31
|
_TOL_M, _Wrap
|
|
32
|
-
from pygeodesy.errors import
|
|
32
|
+
from pygeodesy.errors import _xkwds, _xkwds_pop2
|
|
33
33
|
# from pygeodesy.fmath import fdot # from .nvectorBase
|
|
34
34
|
from pygeodesy.interns import _Nv00_, _COMMASPACE_, _pole_ # PYCHOK used!
|
|
35
35
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _ALL_OTHER
|
|
@@ -48,7 +48,7 @@ from pygeodesy.units import Bearing, Distance, Height, Scalar
|
|
|
48
48
|
# from math import fabs # from .nvectorBase
|
|
49
49
|
|
|
50
50
|
__all__ = _ALL_LAZY.ellipsoidalNvector
|
|
51
|
-
__version__ = '24.06.
|
|
51
|
+
__version__ = '24.06.15'
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
class Ned(_Ned):
|
|
@@ -95,9 +95,9 @@ class Cartesian(CartesianEllipsoidalBase):
|
|
|
95
95
|
override this L{LatLon} class or specify
|
|
96
96
|
C{B{LatLon} is None}.
|
|
97
97
|
|
|
98
|
-
@return: The geodetic point (L{LatLon}) or if B{
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
@return: The geodetic point (L{LatLon}) or if C{B{LatLon} is None},
|
|
99
|
+
an L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)}
|
|
100
|
+
with C{C} and C{M} if available.
|
|
101
101
|
|
|
102
102
|
@raise TypeError: Invalid B{C{LatLon_and_kwds}}.
|
|
103
103
|
'''
|
|
@@ -112,8 +112,8 @@ class Cartesian(CartesianEllipsoidalBase):
|
|
|
112
112
|
override this C{Nvector} class or specify
|
|
113
113
|
C{B{Nvector} is None}.
|
|
114
114
|
|
|
115
|
-
@return: The C{n-vector} components (C{Nvector}) or if B{
|
|
116
|
-
is
|
|
115
|
+
@return: The C{n-vector} components (C{Nvector}) or if C{B{Nvector}
|
|
116
|
+
is None}, a L{Vector4Tuple}C{(x, y, z, h)}.
|
|
117
117
|
|
|
118
118
|
@raise TypeError: Invalid B{C{Nvector_and_kwds}}.
|
|
119
119
|
'''
|
|
@@ -176,9 +176,9 @@ class LatLon(LatLonNvectorBase, LatLonEllipsoidalBase):
|
|
|
176
176
|
|
|
177
177
|
@return: Delta from this to the other point (B{C{Ned}}).
|
|
178
178
|
|
|
179
|
-
@raise TypeError: The B{C{other}} point is not L{LatLon} or
|
|
180
|
-
|
|
181
|
-
L{pygeodesy.
|
|
179
|
+
@raise TypeError: The B{C{other}} point is not L{LatLon} or B{C{Ned}}
|
|
180
|
+
is not an L{Ned4Tuple<pygeodesy.Ned4Tuple>} nor an
|
|
181
|
+
L{Ned<pygeodesy.Ned>} nor a DEPRECATED L{Ned}.
|
|
182
182
|
|
|
183
183
|
@raise ValueError: If ellipsoids are incompatible.
|
|
184
184
|
'''
|
|
@@ -196,8 +196,8 @@ class LatLon(LatLonNvectorBase, LatLonEllipsoidalBase):
|
|
|
196
196
|
N, kwds = _xkwds_pop2(Ned_and_kwds, Ned=Ned)
|
|
197
197
|
if issubclassof(N, Ned4Tuple):
|
|
198
198
|
ned_ += _MODS.ltp.Ltp(self, ecef=self.Ecef(self.datum)),
|
|
199
|
-
|
|
200
|
-
|
|
199
|
+
else:
|
|
200
|
+
_xsubclassof(_Ned, Ned4Tuple, Ned=N)
|
|
201
201
|
return N(*ned_, **_xkwds(kwds, name=self.name))
|
|
202
202
|
|
|
203
203
|
# def destination(self, distance, bearing, radius=R_M, height=None):
|
|
@@ -223,7 +223,7 @@ class LatLon(LatLonNvectorBase, LatLonEllipsoidalBase):
|
|
|
223
223
|
# y = gc.cross(v1).times(sin(r)) # component of v2 perpendicular to v1
|
|
224
224
|
#
|
|
225
225
|
# v2 = x.plus(y).unit()
|
|
226
|
-
# return v2.toLatLon(height=self.height
|
|
226
|
+
# return v2.toLatLon(height=self._heigHt(height))
|
|
227
227
|
|
|
228
228
|
def destinationNed(self, delta):
|
|
229
229
|
'''Calculate the destination point using the supplied NED delta
|
|
@@ -234,8 +234,8 @@ class LatLon(LatLonNvectorBase, LatLonEllipsoidalBase):
|
|
|
234
234
|
|
|
235
235
|
@return: Destination point (L{LatLon}).
|
|
236
236
|
|
|
237
|
-
@raise TypeError: If B{C{delta}} is not L{pygeodesy.Ned}
|
|
238
|
-
DEPRECATED L{Ned}.
|
|
237
|
+
@raise TypeError: If B{C{delta}} is not an L{Ned<pygeodesy.Ned>}
|
|
238
|
+
or a DEPRECATED L{Ned}.
|
|
239
239
|
'''
|
|
240
240
|
_xinstanceof(_Ned, delta=delta)
|
|
241
241
|
|
|
@@ -391,9 +391,9 @@ class LatLon(LatLonNvectorBase, LatLonEllipsoidalBase):
|
|
|
391
391
|
to override this L{Cartesian} class or specify
|
|
392
392
|
C{B{Cartesian}=None}.
|
|
393
393
|
|
|
394
|
-
@return: The geodetic point (L{Cartesian}) or if B{
|
|
395
|
-
|
|
396
|
-
|
|
394
|
+
@return: The geodetic point (L{Cartesian}) or if C{B{Cartesian} is None},
|
|
395
|
+
an L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)} with
|
|
396
|
+
C{C} and C{M} if available.
|
|
397
397
|
|
|
398
398
|
@raise TypeError: Invalid B{C{Cartesian}} or other B{C{Cartesian_and_kwds}}.
|
|
399
399
|
'''
|
|
@@ -476,9 +476,9 @@ class Nvector(NvectorBase):
|
|
|
476
476
|
to override this L{Cartesian} class or specify
|
|
477
477
|
C{B{Cartesian} is None}.
|
|
478
478
|
|
|
479
|
-
@return: The cartesian point (L{Cartesian}) or if B{
|
|
480
|
-
|
|
481
|
-
|
|
479
|
+
@return: The cartesian point (L{Cartesian}) or if C{B{Cartesian} is None},
|
|
480
|
+
an L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)} with
|
|
481
|
+
C{C} and C{M} if available.
|
|
482
482
|
|
|
483
483
|
@raise TypeError: Invalid B{C{Cartesian_and_kwds}}.
|
|
484
484
|
'''
|
|
@@ -494,9 +494,9 @@ class Nvector(NvectorBase):
|
|
|
494
494
|
to override this L{LatLon} class or specify
|
|
495
495
|
C{B{LatLon} is None}.
|
|
496
496
|
|
|
497
|
-
@return: The geodetic point (L{LatLon}) or if B{
|
|
498
|
-
|
|
499
|
-
|
|
497
|
+
@return: The geodetic point (L{LatLon}) or if C{B{LatLon} is None},
|
|
498
|
+
an L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)}
|
|
499
|
+
with C{C} and C{M} if available.
|
|
500
500
|
|
|
501
501
|
@raise TypeError: Invalid B{C{LatLon_and_kwds}}.
|
|
502
502
|
'''
|
|
@@ -528,29 +528,23 @@ def meanOf(points, datum=_WGS84, height=None, wrap=False,
|
|
|
528
528
|
|
|
529
529
|
@arg points: Points to be averaged (L{LatLon}[]).
|
|
530
530
|
@kwarg datum: Optional datum to use (L{Datum}).
|
|
531
|
-
@kwarg height: Optional height at mean point, overriding
|
|
532
|
-
|
|
533
|
-
@kwarg wrap: If C{True}, wrap or I{normalize} B{C{points}}
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
@return: Geographic mean point and mean height (B{C{LatLon}})
|
|
542
|
-
or if B{C{LatLon}} is C{None}, an L{Ecef9Tuple}C{(x,
|
|
543
|
-
y, z, lat, lon, height, C, M, datum)} with C{C} and
|
|
544
|
-
C{M} if available.
|
|
531
|
+
@kwarg height: Optional height at mean point, overriding the mean
|
|
532
|
+
height (C{meter}).
|
|
533
|
+
@kwarg wrap: If C{True}, wrap or I{normalize} B{C{points}} (C{bool}).
|
|
534
|
+
@kwarg LatLon_and_kwds: Optional B{C{LatLon}} class to return the mean
|
|
535
|
+
points (or C{None}) and additional B{C{LatLon}} keyword
|
|
536
|
+
arguments, ignored if C{B{LatLon} is None}.
|
|
537
|
+
|
|
538
|
+
@return: Geographic mean point and height (B{C{LatLon}}) or if C{B{LatLon}
|
|
539
|
+
is None}, an L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M,
|
|
540
|
+
datum)} with C{C} and C{M} if available.
|
|
545
541
|
|
|
546
542
|
@raise ValueError: Insufficient number of B{C{points}}.
|
|
547
543
|
'''
|
|
548
544
|
Ps = _Nvll.PointsIter(points, wrap=wrap)
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
LatLon=LatLon, name__=meanOf)
|
|
553
|
-
return m.toLatLon(**kwds)
|
|
545
|
+
n = sumOf(p._N_vector for p in Ps.iterate(closed=False))
|
|
546
|
+
return n.toLatLon(**_xkwds(LatLon_and_kwds, height=height, datum=datum,
|
|
547
|
+
LatLon=LatLon, name__=meanOf))
|
|
554
548
|
|
|
555
549
|
|
|
556
550
|
def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
pygeodesy/ellipsoidalVincenty.py
CHANGED
|
@@ -72,7 +72,7 @@ from pygeodesy.utily import atan2b, atan2d, sincos2, sincos2d, unroll180, wrap18
|
|
|
72
72
|
from math import atan2, cos, degrees, fabs, radians, tan
|
|
73
73
|
|
|
74
74
|
__all__ = _ALL_LAZY.ellipsoidalVincenty
|
|
75
|
-
__version__ = '
|
|
75
|
+
__version__ = '24.06.11'
|
|
76
76
|
|
|
77
77
|
_antipodal_to_ = _SPACE_(_antipodal_, _to_)
|
|
78
78
|
|
|
@@ -102,7 +102,7 @@ class Cartesian(CartesianEllipsoidalBase):
|
|
|
102
102
|
B{datum}=...} to override this L{LatLon}
|
|
103
103
|
class or specify C{B{LatLon}=None}.
|
|
104
104
|
|
|
105
|
-
@return: The geodetic point (L{LatLon}) or if B{
|
|
105
|
+
@return: The geodetic point (L{LatLon}) or if C{B{LatLon} is None},
|
|
106
106
|
an L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)}
|
|
107
107
|
with C{C} and C{M} if available.
|
|
108
108
|
|
|
@@ -175,20 +175,18 @@ class LatLon(LatLonEllipsoidalBaseDI):
|
|
|
175
175
|
self._iterations = Number_(limit, name=_limit_, low=4, high=1000) + 1
|
|
176
176
|
|
|
177
177
|
def toCartesian(self, **Cartesian_datum_kwds): # PYCHOK Cartesian=Cartesian, datum=None
|
|
178
|
-
'''Convert this point to C{Vincenty}-based cartesian (ECEF)
|
|
179
|
-
coordinates.
|
|
178
|
+
'''Convert this point to C{Vincenty}-based cartesian (ECEF) coordinates.
|
|
180
179
|
|
|
181
180
|
@kwarg Cartesian_datum_kwds: Optional L{Cartesian}, B{C{datum}} and other
|
|
182
181
|
keyword arguments, ignored if C{B{Cartesian}=None}. Use
|
|
183
182
|
C{B{Cartesian}=...} to override this L{Cartesian} class
|
|
184
183
|
or specify C{B{Cartesian}=None}.
|
|
185
184
|
|
|
186
|
-
@return: The cartesian point (L{Cartesian}) or if B{
|
|
187
|
-
|
|
188
|
-
C
|
|
185
|
+
@return: The cartesian point (L{Cartesian}) or if C{B{Cartesian} is None},
|
|
186
|
+
an L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)} with
|
|
187
|
+
C{C} and C{M} if available.
|
|
189
188
|
|
|
190
|
-
@raise TypeError: Invalid B{C{Cartesian}}, B{C{datum}} or other
|
|
191
|
-
B{C{Cartesian_datum_kwds}}.
|
|
189
|
+
@raise TypeError: Invalid B{C{Cartesian}}, B{C{datum}} or other B{C{Cartesian_datum_kwds}}.
|
|
192
190
|
'''
|
|
193
191
|
kwds = _xkwds(Cartesian_datum_kwds, Cartesian=Cartesian,
|
|
194
192
|
datum=self.datum)
|
|
@@ -199,12 +197,11 @@ class LatLon(LatLonEllipsoidalBaseDI):
|
|
|
199
197
|
|
|
200
198
|
@raise TypeError: The B{C{other}} point is not L{LatLon}.
|
|
201
199
|
|
|
202
|
-
@raise ValueError: If this and the B{C{other}} point's L{Datum}
|
|
203
|
-
|
|
200
|
+
@raise ValueError: If this and the B{C{other}} point's L{Datum} ellipsoids are
|
|
201
|
+
not compatible.
|
|
204
202
|
|
|
205
|
-
@raise VincentyError: Vincenty fails to converge for the current
|
|
206
|
-
L{LatLon.epsilon} and L{LatLon.iterations}
|
|
207
|
-
limits.
|
|
203
|
+
@raise VincentyError: Vincenty fails to converge for the current limits, see
|
|
204
|
+
L{epsilon<LatLon.epsilon>} and L{iterations<LatLon.iterations>}.
|
|
208
205
|
'''
|
|
209
206
|
E = self.ellipsoid()
|
|
210
207
|
f = E.f
|