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/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.11.06'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class Cartesian(CartesianEllipsoidalBase):
|
|
@@ -119,30 +119,28 @@ def areaOf(points, datum=_WGS84, wrap=True):
|
|
|
119
119
|
|
|
120
120
|
|
|
121
121
|
def intersection3(start1, end1, start2, end2, height=None, wrap=False, # was=True
|
|
122
|
-
|
|
123
|
-
'''I{Iteratively} compute the intersection point of two lines, each
|
|
124
|
-
|
|
125
|
-
initial bearing from North.
|
|
122
|
+
equidistant=None, tol=_TOL_M, **LatLon_and_kwds):
|
|
123
|
+
'''I{Iteratively} compute the intersection point of two geodesic lines, each
|
|
124
|
+
given as two points or as an start point and a bearing from North.
|
|
126
125
|
|
|
127
126
|
@arg start1: Start point of the first line (L{LatLon}).
|
|
128
127
|
@arg end1: End point of the first line (L{LatLon}) or the initial bearing
|
|
129
|
-
at
|
|
128
|
+
at B{C{start1}} (compass C{degrees360}).
|
|
130
129
|
@arg start2: Start point of the second line (L{LatLon}).
|
|
131
130
|
@arg end2: End point of the second line (L{LatLon}) or the initial bearing
|
|
132
|
-
at
|
|
131
|
+
at B{C{start2}} (compass C{degrees360}).
|
|
133
132
|
@kwarg height: Optional height at the intersection (C{meter}, conventionally)
|
|
134
133
|
or C{None} for the mean height.
|
|
135
|
-
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll
|
|
136
|
-
|
|
134
|
+
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll B{C{start2}} and
|
|
135
|
+
both B{C{end*}} points (C{bool}).
|
|
137
136
|
@kwarg equidistant: An azimuthal equidistant projection (I{class} or function
|
|
138
137
|
L{pygeodesy.equidistant}) or C{None} for the preferred
|
|
139
138
|
C{B{start1}.Equidistant}.
|
|
140
139
|
@kwarg tol: Tolerance for convergence and for skew line distance and length
|
|
141
140
|
(C{meter}, conventionally).
|
|
142
|
-
@kwarg
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
ignored if C{B{LatLon} is None}.
|
|
141
|
+
@kwarg LatLon_and_kwds: Optional class C{B{LatLon}=}L{LatLon} to return the
|
|
142
|
+
intersection points and optionally, additional B{C{LatLon}}
|
|
143
|
+
keyword arguments, ignored if C{B{LatLon}=None}.
|
|
146
144
|
|
|
147
145
|
@return: An L{Intersection3Tuple}C{(point, outside1, outside2)} with C{point}
|
|
148
146
|
a B{C{LatLon}} or if C{B{LatLon} is None}, a L{LatLon4Tuple}C{(lat,
|
|
@@ -154,23 +152,23 @@ def intersection3(start1, end1, start2, end2, height=None, wrap=False, # was=Tr
|
|
|
154
152
|
@raise TypeError: Invalid or non-ellipsoidal B{C{start1}}, B{C{end1}},
|
|
155
153
|
B{C{start2}} or B{C{end2}} or invalid B{C{equidistant}}.
|
|
156
154
|
|
|
157
|
-
@note: For each line specified with an initial bearing, a pseudo-end point
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
earth perimeter).
|
|
155
|
+
@note: For each line specified with an initial bearing, a pseudo-end point is
|
|
156
|
+
computed as the C{destination} along that bearing at about 1.5 times the
|
|
157
|
+
distance from the start point to an initial gu-/estimate of the intersection
|
|
158
|
+
point (and between 1/8 and 3/8 of the authalic earth perimeter).
|
|
162
159
|
|
|
163
160
|
@see: U{The B{ellipsoidal} case<https://GIS.StackExchange.com/questions/48937/
|
|
164
161
|
calculating-intersection-of-two-circles>} and U{Karney's paper
|
|
165
162
|
<https://ArXiv.org/pdf/1102.1215.pdf>}, pp 20-21, section B{14. MARITIME
|
|
166
163
|
BOUNDARIES} for more details about the iteration algorithm.
|
|
167
164
|
'''
|
|
165
|
+
kwds = _xkwds(LatLon_and_kwds, LatLon=LatLon)
|
|
168
166
|
return _intersection3(start1, end1, start2, end2, height=height, wrap=wrap,
|
|
169
|
-
|
|
167
|
+
equidistant=equidistant, tol=tol, **kwds)
|
|
170
168
|
|
|
171
169
|
|
|
172
170
|
def intersections2(center1, radius1, center2, radius2, height=None, wrap=False, # was=True
|
|
173
|
-
|
|
171
|
+
equidistant=None, tol=_TOL_M, **LatLon_and_kwds):
|
|
174
172
|
'''I{Iteratively} compute the intersection points of two circles, each defined
|
|
175
173
|
by an (ellipsoidal) center point and a radius.
|
|
176
174
|
|
|
@@ -189,10 +187,9 @@ def intersections2(center1, radius1, center2, radius2, height=None, wrap=False,
|
|
|
189
187
|
the preferred C{B{center1}.Equidistant}.
|
|
190
188
|
@kwarg tol: Convergence tolerance (C{meter}, same units as B{C{radius1}}
|
|
191
189
|
and B{C{radius2}}).
|
|
192
|
-
@kwarg
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
ignored if C{B{LatLon} is None}.
|
|
190
|
+
@kwarg LatLon_and_kwds: Optional class C{B{LatLon}=}L{LatLon} to return the
|
|
191
|
+
intersection points and optionally, additional B{C{LatLon}}
|
|
192
|
+
keyword arguments, ignored if C{B{LatLon}=None}.
|
|
196
193
|
|
|
197
194
|
@return: 2-Tuple of the intersection points, each a B{C{LatLon}} instance
|
|
198
195
|
or L{LatLon4Tuple}C{(lat, lon, height, datum)} if C{B{LatLon} is
|
|
@@ -214,8 +211,9 @@ def intersections2(center1, radius1, center2, radius2, height=None, wrap=False,
|
|
|
214
211
|
U{sphere-sphere<https://MathWorld.Wolfram.com/Sphere-SphereIntersection.html>}
|
|
215
212
|
intersections.
|
|
216
213
|
'''
|
|
214
|
+
kwds = _xkwds(LatLon_and_kwds, LatLon=LatLon)
|
|
217
215
|
return _intersections2(center1, radius1, center2, radius2, height=height, wrap=wrap,
|
|
218
|
-
|
|
216
|
+
equidistant=equidistant, tol=tol, **kwds)
|
|
219
217
|
|
|
220
218
|
|
|
221
219
|
def isclockwise(points, datum=_WGS84, wrap=True):
|
|
@@ -245,9 +243,9 @@ def isclockwise(points, datum=_WGS84, wrap=True):
|
|
|
245
243
|
|
|
246
244
|
|
|
247
245
|
def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
|
248
|
-
|
|
249
|
-
'''I{Iteratively} locate the closest point on the geodesic
|
|
250
|
-
two other (
|
|
246
|
+
equidistant=None, tol=_TOL_M, **LatLon_and_kwds):
|
|
247
|
+
'''I{Iteratively} locate the closest point on the geodesic (line)
|
|
248
|
+
between two other (ellipsoidal) points.
|
|
251
249
|
|
|
252
250
|
@arg point: Reference point (C{LatLon}).
|
|
253
251
|
@arg point1: Start point of the geodesic (C{LatLon}).
|
|
@@ -265,16 +263,15 @@ def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
|
|
265
263
|
or function L{pygeodesy.equidistant}) or C{None}
|
|
266
264
|
for the preferred C{B{point}.Equidistant}.
|
|
267
265
|
@kwarg tol: Convergence tolerance (C{meter}).
|
|
268
|
-
@kwarg
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
arguments, ignored if C{B{LatLon} is None}.
|
|
266
|
+
@kwarg LatLon_and_kwds: Optional class C{B{LatLon}=}L{LatLon} to return the
|
|
267
|
+
closest point and optionally, additional B{C{LatLon}} keyword
|
|
268
|
+
arguments, ignored if C{B{LatLon}=None}.
|
|
272
269
|
|
|
273
|
-
@return: Closest point, a B{C{LatLon}} instance or if C{B{LatLon}
|
|
274
|
-
|
|
270
|
+
@return: Closest point, a B{C{LatLon}} instance or if C{B{LatLon} is None},
|
|
271
|
+
a L{LatLon4Tuple}C{(lat, lon, height, datum)}.
|
|
275
272
|
|
|
276
|
-
@raise TypeError: Invalid or non-ellipsoidal B{C{point}}, B{C{point1}}
|
|
277
|
-
|
|
273
|
+
@raise TypeError: Invalid or non-ellipsoidal B{C{point}}, B{C{point1}} or
|
|
274
|
+
B{C{point2}} or invalid B{C{equidistant}}.
|
|
278
275
|
|
|
279
276
|
@raise ValueError: No convergence for the B{C{tol}}.
|
|
280
277
|
|
|
@@ -283,8 +280,9 @@ def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
|
|
283
280
|
<https://ArXiv.org/pdf/1102.1215.pdf>}, pp 20-21, section B{14. MARITIME
|
|
284
281
|
BOUNDARIES} for more details about the iteration algorithm.
|
|
285
282
|
'''
|
|
283
|
+
kwds = _xkwds(LatLon_and_kwds, LatLon=LatLon)
|
|
286
284
|
return _nearestOn(point, point1, point2, within=within, height=height, wrap=wrap,
|
|
287
|
-
|
|
285
|
+
equidistant=equidistant, tol=tol, **kwds)
|
|
288
286
|
|
|
289
287
|
|
|
290
288
|
def perimeterOf(points, closed=False, datum=_WGS84, wrap=True):
|
|
@@ -322,7 +320,7 @@ __all__ += _ALL_OTHER(Cartesian, LatLon, # classes
|
|
|
322
320
|
|
|
323
321
|
# **) MIT License
|
|
324
322
|
#
|
|
325
|
-
# Copyright (C) 2016-
|
|
323
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
326
324
|
#
|
|
327
325
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
328
326
|
# copy of this software and associated documentation files (the "Software"),
|
|
@@ -314,7 +314,7 @@ __all__ += _ALL_OTHER(Cartesian, LatLon, # classes
|
|
|
314
314
|
|
|
315
315
|
# **) MIT License
|
|
316
316
|
#
|
|
317
|
-
# Copyright (C) 2016-
|
|
317
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
318
318
|
#
|
|
319
319
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
320
320
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ellipsoidalKarney.py
CHANGED
|
@@ -359,7 +359,7 @@ __all__ += _ALL_OTHER(Cartesian, LatLon, # classes
|
|
|
359
359
|
|
|
360
360
|
# **) MIT License
|
|
361
361
|
#
|
|
362
|
-
# Copyright (C) 2016-
|
|
362
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
363
363
|
#
|
|
364
364
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
365
365
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ellipsoidalNvector.py
CHANGED
|
@@ -657,7 +657,7 @@ __all__ += _ALL_OTHER(Cartesian, LatLon, Ned, Nvector, # classes
|
|
|
657
657
|
|
|
658
658
|
# **) MIT License
|
|
659
659
|
#
|
|
660
|
-
# Copyright (C) 2016-
|
|
660
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
661
661
|
#
|
|
662
662
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
663
663
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ellipsoidalVincenty.py
CHANGED
|
@@ -67,12 +67,13 @@ from pygeodesy.props import deprecated_function, deprecated_method, \
|
|
|
67
67
|
property_doc_, property_RO
|
|
68
68
|
# from pygeodesy.streprs import Fmt # from .points
|
|
69
69
|
from pygeodesy.units import Number_, Scalar_
|
|
70
|
-
from pygeodesy.utily import atan2b, atan2d, sincos2, sincos2d,
|
|
70
|
+
from pygeodesy.utily import atan2, atan2b, atan2d, sincos2, sincos2d, \
|
|
71
|
+
unroll180, wrap180
|
|
71
72
|
|
|
72
|
-
from math import
|
|
73
|
+
from math import cos, degrees, fabs, radians, tan as _tan
|
|
73
74
|
|
|
74
75
|
__all__ = _ALL_LAZY.ellipsoidalVincenty
|
|
75
|
-
__version__ = '24.
|
|
76
|
+
__version__ = '24.11.26'
|
|
76
77
|
|
|
77
78
|
_antipodal_to_ = _SPACE_(_antipodal_, _to_)
|
|
78
79
|
|
|
@@ -383,7 +384,7 @@ def _sincos22(sa):
|
|
|
383
384
|
def _sincostan3r(a, f):
|
|
384
385
|
# I{Reduced} 3-tuple C{(sin(B{a}), cos(B{a}), tan(B{a}))}
|
|
385
386
|
if a: # see L{sincostan3}
|
|
386
|
-
t = (_1_0 - f) *
|
|
387
|
+
t = (_1_0 - f) * _tan(a)
|
|
387
388
|
if t:
|
|
388
389
|
c = _1_0 / hypot1(t)
|
|
389
390
|
s = c * t
|
|
@@ -567,7 +568,7 @@ __all__ += _ALL_DOCS(Cartesian, LatLon, intersecant2, # from .ellipsoidalBaseDI
|
|
|
567
568
|
|
|
568
569
|
# **) MIT License
|
|
569
570
|
#
|
|
570
|
-
# Copyright (C) 2016-
|
|
571
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
571
572
|
#
|
|
572
573
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
573
574
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ellipsoids.py
CHANGED
|
@@ -90,10 +90,10 @@ from pygeodesy.units import Bearing_, Distance, Float, Float_, Height, Lamd, Lat
|
|
|
90
90
|
Meter2, Meter3, Phi, Phid, Radius, Radius_, Scalar
|
|
91
91
|
from pygeodesy.utily import atan1, atan1d, atan2b, degrees90, m2radians, radians2m, sincos2d
|
|
92
92
|
|
|
93
|
-
from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan
|
|
93
|
+
from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan # as _tan
|
|
94
94
|
|
|
95
95
|
__all__ = _ALL_LAZY.ellipsoids
|
|
96
|
-
__version__ = '24.
|
|
96
|
+
__version__ = '24.11.26'
|
|
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
|
|
@@ -660,8 +660,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
660
660
|
|
|
661
661
|
@arg lat: Geodetic latitude (C{degrees90}, C{str}).
|
|
662
662
|
|
|
663
|
-
@return: A L{Circle4Tuple}C{(radius, height, lat, beta)}
|
|
664
|
-
instance.
|
|
663
|
+
@return: A L{Circle4Tuple}C{(radius, height, lat, beta)}.
|
|
665
664
|
|
|
666
665
|
@raise RangeError: Latitude B{C{lat}} outside valid range and
|
|
667
666
|
L{rangerrors<pygeodesy.rangerrors>} is C{True}.
|
|
@@ -811,9 +810,9 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
811
810
|
|
|
812
811
|
eccentricity = e # eccentricity
|
|
813
812
|
# eccentricity2 = e2 # eccentricity squared
|
|
814
|
-
eccentricity1st2 = e2 # first eccentricity squared
|
|
815
|
-
eccentricity2nd2 = e22 # second eccentricity squared
|
|
816
|
-
eccentricity3rd2 = e32 # third eccentricity squared
|
|
813
|
+
eccentricity1st2 = e2 # first eccentricity squared, signed
|
|
814
|
+
eccentricity2nd2 = e22 # second eccentricity squared, signed
|
|
815
|
+
eccentricity3rd2 = e32 # third eccentricity squared, signed
|
|
817
816
|
|
|
818
817
|
def ecef(self, Ecef=None):
|
|
819
818
|
'''Return U{ECEF<https://WikiPedia.org/wiki/ECEF>} converter.
|
|
@@ -2427,7 +2426,7 @@ if __name__ == '__main__':
|
|
|
2427
2426
|
|
|
2428
2427
|
# **) MIT License
|
|
2429
2428
|
#
|
|
2430
|
-
# Copyright (C) 2016-
|
|
2429
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
2431
2430
|
#
|
|
2432
2431
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
2433
2432
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/elliptic.py
CHANGED
|
@@ -24,7 +24,7 @@ Following is a copy of I{Karney}'s U{EllipticFunction.hpp
|
|
|
24
24
|
<https://GeographicLib.SourceForge.io/C++/doc/EllipticFunction_8hpp_source.html>}
|
|
25
25
|
file C{Header}.
|
|
26
26
|
|
|
27
|
-
Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-
|
|
27
|
+
Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2024)
|
|
28
28
|
and licensed under the MIT/X11 License. For more information, see the
|
|
29
29
|
U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
|
|
30
30
|
|
|
@@ -93,13 +93,13 @@ from pygeodesy.named import _Named, _NamedTuple, _ALL_LAZY, Fmt, unstr
|
|
|
93
93
|
from pygeodesy.props import _allPropertiesOf_n, Property_RO, _update_all
|
|
94
94
|
# from pygeodesy.streprs import Fmt, unstr # from .named
|
|
95
95
|
from pygeodesy.units import Scalar, Scalar_
|
|
96
|
-
|
|
96
|
+
from pygeodesy.utily import atan2 # sincos2 as _sincos2
|
|
97
97
|
|
|
98
|
-
from math import asin, asinh, atan,
|
|
99
|
-
|
|
98
|
+
from math import asin, asinh, atan, ceil, cosh, fabs, floor, radians, \
|
|
99
|
+
sin, sinh, sqrt, tan, tanh # tan as _tan
|
|
100
100
|
|
|
101
101
|
__all__ = _ALL_LAZY.elliptic
|
|
102
|
-
__version__ = '24.
|
|
102
|
+
__version__ = '24.11.26'
|
|
103
103
|
|
|
104
104
|
_TolRD = zqrt(EPS * 0.002)
|
|
105
105
|
_TolRF = zqrt(EPS * 0.030)
|
|
@@ -1246,7 +1246,7 @@ def _RJ(inst, x, y, z, p, *over):
|
|
|
1246
1246
|
|
|
1247
1247
|
# **) MIT License
|
|
1248
1248
|
#
|
|
1249
|
-
# Copyright (C) 2016-
|
|
1249
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1250
1250
|
#
|
|
1251
1251
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1252
1252
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/epsg.py
CHANGED
|
@@ -223,7 +223,7 @@ __all__ += _ALL_DOCS(decode2, encode)
|
|
|
223
223
|
|
|
224
224
|
# **) MIT License
|
|
225
225
|
#
|
|
226
|
-
# Copyright (C) 2016-
|
|
226
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
227
227
|
#
|
|
228
228
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
229
229
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/errors.py
CHANGED
|
@@ -27,7 +27,7 @@ from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _PYTHON_X_DEV
|
|
|
27
27
|
from copy import copy as _copy
|
|
28
28
|
|
|
29
29
|
__all__ = _ALL_LAZY.errors # _ALL_DOCS('_InvalidError', '_IsnotError') _under
|
|
30
|
-
__version__ = '24.
|
|
30
|
+
__version__ = '24.11.02'
|
|
31
31
|
|
|
32
32
|
_argument_ = 'argument'
|
|
33
33
|
_box_ = 'box'
|
|
@@ -777,7 +777,7 @@ except AttributeError:
|
|
|
777
777
|
return d
|
|
778
778
|
|
|
779
779
|
|
|
780
|
-
# def _xkwds_bool(inst, **kwds): #
|
|
780
|
+
# def _xkwds_bool(inst, **kwds): # unused
|
|
781
781
|
# '''(INTERNAL) Set applicable C{bool} properties/attributes.
|
|
782
782
|
# '''
|
|
783
783
|
# for n, v in kwds.items():
|
|
@@ -789,18 +789,18 @@ except AttributeError:
|
|
|
789
789
|
# setattr(inst, NN(_UNDER_, n), v)
|
|
790
790
|
|
|
791
791
|
|
|
792
|
-
def _xkwds_from(orig, *args, **kwds):
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
792
|
+
# def _xkwds_from(orig, *args, **kwds): # unused
|
|
793
|
+
# '''(INTERNAL) Return the items from C{orig} with the keys
|
|
794
|
+
# from C{kwds} and a value not in C{args} and C{kwds}.
|
|
795
|
+
# '''
|
|
796
|
+
# def _items(orig, args, items):
|
|
797
|
+
# for n, m in items:
|
|
798
|
+
# if n in orig: # n in (orig.keys() & kwds.keys())
|
|
799
|
+
# t = orig[n]
|
|
800
|
+
# if t is not m and t not in args:
|
|
801
|
+
# yield n, t
|
|
802
|
+
#
|
|
803
|
+
# return _items(orig, args, kwds.items())
|
|
804
804
|
|
|
805
805
|
|
|
806
806
|
def _xkwds_get(kwds, **name_default):
|
|
@@ -813,14 +813,14 @@ def _xkwds_get(kwds, **name_default):
|
|
|
813
813
|
raise _xAssertionError(_xkwds_get, kwds, **name_default)
|
|
814
814
|
|
|
815
815
|
|
|
816
|
-
def _xkwds_get_(kwds, **names_defaults):
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
816
|
+
# def _xkwds_get_(kwds, **names_defaults): # unused
|
|
817
|
+
# '''(INTERNAL) Yield each C{kwds} value or its C{default}
|
|
818
|
+
# in I{case-insensitive, alphabetical} C{name} order.
|
|
819
|
+
# '''
|
|
820
|
+
# if not isinstance(kwds, dict):
|
|
821
|
+
# raise _xAssertionError(_xkwds_get_, kwds)
|
|
822
|
+
# for n, v in _MODS.basics.itemsorted(names_defaults):
|
|
823
|
+
# yield kwds.get(n, v)
|
|
824
824
|
|
|
825
825
|
|
|
826
826
|
def _xkwds_get1(kwds, **name_default):
|
|
@@ -844,11 +844,11 @@ def _xkwds_item2(kwds):
|
|
|
844
844
|
raise _xAssertionError(_xkwds_item2, kwds)
|
|
845
845
|
|
|
846
846
|
|
|
847
|
-
def _xkwds_kwds(kwds, **names_defaults):
|
|
847
|
+
def _xkwds_kwds(kwds, **names_defaults): # in .geodesici # PYCHOK no cover
|
|
848
848
|
'''(INTERNAL) Return a C{dict} of C{named_defaults} items replaced with C{kwds}.
|
|
849
849
|
'''
|
|
850
850
|
if not isinstance(kwds, dict):
|
|
851
|
-
raise _xAssertionError(
|
|
851
|
+
raise _xAssertionError(_xkwds_kwds, kwds)
|
|
852
852
|
_g = kwds.get
|
|
853
853
|
return dict((n, _g(n, v)) for n, v in names_defaults.items())
|
|
854
854
|
|
|
@@ -914,7 +914,7 @@ def _xStrError(*Refs, **name_value_Error): # in .gars, .geohash, .wgrs
|
|
|
914
914
|
|
|
915
915
|
# **) MIT License
|
|
916
916
|
#
|
|
917
|
-
# Copyright (C) 2016-
|
|
917
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
918
918
|
#
|
|
919
919
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
920
920
|
# copy of this software and associated documentation files (the "Software"),
|