pygeodesy 24.7.24__py2.py3-none-any.whl → 24.8.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.7.24.dist-info → PyGeodesy-24.8.24.dist-info}/METADATA +20 -19
- {PyGeodesy-24.7.24.dist-info → PyGeodesy-24.8.24.dist-info}/RECORD +57 -57
- {PyGeodesy-24.7.24.dist-info → PyGeodesy-24.8.24.dist-info}/WHEEL +1 -1
- pygeodesy/__init__.py +26 -27
- pygeodesy/auxilats/auxAngle.py +2 -2
- pygeodesy/auxilats/auxDST.py +3 -3
- pygeodesy/azimuthal.py +4 -4
- pygeodesy/basics.py +3 -3
- pygeodesy/cartesianBase.py +6 -6
- pygeodesy/constants.py +11 -11
- pygeodesy/css.py +5 -5
- pygeodesy/ellipsoidalBase.py +18 -15
- pygeodesy/ellipsoidalExact.py +2 -2
- pygeodesy/ellipsoidalGeodSolve.py +2 -2
- pygeodesy/ellipsoidalKarney.py +2 -2
- pygeodesy/ellipsoidalNvector.py +2 -2
- pygeodesy/ellipsoidalVincenty.py +7 -6
- pygeodesy/ellipsoids.py +3 -3
- pygeodesy/epsg.py +3 -3
- pygeodesy/fmath.py +2 -1
- pygeodesy/formy.py +2 -2
- pygeodesy/fsums.py +4 -4
- pygeodesy/gars.py +66 -58
- pygeodesy/geodesici.py +4 -10
- pygeodesy/geodesicx/gx.py +3 -3
- pygeodesy/geodesicx/gxarea.py +3 -3
- pygeodesy/geodsolve.py +3 -3
- pygeodesy/geohash.py +491 -267
- pygeodesy/geoids.py +298 -316
- pygeodesy/heights.py +176 -194
- pygeodesy/internals.py +39 -6
- pygeodesy/interns.py +2 -3
- pygeodesy/karney.py +2 -2
- pygeodesy/latlonBase.py +14 -8
- pygeodesy/lazily.py +22 -21
- pygeodesy/ltp.py +6 -7
- pygeodesy/ltpTuples.py +12 -6
- pygeodesy/named.py +5 -4
- pygeodesy/namedTuples.py +14 -1
- pygeodesy/osgr.py +7 -7
- pygeodesy/points.py +2 -2
- pygeodesy/resections.py +7 -7
- pygeodesy/rhumb/solve.py +3 -3
- pygeodesy/simplify.py +10 -10
- pygeodesy/sphericalBase.py +3 -3
- pygeodesy/sphericalTrigonometry.py +2 -2
- pygeodesy/streprs.py +3 -3
- pygeodesy/triaxials.py +210 -204
- pygeodesy/units.py +36 -19
- pygeodesy/unitsBase.py +4 -4
- pygeodesy/utmupsBase.py +3 -3
- pygeodesy/vector2d.py +158 -51
- pygeodesy/vector3d.py +13 -52
- pygeodesy/vector3dBase.py +81 -63
- pygeodesy/webmercator.py +3 -3
- pygeodesy/wgrs.py +109 -101
- {PyGeodesy-24.7.24.dist-info → PyGeodesy-24.8.24.dist-info}/top_level.txt +0 -0
pygeodesy/cartesianBase.py
CHANGED
|
@@ -43,7 +43,7 @@ from pygeodesy.vector3d import Vector3d, _xyzhdlln4
|
|
|
43
43
|
# from math import atan2, degrees, fabs, radians, sqrt # from .fmath, .utily
|
|
44
44
|
|
|
45
45
|
__all__ = _ALL_LAZY.cartesianBase
|
|
46
|
-
__version__ = '24.
|
|
46
|
+
__version__ = '24.08.18'
|
|
47
47
|
|
|
48
48
|
_r_ = 'r'
|
|
49
49
|
_theta_ = 'theta'
|
|
@@ -300,7 +300,7 @@ class CartesianBase(Vector3d):
|
|
|
300
300
|
coordinates I{at height} in C{meter}, conventionally.
|
|
301
301
|
|
|
302
302
|
@note: This cartesian's coordinates are returned if B{C{earth}} and this
|
|
303
|
-
datum or B{C{
|
|
303
|
+
datum or B{C{height}} and/or this height are C{None} or undefined.
|
|
304
304
|
|
|
305
305
|
@note: Include keyword argument C{B{datum}=None} if class B{C{Cartesian}}
|
|
306
306
|
does not accept a B{C{datum}} keyword agument.
|
|
@@ -342,9 +342,9 @@ class CartesianBase(Vector3d):
|
|
|
342
342
|
I{overriding} this datum (L{Datum}, L{Ellipsoid},
|
|
343
343
|
L{Ellipsoid2}, L{a_f2Tuple}, L{Triaxial}, L{Triaxial_},
|
|
344
344
|
L{JacobiConformal} or C{meter}, conventionally).
|
|
345
|
-
@kwarg normal: If C{True} the projection is the nearest point on the
|
|
345
|
+
@kwarg normal: If C{True}, the projection is the nearest point on the
|
|
346
346
|
ellipsoid's surface, otherwise the intersection of the
|
|
347
|
-
radial line to the ellipsoid's center and
|
|
347
|
+
radial line to the ellipsoid's center and surface C{bool}).
|
|
348
348
|
@kwarg Cartesian_and_kwds: Optional C{B{Cartesian}=None} class to return
|
|
349
349
|
the I{projection} and additional B{C{Cartesian}} keyword
|
|
350
350
|
arguments.
|
|
@@ -437,7 +437,7 @@ class CartesianBase(Vector3d):
|
|
|
437
437
|
# <https://GitHub.com/pbrod/nvector>/src/nvector/core.py>
|
|
438
438
|
# _equation23 and <https://www.NavLab.net/nvector>
|
|
439
439
|
E = datum.ellipsoid
|
|
440
|
-
x, y, z = self.
|
|
440
|
+
x, y, z = self.xyz3
|
|
441
441
|
|
|
442
442
|
# Kenneth Gade eqn 23
|
|
443
443
|
p = hypot2(x, y) * E.a2_
|
|
@@ -836,7 +836,7 @@ class CartesianBase(Vector3d):
|
|
|
836
836
|
# if inverse and d != _WGS84:
|
|
837
837
|
# raise _ValueError(inverse=inverse, datum=d,
|
|
838
838
|
# txt_not_=_WGS84.name)
|
|
839
|
-
xyz = transform.transform(*self.
|
|
839
|
+
xyz = transform.transform(*self.xyz3, inverse=inverse)
|
|
840
840
|
c = self.dup(xyz=xyz, datum=datum or self.datum)
|
|
841
841
|
return c
|
|
842
842
|
|
pygeodesy/constants.py
CHANGED
|
@@ -17,14 +17,14 @@ from pygeodesy.interns import _INF_, _NAN_, _UNDER_
|
|
|
17
17
|
# from pygeodesy.streprs import Fmt # from .unitsBase
|
|
18
18
|
from pygeodesy.unitsBase import Float, Int, Radius, _ALL_LAZY, Fmt
|
|
19
19
|
|
|
20
|
-
from math import fabs, isinf, isnan, pi as
|
|
20
|
+
from math import fabs, isinf, isnan, pi as _pi, sqrt
|
|
21
21
|
try:
|
|
22
22
|
from math import inf as _inf, nan as _nan # PYCHOK Python 3+
|
|
23
23
|
except ImportError: # Python 2-
|
|
24
24
|
_inf, _nan = float(_INF_), float(_NAN_)
|
|
25
25
|
|
|
26
26
|
__all__ = _ALL_LAZY.constants
|
|
27
|
-
__version__ = '24.
|
|
27
|
+
__version__ = '24.08.18'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
def _copysign_0_0(y):
|
|
@@ -242,7 +242,7 @@ _EPStol = _Float(_EPStol =_EPSqrt * _0_1) # PYCHOK = 1.49011611938e5-09 == sqr
|
|
|
242
242
|
_89_999_ = _Float(_89_999_= EPS1 * _90_0) # just below 90.0
|
|
243
243
|
# <https://Numbers.Computation.Free.FR/Constants/Miscellaneous/digits.html>
|
|
244
244
|
_1__90 = _Float(_1__90 =_1_0 / _90_0) # PYCHOK = 0.011_111_111_111_111_111_111_111_111_111_111_111_111_111_111_11111
|
|
245
|
-
_2__PI = _Float(_2__PI =_2_0 /
|
|
245
|
+
_2__PI = _Float(_2__PI =_2_0 / _pi) # PYCHOK = 0.636_619_772_367_581_343_075_535_053_490_057_448_137_838_582_96182
|
|
246
246
|
|
|
247
247
|
_1_16th = _Float(_1_16th =_1_0 / _16_0) # PYCHOK in .ellipsoids, .karney
|
|
248
248
|
_1_64th = _Float(_1_64th =_1_0 / 64) # PYCHOK in .elliptic, pow(2.0, -6)
|
|
@@ -261,14 +261,14 @@ NAN = Float(NAN =_nan) # PYCHOK Not-A-Number, see function L{isnan}, NOT _
|
|
|
261
261
|
NEG0 = Float(NEG0=_N_0_0) # PYCHOK NEGative 0.0, see function L{isneg0}, NOT _Float!
|
|
262
262
|
NINF = Float(NINF=-INF) # PYCHOK Negative INFinity, NOT _Float!
|
|
263
263
|
|
|
264
|
-
PI = _Float(PI =
|
|
265
|
-
PI2 = _Float(PI2 =
|
|
266
|
-
PI_2 = _Float(PI_2 =
|
|
267
|
-
PI3 = _Float(PI3 =
|
|
268
|
-
PI3_2 = _Float(PI3_2=
|
|
269
|
-
PI_3 = _Float(PI_3 =
|
|
270
|
-
PI4 = _Float(PI4 =
|
|
271
|
-
PI_4 = _Float(PI_4 =
|
|
264
|
+
PI = _Float(PI =_pi) # 3.1415_9265_3589_7932_3846_2643_3832_795
|
|
265
|
+
PI2 = _Float(PI2 =_pi * _2_0) # PYCHOK Two PI, M{PI * 2} aka I{Tau}
|
|
266
|
+
PI_2 = _Float(PI_2 =_pi / _2_0) # PYCHOK Half PI, M{PI / 2}
|
|
267
|
+
PI3 = _Float(PI3 =_pi * _3_0) # PYCHOK Three PI, M{PI * 3}
|
|
268
|
+
PI3_2 = _Float(PI3_2=_pi * _1_5) # PYCHOK PI and a half, M{PI * 3 / 2}
|
|
269
|
+
PI_3 = _Float(PI_3 =_pi / _3_0) # PYCHOK One third PI, M{PI / 3}
|
|
270
|
+
PI4 = _Float(PI4 =_pi * _4_0) # PYCHOK Four PI, M{PI * 4}
|
|
271
|
+
PI_4 = _Float(PI_4 =_pi / _4_0) # PYCHOK Quarter PI, M{PI / 4}
|
|
272
272
|
|
|
273
273
|
R_MA = _Radius(R_MA=6378137.0) # PYCHOK equatorial earth radius (C{meter}), WGS84, EPSG:3785
|
|
274
274
|
R_MB = _Radius(R_MB=6356752.3) # PYCHOK polar earth radius (C{meter}), WGS84, EPSG:3785
|
pygeodesy/css.py
CHANGED
|
@@ -27,13 +27,13 @@ from pygeodesy.namedTuples import EasNor2Tuple, EasNor3Tuple, \
|
|
|
27
27
|
from pygeodesy.props import deprecated_Property_RO, Property, \
|
|
28
28
|
Property_RO, _update_all
|
|
29
29
|
from pygeodesy.streprs import Fmt, _fstrENH2, _fstrLL0, _xzipairs
|
|
30
|
-
from pygeodesy.units import
|
|
30
|
+
from pygeodesy.units import Azimuth, Degrees, Easting, Height, _heigHt, \
|
|
31
31
|
Lat_, Lon_, Northing, Scalar
|
|
32
32
|
|
|
33
33
|
# from math import fabs # from .karney
|
|
34
34
|
|
|
35
35
|
__all__ = _ALL_LAZY.css
|
|
36
|
-
__version__ = '24.
|
|
36
|
+
__version__ = '24.07.25'
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
def _CS0(cs0):
|
|
@@ -578,7 +578,7 @@ class EasNorAziRk4Tuple(_NamedTuple):
|
|
|
578
578
|
C{reciprocal} of azimuthal northing scale, both in C{degrees}.
|
|
579
579
|
'''
|
|
580
580
|
_Names_ = (_easting_, _northing_, _azimuth_, _reciprocal_)
|
|
581
|
-
_Units_ = ( Easting, Northing,
|
|
581
|
+
_Units_ = ( Easting, Northing, Azimuth, Scalar)
|
|
582
582
|
|
|
583
583
|
|
|
584
584
|
class EasNorAziRkEqu6Tuple(_NamedTuple):
|
|
@@ -589,7 +589,7 @@ class EasNorAziRkEqu6Tuple(_NamedTuple):
|
|
|
589
589
|
C{equatorarc} and C{equatorazimuth}, all in C{degrees}.
|
|
590
590
|
'''
|
|
591
591
|
_Names_ = EasNorAziRk4Tuple._Names_ + ('equatorarc', 'equatorazimuth')
|
|
592
|
-
_Units_ = EasNorAziRk4Tuple._Units_ + ( Degrees,
|
|
592
|
+
_Units_ = EasNorAziRk4Tuple._Units_ + ( Degrees, Azimuth)
|
|
593
593
|
|
|
594
594
|
|
|
595
595
|
class LatLonAziRk4Tuple(_NamedTuple):
|
|
@@ -598,7 +598,7 @@ class LatLonAziRk4Tuple(_NamedTuple):
|
|
|
598
598
|
C{reciprocal} the reciprocal of azimuthal northing scale.
|
|
599
599
|
'''
|
|
600
600
|
_Names_ = (_lat_, _lon_, _azimuth_, _reciprocal_)
|
|
601
|
-
_Units_ = ( Lat_, Lon_,
|
|
601
|
+
_Units_ = ( Lat_, Lon_, Azimuth, Scalar)
|
|
602
602
|
|
|
603
603
|
|
|
604
604
|
def toCss(latlon, cs0=None, height=None, Css=Css, **name):
|
pygeodesy/ellipsoidalBase.py
CHANGED
|
@@ -35,7 +35,7 @@ from pygeodesy.units import Epoch, _isDegrees, Radius_, _1mm as _TOL_M
|
|
|
35
35
|
# from math import fabs # from .latlonBase
|
|
36
36
|
|
|
37
37
|
__all__ = _ALL_LAZY.ellipsoidalBase
|
|
38
|
-
__version__ = '24.
|
|
38
|
+
__version__ = '24.08.14'
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class CartesianEllipsoidalBase(CartesianBase):
|
|
@@ -111,7 +111,7 @@ class CartesianEllipsoidalBase(CartesianBase):
|
|
|
111
111
|
C{Vector3Tuple} or C{Vector4Tuple}).
|
|
112
112
|
@arg radius2: Radius of the second sphere or circle (same units as this and
|
|
113
113
|
the B{C{other}} point's coordinates).
|
|
114
|
-
@kwarg sphere: If C{True} compute the center and radius of the intersection
|
|
114
|
+
@kwarg sphere: If C{True}, compute the center and radius of the intersection
|
|
115
115
|
of two I{spheres}. If C{False}, ignore the C{z}-component and
|
|
116
116
|
compute the intersection of two I{circles} (C{bool}).
|
|
117
117
|
@kwarg Vector: Class to return intersections (C{Cartesian}, L{Vector3d} or
|
|
@@ -527,7 +527,7 @@ class LatLonEllipsoidalBase(LatLonBase):
|
|
|
527
527
|
point is computed as the C{destination} along that bearing at
|
|
528
528
|
about 1.5 times the distance from the start point to an initial
|
|
529
529
|
gu-/estimate of the intersection point (and between 1/8 and 3/8
|
|
530
|
-
of the authalic earth perimeter).
|
|
530
|
+
of the C{authalic} earth perimeter).
|
|
531
531
|
|
|
532
532
|
@see: I{Karney's} U{intersect.cpp<https://SourceForge.net/p/geographiclib/
|
|
533
533
|
discussion/1026621/thread/21aaff9f/>}, U{The B{ellipsoidal} case<https://
|
|
@@ -659,7 +659,7 @@ class LatLonEllipsoidalBase(LatLonBase):
|
|
|
659
659
|
|
|
660
660
|
@arg point1: Start point (C{LatLon}).
|
|
661
661
|
@arg point2: End point (C{LatLon}).
|
|
662
|
-
@kwarg within: If C{True} return the closest point I{between}
|
|
662
|
+
@kwarg within: If C{True}, return the closest point I{between}
|
|
663
663
|
B{C{point1}} and B{C{point2}}, otherwise the
|
|
664
664
|
closest point elsewhere on the geodesic (C{bool}).
|
|
665
665
|
@kwarg height: Optional height for the closest point (C{meter},
|
|
@@ -714,8 +714,8 @@ class LatLonEllipsoidalBase(LatLonBase):
|
|
|
714
714
|
I{without conversion}.
|
|
715
715
|
@kwarg epoch: Optional datum (L{Epoch}), overriding this epoch
|
|
716
716
|
I{without conversion}.
|
|
717
|
-
@kwarg reframe: Optional
|
|
718
|
-
reframe I{without conversion}.
|
|
717
|
+
@kwarg reframe: Optional reference frame (L{RefFrame}), overriding
|
|
718
|
+
this reframe I{without conversion}.
|
|
719
719
|
@kwarg sep: Optional separator (C{str}).
|
|
720
720
|
@kwarg wrap: If C{True}, wrap or I{normalize} the lat- and
|
|
721
721
|
longitude (C{bool}).
|
|
@@ -726,7 +726,8 @@ class LatLonEllipsoidalBase(LatLonBase):
|
|
|
726
726
|
@raise ParseError: Invalid B{C{strllh}}.
|
|
727
727
|
'''
|
|
728
728
|
a, b, h = _MODS.dms.parse3llh(strllh, height=height, sep=sep, wrap=wrap)
|
|
729
|
-
r = self.classof(a, b, height=h, datum=self.datum
|
|
729
|
+
r = self.classof(a, b, height=h, datum=self.datum, epoch=self.epoch,
|
|
730
|
+
reframe=self.reframe)
|
|
730
731
|
if datum not in (None, self.datum):
|
|
731
732
|
r.datum = datum
|
|
732
733
|
if epoch not in (None, self.epoch):
|
|
@@ -865,7 +866,7 @@ class LatLonEllipsoidalBase(LatLonBase):
|
|
|
865
866
|
def toOsgr(self, kTM=False, **toOsgr_kwds):
|
|
866
867
|
'''Convert this C{LatLon} point to an OSGR coordinate.
|
|
867
868
|
|
|
868
|
-
@kwarg kTM: If C{True} use I{Karney}'s Krüger method from module
|
|
869
|
+
@kwarg kTM: If C{True}, use I{Karney}'s Krüger method from module
|
|
869
870
|
L{ktm}, otherwise I{Ordinance Survery}'s recommended
|
|
870
871
|
formulation (C{bool}).
|
|
871
872
|
@kwarg toOsgr_kwds: Optional L{pygeodesy.toOsgr} keyword arguments.
|
|
@@ -1008,13 +1009,15 @@ class LatLonEllipsoidalBase(LatLonBase):
|
|
|
1008
1009
|
|
|
1009
1010
|
@arg bearing1: Bearing at this point (compass C{degrees360}).
|
|
1010
1011
|
@arg other: Start point of the other line (C{LatLon}).
|
|
1011
|
-
@arg bearing2: Bearing at the other point (compass C{degrees360}).
|
|
1012
|
+
@arg bearing2: Bearing at the B{C{other}} point (compass C{degrees360}).
|
|
1012
1013
|
@kwarg height_wrap_tol: Optional keyword arguments C{B{height}=None},
|
|
1013
|
-
C{B{wrap}=False} and C{B{tol}}, see method L{intersection3
|
|
1014
|
+
C{B{wrap}=False} and C{B{tol}}, see method L{intersection3
|
|
1015
|
+
<pygeodesy.ellipsoidalBase.LatLonEllipsoidalBase>}.
|
|
1014
1016
|
|
|
1015
1017
|
@return: Triangulated point (C{LatLon}).
|
|
1016
1018
|
|
|
1017
|
-
@see: Method L{intersection3}
|
|
1019
|
+
@see: Method L{intersection3<pygeodesy.ellipsoidalBase.LatLonEllipsoidalBase>}
|
|
1020
|
+
for further details.
|
|
1018
1021
|
'''
|
|
1019
1022
|
if _isDegrees(bearing1) and _isDegrees(bearing2):
|
|
1020
1023
|
r = self.intersection3(bearing1, other, bearing2, **height_wrap_tol)
|
|
@@ -1034,13 +1037,13 @@ class LatLonEllipsoidalBase(LatLonBase):
|
|
|
1034
1037
|
@arg point3: Third center point (C{LatLon}).
|
|
1035
1038
|
@arg distance3: Distance to point3 (C{meter}, same units as
|
|
1036
1039
|
B{C{eps}}).
|
|
1037
|
-
@kwarg area: If C{True} compute the area overlap, otherwise the
|
|
1040
|
+
@kwarg area: If C{True}, compute the area overlap, otherwise the
|
|
1038
1041
|
perimeter intersection of the circles (C{bool}).
|
|
1039
1042
|
@kwarg eps: The required I{minimal overlap} for C{B{area}=True}
|
|
1040
1043
|
or the I{intersection margin} for C{B{area}=False}
|
|
1041
1044
|
(C{meter}, conventionally).
|
|
1042
|
-
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll
|
|
1043
|
-
|
|
1045
|
+
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll B{C{point2}}
|
|
1046
|
+
and B{C{point3}} (C{bool}).
|
|
1044
1047
|
|
|
1045
1048
|
@return: A L{Trilaterate5Tuple}C{(min, minPoint, max, maxPoint, n)}
|
|
1046
1049
|
with C{min} and C{max} in C{meter}, same units as B{C{eps}},
|
|
@@ -1049,7 +1052,7 @@ class LatLonEllipsoidalBase(LatLonBase):
|
|
|
1049
1052
|
of trilatered points found for the given B{C{eps}}.
|
|
1050
1053
|
|
|
1051
1054
|
If only a single trilaterated point is found, C{min I{is}
|
|
1052
|
-
max}, C{minPoint I{is} maxPoint} and C{n
|
|
1055
|
+
max}, C{minPoint I{is} maxPoint} and C{n=1}.
|
|
1053
1056
|
|
|
1054
1057
|
For C{B{area}=True}, C{min} and C{max} are the smallest
|
|
1055
1058
|
respectively largest I{radial} overlap found.
|
pygeodesy/ellipsoidalExact.py
CHANGED
|
@@ -24,7 +24,7 @@ from pygeodesy.points import _areaError, ispolar # PYCHOK exported
|
|
|
24
24
|
# from math import fabs # from .karney
|
|
25
25
|
|
|
26
26
|
__all__ = _ALL_LAZY.ellipsoidalExact
|
|
27
|
-
__version__ = '24.
|
|
27
|
+
__version__ = '24.08.13'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class Cartesian(CartesianEllipsoidalBase):
|
|
@@ -252,7 +252,7 @@ def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
|
|
252
252
|
@arg point: Reference point (C{LatLon}).
|
|
253
253
|
@arg point1: Start point of the geodesic (C{LatLon}).
|
|
254
254
|
@arg point2: End point of the geodesic (C{LatLon}).
|
|
255
|
-
@kwarg within: If C{True} return the closest point I{between}
|
|
255
|
+
@kwarg within: If C{True}, return the closest point I{between}
|
|
256
256
|
B{C{point1}} and B{C{point2}}, otherwise the
|
|
257
257
|
closest point elsewhere on the geodesic (C{bool}).
|
|
258
258
|
@kwarg height: Optional height for the closest point (C{meter},
|
|
@@ -24,7 +24,7 @@ from pygeodesy.points import _areaError, ispolar # PYCHOK exported
|
|
|
24
24
|
# from math import fabs # from .karney
|
|
25
25
|
|
|
26
26
|
__all__ = _ALL_LAZY.ellipsoidalGeodSolve
|
|
27
|
-
__version__ = '24.
|
|
27
|
+
__version__ = '24.08.13'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class Cartesian(CartesianEllipsoidalBase):
|
|
@@ -244,7 +244,7 @@ def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
|
|
244
244
|
@arg point: Reference point (C{LatLon}).
|
|
245
245
|
@arg point1: Start point of the geodesic (C{LatLon}).
|
|
246
246
|
@arg point2: End point of the geodesic (C{LatLon}).
|
|
247
|
-
@kwarg within: If C{True} return the closest point I{between}
|
|
247
|
+
@kwarg within: If C{True}, return the closest point I{between}
|
|
248
248
|
B{C{point1}} and B{C{point2}}, otherwise the
|
|
249
249
|
closest point elsewhere on the geodesic (C{bool}).
|
|
250
250
|
@kwarg height: Optional height for the closest point (C{meter},
|
pygeodesy/ellipsoidalKarney.py
CHANGED
|
@@ -42,7 +42,7 @@ from pygeodesy.props import deprecated_method, Property_RO
|
|
|
42
42
|
# from math import fabs # from .karney
|
|
43
43
|
|
|
44
44
|
__all__ = _ALL_LAZY.ellipsoidalKarney
|
|
45
|
-
__version__ = '24.
|
|
45
|
+
__version__ = '24.08.13'
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
class Cartesian(CartesianEllipsoidalBase):
|
|
@@ -279,7 +279,7 @@ def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
|
|
279
279
|
@arg point: Reference point (C{LatLon}).
|
|
280
280
|
@arg point1: Start point of the geodesic (C{LatLon}).
|
|
281
281
|
@arg point2: End point of the geodesic (C{LatLon}).
|
|
282
|
-
@kwarg within: If C{True} return the closest point I{between}
|
|
282
|
+
@kwarg within: If C{True}, return the closest point I{between}
|
|
283
283
|
B{C{point1}} and B{C{point2}}, otherwise the
|
|
284
284
|
closest point elsewhere on the geodesic (C{bool}).
|
|
285
285
|
@kwarg height: Optional height for the closest point (C{meter},
|
pygeodesy/ellipsoidalNvector.py
CHANGED
|
@@ -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.
|
|
51
|
+
__version__ = '24.08.13'
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
class Ned(_Ned):
|
|
@@ -555,7 +555,7 @@ def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
|
|
555
555
|
@arg point: Reference point (C{LatLon}).
|
|
556
556
|
@arg point1: Start point of the geodesic (C{LatLon}).
|
|
557
557
|
@arg point2: End point of the geodesic (C{LatLon}).
|
|
558
|
-
@kwarg within: If C{True} return the closest point I{between}
|
|
558
|
+
@kwarg within: If C{True}, return the closest point I{between}
|
|
559
559
|
B{C{point1}} and B{C{point2}}, otherwise the
|
|
560
560
|
closest point elsewhere on the geodesic (C{bool}).
|
|
561
561
|
@kwarg height: Optional height for the closest point (C{meter},
|
pygeodesy/ellipsoidalVincenty.py
CHANGED
|
@@ -59,7 +59,7 @@ from pygeodesy.errors import _and, _ValueError, _xkwds
|
|
|
59
59
|
from pygeodesy.fmath import Fpolynomial, hypot, hypot1
|
|
60
60
|
from pygeodesy.interns import _ambiguous_, _antipodal_, _COLONSPACE_, \
|
|
61
61
|
_to_, _SPACE_, _limit_ # PYCHOK used!
|
|
62
|
-
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
62
|
+
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
63
63
|
from pygeodesy.namedTuples import Destination2Tuple, Destination3Tuple, \
|
|
64
64
|
Distance3Tuple
|
|
65
65
|
from pygeodesy.points import Fmt, ispolar # PYCHOK exported
|
|
@@ -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__ = '24.
|
|
75
|
+
__version__ = '24.08.13'
|
|
76
76
|
|
|
77
77
|
_antipodal_to_ = _SPACE_(_antipodal_, _to_)
|
|
78
78
|
|
|
@@ -510,7 +510,7 @@ def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
|
|
510
510
|
@arg point: Reference point (C{LatLon}).
|
|
511
511
|
@arg point1: Start point of the geodesic (C{LatLon}).
|
|
512
512
|
@arg point2: End point of the geodesic (C{LatLon}).
|
|
513
|
-
@kwarg within: If C{True} return the closest point I{between}
|
|
513
|
+
@kwarg within: If C{True}, return the closest point I{between}
|
|
514
514
|
B{C{point1}} and B{C{point2}}, otherwise the
|
|
515
515
|
closest point elsewhere on the geodesic (C{bool}).
|
|
516
516
|
@kwarg height: Optional height for the closest point (C{meter},
|
|
@@ -560,9 +560,10 @@ def perimeterOf(points, **closed_datum_wrap):
|
|
|
560
560
|
return _MODS.ellipsoidalExact.perimeterOf(points, **closed_datum_wrap)
|
|
561
561
|
|
|
562
562
|
|
|
563
|
-
__all__ +=
|
|
564
|
-
|
|
565
|
-
|
|
563
|
+
__all__ += _ALL_DOCS(Cartesian, LatLon, intersecant2, # from .ellipsoidalBaseDI
|
|
564
|
+
intersection3, intersections2, ispolar, # from .points
|
|
565
|
+
nearestOn,
|
|
566
|
+
areaOf, perimeterOf) # DEPRECATED
|
|
566
567
|
|
|
567
568
|
# **) MIT License
|
|
568
569
|
#
|
pygeodesy/ellipsoids.py
CHANGED
|
@@ -93,7 +93,7 @@ from pygeodesy.utily import atan1, atan1d, atan2b, degrees90, m2radians, radians
|
|
|
93
93
|
from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan
|
|
94
94
|
|
|
95
95
|
__all__ = _ALL_LAZY.ellipsoids
|
|
96
|
-
__version__ = '24.07.
|
|
96
|
+
__version__ = '24.07.25'
|
|
97
97
|
|
|
98
98
|
_f_0_0 = Float(f =_0_0) # zero flattening
|
|
99
99
|
_f__0_0 = Float(f_=_0_0) # zero inverse flattening
|
|
@@ -1040,7 +1040,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1040
1040
|
_MODS.geodesicw._wrapped.Geodesic)
|
|
1041
1041
|
except ImportError:
|
|
1042
1042
|
pass
|
|
1043
|
-
return t # overwrite
|
|
1043
|
+
return t # overwrite property_ROver
|
|
1044
1044
|
|
|
1045
1045
|
@property_RO
|
|
1046
1046
|
def geodesicw(self):
|
|
@@ -1523,7 +1523,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1523
1523
|
'''(INTERNAL) Get all C{Rhumb...} classes, I{once}.
|
|
1524
1524
|
'''
|
|
1525
1525
|
p = _MODS.rhumb
|
|
1526
|
-
return (p.aux_.RhumbAux, # overwrite
|
|
1526
|
+
return (p.aux_.RhumbAux, # overwrite property_ROver
|
|
1527
1527
|
p.ekx.Rhumb, p.solve.RhumbSolve)
|
|
1528
1528
|
|
|
1529
1529
|
@property
|
pygeodesy/epsg.py
CHANGED
|
@@ -17,7 +17,7 @@ including coverage of UPS as zone C{0}.
|
|
|
17
17
|
from pygeodesy.basics import isint, isstr, _xinstanceof
|
|
18
18
|
from pygeodesy.errors import _ValueError
|
|
19
19
|
from pygeodesy.interns import NN, _N_, _NS_, _S_, _SPACE_
|
|
20
|
-
from pygeodesy.lazily import
|
|
20
|
+
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY
|
|
21
21
|
from pygeodesy.namedTuples import UtmUps2Tuple
|
|
22
22
|
from pygeodesy.props import Property_RO
|
|
23
23
|
from pygeodesy.streprs import Fmt
|
|
@@ -28,7 +28,7 @@ from pygeodesy.utmupsBase import _to3zBhp, _UPS_ZONE, _UTM_ZONE_MIN, \
|
|
|
28
28
|
_UTM_ZONE_MAX, _UTMUPS_ZONE_INVALID
|
|
29
29
|
|
|
30
30
|
__all__ = _ALL_LAZY.epsg
|
|
31
|
-
__version__ = '24.05
|
|
31
|
+
__version__ = '24.08.05'
|
|
32
32
|
|
|
33
33
|
# _EPSG_INVALID = _UTMUPS_ZONE_INVALID
|
|
34
34
|
_EPSG_N_01 = 32601 # EPSG code for UTM zone 01 N
|
|
@@ -219,7 +219,7 @@ def encode(zone, hemipole=NN, band=NN):
|
|
|
219
219
|
return e
|
|
220
220
|
|
|
221
221
|
|
|
222
|
-
__all__ +=
|
|
222
|
+
__all__ += _ALL_DOCS(decode2, encode)
|
|
223
223
|
|
|
224
224
|
# **) MIT License
|
|
225
225
|
#
|
pygeodesy/fmath.py
CHANGED
|
@@ -24,7 +24,7 @@ from math import fabs, sqrt # pow
|
|
|
24
24
|
import operator as _operator # in .datums, .trf, .utm
|
|
25
25
|
|
|
26
26
|
__all__ = _ALL_LAZY.fmath
|
|
27
|
-
__version__ = '24.
|
|
27
|
+
__version__ = '24.08.15'
|
|
28
28
|
|
|
29
29
|
# sqrt(2) <https://WikiPedia.org/wiki/Square_root_of_2>
|
|
30
30
|
_0_4142 = 0.41421356237309504880 # ... sqrt(2) - 1
|
|
@@ -886,6 +886,7 @@ def norm2(x, y):
|
|
|
886
886
|
or zero norm.
|
|
887
887
|
'''
|
|
888
888
|
try:
|
|
889
|
+
h = None
|
|
889
890
|
h = hypot(x, y)
|
|
890
891
|
if h:
|
|
891
892
|
x, y = (x / h), (y / h)
|
pygeodesy/formy.py
CHANGED
|
@@ -42,7 +42,7 @@ from contextlib import contextmanager
|
|
|
42
42
|
from math import asin, atan, atan2, cos, degrees, fabs, radians, sin, sqrt # pow
|
|
43
43
|
|
|
44
44
|
__all__ = _ALL_LAZY.formy
|
|
45
|
-
__version__ = '24.
|
|
45
|
+
__version__ = '24.07.29'
|
|
46
46
|
|
|
47
47
|
_RADIANS2 = (PI / _180_0)**2 # degrees- to radians-squared
|
|
48
48
|
_ratio_ = 'ratio'
|
|
@@ -962,7 +962,7 @@ def hartzell(pov, los=False, earth=_WGS84, **name_LatLon_and_kwds):
|
|
|
962
962
|
B{C{datum}} if different and to convert from B{C{earth}}.
|
|
963
963
|
|
|
964
964
|
@return: The intersection (L{Vector3d}, B{C{pov}}'s C{cartesian type} or the
|
|
965
|
-
given B{C{LatLon}} instance) with attribute C{
|
|
965
|
+
given B{C{LatLon}} instance) with attribute C{height} set to the
|
|
966
966
|
distance to the B{C{pov}}.
|
|
967
967
|
|
|
968
968
|
@raise IntersectionError: Invalid B{C{pov}} or B{C{pov}} inside the earth or
|
pygeodesy/fsums.py
CHANGED
|
@@ -47,7 +47,7 @@ from pygeodesy.streprs import Fmt, fstr, unstr
|
|
|
47
47
|
from math import ceil as _ceil, fabs, floor as _floor # PYCHOK used! .ltp
|
|
48
48
|
|
|
49
49
|
__all__ = _ALL_LAZY.fsums
|
|
50
|
-
__version__ = '24.
|
|
50
|
+
__version__ = '24.08.13'
|
|
51
51
|
|
|
52
52
|
_add_op_ = _PLUS_ # in .auxilats.auxAngle
|
|
53
53
|
_eq_op_ = _EQUAL_ * 2 # _DEQUAL_
|
|
@@ -1970,8 +1970,8 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase
|
|
|
1970
1970
|
def signOf(self, res=True):
|
|
1971
1971
|
'''Determine the sign of this instance.
|
|
1972
1972
|
|
|
1973
|
-
@kwarg res: If C{True} consider, otherwise
|
|
1974
|
-
|
|
1973
|
+
@kwarg res: If C{True}, consider, otherwise ignore
|
|
1974
|
+
the residual (C{bool}).
|
|
1975
1975
|
|
|
1976
1976
|
@return: The sign (C{int}, -1, 0 or +1).
|
|
1977
1977
|
'''
|
|
@@ -1992,7 +1992,7 @@ class Fsum(_Named): # sync __methods__ with .vector3dBase.Vector3dBase
|
|
|
1992
1992
|
def toStr(self, lenc=True, **prec_sep_fmt): # PYCHOK signature
|
|
1993
1993
|
'''Return this C{Fsum} instance as string.
|
|
1994
1994
|
|
|
1995
|
-
@kwarg lenc: If C{True} include the current C{[len]} of this
|
|
1995
|
+
@kwarg lenc: If C{True}, include the current C{[len]} of this
|
|
1996
1996
|
L{Fsum} enclosed in I{[brackets]} (C{bool}).
|
|
1997
1997
|
@kwarg prec_sep_fmt: Optional keyword arguments for method
|
|
1998
1998
|
L{Fsum2Tuple.toStr}.
|