pygeodesy 24.10.10__py2.py3-none-any.whl → 24.11.11__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.10.dist-info → PyGeodesy-24.11.11.dist-info}/METADATA +12 -12
- PyGeodesy-24.11.11.dist-info/RECORD +118 -0
- {PyGeodesy-24.10.10.dist-info → PyGeodesy-24.11.11.dist-info}/WHEEL +1 -1
- pygeodesy/__init__.py +14 -14
- pygeodesy/__main__.py +5 -5
- pygeodesy/albers.py +12 -17
- pygeodesy/azimuthal.py +51 -61
- pygeodesy/basics.py +60 -62
- pygeodesy/booleans.py +87 -79
- pygeodesy/cartesianBase.py +6 -6
- pygeodesy/constants.py +23 -19
- pygeodesy/css.py +7 -8
- pygeodesy/datums.py +3 -3
- pygeodesy/deprecated/__init__.py +1 -1
- pygeodesy/deprecated/classes.py +9 -9
- pygeodesy/deprecated/functions.py +6 -6
- pygeodesy/dms.py +250 -270
- pygeodesy/ecef.py +11 -14
- pygeodesy/ellipsoidalBase.py +106 -121
- pygeodesy/ellipsoidalBaseDI.py +114 -118
- pygeodesy/ellipsoidalExact.py +35 -37
- pygeodesy/ellipsoidalNvector.py +4 -4
- pygeodesy/ellipsoidalVincenty.py +2 -2
- pygeodesy/ellipsoids.py +10 -51
- pygeodesy/elliptic.py +14 -14
- pygeodesy/errors.py +28 -28
- pygeodesy/etm.py +92 -68
- pygeodesy/fmath.py +42 -40
- pygeodesy/formy.py +7 -6
- pygeodesy/fsums.py +72 -51
- pygeodesy/geodesici.py +43 -40
- pygeodesy/geodesicw.py +17 -16
- pygeodesy/geodesicx/__init__.py +2 -2
- pygeodesy/geodesicx/gxarea.py +3 -2
- pygeodesy/geodsolve.py +79 -39
- pygeodesy/geohash.py +2 -2
- pygeodesy/geoids.py +32 -31
- pygeodesy/heights.py +2 -2
- pygeodesy/internals.py +201 -147
- pygeodesy/interns.py +23 -20
- pygeodesy/karney.py +62 -13
- pygeodesy/ktm.py +11 -13
- pygeodesy/latlonBase.py +18 -20
- pygeodesy/lazily.py +210 -218
- pygeodesy/lcc.py +4 -4
- pygeodesy/ltp.py +10 -10
- pygeodesy/ltpTuples.py +74 -75
- pygeodesy/mgrs.py +20 -21
- pygeodesy/named.py +15 -10
- pygeodesy/nvectorBase.py +1 -1
- pygeodesy/osgr.py +9 -12
- pygeodesy/points.py +2 -2
- pygeodesy/props.py +35 -14
- pygeodesy/resections.py +9 -10
- pygeodesy/rhumb/__init__.py +1 -1
- pygeodesy/rhumb/bases.py +5 -5
- pygeodesy/rhumb/solve.py +9 -10
- pygeodesy/simplify.py +5 -5
- pygeodesy/solveBase.py +7 -25
- pygeodesy/sphericalBase.py +20 -23
- pygeodesy/sphericalNvector.py +103 -145
- pygeodesy/sphericalTrigonometry.py +68 -73
- pygeodesy/streprs.py +5 -5
- pygeodesy/trf.py +6 -4
- pygeodesy/triaxials.py +46 -9
- pygeodesy/units.py +5 -4
- pygeodesy/ups.py +6 -6
- pygeodesy/utily.py +2 -2
- pygeodesy/utm.py +7 -7
- pygeodesy/vector2d.py +13 -13
- pygeodesy/vector3d.py +19 -21
- pygeodesy/vector3dBase.py +21 -19
- pygeodesy/webmercator.py +4 -4
- pygeodesy/wgrs.py +4 -4
- PyGeodesy-24.10.10.dist-info/RECORD +0 -118
- {PyGeodesy-24.10.10.dist-info → PyGeodesy-24.11.11.dist-info}/top_level.txt +0 -0
pygeodesy/interns.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
u'''Single C{str}ing constants, C{intern}'ed across C{pygeodesy}
|
|
4
4
|
modules and function L{pygeodesy.machine}.
|
|
5
5
|
'''
|
|
6
|
-
import sys as _sys
|
|
6
|
+
import sys as _sys # in .internals, .lazily
|
|
7
7
|
try:
|
|
8
8
|
_intern = intern # PYCHOK in .lazily, .trf
|
|
9
9
|
except NameError: # Python 3+
|
|
@@ -11,7 +11,7 @@ except NameError: # Python 3+
|
|
|
11
11
|
|
|
12
12
|
_COMMASPACE_ = ', ' # overriden below
|
|
13
13
|
_SUB_PACKAGES = 'auxilats', 'deprecated', 'geodesicx', 'rhumb' # PYCHOK in ...
|
|
14
|
-
# ... .lazily, make._dist, MANIFEST, setup.setup, test
|
|
14
|
+
# ... .lazily, make._dist, MANIFEST, setup.setup, test/bases, test/testModules
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class _Dash(str):
|
|
@@ -199,7 +199,8 @@ _distance_ = 'distance' # PYCHOK OK
|
|
|
199
199
|
_distant_ = _Prefix('distant') # PYCHOK OK
|
|
200
200
|
_doesn_t_exist_ = "doesn't exist" # PYCHOK OK
|
|
201
201
|
_DOT_ = Str_('.') # PYCHOK OK
|
|
202
|
-
|
|
202
|
+
_DUNDER_all_ = '__all__' # PYCHOK OK
|
|
203
|
+
_DUNDER_name_ = '__name__' # PYCHOK _DUNDER_(NN, _name_, NN)
|
|
203
204
|
_duplicate_ = 'duplicate' # PYCHOK OK
|
|
204
205
|
_e_ = 'e' # PYCHOK OK
|
|
205
206
|
_E_ = 'E' # PYCHOK OK
|
|
@@ -309,7 +310,6 @@ _negative_ = 'negative' # PYCHOK OK
|
|
|
309
310
|
_NL_ = Str_('\n') # PYCHOK OK
|
|
310
311
|
_NLATvar_ = Str_(_NL_ + '@var ') # PYCHOK OK
|
|
311
312
|
_NLHASH_ = Str_(_NL_ + '# ') # PYCHOK OK
|
|
312
|
-
# _NLNL_ = _DNL_ # PYCHOK OK
|
|
313
313
|
_NN_ = 'NN' # PYCHOK OK
|
|
314
314
|
_no_ = _Prefix('no') # PYCHOK OK
|
|
315
315
|
_northing_ = 'northing' # PYCHOK OK
|
|
@@ -341,7 +341,7 @@ _points_ = 'points' # PYCHOK OK
|
|
|
341
341
|
_pole_ = 'pole' # PYCHOK OK
|
|
342
342
|
_precision_ = 'precision' # PYCHOK OK
|
|
343
343
|
_prime_vertical_ = 'prime_vertical' # PYCHOK OK
|
|
344
|
-
_pygeodesy_ = 'pygeodesy' # PYCHOK OK
|
|
344
|
+
_pygeodesy_ = 'pygeodesy' # PYCHOK OK # in test/bases
|
|
345
345
|
_pygeodesy_abspath_ = 'pygeodesy_abspath' # PYCHOK OK
|
|
346
346
|
_PyPy__ = _PyPy__('PyPy ') # PYCHOK + _SPACE_
|
|
347
347
|
_Python_ = _Python_('Python') # PYCHOK singleton
|
|
@@ -429,7 +429,7 @@ _SW_ = _S_ + _W_ # PYCHOK negative ones
|
|
|
429
429
|
|
|
430
430
|
_DDOT_ = Str_(_DOT_ * 2) # PYCHOK OK
|
|
431
431
|
# _DEQUAL_ = Str_(_EQUAL_ * 2) # PYCHOK OK
|
|
432
|
-
_DNL_
|
|
432
|
+
# _DNL_ = Str_(_NL_ * 2) # PYCHOK OK
|
|
433
433
|
# _DSLASH_ = Str_(_SLASH_ * 2) # PYCHOK OK
|
|
434
434
|
# _DSTAR_ = Str_(_STAR_ * 2) # PYCHOK OK
|
|
435
435
|
_DUNDER_ = Str_(_UNDER_ * 2) # PYCHOK OK
|
|
@@ -441,23 +441,26 @@ _LR_PAIRS = {_LANGLE_: _RANGLE_,
|
|
|
441
441
|
|
|
442
442
|
__all__ = (_NN_, # NOT MISSING!
|
|
443
443
|
Str_.__name__) # classes
|
|
444
|
-
__version__ = '24.
|
|
444
|
+
__version__ = '24.10.19'
|
|
445
445
|
|
|
446
446
|
if __name__ == '__main__':
|
|
447
447
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
448
|
+
def _main():
|
|
449
|
+
from pygeodesy import itemsorted, printf
|
|
450
|
+
|
|
451
|
+
t = b = 0
|
|
452
|
+
for n, v in itemsorted(locals(), asorted=False, reverse=True):
|
|
453
|
+
if n.endswith(_UNDER_) and n.startswith(_UNDER_) and \
|
|
454
|
+
not n.startswith(_DUNDER_):
|
|
455
|
+
t += 1
|
|
456
|
+
b += len(v)
|
|
457
|
+
m = n[1:-1]
|
|
458
|
+
if m != v and m.replace(_UNDER_, _SPACE_) != v:
|
|
459
|
+
printf('%4d: %s = %r', t, n, v)
|
|
460
|
+
n = len(locals())
|
|
461
|
+
printf('%4d (%d) names, %s chars total, %.2f chars avg', t, n, b, float(b) / t, nl=1)
|
|
462
|
+
|
|
463
|
+
_main()
|
|
461
464
|
|
|
462
465
|
# **) MIT License
|
|
463
466
|
#
|
pygeodesy/karney.py
CHANGED
|
@@ -64,7 +64,7 @@ Karney-based functionality
|
|
|
64
64
|
<https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1Intersect.html>} from I{GeographicLib 2.3+}
|
|
65
65
|
|
|
66
66
|
- L{JacobiConformal} -- U{JacobiConformal
|
|
67
|
-
<https://
|
|
67
|
+
<https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1experimental_1_1JacobiConformal.html>}
|
|
68
68
|
|
|
69
69
|
- L{KTransverseMercator} - U{TransverseMercator
|
|
70
70
|
<https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1TransverseMercator.html>}
|
|
@@ -143,18 +143,18 @@ in C{pygeodesy} are based on I{Karney}'s post U{Area of a spherical polygon
|
|
|
143
143
|
# make sure int/int division yields float quotient, see .basics
|
|
144
144
|
from __future__ import division as _; del _ # PYCHOK semicolon
|
|
145
145
|
|
|
146
|
-
from pygeodesy.basics import _copysign, isint, neg, unsigned0,
|
|
147
|
-
_zip
|
|
146
|
+
from pygeodesy.basics import _copysign, isint, neg, unsigned0, \
|
|
147
|
+
_xgeographiclib, _zip
|
|
148
148
|
from pygeodesy.constants import NAN, _isfinite as _math_isfinite, _0_0, \
|
|
149
149
|
_1_16th, _1_0, _2_0, _180_0, _N_180_0, _360_0
|
|
150
150
|
from pygeodesy.errors import GeodesicError, _ValueError, _xkwds
|
|
151
151
|
from pygeodesy.fmath import cbrt, fremainder, norm2 # Fhorner, Fsum
|
|
152
|
-
|
|
153
|
-
from pygeodesy.interns import NN,
|
|
152
|
+
from pygeodesy.internals import _getenv, _popen2, _PYGEODESY, _version_info
|
|
153
|
+
from pygeodesy.interns import NN, _a12_, _area_, _azi1_, _azi2_, _azi12_, \
|
|
154
154
|
_composite_, _lat1_, _lat2_, _lon1_, _lon2_, \
|
|
155
155
|
_m12_, _M12_, _M21_, _number_, _s12_, _S12_, \
|
|
156
|
-
_UNDER_, _X_, _BAR_ # PYCHOK used!
|
|
157
|
-
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
156
|
+
_SPACE_, _UNDER_, _X_, _1_, _2_, _BAR_ # PYCHOK used!
|
|
157
|
+
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
158
158
|
from pygeodesy.named import ADict, _NamedBase, _NamedTuple, notImplemented, _Pass
|
|
159
159
|
from pygeodesy.props import deprecated_method, Property_RO, property_RO, \
|
|
160
160
|
property_ROnce
|
|
@@ -165,11 +165,12 @@ from pygeodesy.utily import atan2d, sincos2d, tand, _unrollon, fabs
|
|
|
165
165
|
# from math import fabs # from .utily
|
|
166
166
|
|
|
167
167
|
__all__ = _ALL_LAZY.karney
|
|
168
|
-
__version__ = '24.09
|
|
168
|
+
__version__ = '24.11.09'
|
|
169
169
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
170
|
+
_2_4_ = '2.4'
|
|
171
|
+
_K_2_0 = _getenv(_PYGEODESY(_xgeographiclib, 1), _2_)
|
|
172
|
+
_K_2_4 = _K_2_0 == _2_4_
|
|
173
|
+
_K_2_0 = _K_2_4 or (_K_2_0 == _2_)
|
|
173
174
|
_perimeter_ = 'perimeter'
|
|
174
175
|
|
|
175
176
|
|
|
@@ -576,8 +577,8 @@ class _kWrapped(object): # in .geodesicw
|
|
|
576
577
|
|
|
577
578
|
@property_RO
|
|
578
579
|
def Math_K_2(self):
|
|
579
|
-
return (
|
|
580
|
-
(
|
|
580
|
+
return (_2_4_ if _K_2_4 else
|
|
581
|
+
(_2_ if _K_2_0 else _1_)) if self.Math else NN
|
|
581
582
|
|
|
582
583
|
_wrapped = _kWrapped() # PYCHOK singleton, .datum, .test/base.py
|
|
583
584
|
|
|
@@ -639,6 +640,54 @@ class Rhumb8Tuple(_GTuple):
|
|
|
639
640
|
return _MODS.deprecated.classes.Rhumb7Tuple(self[:-1])
|
|
640
641
|
|
|
641
642
|
|
|
643
|
+
class _Xables(object):
|
|
644
|
+
'''(INTERNAL) Get I{Karney}'s executable paths from/and env vars.
|
|
645
|
+
'''
|
|
646
|
+
bin_ = '/opt/local/bin/' # '/opt/local/Cellar/geographiclib/2.3/bin/' # HomeBrew on macOS
|
|
647
|
+
ENV = NN
|
|
648
|
+
|
|
649
|
+
def GeoConvert(self, *dir_):
|
|
650
|
+
return self._path(self.GeoConvert, *dir_)
|
|
651
|
+
|
|
652
|
+
def GeodSolve(self, *dir_):
|
|
653
|
+
return self._path(self.GeodSolve, *dir_)
|
|
654
|
+
|
|
655
|
+
def IntersectTool(self, *dir_):
|
|
656
|
+
return self._path(self.IntersectTool, *dir_)
|
|
657
|
+
|
|
658
|
+
def RhumbSolve(self, *dir_):
|
|
659
|
+
return self._path(self.RhumbSolve, *dir_)
|
|
660
|
+
|
|
661
|
+
def name_version(self, path, base=True):
|
|
662
|
+
# return C{(path + ' ' + version)} of an executable
|
|
663
|
+
if path:
|
|
664
|
+
try:
|
|
665
|
+
r, s = _popen2((path, '--version'))
|
|
666
|
+
if base:
|
|
667
|
+
path = _MODS.os.path.basename(path)
|
|
668
|
+
r = _SPACE_(path, r.split()[-1])
|
|
669
|
+
else:
|
|
670
|
+
r = _MODS.streprs.Fmt.PARENSPACED(r, s)
|
|
671
|
+
return r
|
|
672
|
+
except (IndexError, IOError, OSError):
|
|
673
|
+
pass
|
|
674
|
+
return NN
|
|
675
|
+
|
|
676
|
+
def _path(self, which, *dir_):
|
|
677
|
+
self.ENV = E = _PYGEODESY(which)
|
|
678
|
+
return _getenv(E, NN) or \
|
|
679
|
+
(NN(dir_[0], which.__name__) if dir_ else E)
|
|
680
|
+
|
|
681
|
+
def X_not(self, path):
|
|
682
|
+
return 'env %s=%r not executable' % (self.ENV, path)
|
|
683
|
+
|
|
684
|
+
def X_OK(self, path): # is C{path} an executable?
|
|
685
|
+
os = _MODS.os # import os
|
|
686
|
+
return os.access(path, os.X_OK) if path else False
|
|
687
|
+
|
|
688
|
+
_Xables = _Xables() # PYCHOK singleton
|
|
689
|
+
|
|
690
|
+
|
|
642
691
|
def _around(x): # in .utily.sincos2d
|
|
643
692
|
'''I{Coarsen} a scalar by rounding small values to underflow to C{0.0}.
|
|
644
693
|
|
pygeodesy/ktm.py
CHANGED
|
@@ -49,8 +49,7 @@ from pygeodesy.constants import INF, _K0_UTM, PI, PI_2, _0_0s, _0_0, \
|
|
|
49
49
|
from pygeodesy.datums import Datum, _spherical_datum, _WGS84, _EWGS84
|
|
50
50
|
# from pygeodesy.ellipsoids import _EWGS84 # from .datums
|
|
51
51
|
from pygeodesy.errors import _ValueError, _xkwds_pop2, _Xorder
|
|
52
|
-
from pygeodesy.fmath import hypot, hypot1
|
|
53
|
-
from pygeodesy.fsums import fsum1f_
|
|
52
|
+
from pygeodesy.fmath import fdot_, hypot, hypot1
|
|
54
53
|
from pygeodesy.interns import _COMMASPACE_, _singular_
|
|
55
54
|
from pygeodesy.karney import _atan2d, _diff182, _fix90, _norm180, \
|
|
56
55
|
_polynomial, _unsigned2
|
|
@@ -67,7 +66,7 @@ from cmath import polar
|
|
|
67
66
|
from math import atan2, asinh, cos, cosh, degrees, fabs, sin, sinh, sqrt, tanh
|
|
68
67
|
|
|
69
68
|
__all__ = _ALL_LAZY.ktm
|
|
70
|
-
__version__ = '24.
|
|
69
|
+
__version__ = '24.11.11'
|
|
71
70
|
|
|
72
71
|
|
|
73
72
|
class KTMError(_ValueError):
|
|
@@ -433,10 +432,10 @@ def _cma(a, b0, b1, Cn):
|
|
|
433
432
|
@see: CPython function U{_Py_c_prod<https://GitHub.com/python/
|
|
434
433
|
cpython/blob/main/Objects/complexobject.c>}.
|
|
435
434
|
|
|
436
|
-
@note: Python function C{cmath.fsum}
|
|
435
|
+
@note: Python function C{cmath.fsum} no longer exists.
|
|
437
436
|
'''
|
|
438
|
-
r =
|
|
439
|
-
j =
|
|
437
|
+
r = fdot_(a.real, b0.real, -a.imag, b0.imag, -b1.real, _1_0, start=Cn)
|
|
438
|
+
j = fdot_(a.real, b0.imag, a.imag, b0.real, -b1.imag, _1_0)
|
|
440
439
|
return complex(r, j)
|
|
441
440
|
|
|
442
441
|
|
|
@@ -461,19 +460,18 @@ def _Cyxgk4(E, xi_, eta_, C):
|
|
|
461
460
|
y0 = complex(Cn) # +0j
|
|
462
461
|
z0 = complex(Cn * (n * 2))
|
|
463
462
|
n -= 1
|
|
464
|
-
_c = _cma
|
|
465
463
|
while n > 0:
|
|
466
464
|
Cn = C[n]
|
|
467
|
-
y1 =
|
|
468
|
-
z1 =
|
|
465
|
+
y1 = _cma(a, y0, y1, Cn)
|
|
466
|
+
z1 = _cma(a, z0, z1, Cn * (n * 2))
|
|
469
467
|
n -= 1
|
|
470
468
|
Cn = C[n]
|
|
471
|
-
y0 =
|
|
472
|
-
z0 =
|
|
469
|
+
y0 = _cma(a, y1, y0, Cn)
|
|
470
|
+
z0 = _cma(a, z1, z0, Cn * (n * 2))
|
|
473
471
|
n -= 1
|
|
474
472
|
# assert n == 0
|
|
475
|
-
x =
|
|
476
|
-
c =
|
|
473
|
+
x = _cma(s, y0, -x, _0_0)
|
|
474
|
+
c = _cma(c, z0, z1, _1_0)
|
|
477
475
|
|
|
478
476
|
# Gauss-Schreiber to Gauss-Krueger TM
|
|
479
477
|
# C{cmath.polar} handles INF, NAN, etc.
|
pygeodesy/latlonBase.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
u'''(INTERNAL) Base class L{LatLonBase} for all elliposiodal, spherical and N-vectorial C{LatLon} classes.
|
|
5
5
|
|
|
6
|
-
@see: I{(C) Chris Veness}' U{latlong<https://www.Movable-Type.co.UK/scripts/latlong.html>},
|
|
6
|
+
@see: I{(C) Chris Veness 2005-2024}' U{latlong<https://www.Movable-Type.co.UK/scripts/latlong.html>},
|
|
7
7
|
U{-ellipsoidal<https://www.Movable-Type.co.UK/scripts/geodesy/docs/latlon-ellipsoidal.js.html>} and
|
|
8
8
|
U{-vectors<https://www.Movable-Type.co.UK/scripts/latlong-vectors.html>} and I{Charles Karney}'s
|
|
9
9
|
U{Rhumb<https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1Rhumb.html>} and
|
|
@@ -47,14 +47,14 @@ from pygeodesy.units import _isDegrees, _isRadius, Distance_, Lat, Lon, \
|
|
|
47
47
|
Height, Radius, Radius_, Scalar, Scalar_
|
|
48
48
|
from pygeodesy.utily import _unrollon, _unrollon3, _Wrap
|
|
49
49
|
# from pygeodesy.vector2d import _circin6, Circin6Tuple, _circum3, circum4_, \
|
|
50
|
-
# Circum3Tuple,
|
|
50
|
+
# Circum3Tuple, _radii11ABC4 # _MODS
|
|
51
51
|
# from pygeodesy.vector3d import nearestOn6, Vector3d # _MODS
|
|
52
52
|
|
|
53
53
|
from contextlib import contextmanager
|
|
54
54
|
from math import asin, cos, degrees, fabs, radians
|
|
55
55
|
|
|
56
56
|
__all__ = _ALL_LAZY.latlonBase
|
|
57
|
-
__version__ = '24.
|
|
57
|
+
__version__ = '24.11.10'
|
|
58
58
|
|
|
59
59
|
_formy = _MODS.into(formy=__name__)
|
|
60
60
|
|
|
@@ -1142,7 +1142,7 @@ class LatLonBase(_NamedBase):
|
|
|
1142
1142
|
Circles<https://MathWorld.Wolfram.com/TangentCircles.html>}.
|
|
1143
1143
|
'''
|
|
1144
1144
|
with _toCartesian3(self, point2, point3, wrap) as cs:
|
|
1145
|
-
return _MODS.vector2d.
|
|
1145
|
+
return _MODS.vector2d._radii11ABC4(*cs, useZ=True)[0]
|
|
1146
1146
|
|
|
1147
1147
|
def _rhumb3(self, exact, radius): # != .sphericalBase._rhumbs3
|
|
1148
1148
|
'''(INTERNAL) Get the C{rhumb} for this point's datum or for
|
|
@@ -1250,10 +1250,10 @@ class LatLonBase(_NamedBase):
|
|
|
1250
1250
|
points or as a point and azimuth.
|
|
1251
1251
|
|
|
1252
1252
|
@arg circle: Radius of the circle centered at this location (C{meter}),
|
|
1253
|
-
or a point on the circle (
|
|
1254
|
-
@arg point: The start point of the rhumb line (
|
|
1255
|
-
@arg other: An other point I{on} (
|
|
1256
|
-
(compass C{degrees}) the rhumb line.
|
|
1253
|
+
or a point on the circle (same C{LatLon} class).
|
|
1254
|
+
@arg point: The start point of the rhumb line (same C{LatLon} class).
|
|
1255
|
+
@arg other: An other point I{on} (same C{LatLon} class) or the azimuth
|
|
1256
|
+
I{of} (compass C{degrees}) the rhumb line.
|
|
1257
1257
|
@kwarg height: Optional height for the intersection points (C{meter},
|
|
1258
1258
|
conventionally) or C{None} for interpolated heights.
|
|
1259
1259
|
@kwarg exact_radius_wrap_eps_tol: Optional keyword arguments, see
|
|
@@ -1266,8 +1266,7 @@ class LatLonBase(_NamedBase):
|
|
|
1266
1266
|
|
|
1267
1267
|
@raise IntersectionError: The circle and rhumb line do not intersect.
|
|
1268
1268
|
|
|
1269
|
-
@raise TypeError:
|
|
1270
|
-
or B{C{other}} invalid.
|
|
1269
|
+
@raise TypeError: Invalid B{C{point}}, B{C{circle}} or B{C{other}}.
|
|
1271
1270
|
|
|
1272
1271
|
@raise ValueError: Invalid B{C{circle}}, B{C{other}}, B{C{height}}
|
|
1273
1272
|
or B{C{exact_radius_wrap}}.
|
|
@@ -1297,7 +1296,7 @@ class LatLonBase(_NamedBase):
|
|
|
1297
1296
|
this and an other point.
|
|
1298
1297
|
|
|
1299
1298
|
@arg other: The azimuth I{of} (compass C{degrees}) or an other point
|
|
1300
|
-
I{on} (
|
|
1299
|
+
I{on} (same C{LatLon} class) the rhumb line.
|
|
1301
1300
|
@kwarg exact: Exact C{Rhumb...} to use (C{bool} or C{Rhumb...}), see
|
|
1302
1301
|
method L{Ellipsoid.rhumb_}.
|
|
1303
1302
|
@kwarg radius: Optional earth radius (C{meter}) or earth model
|
|
@@ -1311,7 +1310,7 @@ class LatLonBase(_NamedBase):
|
|
|
1311
1310
|
@return: A C{RhumbLine} instance.
|
|
1312
1311
|
|
|
1313
1312
|
@raise TypeError: Invalid B{C{radius}} or B{C{other}} not C{scalar} nor
|
|
1314
|
-
|
|
1313
|
+
same C{LatLon} class.
|
|
1315
1314
|
|
|
1316
1315
|
@see: Modules L{rhumb.aux_} and L{rhumb.ekx}.
|
|
1317
1316
|
'''
|
|
@@ -1326,7 +1325,7 @@ class LatLonBase(_NamedBase):
|
|
|
1326
1325
|
'''Return the (loxodromic) midpoint on the rhumb line between this and
|
|
1327
1326
|
an other point.
|
|
1328
1327
|
|
|
1329
|
-
@arg other: The other point (
|
|
1328
|
+
@arg other: The other point (same C{LatLon} class).
|
|
1330
1329
|
@kwarg exact: Exact C{Rhumb...} to use (C{bool} or C{Rhumb...}), see
|
|
1331
1330
|
method L{Ellipsoid.rhumb_}.
|
|
1332
1331
|
@kwarg radius: Optional earth radius (C{meter}) or earth model (L{Datum},
|
|
@@ -1341,7 +1340,7 @@ class LatLonBase(_NamedBase):
|
|
|
1341
1340
|
and unroll the B{C{other}} point (C{bool}).
|
|
1342
1341
|
|
|
1343
1342
|
@return: The midpoint at the given B{C{fraction}} along the rhumb line
|
|
1344
|
-
(
|
|
1343
|
+
(same C{LatLon} class).
|
|
1345
1344
|
|
|
1346
1345
|
@raise TypeError: The B{C{other}} point is incompatible or B{C{radius}}
|
|
1347
1346
|
is invalid.
|
|
@@ -1506,9 +1505,9 @@ class LatLonBase(_NamedBase):
|
|
|
1506
1505
|
@kwarg h: Optional height, overriding this point's height (C{meter}).
|
|
1507
1506
|
@kwarg Nvector: Optional class to return the C{n-vector} components
|
|
1508
1507
|
(C{Nvector}) or C{None}.
|
|
1509
|
-
@kwarg name_Nvector_kwds: Optional C{B{name}=NN} (C{str}) and
|
|
1510
|
-
additional B{C{Nvector}} keyword arguments, ignored if
|
|
1511
|
-
|
|
1508
|
+
@kwarg name_Nvector_kwds: Optional C{B{name}=NN} (C{str}) and optionally,
|
|
1509
|
+
additional B{C{Nvector}} keyword arguments, ignored if C{B{Nvector}
|
|
1510
|
+
is None}.
|
|
1512
1511
|
|
|
1513
1512
|
@return: An named B{C{Nvector}} or if C{B{Nvector} is None} a named
|
|
1514
1513
|
L{Vector4Tuple}C{(x, y, z, h)}.
|
|
@@ -1539,9 +1538,8 @@ class LatLonBase(_NamedBase):
|
|
|
1539
1538
|
@kwarg m: Optional unit of the height (C{str}), use C{None} to
|
|
1540
1539
|
exclude height from the returned string.
|
|
1541
1540
|
@kwarg prec_sep_s_D_M_S: Optional C{B{prec}ision}, C{B{sep}arator},
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
L{pygeodesy.lonDMS}.
|
|
1541
|
+
B{C{s_D}}, B{C{s_M}}, B{C{s_S}} and B{C{s_DMS}} keyword
|
|
1542
|
+
arguments, see function L{pygeodesy.toDMS} for details.
|
|
1545
1543
|
|
|
1546
1544
|
@return: This point in the specified C{B{form}at}, etc. (C{str} or
|
|
1547
1545
|
a 2- or 3-tuple C{(lat_str, lon_str[, height_str])} if
|