pygeodesy 25.5.5__py2.py3-none-any.whl → 25.5.28__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 +186 -186
- pygeodesy/__main__.py +4 -3
- pygeodesy/albers.py +4 -4
- pygeodesy/auxilats/_CX_Rs.py +3 -3
- pygeodesy/auxilats/auxAngle.py +2 -2
- pygeodesy/auxilats/auxDLat.py +2 -2
- pygeodesy/auxilats/auxDST.py +2 -2
- pygeodesy/auxilats/auxLat.py +2 -2
- pygeodesy/auxilats/auxily.py +2 -2
- pygeodesy/azimuthal.py +2 -2
- pygeodesy/booleans.py +11 -11
- pygeodesy/cartesianBase.py +2 -2
- pygeodesy/clipy.py +2 -2
- pygeodesy/constants.py +7 -7
- pygeodesy/css.py +1 -1
- pygeodesy/datums.py +2 -2
- pygeodesy/deprecated/__init__.py +8 -8
- pygeodesy/deprecated/bases.py +2 -2
- pygeodesy/deprecated/rhumbBase.py +2 -2
- pygeodesy/deprecated/rhumbaux.py +2 -2
- pygeodesy/deprecated/rhumbsolve.py +2 -2
- pygeodesy/deprecated/rhumbx.py +2 -2
- pygeodesy/ecef.py +3 -4
- pygeodesy/ellipsoidalBase.py +2 -2
- pygeodesy/ellipsoidalBaseDI.py +7 -6
- pygeodesy/ellipsoidalExact.py +24 -29
- pygeodesy/ellipsoidalGeodSolve.py +19 -19
- pygeodesy/ellipsoidalKarney.py +22 -27
- pygeodesy/ellipsoidalNvector.py +4 -4
- pygeodesy/ellipsoidalVincenty.py +17 -15
- pygeodesy/ellipsoids.py +4 -4
- pygeodesy/elliptic.py +16 -11
- pygeodesy/errors.py +1 -1
- pygeodesy/etm.py +2 -2
- pygeodesy/fmath.py +9 -9
- pygeodesy/formy.py +2 -2
- pygeodesy/frechet.py +6 -6
- pygeodesy/fstats.py +2 -2
- pygeodesy/fsums.py +37 -28
- pygeodesy/gars.py +2 -3
- pygeodesy/geodesici.py +4 -4
- pygeodesy/geodesicw.py +27 -8
- pygeodesy/geodesicx/__init__.py +3 -3
- pygeodesy/geodesicx/gx.py +52 -48
- pygeodesy/geodesicx/gxarea.py +54 -65
- pygeodesy/geodesicx/gxbases.py +12 -2
- pygeodesy/geodesicx/gxline.py +10 -7
- pygeodesy/geoids.py +6 -6
- pygeodesy/hausdorff.py +5 -5
- pygeodesy/heights.py +5 -5
- pygeodesy/internals.py +2 -2
- pygeodesy/interns.py +5 -5
- pygeodesy/iters.py +1 -1
- pygeodesy/karney.py +28 -12
- pygeodesy/ktm.py +2 -2
- pygeodesy/latlonBase.py +3 -4
- pygeodesy/lazily.py +1 -1
- pygeodesy/lcc.py +3 -3
- pygeodesy/ltp.py +5 -5
- pygeodesy/mgrs.py +3 -3
- pygeodesy/namedTuples.py +3 -3
- pygeodesy/nvectorBase.py +2 -2
- pygeodesy/osgr.py +2 -2
- pygeodesy/points.py +2 -3
- pygeodesy/props.py +18 -18
- pygeodesy/resections.py +30 -24
- pygeodesy/rhumb/aux_.py +2 -2
- pygeodesy/rhumb/bases.py +3 -3
- pygeodesy/rhumb/ekx.py +3 -4
- pygeodesy/rhumb/solve.py +2 -2
- pygeodesy/simplify.py +2 -2
- pygeodesy/solveBase.py +2 -2
- pygeodesy/sphericalBase.py +8 -8
- pygeodesy/sphericalNvector.py +19 -16
- pygeodesy/sphericalTrigonometry.py +24 -24
- pygeodesy/trf.py +4 -4
- pygeodesy/triaxials.py +2 -2
- pygeodesy/units.py +7 -8
- pygeodesy/utily.py +2 -2
- pygeodesy/utmupsBase.py +2 -2
- pygeodesy/vector2d.py +14 -8
- pygeodesy/vector3d.py +3 -3
- pygeodesy/webmercator.py +2 -2
- {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.28.dist-info}/METADATA +16 -16
- pygeodesy-25.5.28.dist-info/RECORD +119 -0
- pygeodesy-25.5.5.dist-info/RECORD +0 -119
- {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.28.dist-info}/WHEEL +0 -0
- {pygeodesy-25.5.5.dist-info → pygeodesy-25.5.28.dist-info}/top_level.txt +0 -0
pygeodesy/auxilats/auxily.py
CHANGED
|
@@ -12,7 +12,7 @@ under the MIT/X11 License. For more information, see the U{GeographicLib
|
|
|
12
12
|
<https://GeographicLib.SourceForge.io>} documentation.
|
|
13
13
|
'''
|
|
14
14
|
# make sure int/int division yields float quotient, see .basics
|
|
15
|
-
from __future__ import division as _; del _ #
|
|
15
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
16
16
|
|
|
17
17
|
# from pygeodesy import auxilats # _MODS
|
|
18
18
|
from pygeodesy.auxilats._CX_Rs import _Rkey
|
|
@@ -29,7 +29,7 @@ from pygeodesy.utily import atan1
|
|
|
29
29
|
from math import asinh, copysign
|
|
30
30
|
|
|
31
31
|
__all__ = ()
|
|
32
|
-
__version__ = '25.
|
|
32
|
+
__version__ = '25.05.12'
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class Aux(object):
|
pygeodesy/azimuthal.py
CHANGED
|
@@ -40,7 +40,7 @@ altitude in Earth radii<https://WikiPedia.org/wiki/Azimuthal_equidistant_project
|
|
|
40
40
|
#/media/File:Comparison_azimuthal_projections.svg>}.
|
|
41
41
|
'''
|
|
42
42
|
# make sure int/int division yields float quotient, see .basics
|
|
43
|
-
from __future__ import division as _; del _ #
|
|
43
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
44
44
|
|
|
45
45
|
# from pygeodesy.basics import _isin, _xinstanceof # from .ellipsoidalBase
|
|
46
46
|
from pygeodesy.constants import EPS, EPS0, EPS1, NAN, isnon0, _umod_360, \
|
|
@@ -71,7 +71,7 @@ from pygeodesy.utily import asin1, atan1, atan2, atan2b, atan2d, \
|
|
|
71
71
|
from math import acos, degrees, fabs, sin, sqrt
|
|
72
72
|
|
|
73
73
|
__all__ = _ALL_LAZY.azimuthal
|
|
74
|
-
__version__ = '25.
|
|
74
|
+
__version__ = '25.05.12'
|
|
75
75
|
|
|
76
76
|
_EPS_K = _EPStol * _0_1 # Karney's eps_ or _EPSmin * _0_1?
|
|
77
77
|
_over_horizon_ = 'over horizon'
|
pygeodesy/booleans.py
CHANGED
|
@@ -15,7 +15,7 @@ C{reverse-difference}, C{sum} and C{union}.
|
|
|
15
15
|
<http://www.Inf.USI.CH/hormann/papers/Greiner.1998.ECO.pdf>}.
|
|
16
16
|
'''
|
|
17
17
|
# make sure int/int division yields float quotient, see .basics
|
|
18
|
-
from __future__ import division as _; del _ #
|
|
18
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
19
19
|
|
|
20
20
|
from pygeodesy.basics import _isin, isodd, issubclassof, map2, \
|
|
21
21
|
_xscalar, typename
|
|
@@ -45,7 +45,7 @@ from pygeodesy.utily import fabs, _unrollon, _Wrap
|
|
|
45
45
|
# from math import fabs # from .utily
|
|
46
46
|
|
|
47
47
|
__all__ = _ALL_LAZY.booleans
|
|
48
|
-
__version__ = '25.
|
|
48
|
+
__version__ = '25.05.26'
|
|
49
49
|
|
|
50
50
|
_0EPS = EPS # near-zero, positive
|
|
51
51
|
_EPS0 = -EPS # near-zero, negative
|
|
@@ -199,8 +199,8 @@ class _LatLonBool(_Named):
|
|
|
199
199
|
|
|
200
200
|
def __sub__(self, other):
|
|
201
201
|
_other(self, other)
|
|
202
|
-
return self
|
|
203
|
-
|
|
202
|
+
return type(self)(self.y - other.y, # classof
|
|
203
|
+
self.x - other.x)
|
|
204
204
|
|
|
205
205
|
def _2A(self, p2, p3):
|
|
206
206
|
# I{Signed} area of a triangle, I{doubled}.
|
|
@@ -314,7 +314,7 @@ class LatLonFHP(_LatLonBool):
|
|
|
314
314
|
|
|
315
315
|
def __add__(self, other):
|
|
316
316
|
_other(self, other)
|
|
317
|
-
return self
|
|
317
|
+
return type(self)(self.y + other.y, self.x + other.x)
|
|
318
318
|
|
|
319
319
|
def __mod__(self, other): # cross product
|
|
320
320
|
_other(self, other)
|
|
@@ -326,7 +326,7 @@ class LatLonFHP(_LatLonBool):
|
|
|
326
326
|
|
|
327
327
|
def __rmul__(self, other): # scalar product
|
|
328
328
|
_xscalar(other=other)
|
|
329
|
-
return self
|
|
329
|
+
return type(self)(self.y * other, self.x * other)
|
|
330
330
|
|
|
331
331
|
# def _edge2(self):
|
|
332
332
|
# # Return the start and end point of the
|
|
@@ -959,7 +959,7 @@ class _CompositeBase(_Named):
|
|
|
959
959
|
# Return a new instance
|
|
960
960
|
_g = kwds.get
|
|
961
961
|
kwds = dict((n, _g(n, v)) for n, v in dflts.items())
|
|
962
|
-
return self
|
|
962
|
+
return type(self)(corners or (), **kwds)
|
|
963
963
|
|
|
964
964
|
@property_RO
|
|
965
965
|
def _clipids(self): # PYCHOK no cover
|
|
@@ -1549,7 +1549,7 @@ class _EdgeFHP(object):
|
|
|
1549
1549
|
dq = q2 - q1
|
|
1550
1550
|
dq2 = dq * dq # dot product, hypot2
|
|
1551
1551
|
if dq2 > EPS2: # like ._clip
|
|
1552
|
-
T, _E = None, _EdgeFHP # self
|
|
1552
|
+
T, _E = None, _EdgeFHP # type(self)
|
|
1553
1553
|
p1, p2 = self._p1_p2
|
|
1554
1554
|
ap1 = p1._2A(q1, q2)
|
|
1555
1555
|
ap2_1 = p2._2A(q1, q2) - ap1
|
|
@@ -1750,8 +1750,8 @@ class _BooleanBase(object):
|
|
|
1750
1750
|
|
|
1751
1751
|
def _boolean4(self, other, op):
|
|
1752
1752
|
# Set up a new C{Boolean[FHP|GH]}.
|
|
1753
|
-
C = self
|
|
1754
|
-
kwds = C._kwds(self, op)
|
|
1753
|
+
C = type(self)
|
|
1754
|
+
kwds = C._kwds(self, op) # PYCHOK in _Composite[FHP|GH]
|
|
1755
1755
|
a = C(self, **kwds)
|
|
1756
1756
|
b = _other(self, other)
|
|
1757
1757
|
return a, b, C, kwds
|
|
@@ -1964,7 +1964,7 @@ def _min_max_eps2(*xs):
|
|
|
1964
1964
|
def _other(this, other):
|
|
1965
1965
|
'''(INTERNAL) Check for compatible C{type}s.
|
|
1966
1966
|
'''
|
|
1967
|
-
C = this
|
|
1967
|
+
C = type(this)
|
|
1968
1968
|
if isinstance(other, C):
|
|
1969
1969
|
return other
|
|
1970
1970
|
raise _IsnotError(C, other=other)
|
pygeodesy/cartesianBase.py
CHANGED
|
@@ -28,7 +28,7 @@ from pygeodesy.interns import _ellipsoidal_, _spherical_ # PYCHOK used!
|
|
|
28
28
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
29
29
|
from pygeodesy.named import _name2__, _Pass
|
|
30
30
|
from pygeodesy.namedTuples import LatLon4Tuple, _NamedTupleTo , Vector3Tuple, \
|
|
31
|
-
Vector4Tuple
|
|
31
|
+
Vector4Tuple
|
|
32
32
|
# from pygeodesy.nvectorBase import _N_vector # _MODS
|
|
33
33
|
from pygeodesy.props import deprecated_method, Property, Property_RO, property_doc_, \
|
|
34
34
|
property_RO, _update_all
|
|
@@ -44,7 +44,7 @@ from pygeodesy.vector3d import Vector3d, _xyzhdlln4
|
|
|
44
44
|
# from math import degrees, fabs, radians, sqrt # from .fmath, .utily
|
|
45
45
|
|
|
46
46
|
__all__ = _ALL_LAZY.cartesianBase
|
|
47
|
-
__version__ = '25.
|
|
47
|
+
__version__ = '25.05.07'
|
|
48
48
|
|
|
49
49
|
_r_ = 'r'
|
|
50
50
|
_resections = _MODS.into(resections=__name__)
|
pygeodesy/clipy.py
CHANGED
|
@@ -10,7 +10,7 @@ I{Greiner-Hormann} and L{clipSH} and L{clipSH3} I{Sutherland-Hodgeman}.
|
|
|
10
10
|
.
|
|
11
11
|
'''
|
|
12
12
|
# make sure int/int division yields float quotient, see .basics
|
|
13
|
-
from __future__ import division as _; del _ #
|
|
13
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
14
14
|
|
|
15
15
|
from pygeodesy.basics import len2, typename
|
|
16
16
|
from pygeodesy.constants import EPS, _0_0, _1_0
|
|
@@ -31,7 +31,7 @@ from pygeodesy.units import Bool, FIx, HeightX, Lat, Lon, Number_
|
|
|
31
31
|
# from math import fabs # from .fmath
|
|
32
32
|
|
|
33
33
|
__all__ = _ALL_LAZY.clipy
|
|
34
|
-
__version__ = '25.
|
|
34
|
+
__version__ = '25.05.12'
|
|
35
35
|
|
|
36
36
|
_fj_ = 'fj'
|
|
37
37
|
_original_ = 'original'
|
pygeodesy/constants.py
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
|
-
u'''Single-instance C{float} and C{int} constants across C{pygeodesy} modules and
|
|
5
|
-
|
|
4
|
+
u'''Single-instance C{float} and C{int} constants across C{pygeodesy} modules and related
|
|
5
|
+
functions L{pygeodesy.float_}, L{pygeodesy.float0_}, L{pygeodesy.isclose}, L{pygeodesy.isfinite},
|
|
6
6
|
L{pygeodesy.isinf}, L{pygeodesy.isint0}, L{pygeodesy.isnan}, L{pygeodesy.isnear0},
|
|
7
7
|
L{pygeodesy.isnear1}, L{pygeodesy.isnear90}, L{pygeodesy.isneg0}, L{pygeodesy.isninf},
|
|
8
8
|
L{pygeodesy.isnon0} and L{pygeodesy.remainder}.
|
|
9
9
|
'''
|
|
10
10
|
# make sure int/int division yields float quotient, see .basics
|
|
11
|
-
from __future__ import division as _; del _ #
|
|
11
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
12
12
|
|
|
13
13
|
from pygeodesy.basics import _copysign, isbool, iscomplex, isint
|
|
14
14
|
from pygeodesy.errors import _xError, _xError2, _xkwds_get1, _xkwds_item2
|
|
@@ -26,7 +26,7 @@ except ImportError: # Python 2-
|
|
|
26
26
|
_inf, _nan = float(_INF_), float(_NAN_)
|
|
27
27
|
|
|
28
28
|
__all__ = _ALL_LAZY.constants
|
|
29
|
-
__version__ = '25.
|
|
29
|
+
__version__ = '25.05.26'
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
def _copysign_0_0(y):
|
|
@@ -495,12 +495,12 @@ def _umod_PI2(rad):
|
|
|
495
495
|
|
|
496
496
|
if __name__ == _DMAIN_:
|
|
497
497
|
|
|
498
|
-
def _main(
|
|
498
|
+
def _main(globalocals):
|
|
499
499
|
from pygeodesy import itemsorted, printf
|
|
500
500
|
from pygeodesy.interns import _DALL_, _UNDER_
|
|
501
501
|
|
|
502
502
|
t = n = v = []
|
|
503
|
-
for n, v in itemsorted(
|
|
503
|
+
for n, v in itemsorted(globalocals):
|
|
504
504
|
if isinstance(v, (Float, Int, Radius)):
|
|
505
505
|
printf('%9s: %r', n, v.toRepr(std=False))
|
|
506
506
|
if v.name != n:
|
|
@@ -512,7 +512,7 @@ if __name__ == _DMAIN_:
|
|
|
512
512
|
t.append(typename(float_))
|
|
513
513
|
printf('%s = %r', _DALL_, tuple(t))
|
|
514
514
|
|
|
515
|
-
_main(locals()
|
|
515
|
+
_main(globals()) # or locals()
|
|
516
516
|
|
|
517
517
|
# **) MIT License
|
|
518
518
|
#
|
pygeodesy/css.py
CHANGED
|
@@ -470,7 +470,7 @@ class Css(_NamedBase):
|
|
|
470
470
|
# h=self.height, cs0=self.cs0,
|
|
471
471
|
# name=_name__(name, _or_nameof(self)))
|
|
472
472
|
# args, kwds = _args_kwds(**kwds)
|
|
473
|
-
# return self
|
|
473
|
+
# return type(self)(*args, **kwds) # .classof
|
|
474
474
|
|
|
475
475
|
@Property_RO
|
|
476
476
|
def easting(self):
|
pygeodesy/datums.py
CHANGED
|
@@ -65,7 +65,7 @@ datum, q.v. U{"A Guide to Coordinate Systems in Great Britain", Section 6
|
|
|
65
65
|
@var Transforms.WGS84: Transform(name='WGS84', tx=0.0, ty=0.0, tz=0.0, s1=1.0, rx=0.0, ry=0.0, rz=0.0, s=0.0, sx=0.0, sy=0.0, sz=0.0)
|
|
66
66
|
'''
|
|
67
67
|
# make sure int/int division yields float quotient, see .basics
|
|
68
|
-
from __future__ import division as _; del _ #
|
|
68
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
69
69
|
|
|
70
70
|
from pygeodesy.basics import _isin, islistuple, map2, neg, _xinstanceof, _zip
|
|
71
71
|
from pygeodesy.constants import R_M, _float as _F, _0_0, _1_0, _2_0, _8_0, _3600_0
|
|
@@ -94,7 +94,7 @@ from pygeodesy.units import _isRadius, Radius_, radians
|
|
|
94
94
|
# import operator as _operator # from .fmath
|
|
95
95
|
|
|
96
96
|
__all__ = _ALL_LAZY.datums
|
|
97
|
-
__version__ = '25.
|
|
97
|
+
__version__ = '25.05.12'
|
|
98
98
|
|
|
99
99
|
_a_ellipsoid_ = _UNDER_(_a_, _ellipsoid_)
|
|
100
100
|
_BD72_ = 'BD72'
|
pygeodesy/deprecated/__init__.py
CHANGED
|
@@ -10,13 +10,13 @@ bases} or C{from pygeodesy.deprecated import bases}. Likewise for C{datum} and
|
|
|
10
10
|
C{nvector}.
|
|
11
11
|
'''
|
|
12
12
|
|
|
13
|
-
from pygeodesy.deprecated.bases import * #
|
|
14
|
-
from pygeodesy.deprecated.datum import * #
|
|
15
|
-
from pygeodesy.deprecated.nvector import * #
|
|
13
|
+
from pygeodesy.deprecated.bases import * # noqa: F403 not pygeodesy.__init__
|
|
14
|
+
from pygeodesy.deprecated.datum import * # noqa: F403 not pygeodesy.__init__
|
|
15
|
+
from pygeodesy.deprecated.nvector import * # noqa: F403 not pygeodesy.__init__
|
|
16
16
|
|
|
17
|
-
from pygeodesy.deprecated.classes import * #
|
|
18
|
-
from pygeodesy.deprecated.consterns import * #
|
|
19
|
-
from pygeodesy.deprecated.functions import * #
|
|
17
|
+
from pygeodesy.deprecated.classes import * # noqa: F403
|
|
18
|
+
from pygeodesy.deprecated.consterns import * # noqa: F403
|
|
19
|
+
from pygeodesy.deprecated.functions import * # noqa: F403
|
|
20
20
|
|
|
21
21
|
from pygeodesy.lazily import _ALL_ATTRS, _ALL_DEPRECATED, _lazy_import_as, _unLazy0 # _lazy_import_star
|
|
22
22
|
|
|
@@ -27,11 +27,11 @@ __all__ = (_ALL_DEPRECATED.deprecated_bases +
|
|
|
27
27
|
_ALL_DEPRECATED.deprecated_classes +
|
|
28
28
|
_ALL_DEPRECATED.deprecated_consterns +
|
|
29
29
|
_ALL_DEPRECATED.deprecated_functions)
|
|
30
|
-
__version__ = '
|
|
30
|
+
__version__ = '25.05.12'
|
|
31
31
|
|
|
32
32
|
if _unLazy0:
|
|
33
33
|
from pygeodesy.deprecated import bases, datum, nvector, rhumbBase, \
|
|
34
|
-
rhumbaux, rhumbsolve, rhumbx # PYCHOK expected
|
|
34
|
+
rhumbaux, rhumbsolve, rhumbx # noqa: F401 PYCHOK expected
|
|
35
35
|
__all__ += _ALL_ATTRS(_ALL_DEPRECATED.deprecated) # DEPRECATED modules
|
|
36
36
|
|
|
37
37
|
else: # lazily import modules and exported attrs
|
pygeodesy/deprecated/bases.py
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
u'''DEPRECATED on 2021.02.10, use (INTERNAL) module L{pygeodesy.latlonBase} instead.
|
|
5
5
|
'''
|
|
6
6
|
|
|
7
|
-
from pygeodesy.iters import points2 #
|
|
7
|
+
from pygeodesy.iters import points2 # noqa: F401
|
|
8
8
|
from pygeodesy.latlonBase import LatLonBase as _LatLonBase
|
|
9
9
|
from pygeodesy.lazily import _ALL_DEPRECATED
|
|
10
10
|
|
|
11
11
|
__all__ = _ALL_DEPRECATED.deprecated_bases
|
|
12
|
-
__version__ = '25.
|
|
12
|
+
__version__ = '25.05.12'
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class LatLonHeightBase(_LatLonBase): # PYCHOK no cover
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
u'''DEPRECATED on 2023.11.26, use module L{pygeodesy.rhumb.bases} instead.
|
|
5
5
|
'''
|
|
6
6
|
|
|
7
|
-
from pygeodesy.rhumb.bases import * #
|
|
7
|
+
from pygeodesy.rhumb.bases import * # noqa: F403
|
|
8
8
|
|
|
9
9
|
__all__ = () # _ALL_LAZY.rhumb._bases
|
|
10
|
-
__version__ = '
|
|
10
|
+
__version__ = '25.05.12'
|
|
11
11
|
|
|
12
12
|
# **) MIT License
|
|
13
13
|
#
|
pygeodesy/deprecated/rhumbaux.py
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
u'''DEPRECATED on 2023.11.26, use module L{pygeodesy.rhumb.aux_} instead.
|
|
5
5
|
'''
|
|
6
6
|
|
|
7
|
-
from pygeodesy.rhumb.aux_ import * #
|
|
7
|
+
from pygeodesy.rhumb.aux_ import * # noqa: F403
|
|
8
8
|
from pygeodesy.lazily import _ALL_LAZY
|
|
9
9
|
|
|
10
10
|
__all__ = _ALL_LAZY.rhumb_aux_ # attrs NOT DEPRECATED
|
|
11
|
-
__version__ = '
|
|
11
|
+
__version__ = '25.05.12'
|
|
12
12
|
|
|
13
13
|
# **) MIT License
|
|
14
14
|
#
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
u'''DEPRECATED on 2023.11.26, use module L{pygeodesy.rhumb.solve} instead.
|
|
5
5
|
'''
|
|
6
6
|
|
|
7
|
-
from pygeodesy.rhumb.solve import * #
|
|
7
|
+
from pygeodesy.rhumb.solve import * # noqa: F403
|
|
8
8
|
from pygeodesy.lazily import _ALL_LAZY
|
|
9
9
|
|
|
10
10
|
__all__ = _ALL_LAZY.rhumb_solve # attrs NOT DEPRECATED
|
|
11
|
-
__version__ = '
|
|
11
|
+
__version__ = '25.05.12'
|
|
12
12
|
|
|
13
13
|
# **) MIT License
|
|
14
14
|
#
|
pygeodesy/deprecated/rhumbx.py
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
u'''DEPRECATED on 2023.11.26, use module L{pygeodesy.rhumb.ekx} instead.
|
|
5
5
|
'''
|
|
6
6
|
|
|
7
|
-
from pygeodesy.rhumb.ekx import * #
|
|
7
|
+
from pygeodesy.rhumb.ekx import * # noqa: F403
|
|
8
8
|
from pygeodesy.lazily import _ALL_LAZY
|
|
9
9
|
|
|
10
10
|
__all__ = _ALL_LAZY.rhumb_ekx # attrs NOT DEPRECATED
|
|
11
|
-
__version__ = '
|
|
11
|
+
__version__ = '25.05.12'
|
|
12
12
|
|
|
13
13
|
# **) MIT License
|
|
14
14
|
#
|
pygeodesy/ecef.py
CHANGED
|
@@ -60,9 +60,8 @@ plane} as opposed to I{geocentric} (ECEF) ones.
|
|
|
60
60
|
from pygeodesy.basics import copysign0, _isin, isscalar, issubclassof, neg, map1, \
|
|
61
61
|
_xinstanceof, _xsubclassof, typename # _args_kwds_names
|
|
62
62
|
from pygeodesy.constants import EPS, EPS0, EPS02, EPS1, EPS2, EPS_2, INT0, PI, PI_2, \
|
|
63
|
-
_0_0,
|
|
64
|
-
|
|
65
|
-
_100_0, _copysign_1_0, isnon0 # PYCHOK used!
|
|
63
|
+
_0_0, _0_5, _1_0, _1_0_1T, _2_0, _N_2_0, _3_0, _4_0, \
|
|
64
|
+
_6_0, _90_0, _N_90_0, _copysign_1_0, isnon0 # PYCHOK used!
|
|
66
65
|
from pygeodesy.datums import _ellipsoidal_datum, _WGS84, a_f2Tuple, _EWGS84
|
|
67
66
|
from pygeodesy.ecefLocals import _EcefLocal
|
|
68
67
|
# from pygeodesy.ellipsoids import a_f2Tuple, _EWGS84 # from .datums
|
|
@@ -90,7 +89,7 @@ from pygeodesy.utily import atan1, atan1d, atan2, atan2d, degrees90, degrees180,
|
|
|
90
89
|
from math import cos, degrees, fabs, radians, sqrt
|
|
91
90
|
|
|
92
91
|
__all__ = _ALL_LAZY.ecef
|
|
93
|
-
__version__ = '25.
|
|
92
|
+
__version__ = '25.05.07'
|
|
94
93
|
|
|
95
94
|
_Ecef_ = 'Ecef'
|
|
96
95
|
_prolate_ = 'prolate'
|
pygeodesy/ellipsoidalBase.py
CHANGED
|
@@ -10,7 +10,7 @@ and published under the same MIT Licence**, see for example U{latlon-ellipsoidal
|
|
|
10
10
|
<https://www.Movable-Type.co.UK/scripts/geodesy/docs/latlon-ellipsoidal.js.html>}.
|
|
11
11
|
'''
|
|
12
12
|
# make sure int/int division yields float quotient, see .basics
|
|
13
|
-
from __future__ import division as _; del _ #
|
|
13
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
14
14
|
|
|
15
15
|
# from pygeodesy.azimuthal import EquidistantExact, EquidistantKarney # _MODS
|
|
16
16
|
from pygeodesy.basics import _isin, _xinstanceof
|
|
@@ -46,7 +46,7 @@ from pygeodesy.units import Epoch, _isDegrees, Radius_, _1mm as _TOL_M
|
|
|
46
46
|
# from math import fabs # from .latlonBase
|
|
47
47
|
|
|
48
48
|
__all__ = _ALL_LAZY.ellipsoidalBase
|
|
49
|
-
__version__ = '25.
|
|
49
|
+
__version__ = '25.05.12'
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
class CartesianEllipsoidalBase(CartesianBase):
|
pygeodesy/ellipsoidalBaseDI.py
CHANGED
|
@@ -5,7 +5,7 @@ u'''(INTERNAL) Private, ellipsoidal Direct/Inverse geodesy base
|
|
|
5
5
|
class C{LatLonEllipsoidalBaseDI} and functions.
|
|
6
6
|
'''
|
|
7
7
|
# make sure int/int division yields float quotient, see .basics
|
|
8
|
-
from __future__ import division as _; del _ #
|
|
8
|
+
from __future__ import division as _; del _ # noqa: E702 ;
|
|
9
9
|
|
|
10
10
|
# from pygeodesy.azimuthal import _Equidistants # _MODS
|
|
11
11
|
from pygeodesy.basics import isLatLon, _xsubclassof, typename
|
|
@@ -36,7 +36,7 @@ from pygeodesy.utily import m2km, unroll180, _unrollon, _unrollon3, _Wrap, wrap3
|
|
|
36
36
|
from math import degrees, radians
|
|
37
37
|
|
|
38
38
|
__all__ = _ALL_LAZY.ellipsoidalBaseDI
|
|
39
|
-
__version__ = '25.
|
|
39
|
+
__version__ = '25.05.23'
|
|
40
40
|
|
|
41
41
|
_polar__ = 'polar?'
|
|
42
42
|
_TRIPS = 33 # _intersect3, _intersects2, _nearestOn interations, 6..9 sufficient?
|
|
@@ -115,14 +115,15 @@ class LatLonEllipsoidalBaseDI(LatLonEllipsoidalBase):
|
|
|
115
115
|
r = self._Direct2Tuple(LL, height, r)
|
|
116
116
|
return r
|
|
117
117
|
|
|
118
|
-
def _Direct2Tuple(self, LL, height, r):
|
|
118
|
+
def _Direct2Tuple(self, LL, height, r): # in .ellipsoidalVincenty.py
|
|
119
119
|
'''(INTERNAL) Helper for C{._Direct} result L{Destination2Tuple}.
|
|
120
120
|
'''
|
|
121
121
|
h = self._heigHt(height)
|
|
122
|
-
|
|
122
|
+
n = self.name
|
|
123
|
+
d = _xkwds_not(None, datum=self.datum, height=h, name=n,
|
|
123
124
|
epoch=self.epoch, reframe=self.reframe)
|
|
124
|
-
d = LL(*_Wrap.latlon(r.lat, r.lon),
|
|
125
|
-
return Destination2Tuple(d, wrap360(r.final), name=
|
|
125
|
+
d = LL(*_Wrap.latlon(r.lat, r.lon), **d)
|
|
126
|
+
return Destination2Tuple(d, wrap360(r.final), name=n)
|
|
126
127
|
|
|
127
128
|
def distanceTo(self, other, wrap=False, **unused): # radius=R_M
|
|
128
129
|
'''Compute the distance between this and an other point along
|
pygeodesy/ellipsoidalExact.py
CHANGED
|
@@ -11,12 +11,12 @@ L{GeodesicExact}, L{GeodesicAreaExact} and L{GeodesicLineExact}.
|
|
|
11
11
|
|
|
12
12
|
# from pygeodesy.datums import _WGS84 # from .ellipsoidalBase
|
|
13
13
|
from pygeodesy.ellipsoidalBase import CartesianEllipsoidalBase, \
|
|
14
|
-
_nearestOn,
|
|
14
|
+
_nearestOn, _WGS84
|
|
15
15
|
from pygeodesy.ellipsoidalBaseDI import LatLonEllipsoidalBaseDI, \
|
|
16
16
|
_intersection3, _intersections2, \
|
|
17
17
|
_TOL_M, intersecant2
|
|
18
18
|
# from pygeodesy.errors import _xkwds # from .karney
|
|
19
|
-
from pygeodesy.karney import fabs,
|
|
19
|
+
from pygeodesy.karney import _polygon, fabs, Property_RO, _xkwds
|
|
20
20
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _ALL_OTHER
|
|
21
21
|
from pygeodesy.points import _areaError, ispolar # PYCHOK exported
|
|
22
22
|
# from pygeodesy.props import Property_RO # from .karney
|
|
@@ -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__ = '
|
|
27
|
+
__version__ = '25.05.28'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class Cartesian(CartesianEllipsoidalBase):
|
|
@@ -88,17 +88,19 @@ class LatLon(LatLonEllipsoidalBaseDI):
|
|
|
88
88
|
return LatLonEllipsoidalBaseDI.toCartesian(self, **kwds)
|
|
89
89
|
|
|
90
90
|
|
|
91
|
-
def areaOf(points, datum=_WGS84, wrap=True):
|
|
91
|
+
def areaOf(points, datum=_WGS84, wrap=True, polar=False):
|
|
92
92
|
'''Compute the area of an (ellipsoidal) polygon or composite.
|
|
93
93
|
|
|
94
|
-
@arg points: The polygon points (L{LatLon}[], L{BooleanFHP} or
|
|
95
|
-
L{BooleanGH}).
|
|
94
|
+
@arg points: The polygon points (L{LatLon}[], L{BooleanFHP} or L{BooleanGH}).
|
|
96
95
|
@kwarg datum: Optional datum (L{Datum}).
|
|
97
|
-
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
|
|
98
|
-
|
|
96
|
+
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the B{C{points}}
|
|
97
|
+
(C{bool}).
|
|
98
|
+
@kwarg polar: Use C{B{polar}=True} if the polygon encloses a pole (C{bool}), see
|
|
99
|
+
function L{ispolar<pygeodesy.points.ispolar>} and U{area of a polygon
|
|
100
|
+
enclosing a pole<https://GeographicLib.SourceForge.io/C++/doc/
|
|
101
|
+
classGeographicLib_1_1GeodesicExact.html#a3d7a9155e838a09a48dc14d0c3fac525>}.
|
|
99
102
|
|
|
100
|
-
@return: Area (C{meter} I{squared}, same units as the B{C{datum}}'s
|
|
101
|
-
ellipsoid axes).
|
|
103
|
+
@return: Area (C{meter} I{squared}, same units as the B{C{datum}}'s ellipsoid axes).
|
|
102
104
|
|
|
103
105
|
@raise PointsError: Insufficient number of B{C{points}}.
|
|
104
106
|
|
|
@@ -110,12 +112,8 @@ def areaOf(points, datum=_WGS84, wrap=True):
|
|
|
110
112
|
@see: Functions L{pygeodesy.areaOf}, L{ellipsoidalGeodSolve.areaOf},
|
|
111
113
|
L{ellipsoidalKarney.areaOf}, L{sphericalNvector.areaOf} and
|
|
112
114
|
L{sphericalTrigonometry.areaOf}.
|
|
113
|
-
|
|
114
|
-
@note: The U{area of a polygon enclosing a pole<https://GeographicLib.SourceForge.io/
|
|
115
|
-
C++/doc/classGeographicLib_1_1GeodesicExact.html#a3d7a9155e838a09a48dc14d0c3fac525>}
|
|
116
|
-
can be found by adding half the datum's ellipsoid surface area to the polygon's area.
|
|
117
115
|
'''
|
|
118
|
-
return fabs(_polygon(datum.ellipsoid.geodesicx, points, True, False, wrap))
|
|
116
|
+
return fabs(_polygon(datum.ellipsoid.geodesicx, points, True, False, wrap, polar))
|
|
119
117
|
|
|
120
118
|
|
|
121
119
|
def intersection3(start1, end1, start2, end2, height=None, wrap=False, # was=True
|
|
@@ -216,13 +214,14 @@ def intersections2(center1, radius1, center2, radius2, height=None, wrap=False,
|
|
|
216
214
|
equidistant=equidistant, tol=tol, **kwds)
|
|
217
215
|
|
|
218
216
|
|
|
219
|
-
def isclockwise(points, datum=_WGS84, wrap=True):
|
|
217
|
+
def isclockwise(points, datum=_WGS84, wrap=True, polar=False):
|
|
220
218
|
'''Determine the direction of a path or polygon.
|
|
221
219
|
|
|
222
220
|
@arg points: The path or polygon points (C{LatLon}[]).
|
|
223
221
|
@kwarg datum: Optional datum (L{Datum}).
|
|
224
|
-
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
|
|
225
|
-
|
|
222
|
+
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the B{C{points}} (C{bool}).
|
|
223
|
+
@kwarg polar: Use C{B{polar}=True} if the C{B{points}} enclose a pole (C{bool}),
|
|
224
|
+
see function U{ispolar<pygeodeys.points.ispolar>}.
|
|
226
225
|
|
|
227
226
|
@return: C{True} if B{C{points}} are clockwise, C{False} otherwise.
|
|
228
227
|
|
|
@@ -234,7 +233,7 @@ def isclockwise(points, datum=_WGS84, wrap=True):
|
|
|
234
233
|
|
|
235
234
|
@see: L{pygeodesy.isclockwise}.
|
|
236
235
|
'''
|
|
237
|
-
a = _polygon(datum.ellipsoid.geodesicx, points, True, False, wrap)
|
|
236
|
+
a = _polygon(datum.ellipsoid.geodesicx, points, True, False, wrap, polar)
|
|
238
237
|
if a < 0:
|
|
239
238
|
return True
|
|
240
239
|
elif a > 0:
|
|
@@ -288,29 +287,25 @@ def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
|
|
288
287
|
def perimeterOf(points, closed=False, datum=_WGS84, wrap=True):
|
|
289
288
|
'''Compute the perimeter of an (ellipsoidal) polygon or composite.
|
|
290
289
|
|
|
291
|
-
@arg points: The polygon points (L{LatLon}[], L{BooleanFHP} or
|
|
292
|
-
L{BooleanGH}).
|
|
290
|
+
@arg points: The polygon points (L{LatLon}[], L{BooleanFHP} or L{BooleanGH}).
|
|
293
291
|
@kwarg closed: Optionally, close the polygon (C{bool}).
|
|
294
292
|
@kwarg datum: Optional datum (L{Datum}).
|
|
295
|
-
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
|
|
296
|
-
B{C{points}} (C{bool}).
|
|
293
|
+
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the B{C{points}} (C{bool}).
|
|
297
294
|
|
|
298
|
-
@return: Perimeter (C{meter}, same units as the B{C{datum}}'s
|
|
299
|
-
ellipsoid axes).
|
|
295
|
+
@return: Perimeter (C{meter}, same units as the B{C{datum}}'s ellipsoid axes).
|
|
300
296
|
|
|
301
297
|
@raise PointsError: Insufficient number of B{C{points}}.
|
|
302
298
|
|
|
303
299
|
@raise TypeError: Some B{C{points}} are not L{LatLon}.
|
|
304
300
|
|
|
305
|
-
@raise ValueError: Invalid C{B{wrap}=False}, unwrapped, unrolled
|
|
306
|
-
|
|
307
|
-
with C{B{points}} a composite.
|
|
301
|
+
@raise ValueError: Invalid C{B{wrap}=False}, unwrapped, unrolled longitudes not
|
|
302
|
+
supported or C{B{closed}=False} with C{B{points}} a composite.
|
|
308
303
|
|
|
309
304
|
@see: Functions L{pygeodesy.perimeterOf}, L{ellipsoidalGeodSolve.perimeterOf},
|
|
310
305
|
L{ellipsoidalKarney.perimeterOf}, L{sphericalNvector.perimeterOf} and
|
|
311
306
|
L{sphericalTrigonometry.perimeterOf}.
|
|
312
307
|
'''
|
|
313
|
-
return _polygon(datum.ellipsoid.geodesicx, points, closed, True, wrap)
|
|
308
|
+
return _polygon(datum.ellipsoid.geodesicx, points, closed, True, wrap, False)
|
|
314
309
|
|
|
315
310
|
|
|
316
311
|
__all__ += _ALL_OTHER(Cartesian, LatLon, # classes
|
|
@@ -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.ellipsoidalGeodSolve
|
|
27
|
-
__version__ = '
|
|
27
|
+
__version__ = '25.05.28'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class Cartesian(CartesianEllipsoidalBase):
|
|
@@ -87,12 +87,16 @@ class LatLon(LatLonEllipsoidalBaseDI):
|
|
|
87
87
|
return LatLonEllipsoidalBaseDI.toCartesian(self, **kwds)
|
|
88
88
|
|
|
89
89
|
|
|
90
|
-
def areaOf(points, datum=_WGS84, wrap=True):
|
|
90
|
+
def areaOf(points, datum=_WGS84, wrap=True, polar=False):
|
|
91
91
|
'''Compute the area of an (ellipsoidal) polygon or composite.
|
|
92
92
|
|
|
93
93
|
@arg points: The polygon points (L{LatLon}[], L{BooleanFHP} or L{BooleanGH}).
|
|
94
94
|
@kwarg datum: Optional datum (L{Datum}).
|
|
95
95
|
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the B{C{points}} (C{bool}).
|
|
96
|
+
@kwarg polar: Use C{B{polar}=True} if the polygon encloses a pole (C{bool}), see
|
|
97
|
+
function L{ispolar<pygeodesy.points.ispolar>} and U{area of a polygon
|
|
98
|
+
enclosing a pole<https://GeographicLib.SourceForge.io/C++/doc/
|
|
99
|
+
classGeographicLib_1_1GeodesicExact.html#a3d7a9155e838a09a48dc14d0c3fac525>}.
|
|
96
100
|
|
|
97
101
|
@return: Area (C{meter}, same as units of the B{C{datum}}'s ellipsoid axes, I{squared}).
|
|
98
102
|
|
|
@@ -105,7 +109,7 @@ def areaOf(points, datum=_WGS84, wrap=True):
|
|
|
105
109
|
@see: Functions L{pygeodesy.areaOf}, L{ellipsoidalExact.areaOf}, L{ellipsoidalKarney.areaOf},
|
|
106
110
|
L{sphericalNvector.areaOf} and L{sphericalTrigonometry.areaOf}.
|
|
107
111
|
'''
|
|
108
|
-
return fabs(_polygon(datum.ellipsoid.geodsolve, points, True, False, wrap))
|
|
112
|
+
return fabs(_polygon(datum.ellipsoid.geodsolve, points, True, False, wrap, polar))
|
|
109
113
|
|
|
110
114
|
|
|
111
115
|
def intersection3(start1, end1, start2, end2, height=None, wrap=False, # was=True
|
|
@@ -209,13 +213,14 @@ def intersections2(center1, radius1, center2, radius2, height=None, wrap=False,
|
|
|
209
213
|
equidistant=equidistant, tol=tol, LatLon=LatLon, **LatLon_kwds)
|
|
210
214
|
|
|
211
215
|
|
|
212
|
-
def isclockwise(points, datum=_WGS84, wrap=True):
|
|
216
|
+
def isclockwise(points, datum=_WGS84, wrap=True, polar=False):
|
|
213
217
|
'''Determine the direction of a path or polygon.
|
|
214
218
|
|
|
215
219
|
@arg points: The path or polygon points (C{LatLon}[]).
|
|
216
220
|
@kwarg datum: Optional datum (L{Datum}).
|
|
217
|
-
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
|
|
218
|
-
|
|
221
|
+
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the B{C{points}} (C{bool}).
|
|
222
|
+
@kwarg polar: Use C{B{polar}=True} if the C{B{points}} enclose a pole (C{bool}),
|
|
223
|
+
see function U{ispolar<pygeodeys.points.ispolar>}.
|
|
219
224
|
|
|
220
225
|
@return: C{True} if B{C{points}} are clockwise, C{False} otherwise.
|
|
221
226
|
|
|
@@ -223,12 +228,11 @@ def isclockwise(points, datum=_WGS84, wrap=True):
|
|
|
223
228
|
|
|
224
229
|
@raise TypeError: Some B{C{points}} are not C{LatLon}.
|
|
225
230
|
|
|
226
|
-
@raise ValueError: The B{C{points}} enclose a pole or zero
|
|
227
|
-
area.
|
|
231
|
+
@raise ValueError: The B{C{points}} enclose a pole or zero area.
|
|
228
232
|
|
|
229
233
|
@see: L{pygeodesy.isclockwise}.
|
|
230
234
|
'''
|
|
231
|
-
a = _polygon(datum.ellipsoid.geodsolve, points, True, False, wrap)
|
|
235
|
+
a = _polygon(datum.ellipsoid.geodsolve, points, True, False, wrap, polar)
|
|
232
236
|
if a < 0:
|
|
233
237
|
return True
|
|
234
238
|
elif a > 0:
|
|
@@ -282,29 +286,25 @@ def nearestOn(point, point1, point2, within=True, height=None, wrap=False,
|
|
|
282
286
|
def perimeterOf(points, closed=False, datum=_WGS84, wrap=True):
|
|
283
287
|
'''Compute the perimeter of an (ellipsoidal) polygon or composite.
|
|
284
288
|
|
|
285
|
-
@arg points: The polygon points (L{LatLon}[], L{BooleanFHP} or
|
|
286
|
-
L{BooleanGH}).
|
|
289
|
+
@arg points: The polygon points (L{LatLon}[], L{BooleanFHP} or L{BooleanGH}).
|
|
287
290
|
@kwarg closed: Optionally, close the polygon (C{bool}).
|
|
288
291
|
@kwarg datum: Optional datum (L{Datum}).
|
|
289
|
-
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the
|
|
290
|
-
B{C{points}} (C{bool}).
|
|
292
|
+
@kwarg wrap: If C{True}, wrap or I{normalize} and unroll the B{C{points}} (C{bool}).
|
|
291
293
|
|
|
292
|
-
@return: Perimeter (C{meter}, same as units of the B{C{datum}}'s
|
|
293
|
-
ellipsoid axes).
|
|
294
|
+
@return: Perimeter (C{meter}, same as units of the B{C{datum}}'s ellipsoid axes).
|
|
294
295
|
|
|
295
296
|
@raise PointsError: Insufficient number of B{C{points}}.
|
|
296
297
|
|
|
297
298
|
@raise TypeError: Some B{C{points}} are not L{LatLon}.
|
|
298
299
|
|
|
299
|
-
@raise ValueError: Invalid C{B{wrap}=False}, unwrapped, unrolled
|
|
300
|
-
|
|
301
|
-
with C{B{points}} a composite.
|
|
300
|
+
@raise ValueError: Invalid C{B{wrap}=False}, unwrapped, unrolled longitudes not
|
|
301
|
+
supported or C{B{closed}=False} with C{B{points}} a composite.
|
|
302
302
|
|
|
303
303
|
@see: Functions L{pygeodesy.perimeterOf}, L{ellipsoidalExact.perimeterOf},
|
|
304
304
|
L{ellipsoidalKarney.perimeterOf}, L{sphericalNvector.perimeterOf}
|
|
305
305
|
and L{sphericalTrigonometry.perimeterOf}.
|
|
306
306
|
'''
|
|
307
|
-
return _polygon(datum.ellipsoid.geodsolve, points, closed, True, wrap)
|
|
307
|
+
return _polygon(datum.ellipsoid.geodsolve, points, closed, True, wrap, False)
|
|
308
308
|
|
|
309
309
|
|
|
310
310
|
__all__ += _ALL_OTHER(Cartesian, LatLon, # classes
|