pygeodesy 24.8.4__py2.py3-none-any.whl → 24.9.9__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.8.4.dist-info → PyGeodesy-24.9.9.dist-info}/METADATA +17 -16
- PyGeodesy-24.9.9.dist-info/RECORD +118 -0
- {PyGeodesy-24.8.4.dist-info → PyGeodesy-24.9.9.dist-info}/WHEEL +1 -1
- pygeodesy/__init__.py +23 -23
- pygeodesy/__main__.py +46 -47
- pygeodesy/auxilats/_CX_4.py +104 -181
- pygeodesy/auxilats/_CX_6.py +152 -277
- pygeodesy/auxilats/_CX_8.py +211 -438
- pygeodesy/auxilats/_CX_Rs.py +222 -0
- pygeodesy/auxilats/__init__.py +2 -2
- pygeodesy/auxilats/__main__.py +30 -38
- pygeodesy/auxilats/auxDST.py +2 -2
- pygeodesy/auxilats/auxLat.py +28 -36
- pygeodesy/auxilats/auxily.py +30 -50
- pygeodesy/basics.py +18 -7
- pygeodesy/booleans.py +10 -11
- pygeodesy/cartesianBase.py +5 -5
- pygeodesy/constants.py +35 -34
- pygeodesy/ellipsoidalBase.py +18 -15
- pygeodesy/ellipsoidalExact.py +2 -2
- pygeodesy/ellipsoidalGeodSolve.py +2 -2
- pygeodesy/ellipsoidalKarney.py +2 -2
- pygeodesy/ellipsoidalNvector.py +2 -2
- pygeodesy/ellipsoidalVincenty.py +7 -6
- pygeodesy/elliptic.py +154 -88
- pygeodesy/epsg.py +3 -3
- pygeodesy/etm.py +71 -59
- pygeodesy/fmath.py +99 -90
- pygeodesy/fsums.py +201 -14
- pygeodesy/gars.py +9 -8
- pygeodesy/geodesici.py +6 -5
- pygeodesy/geodesicx/_C4_24.py +1 -3
- pygeodesy/geodesicx/_C4_27.py +1 -3
- pygeodesy/geodesicx/_C4_30.py +1 -3
- pygeodesy/geodesicx/__init__.py +1 -1
- pygeodesy/geodesicx/__main__.py +44 -46
- pygeodesy/geodesicx/gx.py +3 -3
- pygeodesy/geodesicx/gxarea.py +5 -5
- pygeodesy/geodesicx/gxbases.py +32 -18
- pygeodesy/geodsolve.py +3 -3
- pygeodesy/geohash.py +18 -11
- pygeodesy/geoids.py +293 -315
- pygeodesy/heights.py +150 -158
- pygeodesy/internals.py +70 -9
- pygeodesy/interns.py +4 -4
- pygeodesy/karney.py +83 -60
- pygeodesy/ktm.py +4 -4
- pygeodesy/latlonBase.py +13 -7
- pygeodesy/lazily.py +13 -8
- pygeodesy/ltp.py +5 -6
- pygeodesy/ltpTuples.py +7 -1
- pygeodesy/mgrs.py +47 -42
- pygeodesy/named.py +8 -4
- pygeodesy/namedTuples.py +14 -1
- pygeodesy/osgr.py +7 -7
- pygeodesy/points.py +2 -2
- pygeodesy/props.py +7 -6
- pygeodesy/resections.py +7 -7
- pygeodesy/rhumb/__init__.py +1 -1
- pygeodesy/rhumb/aux_.py +42 -60
- pygeodesy/rhumb/solve.py +3 -3
- pygeodesy/simplify.py +10 -10
- pygeodesy/sphericalBase.py +3 -3
- pygeodesy/sphericalTrigonometry.py +2 -2
- pygeodesy/streprs.py +3 -3
- pygeodesy/triaxials.py +207 -201
- pygeodesy/units.py +3 -3
- pygeodesy/unitsBase.py +4 -4
- pygeodesy/utmupsBase.py +3 -3
- pygeodesy/vector2d.py +158 -51
- pygeodesy/vector3d.py +13 -52
- pygeodesy/vector3dBase.py +81 -63
- pygeodesy/webmercator.py +3 -3
- pygeodesy/wgrs.py +20 -22
- PyGeodesy-24.8.4.dist-info/RECORD +0 -117
- {PyGeodesy-24.8.4.dist-info → PyGeodesy-24.9.9.dist-info}/top_level.txt +0 -0
pygeodesy/namedTuples.py
CHANGED
|
@@ -28,7 +28,7 @@ from pygeodesy.units import Band, Bearing, Degrees, Degrees2, Easting, FIx, \
|
|
|
28
28
|
Radius, Scalar, Str, INT0
|
|
29
29
|
|
|
30
30
|
__all__ = _ALL_LAZY.namedTuples
|
|
31
|
-
__version__ = '24.
|
|
31
|
+
__version__ = '24.08.18'
|
|
32
32
|
|
|
33
33
|
# __DUNDER gets mangled in class
|
|
34
34
|
_closest_ = 'closest'
|
|
@@ -676,6 +676,12 @@ class Vector3Tuple(_NamedTuple):
|
|
|
676
676
|
'''
|
|
677
677
|
return self
|
|
678
678
|
|
|
679
|
+
@property_RO
|
|
680
|
+
def xyz3(self):
|
|
681
|
+
'''Get X, Y and Z components as C{3-tuple}.
|
|
682
|
+
'''
|
|
683
|
+
return tuple(self)
|
|
684
|
+
|
|
679
685
|
|
|
680
686
|
class Vector4Tuple(_NamedTuple): # .nvector.py
|
|
681
687
|
'''4-Tuple C{(x, y, z, h)} of (geocentric) components, all
|
|
@@ -697,6 +703,13 @@ class Vector4Tuple(_NamedTuple): # .nvector.py
|
|
|
697
703
|
'''
|
|
698
704
|
return Vector3Tuple(*self[:3])
|
|
699
705
|
|
|
706
|
+
@property_RO
|
|
707
|
+
def xyz3(self):
|
|
708
|
+
'''Get X, Y and Z components as C{3-tuple}.
|
|
709
|
+
'''
|
|
710
|
+
return tuple(self[:3])
|
|
711
|
+
|
|
712
|
+
|
|
700
713
|
# **) MIT License
|
|
701
714
|
#
|
|
702
715
|
# Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
|
pygeodesy/osgr.py
CHANGED
|
@@ -53,7 +53,7 @@ from pygeodesy.utily import degrees90, degrees180, sincostan3, truncate
|
|
|
53
53
|
from math import cos, fabs, radians, sin, sqrt
|
|
54
54
|
|
|
55
55
|
__all__ = _ALL_LAZY.osgr
|
|
56
|
-
__version__ = '24.
|
|
56
|
+
__version__ = '24.08.13'
|
|
57
57
|
|
|
58
58
|
_equivalent_ = 'equivalent'
|
|
59
59
|
_OSGR_ = 'OSGR'
|
|
@@ -289,9 +289,9 @@ class Osgr(_NamedBase):
|
|
|
289
289
|
@kwarg datum: Optional datum to convert to (L{Datum},
|
|
290
290
|
L{Ellipsoid}, L{Ellipsoid2}, L{Ellipsoid2}
|
|
291
291
|
or L{a_f2Tuple}).
|
|
292
|
-
@kwarg kTM: If C{True} use I{Karney}'s Krüger method from
|
|
293
|
-
module L{ktm}, otherwise use the Ordnance
|
|
294
|
-
|
|
292
|
+
@kwarg kTM: If C{True}, use I{Karney}'s Krüger method from
|
|
293
|
+
module L{ktm}, otherwise use the Ordnance Survey
|
|
294
|
+
formulation (C{bool}).
|
|
295
295
|
@kwarg eps: Tolerance for OS convergence (C{meter}).
|
|
296
296
|
@kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword
|
|
297
297
|
arguments, ignored if C{B{LatLon} is None}.
|
|
@@ -585,9 +585,9 @@ def toOsgr(latlon, lon=None, kTM=False, datum=_WGS84, Osgr=Osgr, # MCCABE 14
|
|
|
585
585
|
@arg latlon: Latitude (C{degrees}) or an (ellipsoidal) geodetic
|
|
586
586
|
C{LatLon} point.
|
|
587
587
|
@kwarg lon: Optional longitude in degrees (scalar or C{None}).
|
|
588
|
-
@kwarg kTM: If C{True} use I{Karney}'s Krüger method from
|
|
589
|
-
module L{ktm}, otherwise use the Ordnance
|
|
590
|
-
|
|
588
|
+
@kwarg kTM: If C{True}, use I{Karney}'s Krüger method from
|
|
589
|
+
module L{ktm}, otherwise use the Ordnance Survey
|
|
590
|
+
formulation (C{bool}).
|
|
591
591
|
@kwarg datum: Optional datum to convert B{C{lat, lon}} from
|
|
592
592
|
(L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or
|
|
593
593
|
L{a_f2Tuple}).
|
pygeodesy/points.py
CHANGED
|
@@ -62,7 +62,7 @@ from pygeodesy.utily import atan2b, degrees90, degrees180, degrees2m, \
|
|
|
62
62
|
from math import cos, fabs, fmod as _fmod, radians, sin
|
|
63
63
|
|
|
64
64
|
__all__ = _ALL_LAZY.points
|
|
65
|
-
__version__ = '24.
|
|
65
|
+
__version__ = '24.08.13'
|
|
66
66
|
|
|
67
67
|
_ilat_ = 'ilat'
|
|
68
68
|
_ilon_ = 'ilon'
|
|
@@ -217,7 +217,7 @@ class _Basequence(_Sequence): # immutable, on purpose
|
|
|
217
217
|
def copy(self, deep=False): # PYCHOK no cover
|
|
218
218
|
'''Make a shallow or deep copy of this instance.
|
|
219
219
|
|
|
220
|
-
@kwarg deep: If C{True} make a deep, otherwise a
|
|
220
|
+
@kwarg deep: If C{True}, make a deep, otherwise a
|
|
221
221
|
shallow copy (C{bool}).
|
|
222
222
|
|
|
223
223
|
@return: The copy (C{This class}).
|
pygeodesy/props.py
CHANGED
|
@@ -25,12 +25,11 @@ from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, \
|
|
|
25
25
|
from functools import wraps as _wraps
|
|
26
26
|
|
|
27
27
|
__all__ = _ALL_LAZY.props
|
|
28
|
-
__version__ = '24.
|
|
28
|
+
__version__ = '24.09.02'
|
|
29
29
|
|
|
30
30
|
_class_ = 'class'
|
|
31
31
|
_dont_use_ = _DEPRECATED_ + ", don't use."
|
|
32
32
|
_function_ = 'function'
|
|
33
|
-
_get_and_set_ = 'get and set'
|
|
34
33
|
_has_been_ = 'has been' # PYCHOK used!
|
|
35
34
|
_method_ = 'method'
|
|
36
35
|
_not_an_inst_ = _not_(_an_, 'instance')
|
|
@@ -396,7 +395,9 @@ class property_ROver(_property_RO___):
|
|
|
396
395
|
# No __doc__ on purpose
|
|
397
396
|
|
|
398
397
|
def _fget(self, inst):
|
|
399
|
-
'''Get the C{property} value I{once} and overwrite C{self},
|
|
398
|
+
'''Get the C{property} value I{once} and overwrite C{self},
|
|
399
|
+
this C{property} instance in the (super-)class of C{self}
|
|
400
|
+
where this property is define as a L{property_ROver}.
|
|
400
401
|
'''
|
|
401
402
|
v = self.method(inst)
|
|
402
403
|
n = self.name
|
|
@@ -411,8 +412,8 @@ class property_ROver(_property_RO___):
|
|
|
411
412
|
return v
|
|
412
413
|
|
|
413
414
|
|
|
414
|
-
class _NamedProperty(property):
|
|
415
|
-
'''Class C{property} with
|
|
415
|
+
class _NamedProperty(property): # in .named
|
|
416
|
+
'''Class C{property} with a C{.name} attribute.
|
|
416
417
|
'''
|
|
417
418
|
@Property_RO
|
|
418
419
|
def name(self):
|
|
@@ -445,7 +446,7 @@ def property_doc_(doc):
|
|
|
445
446
|
def _documented_property(method):
|
|
446
447
|
'''(INTERNAL) Return the documented C{property}.
|
|
447
448
|
'''
|
|
448
|
-
t =
|
|
449
|
+
t = 'get and set' if doc.startswith(_SPACE_) else NN
|
|
449
450
|
return _NamedProperty(method, None, None, NN('Property to ', t, doc))
|
|
450
451
|
|
|
451
452
|
return _documented_property
|
pygeodesy/resections.py
CHANGED
|
@@ -34,7 +34,7 @@ from pygeodesy.vector3d import _otherV3d, Vector3d
|
|
|
34
34
|
from math import cos, atan2, degrees, fabs, radians, sin, sqrt
|
|
35
35
|
|
|
36
36
|
__all__ = _ALL_LAZY.resections
|
|
37
|
-
__version__ = '24.
|
|
37
|
+
__version__ = '24.08.18'
|
|
38
38
|
|
|
39
39
|
_concyclic_ = 'concyclic'
|
|
40
40
|
_PA_ = 'PA'
|
|
@@ -356,8 +356,8 @@ def pierlot(point1, point2, point3, alpha12, alpha23, useZ=False, eps=EPS,
|
|
|
356
356
|
def _pierlot3(B1, B2, B3, a12, a23, useZ, cot):
|
|
357
357
|
'''(INTERNAL) Shared L{pierlot} and L{pierlotx}.
|
|
358
358
|
'''
|
|
359
|
-
x1_, y1_, _ = B1.minus(B2).
|
|
360
|
-
x3_, y3_, _ = B3.minus(B2).
|
|
359
|
+
x1_, y1_, _ = B1.minus(B2).xyz3
|
|
360
|
+
x3_, y3_, _ = B3.minus(B2).xyz3
|
|
361
361
|
|
|
362
362
|
s12, c12, s23, c23 = sincos2d_(a12, a23)
|
|
363
363
|
# cot31 = (1 - cot12 * cot23) / (cot12 + cot32)
|
|
@@ -402,7 +402,7 @@ def _pierlot3(B1, B2, B3, a12, a23, useZ, cot):
|
|
|
402
402
|
x, y = _pierlotxy2(B2, -K, Y12_23, X12_23, (X31_23 * Y12_23 -
|
|
403
403
|
X12_23 * Y31_23))
|
|
404
404
|
else:
|
|
405
|
-
x, y, _ = B2.
|
|
405
|
+
x, y, _ = B2.xyz3
|
|
406
406
|
return x, y, _zidw(x, y, useZ, B1, B2, B3)
|
|
407
407
|
|
|
408
408
|
|
|
@@ -484,8 +484,8 @@ def _pierlotx3(a_z_Bs, useZ, cot, Cs):
|
|
|
484
484
|
Cs(4)
|
|
485
485
|
return _pierlot3(B1, B2, B3, a12, a23, useZ, cot)
|
|
486
486
|
|
|
487
|
-
x1_, y1_, _ = B1.minus(B3).
|
|
488
|
-
x2_, y2_, _ = B2.minus(B3).
|
|
487
|
+
x1_, y1_, _ = B1.minus(B3).xyz3
|
|
488
|
+
x2_, y2_, _ = B2.minus(B3).xyz3
|
|
489
489
|
|
|
490
490
|
K = _Fsumf_(y1_ * x2_, -x1_ * y2_)
|
|
491
491
|
if K:
|
|
@@ -508,7 +508,7 @@ def _pierlotx3(a_z_Bs, useZ, cot, Cs):
|
|
|
508
508
|
x, y = _pierlotxy2(B3, K, Y31_23, X31_23, (X31_23 * _Fsumf_(x2_, -x1_) +
|
|
509
509
|
Y31_23 * _Fsumf_(y2_, -y1_)))
|
|
510
510
|
else:
|
|
511
|
-
x, y, _ = B3.
|
|
511
|
+
x, y, _ = B3.xyz3
|
|
512
512
|
return x, y, _zidw(x, y, useZ, B1, B2, B3)
|
|
513
513
|
|
|
514
514
|
|
pygeodesy/rhumb/__init__.py
CHANGED
|
@@ -9,7 +9,7 @@ u'''Package of lazily imported C{rhumb} modules L{rhumb.aux_}, L{rhumb.ekx} and
|
|
|
9
9
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_OTHER, _lazy_import_as, _unLazy0
|
|
10
10
|
|
|
11
11
|
__all__ = _ALL_LAZY.rhumb
|
|
12
|
-
__version__ = '24.
|
|
12
|
+
__version__ = '24.09.02'
|
|
13
13
|
|
|
14
14
|
if _unLazy0: # or _isfrozen
|
|
15
15
|
from pygeodesy.rhumb.aux_ import RhumbAux, RhumbLineAux
|
pygeodesy/rhumb/aux_.py
CHANGED
|
@@ -31,7 +31,8 @@ from __future__ import division as _; del _ # PYCHOK semicolon
|
|
|
31
31
|
from pygeodesy.auxilats.auxAngle import AuxMu, AuxPhi, hypot
|
|
32
32
|
from pygeodesy.auxilats.auxDLat import AuxDLat, _DClenshaw
|
|
33
33
|
# from pygeodesy.auxilats.auxDST import AuxDST # _MODS
|
|
34
|
-
from pygeodesy.auxilats.auxily import _Dlam, _Dp0Dpsi
|
|
34
|
+
from pygeodesy.auxilats.auxily import _Dlam, _Dp0Dpsi
|
|
35
|
+
from pygeodesy.auxilats._CX_Rs import _Rdict, _Rtuple
|
|
35
36
|
from pygeodesy.basics import copysign0, _reverange, _xkwds_get1
|
|
36
37
|
from pygeodesy.constants import EPS_2, MANT_DIG, PI4, isinf, \
|
|
37
38
|
_0_0, _4_0, _720_0, _log2, _over
|
|
@@ -47,7 +48,7 @@ from pygeodesy.rhumb.bases import RhumbBase, RhumbLineBase, \
|
|
|
47
48
|
from math import ceil as _ceil, fabs, radians
|
|
48
49
|
|
|
49
50
|
__all__ = _ALL_LAZY.rhumb_aux_
|
|
50
|
-
__version__ = '24.
|
|
51
|
+
__version__ = '24.09.02'
|
|
51
52
|
|
|
52
53
|
# DIGITS = (sizeof(real) * 8) bits
|
|
53
54
|
# = (ctypes.sizeof(ctypes.c_double(1.0)) * 8) bits
|
|
@@ -302,73 +303,54 @@ def _RAseries(auxD):
|
|
|
302
303
|
Cs = _RACoeffs[aL]
|
|
303
304
|
# assert len(Cs) == (aL * (aL + 1)) // 2
|
|
304
305
|
pP = []
|
|
305
|
-
_P = pP.append
|
|
306
306
|
_p = _polynomial
|
|
307
307
|
for m in _reverange(aL): # order
|
|
308
308
|
j = i + m + 1
|
|
309
|
-
|
|
309
|
+
pP.append(_p(n, Cs, i, j) * d)
|
|
310
310
|
d *= n
|
|
311
311
|
i = j
|
|
312
312
|
# assert i == len(pP)
|
|
313
313
|
return pP
|
|
314
314
|
|
|
315
315
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
-
|
|
342
|
-
-
|
|
343
|
-
|
|
344
|
-
-
|
|
345
|
-
|
|
346
|
-
-58573784
|
|
347
|
-
|
|
348
|
-
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
188270561816 / _f(488462349375), -565017322 / _f(1915538625),
|
|
355
|
-
138734126 / _f(638512875), -102614 / _f(467775), 596 / _f(2025),
|
|
356
|
-
-398 / _f(945), 22 / _f(45), -1 / _f(3),
|
|
357
|
-
2332829602 / _f(23260111875), -1969276 / _f(58046625),
|
|
358
|
-
17749373 / _f(425675250), -24562 / _f(155925), 1543 / _f(4725),
|
|
359
|
-
-118 / _f(315), 1 / _f(5),
|
|
360
|
-
-41570288 / _f(930404475), -58573784 / _f(638512875),
|
|
361
|
-
1882432 / _f(8513505), -38068 / _f(155925), 152 / _f(945),
|
|
362
|
-
-17 / _f(315),
|
|
363
|
-
1538774036 / _f(10854718875), -6975184 / _f(42567525),
|
|
364
|
-
268864 / _f(2027025), -752 / _f(10395), 5 / _f(252),
|
|
365
|
-
436821248 / _f(3618239625), -112832 / _f(1447875),
|
|
366
|
-
62464 / _f(2027025), -101 / _f(17325),
|
|
367
|
-
3059776 / _f(80405325), -4096 / _f(289575), 11537 / _f(4054050),
|
|
368
|
-
4193792 / _f(723647925), -311 / _f(525525),
|
|
369
|
-
1097653 / _f(1929727800))
|
|
370
|
-
}
|
|
371
|
-
del _f, _u, _Ufloats
|
|
316
|
+
_RACoeffs = _Rdict(110, # Rhumb Area Coefficients in matrix Q
|
|
317
|
+
_Rtuple(4, 10, # GEOGRAPHICLIB_RHUMBAREA_ORDER == 4
|
|
318
|
+
'596/2025, -398/945, 22/45, -1/3',
|
|
319
|
+
'1543/4725, -118/315, 1/5',
|
|
320
|
+
'152/945, -17/315',
|
|
321
|
+
'5/252'),
|
|
322
|
+
_Rtuple(5, 15, # GEOGRAPHICLIB_RHUMBAREA_ORDER == 5
|
|
323
|
+
'-102614/467775, 596/2025, -398/945, 22/45, -1/3',
|
|
324
|
+
'-24562/155925, 1543/4725, -118/315, 1/5',
|
|
325
|
+
'-38068/155925, 152/945, -17/315',
|
|
326
|
+
'-752/10395, 5/252',
|
|
327
|
+
'-101/17325'),
|
|
328
|
+
_Rtuple(6, 21, # GEOGRAPHICLIB_RHUMBAREA_ORDER == 6
|
|
329
|
+
'138734126/638512875, -102614/467775, 596/2025, -398/945, 22/45, -1/3',
|
|
330
|
+
'17749373/425675250, -24562/155925, 1543/4725, -118/315, 1/5',
|
|
331
|
+
'1882432/8513505, -38068/155925, 152/945, -17/315',
|
|
332
|
+
'268864/2027025, -752/10395, 5/252',
|
|
333
|
+
'62464/2027025, -101/17325',
|
|
334
|
+
'11537/4054050'),
|
|
335
|
+
_Rtuple(7, 28, # GEOGRAPHICLIB_RHUMBAREA_ORDER == 7
|
|
336
|
+
'-565017322/1915538625, 138734126/638512875, -102614/467775, 596/2025, -398/945, 22/45, -1/3',
|
|
337
|
+
'-1969276/58046625, 17749373/425675250, -24562/155925, 1543/4725, -118/315, 1/5',
|
|
338
|
+
'-58573784/638512875, 1882432/8513505, -38068/155925, 152/945, -17/315',
|
|
339
|
+
'-6975184/42567525, 268864/2027025, -752/10395, 5/252',
|
|
340
|
+
'-112832/1447875, 62464/2027025, -101/17325',
|
|
341
|
+
'-4096/289575, 11537/4054050',
|
|
342
|
+
'-311/525525'),
|
|
343
|
+
_Rtuple(8, 36, # GEOGRAPHICLIB_RHUMBAREA_ORDER == 8
|
|
344
|
+
'188270561816/488462349375, -565017322/1915538625, 138734126/638512875, -102614/467775, 596/2025, -398/945, 22/45, -1/3',
|
|
345
|
+
'2332829602/23260111875, -1969276/58046625, 17749373/425675250, -24562/155925, 1543/4725, -118/315, 1/5',
|
|
346
|
+
'-41570288/930404475, -58573784/638512875, 1882432/8513505, -38068/155925, 152/945, -17/315',
|
|
347
|
+
'1538774036/10854718875, -6975184/42567525, 268864/2027025, -752/10395, 5/252',
|
|
348
|
+
'436821248/3618239625, -112832/1447875, 62464/2027025, -101/17325',
|
|
349
|
+
'3059776/80405325, -4096/289575, 11537/4054050',
|
|
350
|
+
'4193792/723647925, -311/525525',
|
|
351
|
+
'1097653/1929727800')
|
|
352
|
+
)
|
|
353
|
+
del _Rdict, _Rtuple
|
|
372
354
|
|
|
373
355
|
__all__ += _ALL_DOCS(Caps)
|
|
374
356
|
|
pygeodesy/rhumb/solve.py
CHANGED
|
@@ -21,7 +21,7 @@ from pygeodesy.solveBase import _SolveGDictBase, _SolveGDictLineBase
|
|
|
21
21
|
from pygeodesy.utily import _unrollon, _Wrap, wrap360
|
|
22
22
|
|
|
23
23
|
__all__ = _ALL_LAZY.rhumb_solve
|
|
24
|
-
__version__ = '24.
|
|
24
|
+
__version__ = '24.08.13'
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
class _RhumbSolveBase(_SolveGDictBase):
|
|
@@ -94,8 +94,8 @@ class RhumbSolve(_RhumbSolveBase):
|
|
|
94
94
|
# '''Set up a L{RhumbArea} to compute area and
|
|
95
95
|
# perimeter of a polygon.
|
|
96
96
|
#
|
|
97
|
-
# @kwarg polyline: If C{True} perimeter only,
|
|
98
|
-
#
|
|
97
|
+
# @kwarg polyline: If C{True}, compute the perimeter only,
|
|
98
|
+
# otherwise perimeter and area (C{bool}).
|
|
99
99
|
# @kwarg name: Optional C{B{name}=NN} (C{str}).
|
|
100
100
|
#
|
|
101
101
|
# @return: A L{RhumbArea} instance.
|
pygeodesy/simplify.py
CHANGED
|
@@ -86,7 +86,7 @@ from pygeodesy.units import _ALL_LAZY, _1mm, Radius_
|
|
|
86
86
|
from math import degrees, fabs, radians
|
|
87
87
|
|
|
88
88
|
__all__ = _ALL_LAZY.simplify
|
|
89
|
-
__version__ = '24.
|
|
89
|
+
__version__ = '24.08.13'
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
# try:
|
|
@@ -383,7 +383,7 @@ def simplify1(points, distance=_1mm, radius=R_M, indices=False, **options):
|
|
|
383
383
|
@arg points: Path points (C{LatLon}[]).
|
|
384
384
|
@kwarg distance: Tolerance (C{meter}, same units as B{C{radius}}).
|
|
385
385
|
@kwarg radius: Mean earth radius (C{meter}).
|
|
386
|
-
@kwarg indices: If C{True} return the simplified point indices
|
|
386
|
+
@kwarg indices: If C{True}, return the simplified point indices
|
|
387
387
|
instead of the simplified points (C{bool}).
|
|
388
388
|
@kwarg options: Optional keyword arguments passed thru to
|
|
389
389
|
function L{pygeodesy.equirectangular4}.
|
|
@@ -426,9 +426,9 @@ def simplifyRDP(points, distance=_1mm, radius=R_M, shortest=False,
|
|
|
426
426
|
@arg points: Path points (C{LatLon}[]).
|
|
427
427
|
@kwarg distance: Tolerance (C{meter}, same units as B{C{radius}}).
|
|
428
428
|
@kwarg radius: Mean earth radius (C{meter}).
|
|
429
|
-
@kwarg shortest: If C{True} use the I{shortest} otherwise the
|
|
429
|
+
@kwarg shortest: If C{True}, use the I{shortest} otherwise the
|
|
430
430
|
I{perpendicular} distance (C{bool}).
|
|
431
|
-
@kwarg indices: If C{True} return the simplified point indices
|
|
431
|
+
@kwarg indices: If C{True}, return the simplified point indices
|
|
432
432
|
instead of the simplified points (C{bool}).
|
|
433
433
|
@kwarg options: Optional keyword arguments passed thru to
|
|
434
434
|
function L{pygeodesy.equirectangular4}.
|
|
@@ -460,9 +460,9 @@ def simplifyRDPm(points, distance=_1mm, radius=R_M, shortest=False,
|
|
|
460
460
|
@arg points: Path points (C{LatLon}[]).
|
|
461
461
|
@kwarg distance: Tolerance (C{meter}, same units as B{C{radius}}).
|
|
462
462
|
@kwarg radius: Mean earth radius (C{meter}).
|
|
463
|
-
@kwarg shortest: If C{True} use the I{shortest} otherwise the
|
|
463
|
+
@kwarg shortest: If C{True}, use the I{shortest} otherwise the
|
|
464
464
|
I{perpendicular} distance (C{bool}).
|
|
465
|
-
@kwarg indices: If C{True} return the simplified point indices
|
|
465
|
+
@kwarg indices: If C{True}, return the simplified point indices
|
|
466
466
|
instead of the simplified points (C{bool}).
|
|
467
467
|
@kwarg options: Optional keyword arguments passed thru to
|
|
468
468
|
function L{pygeodesy.equirectangular4}.
|
|
@@ -491,9 +491,9 @@ def simplifyRW(points, pipe=_1mm, radius=R_M, shortest=False,
|
|
|
491
491
|
@kwarg pipe: Pipe radius, half-width (C{meter}, same units as
|
|
492
492
|
B{C{radius}}).
|
|
493
493
|
@kwarg radius: Mean earth radius (C{meter}).
|
|
494
|
-
@kwarg shortest: If C{True} use the I{shortest} otherwise the
|
|
494
|
+
@kwarg shortest: If C{True}, use the I{shortest} otherwise the
|
|
495
495
|
I{perpendicular} distance (C{bool}).
|
|
496
|
-
@kwarg indices: If C{True} return the simplified point indices
|
|
496
|
+
@kwarg indices: If C{True}, return the simplified point indices
|
|
497
497
|
instead of the simplified points (C{bool}).
|
|
498
498
|
@kwarg options: Optional keyword arguments passed thru to
|
|
499
499
|
function L{pygeodesy.equirectangular4}.
|
|
@@ -544,7 +544,7 @@ def simplifyVW(points, area=_1mm, radius=R_M, attr=None,
|
|
|
544
544
|
@kwarg radius: Mean earth radius (C{meter}).
|
|
545
545
|
@kwarg attr: Optional, points attribute to save the area value
|
|
546
546
|
(C{str}).
|
|
547
|
-
@kwarg indices: If C{True} return the simplified point indices
|
|
547
|
+
@kwarg indices: If C{True}, return the simplified point indices
|
|
548
548
|
instead of the simplified points (C{bool}).
|
|
549
549
|
@kwarg options: Optional keyword arguments passed thru to
|
|
550
550
|
function L{pygeodesy.equirectangular4}.
|
|
@@ -600,7 +600,7 @@ def simplifyVWm(points, area=_1mm, radius=R_M, attr=None,
|
|
|
600
600
|
@kwarg radius: Mean earth radius (C{meter}).
|
|
601
601
|
@kwarg attr: Optional, points attribute to save the area value
|
|
602
602
|
(C{str}).
|
|
603
|
-
@kwarg indices: If C{True} return the simplified point indices
|
|
603
|
+
@kwarg indices: If C{True}, return the simplified point indices
|
|
604
604
|
instead of the simplified points (C{bool}).
|
|
605
605
|
@kwarg options: Optional keyword arguments passed thru to
|
|
606
606
|
function L{pygeodesy.equirectangular4}.
|
pygeodesy/sphericalBase.py
CHANGED
|
@@ -40,7 +40,7 @@ from pygeodesy.utily import acos1, asin1, atan2b, atan2d, degrees90, \
|
|
|
40
40
|
from math import cos, fabs, log, sin, sqrt
|
|
41
41
|
|
|
42
42
|
__all__ = _ALL_LAZY.sphericalBase
|
|
43
|
-
__version__ = '24.
|
|
43
|
+
__version__ = '24.08,13'
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
class CartesianSphericalBase(CartesianBase):
|
|
@@ -210,7 +210,7 @@ class LatLonSphericalBase(LatLonBase):
|
|
|
210
210
|
B{C{point}} I{of} the (great circle) line (compass
|
|
211
211
|
C{degrees}).
|
|
212
212
|
@kwarg radius: Mean earth radius (C{meter}, conventionally).
|
|
213
|
-
@kwarg exact: If C{True} use the I{exact} rhumb methods for azimuth,
|
|
213
|
+
@kwarg exact: If C{True}, use the I{exact} rhumb methods for azimuth,
|
|
214
214
|
destination and distance, if C{False} use the basic
|
|
215
215
|
rhumb methods (C{bool}) or if C{None} use the I{great
|
|
216
216
|
circle} methods.
|
|
@@ -474,7 +474,7 @@ class LatLonSphericalBase(LatLonBase):
|
|
|
474
474
|
@arg other: An other point (this I{on} C{LatLon}) or the azimuth I{of}
|
|
475
475
|
(compass C{degrees}) the rhumb line.
|
|
476
476
|
@kwarg radius: Mean earth radius (C{meter}, conventionally).
|
|
477
|
-
@kwarg exact: If C{True} use the I{exact} rhumb methods for azimuth,
|
|
477
|
+
@kwarg exact: If C{True}, use the I{exact} rhumb methods for azimuth,
|
|
478
478
|
destination and distance, if C{False} use the basic
|
|
479
479
|
rhumb methods (C{bool}) or if C{None} use the I{great
|
|
480
480
|
circle} methods.
|
|
@@ -54,7 +54,7 @@ from pygeodesy.vector3d import sumOf, Vector3d
|
|
|
54
54
|
from math import asin, atan2, cos, degrees, fabs, radians, sin
|
|
55
55
|
|
|
56
56
|
__all__ = _ALL_LAZY.sphericalTrigonometry
|
|
57
|
-
__version__ = '24.
|
|
57
|
+
__version__ = '24.08.13'
|
|
58
58
|
|
|
59
59
|
_PI_EPS4 = PI - EPS4
|
|
60
60
|
if _PI_EPS4 >= PI:
|
|
@@ -706,7 +706,7 @@ class LatLon(LatLonSphericalBase):
|
|
|
706
706
|
@arg distance2: Distance to point2 (C{meter}, same units as B{C{radius}}).
|
|
707
707
|
@arg point3: Third center point (C{LatLon}).
|
|
708
708
|
@arg distance3: Distance to point3 (C{meter}, same units as B{C{radius}}).
|
|
709
|
-
@kwarg area: If C{True} compute the area overlap, otherwise the perimeter
|
|
709
|
+
@kwarg area: If C{True}, compute the area overlap, otherwise the perimeter
|
|
710
710
|
intersection of the circles (C{bool}).
|
|
711
711
|
@kwarg eps: The required I{minimal overlap} for C{B{area}=True} or the
|
|
712
712
|
I{intersection margin} if C{B{area}=False} (C{meter}, same
|
pygeodesy/streprs.py
CHANGED
|
@@ -22,7 +22,7 @@ from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _dunder_nameof
|
|
|
22
22
|
from math import fabs, log10 as _log10
|
|
23
23
|
|
|
24
24
|
__all__ = _ALL_LAZY.streprs
|
|
25
|
-
__version__ = '24.
|
|
25
|
+
__version__ = '24.08.13'
|
|
26
26
|
|
|
27
27
|
_at_ = 'at' # PYCHOK used!
|
|
28
28
|
_EN_PREC = 6 # max MGRS/OSGR precision, 1 micrometer
|
|
@@ -310,8 +310,8 @@ def fstr(floats, prec=6, fmt=Fmt.F, ints=False, sep=_COMMASPACE_, strepr=None, f
|
|
|
310
310
|
@kwarg strepr: Optional callable to format non-C{floats} (typically
|
|
311
311
|
C{repr}, C{str}) or C{None} to raise a TypeError and used
|
|
312
312
|
only if C{B{force} is not True}.
|
|
313
|
-
@kwarg force: If C{True} format all B{C{floats}} using B{C{fmt}},
|
|
314
|
-
otherwise use B{C{strepr}} for non-C{floats}.
|
|
313
|
+
@kwarg force: If C{True}, format all B{C{floats}} using B{C{fmt}},
|
|
314
|
+
otherwise use B{C{strepr}} for non-C{floats} (C{bool}).
|
|
315
315
|
|
|
316
316
|
@return: The C{sep.join(strs(floats, ...)} joined (C{str}) or single
|
|
317
317
|
C{strs((floats,), ...)} (C{str}) if B{C{floats}} is C{scalar}.
|