pygeodesy 25.7.25__py2.py3-none-any.whl → 25.8.25__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/__init__.py +5 -5
- pygeodesy/cartesianBase.py +21 -20
- pygeodesy/ecef.py +324 -260
- pygeodesy/ellipsoids.py +30 -14
- pygeodesy/internals.py +3 -3
- pygeodesy/ktm.py +3 -3
- pygeodesy/latlonBase.py +4 -4
- pygeodesy/lazily.py +3 -3
- pygeodesy/nvectorBase.py +4 -4
- pygeodesy/sphericalTrigonometry.py +5 -5
- pygeodesy/vector3dBase.py +5 -3
- {pygeodesy-25.7.25.dist-info → pygeodesy-25.8.25.dist-info}/METADATA +7 -7
- {pygeodesy-25.7.25.dist-info → pygeodesy-25.8.25.dist-info}/RECORD +15 -15
- {pygeodesy-25.7.25.dist-info → pygeodesy-25.8.25.dist-info}/WHEEL +0 -0
- {pygeodesy-25.7.25.dist-info → pygeodesy-25.8.25.dist-info}/top_level.txt +0 -0
pygeodesy/ellipsoids.py
CHANGED
|
@@ -66,8 +66,9 @@ from __future__ import division as _; del _ # noqa: E702 ;
|
|
|
66
66
|
|
|
67
67
|
# from pygeodesy.albers import AlbersEqualAreaCylindrical # _MODS
|
|
68
68
|
from pygeodesy.basics import copysign0, isbool, _isin, isint, typename
|
|
69
|
-
from pygeodesy.constants import EPS, EPS0, EPS02, EPS1, INF, NINF,
|
|
70
|
-
|
|
69
|
+
from pygeodesy.constants import EPS, EPS_2, EPS0, EPS02, EPS1, INF, NINF, \
|
|
70
|
+
_over, PI_2, PI_3, PI4, R_M, R_MA, R_FM, \
|
|
71
|
+
_EPSqrt, _EPStol as _TOL, _floatuple as _T, _isfinite, \
|
|
71
72
|
_0_0s, _0_0, _0_5, _1_0, _1_EPS, _2_0, _4_0, _90_0, \
|
|
72
73
|
_0_25, _3_0 # PYCHOK used!
|
|
73
74
|
from pygeodesy.errors import _AssertionError, IntersectionError, _ValueError, _xattr, _xkwds_not
|
|
@@ -95,7 +96,7 @@ from pygeodesy.utily import atan1, atan1d, atan2b, degrees90, m2radians, radians
|
|
|
95
96
|
from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan # as _tan
|
|
96
97
|
|
|
97
98
|
__all__ = _ALL_LAZY.ellipsoids
|
|
98
|
-
__version__ = '25.
|
|
99
|
+
__version__ = '25.08.25'
|
|
99
100
|
|
|
100
101
|
_f_0_0 = Float(f =_0_0) # zero flattening
|
|
101
102
|
_f__0_0 = Float(f_=_0_0) # zero inverse flattening
|
|
@@ -1186,6 +1187,22 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1186
1187
|
|
|
1187
1188
|
return Vector4Tuple(v.x, v.y, v.z, h, iteration=i, name__=self.height4)
|
|
1188
1189
|
|
|
1190
|
+
def _heightB(self, sa, ca, z, p): # in ecef.EcefSudano, ecec.EcefVeness
|
|
1191
|
+
'''(INTERNAL) Height above ellipsoid (Bowring eqn 7) at C{lat}.
|
|
1192
|
+
'''
|
|
1193
|
+
# sa, ca = sincos2d(lat)
|
|
1194
|
+
# p = hypot(x, y) # distance to polar axis
|
|
1195
|
+
|
|
1196
|
+
# r = a / self.e2s(sa) # length of normal terminated by polar axis
|
|
1197
|
+
# h = p * ca + z * sa - (a * a / r)
|
|
1198
|
+
return (p * ca + fabs(z * sa) - self.a * self.e2s(sa)) if sa else (p - self.a)
|
|
1199
|
+
|
|
1200
|
+
@Property_RO
|
|
1201
|
+
def _heightMax(self):
|
|
1202
|
+
'''(INTERNAL) Get the height limit (C{meter}, conventionally).
|
|
1203
|
+
'''
|
|
1204
|
+
return self.a / EPS_2 # self.a * _2_EPS, about 12M lightyears
|
|
1205
|
+
|
|
1189
1206
|
def _hubeny_2(self, phi2, phi1, lam21, scaled=True, squared=True):
|
|
1190
1207
|
'''(INTERNAL) like function C{pygeodesy.flatLocal_}/C{pygeodesy.hubeny_},
|
|
1191
1208
|
returning the I{angular} distance in C{radians squared} or C{radians}
|
|
@@ -1542,7 +1559,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1542
1559
|
|
|
1543
1560
|
@deprecated_property_RO
|
|
1544
1561
|
def rhumbx(self):
|
|
1545
|
-
'''DEPRECATED on 2023.11.28, use property C{rhumbekx}.
|
|
1562
|
+
'''DEPRECATED on 2023.11.28, use property C{rhumbekx}.'''
|
|
1546
1563
|
return self.rhumbekx
|
|
1547
1564
|
|
|
1548
1565
|
def Rlat(self, lat):
|
|
@@ -1587,16 +1604,15 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1587
1604
|
|
|
1588
1605
|
@see: Method L{roc2_} and class L{EcefYou}.
|
|
1589
1606
|
'''
|
|
1590
|
-
if
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
n = self.a2_b / fabs(sa)
|
|
1607
|
+
if sa and self.f: # .isEllipsoidal
|
|
1608
|
+
if ca is None:
|
|
1609
|
+
r = self.e2s2(sa) # see .roc2_ and _EcefBase._forward
|
|
1610
|
+
n = sqrt(self.a2 / r) if r > EPS02 else _0_0
|
|
1611
|
+
elif ca: # derived from EcefYou.forward
|
|
1612
|
+
h = hypot(ca, self.b_a * sa)
|
|
1613
|
+
n = self.a / h
|
|
1614
|
+
else:
|
|
1615
|
+
n = self.a2_b / fabs(sa)
|
|
1600
1616
|
else:
|
|
1601
1617
|
n = self.a
|
|
1602
1618
|
return n
|
pygeodesy/internals.py
CHANGED
|
@@ -76,7 +76,7 @@ class _MODS_Base(object):
|
|
|
76
76
|
return b
|
|
77
77
|
|
|
78
78
|
@_Property_RO
|
|
79
|
-
def bits_machine2(self):
|
|
79
|
+
def bits_machine2(self): # in test/bases.py
|
|
80
80
|
'''Get platform 2-list C{[bits, machine]}, I{once}.
|
|
81
81
|
'''
|
|
82
82
|
import platform as p
|
|
@@ -686,7 +686,7 @@ def _versions(sep=_SPACE_):
|
|
|
686
686
|
|
|
687
687
|
|
|
688
688
|
__all__ = tuple(map(typename, (machine, print_, printf, typename)))
|
|
689
|
-
__version__ = '25.
|
|
689
|
+
__version__ = '25.08.18'
|
|
690
690
|
|
|
691
691
|
if __name__ == _DMAIN_:
|
|
692
692
|
|
|
@@ -699,7 +699,7 @@ if __name__ == _DMAIN_:
|
|
|
699
699
|
_main()
|
|
700
700
|
|
|
701
701
|
# % python3 -m pygeodesy.internals
|
|
702
|
-
# pygeodesy 25.
|
|
702
|
+
# pygeodesy 25.8.18 Python 3.13.5 64bit arm64 macOS 15.6 _isfrozen False isLazy 1
|
|
703
703
|
|
|
704
704
|
# **) MIT License
|
|
705
705
|
#
|
pygeodesy/ktm.py
CHANGED
|
@@ -62,11 +62,11 @@ from pygeodesy.props import property_doc_, Property, Property_RO, \
|
|
|
62
62
|
from pygeodesy.units import Degrees, Scalar_, _1mm as _TOL_10 # PYCHOK used!
|
|
63
63
|
from pygeodesy.utily import atan1d, atan2, _loneg, sincos2, sincos2d_
|
|
64
64
|
|
|
65
|
-
from cmath import polar
|
|
65
|
+
from cmath import polar as _polar
|
|
66
66
|
from math import asinh, cos, cosh, degrees, fabs, sin, sinh, sqrt, tanh
|
|
67
67
|
|
|
68
68
|
__all__ = _ALL_LAZY.ktm
|
|
69
|
-
__version__ = '25.
|
|
69
|
+
__version__ = '25.08.18'
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
class KTMError(_ValueError):
|
|
@@ -476,7 +476,7 @@ def _Cyxgk4(E, xi_, eta_, C):
|
|
|
476
476
|
|
|
477
477
|
# Gauss-Schreiber to Gauss-Krueger TM
|
|
478
478
|
# C{cmath.polar} handles INF, NAN, etc.
|
|
479
|
-
k, g =
|
|
479
|
+
k, g = _polar(c)
|
|
480
480
|
g = degrees(g)
|
|
481
481
|
else: # E.isSpherical
|
|
482
482
|
g, k = _0_0, _1_0
|
pygeodesy/latlonBase.py
CHANGED
|
@@ -33,7 +33,7 @@ from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
|
33
33
|
from pygeodesy.named import _name2__, _NamedBase, Fmt
|
|
34
34
|
from pygeodesy.namedTuples import Bounds2Tuple, LatLon2Tuple, PhiLam2Tuple, \
|
|
35
35
|
Trilaterate5Tuple, Vector3Tuple
|
|
36
|
-
# from pygeodesy.nvectorBase import
|
|
36
|
+
# from pygeodesy.nvectorBase import _N_Vector # _MODS
|
|
37
37
|
from pygeodesy.props import deprecated_method, Property, Property_RO, \
|
|
38
38
|
property_RO, _update_all
|
|
39
39
|
# from pygeodesy.streprs import Fmt, hstr # from .named, _MODS
|
|
@@ -48,7 +48,7 @@ from contextlib import contextmanager
|
|
|
48
48
|
from math import asin, cos, degrees, fabs, radians
|
|
49
49
|
|
|
50
50
|
__all__ = _ALL_LAZY.latlonBase
|
|
51
|
-
__version__ = '25.
|
|
51
|
+
__version__ = '25.08.18'
|
|
52
52
|
|
|
53
53
|
_formy = _MODS.into(formy=__name__)
|
|
54
54
|
|
|
@@ -971,9 +971,9 @@ class LatLonBase(_NamedBase, _EcefLocal):
|
|
|
971
971
|
|
|
972
972
|
@property_RO
|
|
973
973
|
def _N_vector(self):
|
|
974
|
-
'''(INTERNAL) Get the C{Nvector} (C{nvectorBase.
|
|
974
|
+
'''(INTERNAL) Get the C{Nvector} (C{nvectorBase._N_Vector})
|
|
975
975
|
'''
|
|
976
|
-
_N = _MODS.nvectorBase.
|
|
976
|
+
_N = _MODS.nvectorBase._N_Vector
|
|
977
977
|
return _N(*self._n_xyz3, h=self.height, name=self.name)
|
|
978
978
|
|
|
979
979
|
@Property_RO
|
pygeodesy/lazily.py
CHANGED
|
@@ -214,8 +214,8 @@ _ALL_LAZY = _NamedEnum_RO(_name='_ALL_LAZY',
|
|
|
214
214
|
'bearingDMS', 'clipDegrees', 'clipRadians', 'compassDMS', 'compassPoint',
|
|
215
215
|
'degDMS', 'latDMS', 'latlonDMS', 'latlonDMS_', 'lonDMS', 'normDMS',
|
|
216
216
|
'parseDDDMMSS', 'parseDMS', 'parseDMS2', 'parse3llh', 'parseRad', 'precision', 'toDMS'),
|
|
217
|
-
ecef=_a('
|
|
218
|
-
'
|
|
217
|
+
ecef=_a('EcefFarrell21', 'EcefFarrell22', 'EcefKarney', 'EcefSudano', 'EcefUPC', 'EcefVeness', 'EcefYou',
|
|
218
|
+
'EcefError', 'EcefMatrix', 'Ecef9Tuple'),
|
|
219
219
|
ecefLocals=_a(), # module only
|
|
220
220
|
elevations=_a('Elevation2Tuple', 'GeoidHeight2Tuple',
|
|
221
221
|
'elevation2', 'geoidHeight2'),
|
|
@@ -510,7 +510,7 @@ class _ALL_MODS(_internals._MODS_Base):
|
|
|
510
510
|
_internals._MODS = _ALL_MODS = _ALL_MODS() # PYCHOK singleton
|
|
511
511
|
|
|
512
512
|
__all__ = _ALL_LAZY.lazily
|
|
513
|
-
__version__ = '25.
|
|
513
|
+
__version__ = '25.08.22'
|
|
514
514
|
|
|
515
515
|
|
|
516
516
|
def _ALL_OTHER(*objs):
|
pygeodesy/nvectorBase.py
CHANGED
|
@@ -38,7 +38,7 @@ from pygeodesy.vector3d import Vector3d, _xyzhdlln4
|
|
|
38
38
|
from math import degrees, fabs, sqrt
|
|
39
39
|
|
|
40
40
|
__all__ = _ALL_LAZY.nvectorBase
|
|
41
|
-
__version__ = '25.
|
|
41
|
+
__version__ = '25.08.18'
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
class NvectorBase(Vector3d): # XXX kept private
|
|
@@ -355,7 +355,7 @@ class NvectorBase(Vector3d): # XXX kept private
|
|
|
355
355
|
return self.xyz.to4Tuple(self.h)
|
|
356
356
|
|
|
357
357
|
|
|
358
|
-
class
|
|
358
|
+
class _N_Vector(NvectorBase):
|
|
359
359
|
'''(INTERNAL) Minimal, low-overhead C{n-vector}.
|
|
360
360
|
'''
|
|
361
361
|
def __init__(self, x, y, z, h=0, **name):
|
|
@@ -366,8 +366,8 @@ class _N_vector_(NvectorBase):
|
|
|
366
366
|
self.name = name
|
|
367
367
|
|
|
368
368
|
|
|
369
|
-
NorthPole =
|
|
370
|
-
SouthPole =
|
|
369
|
+
NorthPole = _N_Vector(0, 0, +1, name='NorthPole') # North pole
|
|
370
|
+
SouthPole = _N_Vector(0, 0, -1, name='SouthPole') # South pole
|
|
371
371
|
|
|
372
372
|
|
|
373
373
|
class LatLonNvectorBase(LatLonBase):
|
|
@@ -36,7 +36,7 @@ from pygeodesy.interns import _1_, _2_, _coincident_, _composite_, _colinear_, \
|
|
|
36
36
|
_point_, _SPACE_, _too_
|
|
37
37
|
from pygeodesy.latlonBase import _trilaterate5
|
|
38
38
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _ALL_OTHER
|
|
39
|
-
# from pygeodesy.nvectorBase import NvectorBase,
|
|
39
|
+
# from pygeodesy.nvectorBase import _N_Vector, NvectorBase, sumOf # _MODS
|
|
40
40
|
from pygeodesy.namedTuples import LatLon2Tuple, LatLon3Tuple, NearestOn3Tuple, \
|
|
41
41
|
Triangle7Tuple, Triangle8Tuple
|
|
42
42
|
from pygeodesy.points import ispolar, nearestOn5 as _nearestOn5, \
|
|
@@ -57,7 +57,7 @@ from pygeodesy.vector3d import sumOf, Vector3d
|
|
|
57
57
|
from math import asin, cos, degrees, fabs, radians, sin
|
|
58
58
|
|
|
59
59
|
__all__ = _ALL_LAZY.sphericalTrigonometry
|
|
60
|
-
__version__ = '25.
|
|
60
|
+
__version__ = '25.08.18'
|
|
61
61
|
|
|
62
62
|
_PI_EPS4 = PI - EPS4
|
|
63
63
|
if _PI_EPS4 >= PI:
|
|
@@ -968,10 +968,10 @@ def _intersect(start1, end1, start2, end2, height=None, wrap=False, # in.ellips
|
|
|
968
968
|
a, b = antipode_(a, b) # PYCHOK PhiLam2Tuple
|
|
969
969
|
|
|
970
970
|
else: # end point(s) or bearing(s)
|
|
971
|
-
|
|
971
|
+
_N = _MODS.nvectorBase._N_Vector
|
|
972
972
|
|
|
973
|
-
x1, d1 = _int3d2(s1, end1, wrap, _1_,
|
|
974
|
-
x2, d2 = _int3d2(s2, end2, wrap, _2_,
|
|
973
|
+
x1, d1 = _int3d2(s1, end1, wrap, _1_, _N, hs)
|
|
974
|
+
x2, d2 = _int3d2(s2, end2, wrap, _2_, _N, hs)
|
|
975
975
|
x = x1.cross(x2)
|
|
976
976
|
if x.length < EPS: # [nearly] colinear or parallel lines
|
|
977
977
|
raise IntersectionError(_colinear_)
|
pygeodesy/vector3dBase.py
CHANGED
|
@@ -19,6 +19,7 @@ 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
|
|
21
21
|
# from pygeodesy.namedTuples import Vector3Tuple # _MODS
|
|
22
|
+
# from pygeodesy.nvectorBase import _N_Vector # _MODS
|
|
22
23
|
from pygeodesy.props import deprecated_method, Property, Property_RO, \
|
|
23
24
|
property_doc_, property_RO, _update_all
|
|
24
25
|
from pygeodesy.streprs import Fmt, strs, unstr
|
|
@@ -28,7 +29,7 @@ from pygeodesy.utily import atan2, sincos2, fabs
|
|
|
28
29
|
from math import ceil as _ceil, floor as _floor, trunc as _trunc
|
|
29
30
|
|
|
30
31
|
__all__ = _ALL_LAZY.vector3dBase
|
|
31
|
-
__version__ = '
|
|
32
|
+
__version__ = '25.08.18'
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
@@ -760,9 +761,10 @@ class Vector3dBase(_NamedBase): # sync __methods__ with .fsums.Fsum
|
|
|
760
761
|
|
|
761
762
|
@Property_RO
|
|
762
763
|
def _N_vector(self):
|
|
763
|
-
'''(INTERNAL) Get the (C{nvectorBase.
|
|
764
|
+
'''(INTERNAL) Get the (C{nvectorBase._N_Vector})
|
|
764
765
|
'''
|
|
765
|
-
|
|
766
|
+
_N = _MODS.nvectorBase._N_Vector
|
|
767
|
+
return _N(*self.xyz3, name=self.name)
|
|
766
768
|
|
|
767
769
|
def _other_cmp(self, other):
|
|
768
770
|
'''(INTERNAL) Return the value for comparison.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pygeodesy
|
|
3
|
-
Version: 25.
|
|
3
|
+
Version: 25.8.25
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -8,7 +8,7 @@ Author-email: mrJean1@Gmail.com
|
|
|
8
8
|
Maintainer: Jean M. Brouwers
|
|
9
9
|
Maintainer-email: mrJean1@Gmail.com
|
|
10
10
|
License: MIT
|
|
11
|
-
Keywords: AER Albers altitude Andoyer annulus antipode area attitude Authalic auxiliary azimuth azimuthal azimuth-elevation-range bearing bank Barsky Barth beta bi-quadratic boolean cached Cagnoli cartesian Cassini Cassini-Soldner chord circle-intersections circumcenter circumcircle circumradius clip Cohen Cohen-Sutherland Collins composite conformal conic constants contact-triangle Cook Correia cosines-law coverage curvature cylindrical datum deprecation deficit development discrete distance Douglas earth east-north-up eccentricity ECEF elevation ellipsoid ellipsoidal-latitude-beta ellipsoidal-longitude-omega elliptic ENU EPSG equal-area equidistant equirectangular ETM ETRF Euclidean even-odd-rule ExactTM excess Farrell Farrell-Barth Ferrari-solution Field-Of-View flattening fma fmath footpoint footprint Forster Forster-Hormann-Popa Forsythe FOV fractional Frechet Fréchet frustum Fsum fused-multiply-add GARS geocentric GeoConvert GeodesicExact geodesy geodetic GeodSolve GeodTest geographiclib Geohash geoid geoidHeight GeoidHeights georef Girard gnomonic gons grades gradians Greiner Greiner-Hormann Hartzell Hausdorff Haversine heading hectare height Heikkinen Heron Hodgman horizon Hormann Hubeny IDW incenter incirle infix_@_operator inradius intermediate interpolate intersect intersection intersection3d intersections IntersectTool Inverse-Distance-Weighting Isometric ITRF Jacobi Jacobi-Conformal Jarque-Bera Jekel Karney Krueger Krüger kurtosis Lambert latitude law-of-cosines least-squares Lesh L_Huilier LHuilier Liang Liang-Barsky linearize Line-Of-Sight LocalCartesian local-tangent-plane local-x-y-z longitude LOS loxodrome lstsq LTP lune LV03 LV95 mean memoize memoized Mercator Meeus MGRS nearest NED Niemeyer non-finite normalize Norrdine north-east-down numpy n-vector Nvector oblate omega orthographic orthometric-height OSGB OSGR overlap parallel parallel-of-latitude Parametric path-intersection perimeter Peucker Pierlot pitch plumb Point-Of-View polar Popa POV precision-cubic-root precision-hypotenuse precision-powers precision-running-summation precision-square-root precision-summation prolate Pseudo-Mercator pygeodesy PyInstaller PyPy quartic radical radii radius Ramer Ramer-Douglas-Peucker Rectifying Reduced resect resection Rey-Jer Reumann Reumann-Witkam rhumb RhumbSolve running-linear-regression running-statistics running-stats running-summation scipy secant semi-perimeter sexagecimal simplify skewness Snellius Snellius-Pothenot Snyder Soddy Soddy-circles Soldner sphere sphere-intersections spherical-deficit spherical-excess spherical-triangle squared-quartic standard-deviation stereographic Sudano surface-area Sutherland Sutherland-Hodgman tangent-circles Terrestrial-Reference-Frame Thomas Tienstra tilt TMcoords TMExact toise transverse TransverseMercatorExact TRF triangle triangulate triaxial triaxial-ellipsoid trigonometry trilaterate trilaterate-2d trilaterate-3d TwoProduct TwoSum umbilic-point unit unroll UPS UTM UTM/UPS variance velocities Veness Vermeille viewing-frustum Vincenty Visvalingam Visvalingam-Whyatt volume volumetric Web-Mercator Welford WGRS WGS Whyatt Wildberger Witkam winding-number XYZ yaw You zenzi-cubic zenzi-quartic
|
|
11
|
+
Keywords: AER Albers altitude Andoyer annulus antipode area attitude Authalic auxiliary azimuth azimuthal azimuth-elevation-range bearing bank Barsky Barth beta bi-quadratic boolean cached Cagnoli cartesian Cassini Cassini-Soldner chord circle-intersections circumcenter circumcircle circumradius clip Cohen Cohen-Sutherland Collins composite conformal conic constants contact-triangle Cook Correia cosines-law coverage curvature cylindrical datum deprecation deficit development discrete distance Douglas earth east-north-up eccentricity ECEF elevation ellipsoid ellipsoidal-latitude-beta ellipsoidal-longitude-omega elliptic ENU EPSG equal-area equidistant equirectangular ETM ETRF Euclidean even-odd-rule ExactTM excess Farrell Farrell-Barth Ferrari-solution Field-Of-View flattening fma fmath footpoint footprint Forster Forster-Hormann-Popa Forsythe FOV fractional Frechet Fréchet frustum Fsum fused-multiply-add GARS geocentric GeoConvert GeodesicExact geodesy geodetic GeodSolve GeodTest geographiclib Geohash geoid geoidHeight GeoidHeights georef Girard gnomonic gons grades gradians Greiner Greiner-Hormann Hartzell Hausdorff Haversine heading hectare height Heikkinen Heron Hodgman horizon Hormann Hubeny IDW incenter incirle infix_@_operator inradius intermediate interpolate intersect intersection intersection3d intersections IntersectTool Inverse-Distance-Weighting Isometric ITRF Jacobi Jacobi-Conformal Jarque-Bera Jekel Karney Krueger Krüger kurtosis Lambert latitude law-of-cosines least-squares Lesh L_Huilier LHuilier Liang Liang-Barsky linearize Line-Of-Sight LocalCartesian local-tangent-plane local-x-y-z longitude LOS loxodrome lstsq LTP lune LV03 LV95 mean memoize memoized Mercator Meeus MGRS nearest NED Niemeyer non-finite normalize Norrdine north-east-down numpy n-vector Nvector oblate omega orthographic orthometric-height OSGB OSGR overlap parallel parallel-of-latitude Parametric path-intersection perimeter Peucker Pierlot pitch plumb Point-Of-View polar Popa POV precision-cubic-root precision-hypotenuse precision-powers precision-running-summation precision-square-root precision-summation prolate Pseudo-Mercator pygeodesy PyInstaller PyPy quartic radical radii radius Ramer Ramer-Douglas-Peucker Rectifying Reduced resect resection Rey-Jer Reumann Reumann-Witkam rho-theta-phi rhumb RhumbSolve running-linear-regression running-statistics running-stats running-summation scipy secant semi-perimeter sexagecimal simplify skewness Snellius Snellius-Pothenot Snyder Soddy Soddy-circles Soldner sphere sphere-intersections spherical-deficit spherical-excess spherical-polar spherical-triangle squared-quartic standard-deviation stereographic Sudano surface-area Sutherland Sutherland-Hodgman tangent-circles Terrestrial-Reference-Frame Thomas Tienstra tilt TMcoords TMExact toise transverse TransverseMercatorExact TRF triangle triangulate triaxial triaxial-ellipsoid trigonometry trilaterate trilaterate-2d trilaterate-3d TwoProduct TwoSum umbilic-point unit unroll UPS UTM UTM/UPS variance velocities Veness Vermeille viewing-frustum Vincenty Visvalingam Visvalingam-Whyatt volume volumetric Web-Mercator Welford WGRS WGS Whyatt Wildberger Witkam winding-number XYZ yaw You zenzi-cubic zenzi-quartic
|
|
12
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
13
13
|
Classifier: Environment :: Console
|
|
14
14
|
Classifier: Intended Audience :: Developers
|
|
@@ -123,7 +123,7 @@ The tests ran with Python 3.13.5 (with geographiclib_ 2.0), 3.12.7 (with geograp
|
|
|
123
123
|
scipy_ 1.14.1, GeodSolve_ 2.5, IntersectTool_ 2.5 and RhumbSolve_ 2.5), 3.11.5 (with geographiclib_ 2.0,
|
|
124
124
|
numpy_ 1.24.2 and scipy_ 1.10.1), Python 3.10.8 (with geographiclib_ 2.0, numpy_ 1.23.3, scipy_ 1.9.1,
|
|
125
125
|
GeoConvert_ 2.5, GeodSolve_ 2.5), Python 3.9.6 and Python 2.7.18 (with geographiclib_ 1.50, numpy_ 1.16.6,
|
|
126
|
-
scipy_ 1.2.2, GeoConvert_ 2.5, GeodSolve_ 2.5, IntersectTool_ 2.5 and RhumbSolve_ 2.5), all on macOS 15.
|
|
126
|
+
scipy_ 1.2.2, GeoConvert_ 2.5, GeodSolve_ 2.5, IntersectTool_ 2.5 and RhumbSolve_ 2.5), all on macOS 15.6.1
|
|
127
127
|
Sequoia in 64-bit.
|
|
128
128
|
|
|
129
129
|
All tests ran with and without ``lazy import`` for Python 3 and with command line option ``-W default``
|
|
@@ -133,7 +133,7 @@ included in the distribution files.
|
|
|
133
133
|
Python 3.13.5, 3.12.7, 3.11.5 and 3.10.8 run on Apple M4 Si (``arm64``), *natively*. Python 2.7.18 runs
|
|
134
134
|
on Intel (``x86_64``) or Intel *emulation* (\"``arm64_x86_64``\", see function `pygeodesy.machine`_).
|
|
135
135
|
|
|
136
|
-
Test coverage has been measured with coverage_ 7.6.1 using Python 3.13.
|
|
136
|
+
Test coverage has been measured with coverage_ 7.6.1 using Python 3.13.5, 3.12.7, 3.11.5 and 3.10.8. The
|
|
137
137
|
complete coverage report in HTML and a PDF summary are included in the distribution files.
|
|
138
138
|
|
|
139
139
|
The tests also ran with Python 3.13.5 (and geographiclib_ 2.0) on `Debian 12`_ in 64-bit only and with
|
|
@@ -149,7 +149,7 @@ numpy_ 1.16.3, 1.16.4, 1.16.6, 1.19.0, 1.19.4, 1.19.5 or 1.22.4 and scipy_ 1.2.1
|
|
|
149
149
|
Ubuntu 16.04, with Python 3.10.0-1, 3.9.0-5, 3.8.0-6, 3.7.2-6, 3.7.0, 3.6.2-5, 3.5.3, 2.7.13-17, 2.7.10
|
|
150
150
|
and 2.6.9 (and numpy_ 1.19.0, 1.16.5, 1.16.2, 1.15.2, 1.14.0, 1.13.1, 1.8.0rc1 or 1.6.2 and scipy_ 1.5.0),
|
|
151
151
|
PyPy_ 7.3.0 (Python 2.7.13 and 3.6.9), PyPy_ 6.0.0 (Python 2.7.13 and 3.5.3) and `Intel-Python`_ 3.5.3 (and
|
|
152
|
-
numpy_ 1.11.3) on macOS 15.0-
|
|
152
|
+
numpy_ 1.11.3) on macOS 15.0-5 Sequoia, 14.0-6.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big
|
|
153
153
|
Sur (aka 10.16), 10.15.3, 10.15.5-7 Catalina, 10.14 Mojave, 10.13.6 High Sierra and 10.12 Sierra, MacOS X
|
|
154
154
|
10.11 El Capitan and/or MacOS X 10.10 Yosemite, with Pythonista_ 3.2 (with geographiclib 1.50 or 1.49 and
|
|
155
155
|
numpy 1.8.0) on iOS 14.4.2, 11.4.1, 12.0-3 on iPad4, iPhone6, iPhone10 and/or iPhone12, with Pythonista_ 3.1
|
|
@@ -160,11 +160,11 @@ Notes
|
|
|
160
160
|
=====
|
|
161
161
|
|
|
162
162
|
All Python source code has been statically checked_ with Ruff_ using Python 3.13.5 and with PyChecker_, PyFlakes_,
|
|
163
|
-
PyCodeStyle_ (formerly Pep8) and McCabe_ using Python 2.7.18, both in 64-bit on macOS 15.
|
|
163
|
+
PyCodeStyle_ (formerly Pep8) and McCabe_ using Python 2.7.18, both in 64-bit on macOS 15.6.1 Sequoia only.
|
|
164
164
|
|
|
165
165
|
For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
|
|
166
166
|
|
|
167
|
-
*Last updated:
|
|
167
|
+
*Last updated: Aug 25, 2025.*
|
|
168
168
|
|
|
169
169
|
License
|
|
170
170
|
=======
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=
|
|
2
|
+
pygeodesy/__init__.py,sha256=SVNWIkycgnT1Zg3btfHYDEGCrQwHaGIs9o748NoxFIY,42289
|
|
3
3
|
pygeodesy/__main__.py,sha256=HpOBmuhI7yVP1FIAEugvd9Lb54kzew-nM78be0r4SC4,5597
|
|
4
4
|
pygeodesy/albers.py,sha256=mb3YbVvoBq8a7AytT0HeVxe8DGEvx1KFN2Usl2ksKwk,30908
|
|
5
5
|
pygeodesy/azimuthal.py,sha256=acwIA1B7jmg1oDpJBuFitnOVHUWRUk7Y73yI8zqIGrc,49854
|
|
6
6
|
pygeodesy/basics.py,sha256=ErpbLgHNerGPKiOIlWKdKzq6lO0dhoZjaywTnCn8PyE,32905
|
|
7
7
|
pygeodesy/booleans.py,sha256=njAJlAoVZEcQ5jp8wwyuVo8-jFPE3PFpAF3k3dQihBM,73683
|
|
8
|
-
pygeodesy/cartesianBase.py,sha256=
|
|
8
|
+
pygeodesy/cartesianBase.py,sha256=KX74yZE-fM7wHDnrV5OkAEyKwyZJy5o9VuzVjb1caZQ,45355
|
|
9
9
|
pygeodesy/clipy.py,sha256=a0azaK7YDmGDU8mVVKe2MvUiPEhqZ9XJ-9u0T1iHKbo,27779
|
|
10
10
|
pygeodesy/constants.py,sha256=usdHWtYiy8iaPXxXau2vsViL9zC8I4Jp2fziiEmp2g4,19947
|
|
11
11
|
pygeodesy/css.py,sha256=vdQax5m7BMSpr7PUyqedCSvx73ilWuhXQTp39i8FOfA,25793
|
|
12
12
|
pygeodesy/datums.py,sha256=Vp1fP7sSV1EuRbuO2scnZ3qiTZD1CvL4O12KSRlf1SU,34068
|
|
13
13
|
pygeodesy/dms.py,sha256=CKXt2EOYFBluQV5q6cFYppJl3dCvvEB_0E84J0ki6ws,42202
|
|
14
|
-
pygeodesy/ecef.py,sha256=
|
|
14
|
+
pygeodesy/ecef.py,sha256=dOnyvDCoJ1u55WzxHFe0BQsYG1dbql9HwWVOz4LMats,62577
|
|
15
15
|
pygeodesy/ecefLocals.py,sha256=zoxGUJeYX2UXzR9r0jaByrvfrrpmrvAhjyQsz433RjA,7794
|
|
16
16
|
pygeodesy/elevations.py,sha256=WrWPZNgkZX9Ys_1ij_gyE4jzdIv85JYAaR2cK3vc4gQ,10879
|
|
17
17
|
pygeodesy/ellipsoidalBase.py,sha256=UpmJfjAuC7pvN9VIxLXveAmotPVW7oL2APAJUTi34Uc,55711
|
|
@@ -21,7 +21,7 @@ pygeodesy/ellipsoidalGeodSolve.py,sha256=w5TubUdqYwvrtxfIwP2Scr1FzISq2szx1HX88TU
|
|
|
21
21
|
pygeodesy/ellipsoidalKarney.py,sha256=W_Liw5MxTqJJGsxMi50ui8grRSPKwkG2HH-Mv_mXQYk,18839
|
|
22
22
|
pygeodesy/ellipsoidalNvector.py,sha256=HLFjX6o26q2fzVCjLSL0PdEh96xhGtjfzo2V_k54j4A,30146
|
|
23
23
|
pygeodesy/ellipsoidalVincenty.py,sha256=zeTvid09NGuYJ1WJ__a3ApCBGSzX0A-Rhs8-sQXMNQQ,26273
|
|
24
|
-
pygeodesy/ellipsoids.py,sha256=
|
|
24
|
+
pygeodesy/ellipsoids.py,sha256=C6DXM7OmuxDyh6kYiRvwEW91srd7cOIpxxlO_-08EdA,108446
|
|
25
25
|
pygeodesy/elliptic.py,sha256=4MdiatI5RZuP9t2nMdmzeoqk37R2U8Ll5SeW5w2wymY,45670
|
|
26
26
|
pygeodesy/epsg.py,sha256=VIBidzAEuoBF4LdlJ4r3WtpL0Ymhru8kf4fAgfFr5ok,8220
|
|
27
27
|
pygeodesy/errors.py,sha256=OUEJ51M3c-JH1n0BBbRtPTCDX0I00rH_BQPYSRoKrqo,32043
|
|
@@ -39,20 +39,20 @@ pygeodesy/geohash.py,sha256=1P9-k9sMN-ZVFr2iWbQpFi1lg3uNmChHFCIfETkgFJU,40153
|
|
|
39
39
|
pygeodesy/geoids.py,sha256=OQvOVutr8R1CalStgxmNu2Mk3oMl4zpCY_OKh0KHpI8,86125
|
|
40
40
|
pygeodesy/hausdorff.py,sha256=KGB0CIeNkBqR0sXIbRJvcgXPrM-4Mpi2aBOqDeZjqZ0,32269
|
|
41
41
|
pygeodesy/heights.py,sha256=_Pn-6w4gGzdXCoA6m72rJm4hb-Fe2vxc8RiRRjq5iTI,41002
|
|
42
|
-
pygeodesy/internals.py,sha256=
|
|
42
|
+
pygeodesy/internals.py,sha256=2iZ2XbHjxXZnGDhHDcBu8Syi-iHCmzasOv7NbJ66fwQ,24044
|
|
43
43
|
pygeodesy/interns.py,sha256=QTP_6rStQ283DE-rL7rCAcfEffuiAXustBGkCY_DHJ0,23508
|
|
44
44
|
pygeodesy/iters.py,sha256=nKVp_LUQyTqOz_OLzY25g6-_xlKG7lmAnjKKMXESmiM,20345
|
|
45
45
|
pygeodesy/karney.py,sha256=IzWyGwX0kRpwrVFBpCzogd2Q8PLvCdCwHheE-zbCQZE,41629
|
|
46
|
-
pygeodesy/ktm.py,sha256=
|
|
47
|
-
pygeodesy/latlonBase.py,sha256=
|
|
48
|
-
pygeodesy/lazily.py,sha256=
|
|
46
|
+
pygeodesy/ktm.py,sha256=h8F_NfkgJzQ4zt24IqJeXe-E1MFdIJ3ti51IjQ8iuCs,27270
|
|
47
|
+
pygeodesy/latlonBase.py,sha256=eF8tr0fP9nc8JMGbJ0JyeFfECZyjlBJbtIchKRdU4B4,75317
|
|
48
|
+
pygeodesy/lazily.py,sha256=kFWqUcOEYzCDKk2zDMmZPTXnZIxMt4ditF9cJGmwGgQ,47620
|
|
49
49
|
pygeodesy/lcc.py,sha256=7Di2Y5VIDL5drdSce4ABWGT3MtZSosaLKd68US6788s,25786
|
|
50
50
|
pygeodesy/ltp.py,sha256=N3TMipTWKUOeZYzn3UeJJqe5J4Yk788390ohQM1ykAE,50893
|
|
51
51
|
pygeodesy/ltpTuples.py,sha256=t-n7p9A3JCVasv8LKCV4PkOTmXJZi91BkBFm8pBZM5o,59101
|
|
52
52
|
pygeodesy/mgrs.py,sha256=ZgCBH_M_YFxuFu5ukVOVetk-uftv-4GJP-QJrtoqtcU,29842
|
|
53
53
|
pygeodesy/named.py,sha256=NjRLzk0bNSJbPBaqFPjG0UagZj6MarF9O4ZQVQsyV7o,52898
|
|
54
54
|
pygeodesy/namedTuples.py,sha256=JlO8uWmR65RkT7Rdgc9knfI0-bqJeA-tm2ZKsesztVU,30598
|
|
55
|
-
pygeodesy/nvectorBase.py,sha256=
|
|
55
|
+
pygeodesy/nvectorBase.py,sha256=r-O-ErwTXqDfLg4zYqhB4IqTJc8P8rbJlMm0XfQN2Gs,29927
|
|
56
56
|
pygeodesy/osgr.py,sha256=4mFUcn1vMOju3PK1rKohPtIlJZrBGPJrcRjFl-CoxqE,30852
|
|
57
57
|
pygeodesy/points.py,sha256=2vQpgqxJiC7Cgn03pqiezTM4I-CTquv9tQZi4uYWjpw,64497
|
|
58
58
|
pygeodesy/props.py,sha256=GCBqrkMfpbHuca2Sh68WSGDplIeZLvCDDXUewyvEiqI,24600
|
|
@@ -61,7 +61,7 @@ pygeodesy/simplify.py,sha256=O04NSb0ezXM8z3lCcajXbetZuum6PURAOPYTsJ27gxI,22068
|
|
|
61
61
|
pygeodesy/solveBase.py,sha256=I2oW7zaPoVUkD7IB9Ro0paU-T1vie1lomg83f71twDY,18468
|
|
62
62
|
pygeodesy/sphericalBase.py,sha256=hq6dyeeIHBy_T0Q6PIwSvmo1U70Ir5KBeMTwQplzqHQ,32071
|
|
63
63
|
pygeodesy/sphericalNvector.py,sha256=bu0yB4PEq1cs6BS8QFqtljWpVEw7ESwq2yILOzGDuAc,54948
|
|
64
|
-
pygeodesy/sphericalTrigonometry.py,sha256=
|
|
64
|
+
pygeodesy/sphericalTrigonometry.py,sha256=hybTuf3IlNU3ETbV8Zd-XxPSE6xrYgX3dxJSrDGeY58,64398
|
|
65
65
|
pygeodesy/streprs.py,sha256=-4LErmfPLtGt1tLDBHhJam-zYq8p2Z2C5wDCMELEml4,23599
|
|
66
66
|
pygeodesy/trf.py,sha256=gpsOJVER1KhITOtyiENQ4EnRONinLkzbujsfzzxHVv8,119209
|
|
67
67
|
pygeodesy/triaxials.py,sha256=V0MSYJxRgYDhZcF7HXnu7oFzRyWJkhwc6scuNjc6VVg,64046
|
|
@@ -74,7 +74,7 @@ pygeodesy/utmups.py,sha256=31RD8l7M-vcRXU9_wnkb_PNUcKjOr1HAmwjOndjkgXE,13176
|
|
|
74
74
|
pygeodesy/utmupsBase.py,sha256=PptZ4Mm8BaDUCA8v1sK54o8idw_24kq6loAuYv0bejE,22730
|
|
75
75
|
pygeodesy/vector2d.py,sha256=7R5ciPxXEX98LmMWNqwbds8Y6vpsHKEeCzcBVDRiq6g,40305
|
|
76
76
|
pygeodesy/vector3d.py,sha256=sC7u9tgFFWoWHFxqtO-dvKVuiEzraw50TDU_QpdDbYw,43045
|
|
77
|
-
pygeodesy/vector3dBase.py,sha256=
|
|
77
|
+
pygeodesy/vector3dBase.py,sha256=KHb9JwyOWdPSfhQAlo6jImvOsAPTm-A9bud5J8EUqso,36370
|
|
78
78
|
pygeodesy/webmercator.py,sha256=z3Ft5TeHc9FoLA8zQhzTrSuShHSz0aHjanbvj53ohmo,15016
|
|
79
79
|
pygeodesy/wgrs.py,sha256=1MK72g3HsfdsvChM6rBy_auxzSvWHSoer8fEuT4LinI,15503
|
|
80
80
|
pygeodesy/auxilats/_CX_4.py,sha256=DX67nZ1E4nOis8d_wQ8tn5T-SAVNDBJH3kp9IuQc8lM,6830
|
|
@@ -113,7 +113,7 @@ pygeodesy/rhumb/aux_.py,sha256=NeHkNLS2ULh3sTb3eBTtmRih9SZNyVJKMtJj7imKkuI,16117
|
|
|
113
113
|
pygeodesy/rhumb/bases.py,sha256=P5AQyL-MTbJaO4oKH_Y7qcusQxaHoAii0hJVQ9mT7hU,54250
|
|
114
114
|
pygeodesy/rhumb/ekx.py,sha256=GMY6ik4fgiRrjek-42cpZxU3U2bdoAcY6ZcbZRckpII,24026
|
|
115
115
|
pygeodesy/rhumb/solve.py,sha256=z8z_XYObTgz7w1skNLNcLBpe-EO_r0H4sVcZGlBcWnc,24005
|
|
116
|
-
pygeodesy-25.
|
|
117
|
-
pygeodesy-25.
|
|
118
|
-
pygeodesy-25.
|
|
119
|
-
pygeodesy-25.
|
|
116
|
+
pygeodesy-25.8.25.dist-info/METADATA,sha256=S0lNNdiQn_nIwc6xpMLFuPx_g4XWcOS-Z6079gQz-Ys,20136
|
|
117
|
+
pygeodesy-25.8.25.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
|
|
118
|
+
pygeodesy-25.8.25.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
119
|
+
pygeodesy-25.8.25.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|