pygeodesy 25.10.10__py2.py3-none-any.whl → 25.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/__init__.py +25 -12
- pygeodesy/__main__.py +1 -1
- pygeodesy/albers.py +1 -1
- pygeodesy/angles.py +960 -0
- 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 +2 -2
- pygeodesy/auxilats/__main__.py +1 -1
- pygeodesy/auxilats/auxAngle.py +7 -8
- pygeodesy/auxilats/auxDLat.py +1 -1
- pygeodesy/auxilats/auxDST.py +1 -1
- pygeodesy/auxilats/auxLat.py +1 -1
- pygeodesy/auxilats/auxily.py +1 -1
- pygeodesy/azimuthal.py +6 -5
- pygeodesy/basics.py +14 -10
- pygeodesy/booleans.py +8 -33
- pygeodesy/cartesianBase.py +7 -7
- pygeodesy/clipy.py +17 -23
- pygeodesy/constants.py +86 -63
- pygeodesy/css.py +1 -1
- pygeodesy/datums.py +1 -1
- pygeodesy/deprecated/__init__.py +2 -2
- pygeodesy/deprecated/bases.py +1 -1
- pygeodesy/deprecated/classes.py +32 -2
- pygeodesy/deprecated/consterns.py +1 -1
- pygeodesy/deprecated/datum.py +1 -1
- pygeodesy/deprecated/functions.py +1 -1
- 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 +1 -1
- pygeodesy/ecefLocals.py +1 -1
- pygeodesy/elevations.py +1 -1
- pygeodesy/ellipsoidalBase.py +1 -1
- pygeodesy/ellipsoidalBaseDI.py +1 -1
- pygeodesy/ellipsoidalExact.py +1 -1
- pygeodesy/ellipsoidalGeodSolve.py +1 -1
- pygeodesy/ellipsoidalKarney.py +1 -1
- pygeodesy/ellipsoidalNvector.py +1 -1
- pygeodesy/ellipsoidalVincenty.py +1 -1
- pygeodesy/ellipsoids.py +7 -6
- pygeodesy/elliptic.py +1 -1
- pygeodesy/epsg.py +1 -1
- pygeodesy/errors.py +8 -4
- pygeodesy/etm.py +1 -1
- pygeodesy/fmath.py +15 -8
- pygeodesy/formy.py +107 -5
- pygeodesy/frechet.py +1 -1
- pygeodesy/fstats.py +1 -1
- pygeodesy/fsums.py +1 -1
- pygeodesy/gars.py +1 -1
- pygeodesy/geod3solve.py +488 -0
- pygeodesy/geodesici.py +4 -4
- pygeodesy/geodesicw.py +1 -1
- pygeodesy/geodesicx/_C4_24.py +1 -1
- pygeodesy/geodesicx/_C4_27.py +1 -1
- pygeodesy/geodesicx/_C4_30.py +1 -1
- pygeodesy/geodesicx/__init__.py +1 -1
- pygeodesy/geodesicx/__main__.py +1 -1
- pygeodesy/geodesicx/gx.py +1 -1
- pygeodesy/geodesicx/gxarea.py +1 -1
- pygeodesy/geodesicx/gxbases.py +1 -1
- pygeodesy/geodesicx/gxline.py +1 -1
- pygeodesy/geodsolve.py +70 -102
- pygeodesy/geohash.py +1 -1
- pygeodesy/geoids.py +1 -1
- pygeodesy/hausdorff.py +1 -1
- pygeodesy/heights.py +1 -1
- pygeodesy/internals.py +3 -3
- pygeodesy/interns.py +3 -3
- pygeodesy/iters.py +1 -1
- pygeodesy/karney.py +132 -116
- pygeodesy/ktm.py +1 -1
- pygeodesy/latlonBase.py +1 -1
- pygeodesy/lazily.py +25 -13
- pygeodesy/lcc.py +1 -1
- pygeodesy/ltp.py +1 -1
- pygeodesy/ltpTuples.py +1 -1
- pygeodesy/mgrs.py +3 -3
- pygeodesy/named.py +14 -9
- pygeodesy/namedTuples.py +1 -1
- pygeodesy/nvectorBase.py +1 -1
- pygeodesy/osgr.py +1 -1
- pygeodesy/points.py +1 -1
- pygeodesy/props.py +1 -1
- pygeodesy/resections.py +1 -1
- pygeodesy/rhumb/__init__.py +8 -6
- pygeodesy/rhumb/aux_.py +1 -1
- pygeodesy/rhumb/bases.py +1 -1
- pygeodesy/rhumb/ekx.py +1 -1
- pygeodesy/rhumb/solve.py +91 -84
- pygeodesy/simplify.py +1 -1
- pygeodesy/solveBase.py +72 -49
- pygeodesy/sphericalBase.py +1 -1
- pygeodesy/sphericalNvector.py +1 -1
- pygeodesy/sphericalTrigonometry.py +1 -1
- pygeodesy/streprs.py +6 -4
- pygeodesy/trf.py +1 -1
- pygeodesy/triaxials/__init__.py +70 -0
- pygeodesy/triaxials/bases.py +935 -0
- pygeodesy/triaxials/conformal3.py +617 -0
- pygeodesy/triaxials/triaxial3.py +969 -0
- pygeodesy/triaxials/triaxial5.py +1220 -0
- pygeodesy/units.py +6 -1
- pygeodesy/unitsBase.py +1 -1
- pygeodesy/ups.py +2 -3
- pygeodesy/utily.py +19 -15
- pygeodesy/utm.py +1 -1
- pygeodesy/utmups.py +1 -1
- pygeodesy/utmupsBase.py +1 -1
- pygeodesy/vector2d.py +2 -2
- pygeodesy/vector3d.py +1 -1
- pygeodesy/vector3dBase.py +195 -51
- pygeodesy/webmercator.py +1 -1
- pygeodesy/wgrs.py +1 -1
- {pygeodesy-25.10.10.dist-info → pygeodesy-25.12.12.dist-info}/METADATA +13 -13
- pygeodesy-25.12.12.dist-info/RECORD +125 -0
- pygeodesy/triaxials.py +0 -1566
- pygeodesy-25.10.10.dist-info/RECORD +0 -119
- {pygeodesy-25.10.10.dist-info → pygeodesy-25.12.12.dist-info}/WHEEL +0 -0
- {pygeodesy-25.10.10.dist-info → pygeodesy-25.12.12.dist-info}/top_level.txt +0 -0
pygeodesy/geodsolve.py
CHANGED
|
@@ -3,33 +3,52 @@
|
|
|
3
3
|
|
|
4
4
|
u'''Wrapper to invoke I{Karney}'s U{GeodSolve
|
|
5
5
|
<https://GeographicLib.SourceForge.io/C++/doc/GeodSolve.1.html>} utility
|
|
6
|
-
as an (exact) geodesic, but intended I{for testing purposes
|
|
6
|
+
as an (exact) geodesic, but intended I{mainly for testing purposes}.
|
|
7
7
|
|
|
8
8
|
Set env variable C{PYGEODESY_GEODSOLVE} to the (fully qualified) path
|
|
9
9
|
of the C{GeodSolve} executable.
|
|
10
10
|
'''
|
|
11
11
|
|
|
12
12
|
from pygeodesy.basics import _xinstanceof # typename
|
|
13
|
-
|
|
13
|
+
from pygeodesy.constants import NAN, _0_0
|
|
14
|
+
# from pygeodesy.errors import GeodesicError # from .karney
|
|
14
15
|
# from pygeodesy.geodesicx import GeodesicAreaExact # _MODS
|
|
15
|
-
from pygeodesy.interns import _DMAIN_,
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
from pygeodesy.interns import _a12_, _azi1_, _azi2_, _DMAIN_, _lat1_, \
|
|
17
|
+
_lat2_, _lon1_, _lon2_, _m12_, _M12_, \
|
|
18
|
+
_M21_, NN, _s12_, _S12_, _UNDER_
|
|
19
|
+
from pygeodesy.karney import Caps, _GTuple, _sincos2d, _Xables, _Azi, \
|
|
20
|
+
_Deg, GeodesicError, _Lat, _Lon, _M, _M2
|
|
18
21
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
19
|
-
from pygeodesy.namedTuples import Destination3Tuple, Distance3Tuple
|
|
22
|
+
from pygeodesy.namedTuples import Destination3Tuple, Distance3Tuple, \
|
|
23
|
+
_Pass
|
|
20
24
|
from pygeodesy.props import Property, Property_RO, property_RO
|
|
21
25
|
from pygeodesy.solveBase import _SolveGDictBase, _SolveGDictLineBase
|
|
26
|
+
# from pygeodesy.units import Azimuth as _Azi, Degrees as _Deg, \
|
|
27
|
+
# Meter as _M, Meter2 as _M2 # from .karney
|
|
22
28
|
from pygeodesy.utily import _unrollon, _Wrap, wrap360
|
|
23
29
|
|
|
24
30
|
__all__ = _ALL_LAZY.geodsolve
|
|
25
|
-
__version__ = '25.
|
|
31
|
+
__version__ = '25.12.06'
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class GeodSolve12Tuple(_GTuple):
|
|
35
|
+
'''12-Tuple C{(lat1, lon1, azi1, lat2, lon2, azi2, s12, a12, m12, M12, M21, S12)} with
|
|
36
|
+
angles C{lat1}, C{lon1}, C{azi1}, C{lat2}, C{lon2} and C{azi2} and arc C{a12} all in
|
|
37
|
+
C{degrees}, initial C{azi1} and final C{azi2} forward azimuths in bearings, degrees
|
|
38
|
+
from North, distance C{s12} and reduced length C{m12} in C{meter}, area C{S12} in
|
|
39
|
+
C{meter} I{squared} and geodesic scale factors C{M12} and C{M21}, both C{scalar}, see
|
|
40
|
+
U{GeodSolve<https://GeographicLib.SourceForge.io/C++/doc/GeodSolve.1.html>}.
|
|
41
|
+
'''
|
|
42
|
+
# from GeodSolve --help option -f ... lat1 lon1 azi1 lat2 lon2 azi2 s12 a12 m12 M12 M21 S12
|
|
43
|
+
_Names_ = (_lat1_, _lon1_, _azi1_, _lat2_, _lon2_, _azi2_, _s12_, _a12_, _m12_, _M12_, _M21_, _S12_)
|
|
44
|
+
_Units_ = (_Lat, _Lon, _Azi, _Lat, _Lon, _Azi, _M, _Deg, _Pass, _Pass, _Pass, _M2)
|
|
26
45
|
|
|
27
46
|
|
|
28
47
|
class _GeodesicSolveBase(_SolveGDictBase):
|
|
29
48
|
'''(INTERNAL) Base class for L{GeodesicSolve} and L{GeodesicLineSolve}.
|
|
30
49
|
'''
|
|
31
50
|
_Error = GeodesicError
|
|
32
|
-
_Names_Direct = \
|
|
51
|
+
_Names_Direct = _Names_Distance = \
|
|
33
52
|
_Names_Inverse = GeodSolve12Tuple._Names_
|
|
34
53
|
_Xable_name = _Xables.GeodSolve.__name__ # typename
|
|
35
54
|
_Xable_path = _Xables.GeodSolve()
|
|
@@ -65,19 +84,6 @@ class _GeodesicSolveBase(_SolveGDictBase):
|
|
|
65
84
|
'''
|
|
66
85
|
self._setXable(path)
|
|
67
86
|
|
|
68
|
-
def toStr(self, **prec_sep): # PYCHOK signature
|
|
69
|
-
'''Return this C{GeodesicSolve} as string.
|
|
70
|
-
|
|
71
|
-
@kwarg prec_sep: Keyword argumens C{B{prec}=6} and C{B{sep}=", "}
|
|
72
|
-
for the C{float} C{prec}ision, number of decimal digits
|
|
73
|
-
(0..9) and the C{sep}arator string to join. Trailing
|
|
74
|
-
zero decimals are stripped for B{C{prec}} values of 1
|
|
75
|
-
and above, but kept for negative B{C{prec}} values.
|
|
76
|
-
|
|
77
|
-
@return: GeodesicSolve items (C{str}).
|
|
78
|
-
'''
|
|
79
|
-
return _SolveGDictBase._toStr(self, GeodSolve=self.GeodSolve, **prec_sep)
|
|
80
|
-
|
|
81
87
|
@Property_RO
|
|
82
88
|
def _u_option(self):
|
|
83
89
|
return ('-u',) if self.unroll else ()
|
|
@@ -203,6 +209,15 @@ class GeodesicSolve(_GeodesicSolveBase):
|
|
|
203
209
|
gl._s13 = r.s12 # gl.SetDistance(r.s12)
|
|
204
210
|
return gl
|
|
205
211
|
|
|
212
|
+
def toStr(self, **prec_sep_other): # PYCHOK signature
|
|
213
|
+
'''Return this C{GeodesicSolve} as string.
|
|
214
|
+
|
|
215
|
+
@kwarg prec_sep: See L{toStr<pygeodesy.solveBase._SolveBase.toStr>}.
|
|
216
|
+
|
|
217
|
+
@return: GeodesicSolve items (C{str}).
|
|
218
|
+
'''
|
|
219
|
+
return _SolveGDictBase.toStr(self, GeodSolve=self.GeodSolve, **prec_sep_other)
|
|
220
|
+
|
|
206
221
|
|
|
207
222
|
class GeodesicLineSolve(_GeodesicSolveBase, _SolveGDictLineBase):
|
|
208
223
|
'''Wrapper to invoke I{Karney}'s U{GeodSolve<https://GeographicLib.SourceForge.io/C++/doc/GeodSolve.1.html>}
|
|
@@ -271,7 +286,7 @@ class GeodesicLineSolve(_GeodesicSolveBase, _SolveGDictLineBase):
|
|
|
271
286
|
@return: A C{GDict} with 12 items C{lat1, lon1, azi1, lat2, lon2,
|
|
272
287
|
azi2, m12, a12, s12, M12, M21, S12}.
|
|
273
288
|
'''
|
|
274
|
-
return self._GDictInvoke(self._cmdArc, self.
|
|
289
|
+
return self._GDictInvoke(self._cmdArc, self._Names_Distance, a12)._unCaps(outmask)
|
|
275
290
|
|
|
276
291
|
@Property_RO
|
|
277
292
|
def azi1(self):
|
|
@@ -315,14 +330,14 @@ class GeodesicLineSolve(_GeodesicSolveBase, _SolveGDictLineBase):
|
|
|
315
330
|
self._notImplemented(lat0, lon0, **kwds)
|
|
316
331
|
|
|
317
332
|
def Position(self, s12, outmask=Caps.STANDARD):
|
|
318
|
-
'''Find the position on the line given B{C{s12}}.
|
|
333
|
+
'''Find the position on the line given at distance B{C{s12}}.
|
|
319
334
|
|
|
320
335
|
@arg s12: Distance from the first point to the second (C{meter}).
|
|
321
336
|
|
|
322
337
|
@return: A C{GDict} with 12 items C{lat1, lon1, azi1, lat2, lon2,
|
|
323
338
|
azi2, m12, a12, s12, M12, M21, S12}, possibly C{a12=NAN}.
|
|
324
339
|
'''
|
|
325
|
-
return self._GDictInvoke(self._cmdDistance, self.
|
|
340
|
+
return self._GDictInvoke(self._cmdDistance, self._Names_Distance, s12)._unCaps(outmask)
|
|
326
341
|
|
|
327
342
|
@Property_RO
|
|
328
343
|
def s13(self):
|
|
@@ -361,19 +376,14 @@ class GeodesicLineSolve(_GeodesicSolveBase, _SolveGDictLineBase):
|
|
|
361
376
|
# _update_all(self)
|
|
362
377
|
return self._a13 # NAN for GeodesicLineExact without Cap.DISTANCE_IN
|
|
363
378
|
|
|
364
|
-
def toStr(self, **
|
|
379
|
+
def toStr(self, **prec_sep_other): # PYCHOK signature
|
|
365
380
|
'''Return this C{GeodesicLineSolve} as string.
|
|
366
381
|
|
|
367
|
-
@kwarg prec_sep:
|
|
368
|
-
for the C{float} C{prec}ision, number of decimal digits
|
|
369
|
-
(0..9) and the C{sep}arator string to join. Trailing
|
|
370
|
-
zero decimals are stripped for B{C{prec}} values of 1
|
|
371
|
-
and above, but kept for negative B{C{prec}} values.
|
|
382
|
+
@kwarg prec_sep: See L{toStr<pygeodesy.solveBase._SolveBase.toStr>}.
|
|
372
383
|
|
|
373
384
|
@return: GeodesicLineSolve items (C{str}).
|
|
374
385
|
'''
|
|
375
|
-
return _SolveGDictLineBase.
|
|
376
|
-
GeodSolve=self.GeodSolve, **prec_sep)
|
|
386
|
+
return _SolveGDictLineBase.toStr(self, geodesic=self._solve, **prec_sep_other)
|
|
377
387
|
|
|
378
388
|
|
|
379
389
|
__all__ += _ALL_DOCS(_GeodesicSolveBase)
|
|
@@ -385,120 +395,78 @@ if __name__ == _DMAIN_:
|
|
|
385
395
|
from sys import argv
|
|
386
396
|
|
|
387
397
|
gS = GeodesicSolve(name='Test')
|
|
388
|
-
gS.verbose = '--verbose' in argv # or '-v' in argv
|
|
398
|
+
gS.verbose = v = '--verbose' in argv # or '-v' in argv
|
|
389
399
|
|
|
390
400
|
if not _Xables.X_OK(gS.GeodSolve): # not set
|
|
391
401
|
gS.GeodSolve = _Xables.GeodSolve(_Xables.bin_)
|
|
392
|
-
printf('version: %s', gS.version)
|
|
402
|
+
printf('version: %s', gS.version, nt=v)
|
|
393
403
|
|
|
394
404
|
r = gS.Direct(40.6, -73.8, 51, 5.5e6)
|
|
395
|
-
printf('Direct: %r', r
|
|
396
|
-
printf('Direct3: %r', gS.Direct3(40.6, -73.8, 51, 5.5e6))
|
|
405
|
+
printf('Direct: %r', r)
|
|
406
|
+
printf('Direct3: %r', gS.Direct3(40.6, -73.8, 51, 5.5e6), nt=v)
|
|
397
407
|
|
|
398
|
-
printf('Inverse: %r', gS.Inverse( 40.6, -73.8, 51.6, -0.5)
|
|
408
|
+
printf('Inverse: %r', gS.Inverse( 40.6, -73.8, 51.6, -0.5))
|
|
399
409
|
printf('Inverse1: %r', gS.Inverse1(40.6, -73.8, 51.6, -0.5))
|
|
400
|
-
printf('Inverse3: %r', gS.Inverse3(40.6, -73.8, 51.6, -0.5))
|
|
410
|
+
printf('Inverse3: %r', gS.Inverse3(40.6, -73.8, 51.6, -0.5), nt=v)
|
|
401
411
|
|
|
402
412
|
glS = GeodesicLineSolve(gS, 40.6, -73.8, 51, name='LineTest')
|
|
413
|
+
printf('Line: %r', glS)
|
|
403
414
|
p = glS.Position(5.5e6)
|
|
404
|
-
printf('Position: %
|
|
415
|
+
printf('Position: %r %s', p, p == r)
|
|
405
416
|
p = glS.ArcPosition(49.475527)
|
|
406
|
-
printf('ArcPosition: %
|
|
417
|
+
printf('ArcPosition: %r %s', p, p == r)
|
|
407
418
|
|
|
408
419
|
_main()
|
|
409
420
|
|
|
410
421
|
# % python3 -m pygeodesy.geodsolve
|
|
411
422
|
|
|
412
|
-
# version: /opt/local/bin/GeodSolve: GeographicLib version 2.
|
|
413
|
-
|
|
414
|
-
# Direct: GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141173, m12=4844148.703101, M12=0.650911, M21=0.651229, s12=5500000.0, S12=39735075134877.09375)
|
|
415
|
-
# Direct3: Destination3Tuple(lat=51.884565, lon=-1.141173, final=107.189397)
|
|
416
|
-
|
|
417
|
-
# Inverse: GDict(a12=49.94131, azi1=51.198883, azi2=107.821777, lat1=40.6, lat2=51.6, lon1=-73.8, lon2=-0.5, m12=4877684.602706, M12=0.64473, M21=0.645046, s12=5551759.400319, S12=40041368848742.53125)
|
|
418
|
-
# Inverse1: 49.94131021789904
|
|
419
|
-
# Inverse3: Distance3Tuple(distance=5551759.400319, initial=51.198883, final=107.821777)
|
|
420
|
-
|
|
421
|
-
# Position: True GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141173, m12=4844148.703101, M12=0.650911, M21=0.651229, s12=5500000.0, S12=39735075134877.09375)
|
|
422
|
-
# ArcPosition: False GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141174, m12=4844148.669561, M12=0.650911, M21=0.651229, s12=5499999.948497, S12=39735074737272.734375)
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
# % python3 -m pygeodesy.geodsolve
|
|
426
|
-
|
|
427
|
-
# version: /opt/local/bin/GeodSolve: GeographicLib version 2.3
|
|
428
|
-
|
|
423
|
+
# version: /opt/local/bin/GeodSolve: GeographicLib version 2.7
|
|
429
424
|
# Direct: GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141173, m12=4844148.703101, M12=0.650911, M21=0.651229, s12=5500000.0, S12=39735075134877.078125)
|
|
430
425
|
# Direct3: Destination3Tuple(lat=51.884565, lon=-1.141173, final=107.189397)
|
|
431
|
-
|
|
432
426
|
# Inverse: GDict(a12=49.94131, azi1=51.198883, azi2=107.821777, lat1=40.6, lat2=51.6, lon1=-73.8, lon2=-0.5, m12=4877684.602706, M12=0.64473, M21=0.645046, s12=5551759.400319, S12=40041368848742.53125)
|
|
433
427
|
# Inverse1: 49.94131021789904
|
|
434
428
|
# Inverse3: Distance3Tuple(distance=5551759.400319, initial=51.198883, final=107.821777)
|
|
435
|
-
|
|
436
|
-
# Position:
|
|
437
|
-
# ArcPosition:
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
# % python3 -m pygeodesy.geodsolve --verbose
|
|
441
|
-
|
|
442
|
-
# GeodesicSolve 'Test' 1: /opt/local/bin/GeodSolve --version (invoke)
|
|
443
|
-
# GeodesicSolve 'Test' 1: /opt/local/bin/GeodSolve: GeographicLib version 2.2 (0)
|
|
444
|
-
# version: /opt/local/bin/GeodSolve: GeographicLib version 2.2
|
|
445
|
-
# GeodesicSolve 'Test' 2: /opt/local/bin/GeodSolve -f -E -p 10 \ 40.600000000000001 -73.799999999999997 51.0 5500000.0 (Direct)
|
|
446
|
-
# GeodesicSolve 'Test' 2: lat1=40.600000000000001, lon1=-73.799999999999997, azi1=51.0, lat2=51.884564505606761, lon2=-1.141172861200829, azi2=107.189397162605886, s12=5500000.0, a12=49.475527463251467, m12=4844148.703101486, M12=0.65091056699808603, M21=0.65122865892196558, S12=39735075134877.094 (0)
|
|
447
|
-
|
|
448
|
-
# Direct: GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141173, m12=4844148.703101, M12=0.650911, M21=0.651229, s12=5500000.0, S12=39735075134877.09375)
|
|
449
|
-
# GeodesicSolve 'Test' 3: /opt/local/bin/GeodSolve -f -E -p 10 \ 40.600000000000001 -73.799999999999997 51.0 5500000.0 (Direct3)
|
|
450
|
-
# GeodesicSolve 'Test' 3: lat1=40.600000000000001, lon1=-73.799999999999997, azi1=51.0, lat2=51.884564505606761, lon2=-1.141172861200829, azi2=107.189397162605886, s12=5500000.0, a12=49.475527463251467, m12=4844148.703101486, M12=0.65091056699808603, M21=0.65122865892196558, S12=39735075134877.094 (0)
|
|
451
|
-
# Direct3: Destination3Tuple(lat=51.884565, lon=-1.141173, final=107.189397)
|
|
452
|
-
# GeodesicSolve 'Test' 4: /opt/local/bin/GeodSolve -f -E -p 10 -i \ 40.600000000000001 -73.799999999999997 51.600000000000001 -0.5 (Inverse)
|
|
453
|
-
# GeodesicSolve 'Test' 4: lat1=40.600000000000001, lon1=-73.799999999999997, azi1=51.198882845579824, lat2=51.600000000000001, lon2=-0.5, azi2=107.821776735514248, s12=5551759.4003186841, a12=49.941310217899037, m12=4877684.6027061976, M12=0.64472969205948238, M21=0.64504567852134398, S12=40041368848742.531 (0)
|
|
454
|
-
|
|
455
|
-
# Inverse: GDict(a12=49.94131, azi1=51.198883, azi2=107.821777, lat1=40.6, lat2=51.6, lon1=-73.8, lon2=-0.5, m12=4877684.602706, M12=0.64473, M21=0.645046, s12=5551759.400319, S12=40041368848742.53125)
|
|
456
|
-
# GeodesicSolve 'Test' 5: /opt/local/bin/GeodSolve -f -E -p 10 -i \ 40.600000000000001 -73.799999999999997 51.600000000000001 -0.5 (Inverse1)
|
|
457
|
-
# GeodesicSolve 'Test' 5: lat1=40.600000000000001, lon1=-73.799999999999997, azi1=51.198882845579824, lat2=51.600000000000001, lon2=-0.5, azi2=107.821776735514248, s12=5551759.4003186841, a12=49.941310217899037, m12=4877684.6027061976, M12=0.64472969205948238, M21=0.64504567852134398, S12=40041368848742.531 (0)
|
|
458
|
-
# Inverse1: 49.94131021789904
|
|
459
|
-
# GeodesicSolve 'Test' 6: /opt/local/bin/GeodSolve -f -E -p 10 -i \ 40.600000000000001 -73.799999999999997 51.600000000000001 -0.5 (Inverse3)
|
|
460
|
-
# GeodesicSolve 'Test' 6: lat1=40.600000000000001, lon1=-73.799999999999997, azi1=51.198882845579824, lat2=51.600000000000001, lon2=-0.5, azi2=107.821776735514248, s12=5551759.4003186841, a12=49.941310217899037, m12=4877684.6027061976, M12=0.64472969205948238, M21=0.64504567852134398, S12=40041368848742.531 (0)
|
|
461
|
-
# Inverse3: Distance3Tuple(distance=5551759.400319, initial=51.198883, final=107.821777)
|
|
462
|
-
|
|
463
|
-
# Position: True GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141173, m12=4844148.703101, M12=0.650911, M21=0.651229, s12=5500000.0, S12=39735075134877.09375)
|
|
464
|
-
# ArcPosition: False GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141174, m12=4844148.669561, M12=0.650911, M21=0.651229, s12=5499999.948497, S12=39735074737272.734375)
|
|
429
|
+
# Line: GeodesicLineSolve(geodesic=GeodesicSolve(ellipsoid=Ellipsoid(name='WGS84', a=6378137, f=0.00335281, f_=298.25722356, b=6356752.31424518), GeodSolve='/opt/local/bin/GeodSolve', invokation=6, status=0), invokation=1, status=0)
|
|
430
|
+
# Position: GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141173, s12=5500000.0) False
|
|
431
|
+
# ArcPosition: GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141174, s12=5499999.948497) False
|
|
465
432
|
|
|
466
433
|
|
|
467
434
|
# % python3 -m pygeodesy.geodsolve --verbose
|
|
468
435
|
|
|
469
436
|
# GeodesicSolve 'Test'@1: /opt/local/bin/GeodSolve --version (invoke)
|
|
470
|
-
# GeodesicSolve 'Test'@1: '/opt/local/bin/GeodSolve: GeographicLib version 2.
|
|
471
|
-
# GeodesicSolve 'Test'@1: /opt/local/bin/GeodSolve: GeographicLib version 2.
|
|
472
|
-
# version: /opt/local/bin/GeodSolve: GeographicLib version 2.
|
|
473
|
-
#
|
|
437
|
+
# GeodesicSolve 'Test'@1: '/opt/local/bin/GeodSolve: GeographicLib version 2.7' (0, stdout/-err)
|
|
438
|
+
# GeodesicSolve 'Test'@1: /opt/local/bin/GeodSolve: GeographicLib version 2.7 (0)
|
|
439
|
+
# version: /opt/local/bin/GeodSolve: GeographicLib version 2.7
|
|
440
|
+
#
|
|
441
|
+
# GeodesicSolve 'Test'@2: /opt/local/bin/GeodSolve -f -E -p 10 \ 40.6 -73.8 51.0 5500000.0 (Direct)
|
|
474
442
|
# GeodesicSolve 'Test'@2: '40.600000000000001 -73.799999999999997 51.000000000000000 51.884564505606761 -1.141172861200843 107.189397162605871 5500000.0000000000 49.475527463251460 4844148.7031014860 0.65091056699808614 0.65122865892196569 39735075134877.078' (0, stdout/-err)
|
|
475
443
|
# GeodesicSolve 'Test'@2: lat1=40.600000000000001, lon1=-73.799999999999997, azi1=51.0, lat2=51.884564505606761, lon2=-1.141172861200843, azi2=107.189397162605871, s12=5500000.0, a12=49.47552746325146, m12=4844148.703101486, M12=0.65091056699808614, M21=0.65122865892196569, S12=39735075134877.078 (0)
|
|
476
|
-
|
|
477
444
|
# Direct: GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141173, m12=4844148.703101, M12=0.650911, M21=0.651229, s12=5500000.0, S12=39735075134877.078125)
|
|
478
|
-
# GeodesicSolve 'Test'@3: /opt/local/bin/GeodSolve -f -E -p 10 \ 40.
|
|
445
|
+
# GeodesicSolve 'Test'@3: /opt/local/bin/GeodSolve -f -E -p 10 \ 40.6 -73.8 51.0 5500000.0 (Direct3)
|
|
479
446
|
# GeodesicSolve 'Test'@3: '40.600000000000001 -73.799999999999997 51.000000000000000 51.884564505606761 -1.141172861200843 107.189397162605871 5500000.0000000000 49.475527463251460 4844148.7031014860 0.65091056699808614 0.65122865892196569 39735075134877.078' (0, stdout/-err)
|
|
480
447
|
# GeodesicSolve 'Test'@3: lat1=40.600000000000001, lon1=-73.799999999999997, azi1=51.0, lat2=51.884564505606761, lon2=-1.141172861200843, azi2=107.189397162605871, s12=5500000.0, a12=49.47552746325146, m12=4844148.703101486, M12=0.65091056699808614, M21=0.65122865892196569, S12=39735075134877.078 (0)
|
|
481
448
|
# Direct3: Destination3Tuple(lat=51.884565, lon=-1.141173, final=107.189397)
|
|
482
|
-
#
|
|
449
|
+
#
|
|
450
|
+
# GeodesicSolve 'Test'@4: /opt/local/bin/GeodSolve -f -E -p 10 -i \ 40.6 -73.8 51.6 -0.5 (Inverse)
|
|
483
451
|
# GeodesicSolve 'Test'@4: '40.600000000000001 -73.799999999999997 51.198882845579824 51.600000000000001 -0.500000000000000 107.821776735514248 5551759.4003186813 49.941310217899037 4877684.6027061967 0.64472969205948238 0.64504567852134398 40041368848742.531' (0, stdout/-err)
|
|
484
452
|
# GeodesicSolve 'Test'@4: lat1=40.600000000000001, lon1=-73.799999999999997, azi1=51.198882845579824, lat2=51.600000000000001, lon2=-0.5, azi2=107.821776735514248, s12=5551759.4003186813, a12=49.941310217899037, m12=4877684.6027061967, M12=0.64472969205948238, M21=0.64504567852134398, S12=40041368848742.531 (0)
|
|
485
|
-
|
|
486
453
|
# Inverse: GDict(a12=49.94131, azi1=51.198883, azi2=107.821777, lat1=40.6, lat2=51.6, lon1=-73.8, lon2=-0.5, m12=4877684.602706, M12=0.64473, M21=0.645046, s12=5551759.400319, S12=40041368848742.53125)
|
|
487
|
-
# GeodesicSolve 'Test'@5: /opt/local/bin/GeodSolve -f -E -p 10 -i \ 40.
|
|
454
|
+
# GeodesicSolve 'Test'@5: /opt/local/bin/GeodSolve -f -E -p 10 -i \ 40.6 -73.8 51.6 -0.5 (Inverse1)
|
|
488
455
|
# GeodesicSolve 'Test'@5: '40.600000000000001 -73.799999999999997 51.198882845579824 51.600000000000001 -0.500000000000000 107.821776735514248 5551759.4003186813 49.941310217899037 4877684.6027061967 0.64472969205948238 0.64504567852134398 40041368848742.531' (0, stdout/-err)
|
|
489
456
|
# GeodesicSolve 'Test'@5: lat1=40.600000000000001, lon1=-73.799999999999997, azi1=51.198882845579824, lat2=51.600000000000001, lon2=-0.5, azi2=107.821776735514248, s12=5551759.4003186813, a12=49.941310217899037, m12=4877684.6027061967, M12=0.64472969205948238, M21=0.64504567852134398, S12=40041368848742.531 (0)
|
|
490
457
|
# Inverse1: 49.94131021789904
|
|
491
|
-
# GeodesicSolve 'Test'@6: /opt/local/bin/GeodSolve -f -E -p 10 -i \ 40.
|
|
458
|
+
# GeodesicSolve 'Test'@6: /opt/local/bin/GeodSolve -f -E -p 10 -i \ 40.6 -73.8 51.6 -0.5 (Inverse3)
|
|
492
459
|
# GeodesicSolve 'Test'@6: '40.600000000000001 -73.799999999999997 51.198882845579824 51.600000000000001 -0.500000000000000 107.821776735514248 5551759.4003186813 49.941310217899037 4877684.6027061967 0.64472969205948238 0.64504567852134398 40041368848742.531' (0, stdout/-err)
|
|
493
460
|
# GeodesicSolve 'Test'@6: lat1=40.600000000000001, lon1=-73.799999999999997, azi1=51.198882845579824, lat2=51.600000000000001, lon2=-0.5, azi2=107.821776735514248, s12=5551759.4003186813, a12=49.941310217899037, m12=4877684.6027061967, M12=0.64472969205948238, M21=0.64504567852134398, S12=40041368848742.531 (0)
|
|
494
461
|
# Inverse3: Distance3Tuple(distance=5551759.400319, initial=51.198883, final=107.821777)
|
|
495
|
-
|
|
496
|
-
#
|
|
497
|
-
#
|
|
462
|
+
#
|
|
463
|
+
# Line: GeodesicLineSolve(geodesic=GeodesicSolve(ellipsoid=Ellipsoid(name='WGS84', a=6378137, f=0.00335281, f_=298.25722356, b=6356752.31424518), GeodSolve='/opt/local/bin/GeodSolve', invokation=6, status=0), invokation=1, status=0)
|
|
464
|
+
# Position: GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141173, s12=5500000.0) False
|
|
465
|
+
# ArcPosition: GDict(a12=49.475527, azi1=51.0, azi2=107.189397, lat1=40.6, lat2=51.884565, lon1=-73.8, lon2=-1.141174, s12=5499999.948497) False
|
|
498
466
|
|
|
499
467
|
# **) MIT License
|
|
500
468
|
#
|
|
501
|
-
# Copyright (C) 2016-
|
|
469
|
+
# Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
502
470
|
#
|
|
503
471
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
504
472
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/geohash.py
CHANGED
|
@@ -1098,7 +1098,7 @@ if __name__ == _DMAIN_:
|
|
|
1098
1098
|
|
|
1099
1099
|
# **) MIT License
|
|
1100
1100
|
#
|
|
1101
|
-
# Copyright (C) 2016-
|
|
1101
|
+
# Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1102
1102
|
#
|
|
1103
1103
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1104
1104
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/geoids.py
CHANGED
|
@@ -1912,7 +1912,7 @@ del _intCs, _T, _T0s12 # trash ints cache and map
|
|
|
1912
1912
|
|
|
1913
1913
|
# **) MIT License
|
|
1914
1914
|
#
|
|
1915
|
-
# Copyright (C) 2016-
|
|
1915
|
+
# Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1916
1916
|
#
|
|
1917
1917
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1918
1918
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/hausdorff.py
CHANGED
|
@@ -828,7 +828,7 @@ def randomrangenerator(seed):
|
|
|
828
828
|
|
|
829
829
|
# **) MIT License
|
|
830
830
|
#
|
|
831
|
-
# Copyright (C) 2016-
|
|
831
|
+
# Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
832
832
|
#
|
|
833
833
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
834
834
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/heights.py
CHANGED
|
@@ -1073,7 +1073,7 @@ __all__ += _ALL_DOCS(_HeightBase, _HeightIDW, _HeightNamed)
|
|
|
1073
1073
|
|
|
1074
1074
|
# **) MIT License
|
|
1075
1075
|
#
|
|
1076
|
-
# Copyright (C) 2016-
|
|
1076
|
+
# Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1077
1077
|
#
|
|
1078
1078
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1079
1079
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/internals.py
CHANGED
|
@@ -498,7 +498,7 @@ def printf(fmt, *args, **nl_nt_prec_prefix__end_file_flush_sep__kwds):
|
|
|
498
498
|
t = fmt
|
|
499
499
|
except Exception as x:
|
|
500
500
|
_Error, s = _MODS.errors._xError2(x)
|
|
501
|
-
_unstr = _MODS.
|
|
501
|
+
_unstr = _MODS.streprs.unstr
|
|
502
502
|
t = _unstr(printf, fmt, *args, **nl_nt_prec_prefix__end_file_flush_sep__kwds)
|
|
503
503
|
raise _Error(s, txt=t, cause=x)
|
|
504
504
|
try:
|
|
@@ -709,7 +709,7 @@ def _versions(sep=_SPACE_):
|
|
|
709
709
|
|
|
710
710
|
|
|
711
711
|
__all__ = tuple(map(typename, (machine, print_, printf, typename)))
|
|
712
|
-
__version__ = '25.10.
|
|
712
|
+
__version__ = '25.10.26'
|
|
713
713
|
|
|
714
714
|
if __name__ == _DMAIN_:
|
|
715
715
|
|
|
@@ -726,7 +726,7 @@ if __name__ == _DMAIN_:
|
|
|
726
726
|
|
|
727
727
|
# **) MIT License
|
|
728
728
|
#
|
|
729
|
-
# Copyright (C) 2016-
|
|
729
|
+
# Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
730
730
|
#
|
|
731
731
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
732
732
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/interns.py
CHANGED
|
@@ -10,7 +10,7 @@ except NameError: # Python 3+
|
|
|
10
10
|
_intern = _sys.intern
|
|
11
11
|
|
|
12
12
|
_COMMASPACE_ = ', ' # overriden below
|
|
13
|
-
_SUB_PACKAGES = 'auxilats', 'deprecated', 'geodesicx', 'rhumb' # PYCHOK in ...
|
|
13
|
+
_SUB_PACKAGES = 'auxilats', 'deprecated', 'geodesicx', 'rhumb', 'triaxials' # PYCHOK in ...
|
|
14
14
|
# ... .lazily, make._dist, MANIFEST, setup.setup, test/bases, test/testModules
|
|
15
15
|
|
|
16
16
|
|
|
@@ -443,7 +443,7 @@ _LR_PAIRS = {_LANGLE_: _RANGLE_,
|
|
|
443
443
|
|
|
444
444
|
__all__ = (_NN_, # NOT MISSING!
|
|
445
445
|
Str_.__name__) # classes
|
|
446
|
-
__version__ = '25.
|
|
446
|
+
__version__ = '25.11.07'
|
|
447
447
|
|
|
448
448
|
if __name__ == _DMAIN_:
|
|
449
449
|
|
|
@@ -466,7 +466,7 @@ if __name__ == _DMAIN_:
|
|
|
466
466
|
|
|
467
467
|
# **) MIT License
|
|
468
468
|
#
|
|
469
|
-
# Copyright (C) 2016-
|
|
469
|
+
# Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
470
470
|
#
|
|
471
471
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
472
472
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/iters.py
CHANGED
|
@@ -527,7 +527,7 @@ __all__ += _ALL_DOCS(_BaseIter)
|
|
|
527
527
|
|
|
528
528
|
# **) MIT License
|
|
529
529
|
#
|
|
530
|
-
# Copyright (C) 2016-
|
|
530
|
+
# Copyright (C) 2016-2026 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
531
531
|
#
|
|
532
532
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
533
533
|
# copy of this software and associated documentation files (the "Software"),
|