pygeodesy 24.6.9__py2.py3-none-any.whl → 24.7.7__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.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/METADATA +2 -2
- PyGeodesy-24.7.7.dist-info/RECORD +117 -0
- pygeodesy/__init__.py +39 -32
- pygeodesy/__main__.py +6 -1
- pygeodesy/albers.py +2 -2
- pygeodesy/auxilats/__init__.py +1 -1
- pygeodesy/auxilats/auxAngle.py +40 -39
- pygeodesy/auxilats/auxDLat.py +3 -2
- pygeodesy/auxilats/auxLat.py +16 -18
- pygeodesy/auxilats/auxily.py +1 -1
- pygeodesy/azimuthal.py +10 -10
- pygeodesy/basics.py +16 -4
- pygeodesy/booleans.py +4 -4
- pygeodesy/cartesianBase.py +11 -14
- pygeodesy/css.py +14 -18
- pygeodesy/datums.py +6 -6
- pygeodesy/deprecated/__init__.py +1 -1
- pygeodesy/deprecated/classes.py +25 -4
- pygeodesy/deprecated/datum.py +3 -3
- pygeodesy/deprecated/functions.py +6 -8
- pygeodesy/dms.py +23 -27
- pygeodesy/ecef.py +4 -4
- pygeodesy/elevations.py +4 -4
- pygeodesy/ellipsoidalBase.py +23 -28
- pygeodesy/ellipsoidalBaseDI.py +19 -23
- pygeodesy/ellipsoidalExact.py +3 -3
- pygeodesy/ellipsoidalGeodSolve.py +15 -23
- pygeodesy/ellipsoidalKarney.py +37 -60
- pygeodesy/ellipsoidalNvector.py +38 -44
- pygeodesy/ellipsoidalVincenty.py +11 -14
- pygeodesy/ellipsoids.py +107 -101
- pygeodesy/errors.py +109 -48
- pygeodesy/etm.py +32 -44
- pygeodesy/formy.py +55 -58
- pygeodesy/frechet.py +18 -20
- pygeodesy/fsums.py +3 -3
- pygeodesy/gars.py +3 -4
- pygeodesy/geodesici.py +1696 -0
- pygeodesy/geodesicw.py +15 -15
- pygeodesy/geodesicx/__init__.py +4 -4
- pygeodesy/geodesicx/gx.py +34 -55
- pygeodesy/geodesicx/gxbases.py +20 -8
- pygeodesy/geodesicx/gxline.py +93 -88
- pygeodesy/geodsolve.py +108 -59
- pygeodesy/geohash.py +26 -34
- pygeodesy/geoids.py +28 -37
- pygeodesy/hausdorff.py +17 -18
- pygeodesy/heights.py +2 -2
- pygeodesy/internals.py +46 -13
- pygeodesy/interns.py +2 -2
- pygeodesy/karney.py +78 -15
- pygeodesy/ktm.py +13 -16
- pygeodesy/latlonBase.py +17 -19
- pygeodesy/lazily.py +28 -25
- pygeodesy/lcc.py +28 -31
- pygeodesy/ltp.py +7 -8
- pygeodesy/ltpTuples.py +71 -73
- pygeodesy/mgrs.py +8 -9
- pygeodesy/named.py +19 -10
- pygeodesy/nvectorBase.py +9 -10
- pygeodesy/osgr.py +9 -9
- pygeodesy/points.py +6 -6
- pygeodesy/rhumb/__init__.py +1 -1
- pygeodesy/rhumb/aux_.py +5 -5
- pygeodesy/rhumb/bases.py +30 -31
- pygeodesy/rhumb/ekx.py +3 -4
- pygeodesy/rhumb/solve.py +21 -22
- pygeodesy/solveBase.py +177 -123
- pygeodesy/sphericalBase.py +10 -11
- pygeodesy/sphericalNvector.py +13 -13
- pygeodesy/sphericalTrigonometry.py +86 -97
- pygeodesy/streprs.py +4 -34
- pygeodesy/triaxials.py +48 -43
- pygeodesy/units.py +208 -275
- pygeodesy/unitsBase.py +115 -107
- pygeodesy/ups.py +26 -31
- pygeodesy/utily.py +8 -8
- pygeodesy/utm.py +35 -40
- pygeodesy/utmups.py +43 -46
- pygeodesy/utmupsBase.py +8 -9
- pygeodesy/vector3d.py +26 -27
- pygeodesy/vector3dBase.py +6 -7
- pygeodesy/webmercator.py +19 -21
- pygeodesy/wgrs.py +18 -20
- PyGeodesy-24.6.9.dist-info/RECORD +0 -116
- {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/top_level.txt +0 -0
pygeodesy/ellipsoids.py
CHANGED
|
@@ -11,55 +11,55 @@ See module L{datums} for L{Datum} and L{Transform} information and other details
|
|
|
11
11
|
|
|
12
12
|
Following is the list of predefined L{Ellipsoid}s, all instantiated lazily.
|
|
13
13
|
|
|
14
|
-
@var Ellipsoids.Airy1830: Ellipsoid(name='Airy1830', a=6377563.396,
|
|
15
|
-
@var Ellipsoids.AiryModified: Ellipsoid(name='AiryModified', a=6377340.189,
|
|
16
|
-
@var Ellipsoids.ATS1977: Ellipsoid(name='ATS1977', a=6378135,
|
|
17
|
-
@var Ellipsoids.Australia1966: Ellipsoid(name='Australia1966', a=6378160,
|
|
18
|
-
@var Ellipsoids.Bessel1841: Ellipsoid(name='Bessel1841', a=6377397.155,
|
|
19
|
-
@var Ellipsoids.BesselModified: Ellipsoid(name='BesselModified', a=6377492.018,
|
|
20
|
-
@var Ellipsoids.CGCS2000: Ellipsoid(name='CGCS2000', a=6378137,
|
|
21
|
-
@var Ellipsoids.Clarke1866: Ellipsoid(name='Clarke1866', a=6378206.4,
|
|
22
|
-
@var Ellipsoids.Clarke1880: Ellipsoid(name='Clarke1880', a=6378249.145,
|
|
23
|
-
@var Ellipsoids.Clarke1880IGN: Ellipsoid(name='Clarke1880IGN', a=6378249.2,
|
|
24
|
-
@var Ellipsoids.Clarke1880Mod: Ellipsoid(name='Clarke1880Mod', a=6378249.145,
|
|
25
|
-
@var Ellipsoids.CPM1799: Ellipsoid(name='CPM1799', a=6375738.7,
|
|
26
|
-
@var Ellipsoids.Delambre1810: Ellipsoid(name='Delambre1810', a=6376428,
|
|
27
|
-
@var Ellipsoids.Engelis1985: Ellipsoid(name='Engelis1985', a=6378136.05,
|
|
28
|
-
@var Ellipsoids.Everest1969: Ellipsoid(name='Everest1969', a=6377295.664,
|
|
29
|
-
@var Ellipsoids.Everest1975: Ellipsoid(name='Everest1975', a=6377299.151,
|
|
30
|
-
@var Ellipsoids.Fisher1968: Ellipsoid(name='Fisher1968', a=6378150,
|
|
31
|
-
@var Ellipsoids.GEM10C: Ellipsoid(name='GEM10C', a=6378137,
|
|
32
|
-
@var Ellipsoids.GPES: Ellipsoid(name='GPES', a=6378135,
|
|
33
|
-
@var Ellipsoids.GRS67: Ellipsoid(name='GRS67', a=6378160,
|
|
34
|
-
@var Ellipsoids.GRS80: Ellipsoid(name='GRS80', a=6378137,
|
|
35
|
-
@var Ellipsoids.Helmert1906: Ellipsoid(name='Helmert1906', a=6378200,
|
|
36
|
-
@var Ellipsoids.IAU76: Ellipsoid(name='IAU76', a=6378140,
|
|
37
|
-
@var Ellipsoids.IERS1989: Ellipsoid(name='IERS1989', a=6378136,
|
|
38
|
-
@var Ellipsoids.IERS1992TOPEX: Ellipsoid(name='IERS1992TOPEX', a=6378136.3,
|
|
39
|
-
@var Ellipsoids.IERS2003: Ellipsoid(name='IERS2003', a=6378136.6,
|
|
40
|
-
@var Ellipsoids.Intl1924: Ellipsoid(name='Intl1924', a=6378388,
|
|
41
|
-
@var Ellipsoids.Intl1967: Ellipsoid(name='Intl1967', a=6378157.5,
|
|
42
|
-
@var Ellipsoids.Krassovski1940: Ellipsoid(name='Krassovski1940', a=6378245,
|
|
43
|
-
@var Ellipsoids.Krassowsky1940: Ellipsoid(name='Krassowsky1940', a=6378245,
|
|
44
|
-
@var Ellipsoids.Maupertuis1738: Ellipsoid(name='Maupertuis1738', a=6397300,
|
|
45
|
-
@var Ellipsoids.Mercury1960: Ellipsoid(name='Mercury1960', a=6378166,
|
|
46
|
-
@var Ellipsoids.Mercury1968Mod: Ellipsoid(name='Mercury1968Mod', a=6378150,
|
|
47
|
-
@var Ellipsoids.NWL1965: Ellipsoid(name='NWL1965', a=6378145,
|
|
48
|
-
@var Ellipsoids.OSU86F: Ellipsoid(name='OSU86F', a=6378136.2,
|
|
49
|
-
@var Ellipsoids.OSU91A: Ellipsoid(name='OSU91A', a=6378136.3,
|
|
50
|
-
@var Ellipsoids.Plessis1817: Ellipsoid(name='Plessis1817', a=6376523,
|
|
51
|
-
@var Ellipsoids.PZ90: Ellipsoid(name='PZ90', a=6378136,
|
|
52
|
-
@var Ellipsoids.SGS85: Ellipsoid(name='SGS85', a=6378136,
|
|
53
|
-
@var Ellipsoids.SoAmerican1969: Ellipsoid(name='SoAmerican1969', a=6378160,
|
|
54
|
-
@var Ellipsoids.Sphere: Ellipsoid(name='Sphere', a=6371008.771415,
|
|
55
|
-
@var Ellipsoids.SphereAuthalic: Ellipsoid(name='SphereAuthalic', a=6371000,
|
|
56
|
-
@var Ellipsoids.SpherePopular: Ellipsoid(name='SpherePopular', a=6378137,
|
|
57
|
-
@var Ellipsoids.Struve1860: Ellipsoid(name='Struve1860', a=6378298.3,
|
|
58
|
-
@var Ellipsoids.WGS60: Ellipsoid(name='WGS60', a=6378165,
|
|
59
|
-
@var Ellipsoids.WGS66: Ellipsoid(name='WGS66', a=6378145,
|
|
60
|
-
@var Ellipsoids.WGS72: Ellipsoid(name='WGS72', a=6378135,
|
|
61
|
-
@var Ellipsoids.WGS84: Ellipsoid(name='WGS84', a=6378137,
|
|
62
|
-
@var Ellipsoids.WGS84_NGS: Ellipsoid(name='WGS84_NGS', a=6378137,
|
|
14
|
+
@var Ellipsoids.Airy1830: Ellipsoid(name='Airy1830', a=6377563.396, f=0.00334085, f_=299.3249646, b=6356256.90923729)
|
|
15
|
+
@var Ellipsoids.AiryModified: Ellipsoid(name='AiryModified', a=6377340.189, f=0.00334085, f_=299.3249646, b=6356034.44793853)
|
|
16
|
+
@var Ellipsoids.ATS1977: Ellipsoid(name='ATS1977', a=6378135, f=0.00335281, f_=298.257, b=6356750.30492159)
|
|
17
|
+
@var Ellipsoids.Australia1966: Ellipsoid(name='Australia1966', a=6378160, f=0.00335289, f_=298.25, b=6356774.71919531)
|
|
18
|
+
@var Ellipsoids.Bessel1841: Ellipsoid(name='Bessel1841', a=6377397.155, f=0.00334277, f_=299.1528128, b=6356078.962818)
|
|
19
|
+
@var Ellipsoids.BesselModified: Ellipsoid(name='BesselModified', a=6377492.018, f=0.00334277, f_=299.1528128, b=6356173.5087127)
|
|
20
|
+
@var Ellipsoids.CGCS2000: Ellipsoid(name='CGCS2000', a=6378137, f=0.00335281, f_=298.2572221, b=6356752.31414036)
|
|
21
|
+
@var Ellipsoids.Clarke1866: Ellipsoid(name='Clarke1866', a=6378206.4, f=0.00339008, f_=294.97869821, b=6356583.8)
|
|
22
|
+
@var Ellipsoids.Clarke1880: Ellipsoid(name='Clarke1880', a=6378249.145, f=0.00340756, f_=293.465, b=6356514.86954978)
|
|
23
|
+
@var Ellipsoids.Clarke1880IGN: Ellipsoid(name='Clarke1880IGN', a=6378249.2, f=0.00340755, f_=293.46602129, b=6356515)
|
|
24
|
+
@var Ellipsoids.Clarke1880Mod: Ellipsoid(name='Clarke1880Mod', a=6378249.145, f=0.00340755, f_=293.46630766, b=6356514.96639549)
|
|
25
|
+
@var Ellipsoids.CPM1799: Ellipsoid(name='CPM1799', a=6375738.7, f=0.00299052, f_=334.39, b=6356671.92557493)
|
|
26
|
+
@var Ellipsoids.Delambre1810: Ellipsoid(name='Delambre1810', a=6376428, f=0.00321027, f_=311.5, b=6355957.92616372)
|
|
27
|
+
@var Ellipsoids.Engelis1985: Ellipsoid(name='Engelis1985', a=6378136.05, f=0.00335282, f_=298.2566, b=6356751.32272154)
|
|
28
|
+
@var Ellipsoids.Everest1969: Ellipsoid(name='Everest1969', a=6377295.664, f=0.00332445, f_=300.8017, b=6356094.667915)
|
|
29
|
+
@var Ellipsoids.Everest1975: Ellipsoid(name='Everest1975', a=6377299.151, f=0.00332445, f_=300.8017255, b=6356098.14512013)
|
|
30
|
+
@var Ellipsoids.Fisher1968: Ellipsoid(name='Fisher1968', a=6378150, f=0.00335233, f_=298.3, b=6356768.33724438)
|
|
31
|
+
@var Ellipsoids.GEM10C: Ellipsoid(name='GEM10C', a=6378137, f=0.00335281, f_=298.2572236, b=6356752.31424783)
|
|
32
|
+
@var Ellipsoids.GPES: Ellipsoid(name='GPES', a=6378135, f=0, f_=0, b=6378135)
|
|
33
|
+
@var Ellipsoids.GRS67: Ellipsoid(name='GRS67', a=6378160, f=0.00335292, f_=298.24716743, b=6356774.51609071)
|
|
34
|
+
@var Ellipsoids.GRS80: Ellipsoid(name='GRS80', a=6378137, f=0.00335281, f_=298.2572221, b=6356752.31414035)
|
|
35
|
+
@var Ellipsoids.Helmert1906: Ellipsoid(name='Helmert1906', a=6378200, f=0.00335233, f_=298.3, b=6356818.16962789)
|
|
36
|
+
@var Ellipsoids.IAU76: Ellipsoid(name='IAU76', a=6378140, f=0.00335281, f_=298.257, b=6356755.28815753)
|
|
37
|
+
@var Ellipsoids.IERS1989: Ellipsoid(name='IERS1989', a=6378136, f=0.00335281, f_=298.257, b=6356751.30156878)
|
|
38
|
+
@var Ellipsoids.IERS1992TOPEX: Ellipsoid(name='IERS1992TOPEX', a=6378136.3, f=0.00335281, f_=298.25722356, b=6356751.61659215)
|
|
39
|
+
@var Ellipsoids.IERS2003: Ellipsoid(name='IERS2003', a=6378136.6, f=0.00335282, f_=298.25642, b=6356751.85797165)
|
|
40
|
+
@var Ellipsoids.Intl1924: Ellipsoid(name='Intl1924', a=6378388, f=0.003367, f_=297, b=6356911.94612795)
|
|
41
|
+
@var Ellipsoids.Intl1967: Ellipsoid(name='Intl1967', a=6378157.5, f=0.0033529, f_=298.24961539, b=6356772.2)
|
|
42
|
+
@var Ellipsoids.Krassovski1940: Ellipsoid(name='Krassovski1940', a=6378245, f=0.00335233, f_=298.3, b=6356863.01877305)
|
|
43
|
+
@var Ellipsoids.Krassowsky1940: Ellipsoid(name='Krassowsky1940', a=6378245, f=0.00335233, f_=298.3, b=6356863.01877305)
|
|
44
|
+
@var Ellipsoids.Maupertuis1738: Ellipsoid(name='Maupertuis1738', a=6397300, f=0.0052356, f_=191, b=6363806.28272251)
|
|
45
|
+
@var Ellipsoids.Mercury1960: Ellipsoid(name='Mercury1960', a=6378166, f=0.00335233, f_=298.3, b=6356784.28360711)
|
|
46
|
+
@var Ellipsoids.Mercury1968Mod: Ellipsoid(name='Mercury1968Mod', a=6378150, f=0.00335233, f_=298.3, b=6356768.33724438)
|
|
47
|
+
@var Ellipsoids.NWL1965: Ellipsoid(name='NWL1965', a=6378145, f=0.00335289, f_=298.25, b=6356759.76948868)
|
|
48
|
+
@var Ellipsoids.OSU86F: Ellipsoid(name='OSU86F', a=6378136.2, f=0.00335281, f_=298.2572236, b=6356751.51693008)
|
|
49
|
+
@var Ellipsoids.OSU91A: Ellipsoid(name='OSU91A', a=6378136.3, f=0.00335281, f_=298.2572236, b=6356751.6165948)
|
|
50
|
+
@var Ellipsoids.Plessis1817: Ellipsoid(name='Plessis1817', a=6376523, f=0.00324002, f_=308.64, b=6355862.93325557)
|
|
51
|
+
@var Ellipsoids.PZ90: Ellipsoid(name='PZ90', a=6378136, f=0.0033528, f_=298.2578393, b=6356751.36174571)
|
|
52
|
+
@var Ellipsoids.SGS85: Ellipsoid(name='SGS85', a=6378136, f=0.00335281, f_=298.257, b=6356751.30156878)
|
|
53
|
+
@var Ellipsoids.SoAmerican1969: Ellipsoid(name='SoAmerican1969', a=6378160, f=0.00335289, f_=298.25, b=6356774.71919531)
|
|
54
|
+
@var Ellipsoids.Sphere: Ellipsoid(name='Sphere', a=6371008.771415, f=0, f_=0, b=6371008.771415)
|
|
55
|
+
@var Ellipsoids.SphereAuthalic: Ellipsoid(name='SphereAuthalic', a=6371000, f=0, f_=0, b=6371000)
|
|
56
|
+
@var Ellipsoids.SpherePopular: Ellipsoid(name='SpherePopular', a=6378137, f=0, f_=0, b=6378137)
|
|
57
|
+
@var Ellipsoids.Struve1860: Ellipsoid(name='Struve1860', a=6378298.3, f=0.00339294, f_=294.73, b=6356657.14266956)
|
|
58
|
+
@var Ellipsoids.WGS60: Ellipsoid(name='WGS60', a=6378165, f=0.00335233, f_=298.3, b=6356783.28695944)
|
|
59
|
+
@var Ellipsoids.WGS66: Ellipsoid(name='WGS66', a=6378145, f=0.00335289, f_=298.25, b=6356759.76948868)
|
|
60
|
+
@var Ellipsoids.WGS72: Ellipsoid(name='WGS72', a=6378135, f=0.00335278, f_=298.26, b=6356750.52001609)
|
|
61
|
+
@var Ellipsoids.WGS84: Ellipsoid(name='WGS84', a=6378137, f=0.00335281, f_=298.25722356, b=6356752.31424518)
|
|
62
|
+
@var Ellipsoids.WGS84_NGS: Ellipsoid(name='WGS84_NGS', a=6378137, f=0.00335281, f_=298.2572221, b=6356752.31414035)
|
|
63
63
|
'''
|
|
64
64
|
# make sure int/int division yields float quotient, see .basics
|
|
65
65
|
from __future__ import division as _; del _ # PYCHOK semicolon
|
|
@@ -79,21 +79,21 @@ from pygeodesy.interns import NN, _a_, _Airy1830_, _AiryModified_, _b_, _Bessel1
|
|
|
79
79
|
_Krassowsky1940_, _lat_, _meridional_, _negative_, _not_finite_, \
|
|
80
80
|
_prime_vertical_, _radius_, _Sphere_, _SPACE_, _vs_, _WGS72_, _WGS84_
|
|
81
81
|
# from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS # from .named
|
|
82
|
-
from pygeodesy.named import _lazyNamedEnumItem as _lazy, _name__,
|
|
82
|
+
from pygeodesy.named import _lazyNamedEnumItem as _lazy, _name__, _NamedEnum, \
|
|
83
83
|
_NamedEnumItem, _NamedTuple, _Pass, _ALL_LAZY, _MODS
|
|
84
84
|
from pygeodesy.namedTuples import Distance2Tuple, Vector3Tuple, Vector4Tuple
|
|
85
85
|
from pygeodesy.props import deprecated_Property_RO, Property_RO, property_doc_, \
|
|
86
86
|
deprecated_property_RO, property_RO
|
|
87
87
|
from pygeodesy.streprs import Fmt, fstr, instr, strs, unstr
|
|
88
88
|
# from pygeodesy.triaxials import _hartzell3 # _MODS
|
|
89
|
-
from pygeodesy.units import Bearing_, Distance, Float, Float_, Height,
|
|
90
|
-
Meter2, Meter3, Phi,
|
|
89
|
+
from pygeodesy.units import Bearing_, Distance, Float, Float_, Height, Lamd, Lat, Meter, \
|
|
90
|
+
Meter2, Meter3, Phi, Phid, Radius, Radius_, Scalar
|
|
91
91
|
from pygeodesy.utily import atan1, atan1d, atan2b, degrees90, m2radians, radians2m, sincos2d
|
|
92
92
|
|
|
93
93
|
from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan
|
|
94
94
|
|
|
95
95
|
__all__ = _ALL_LAZY.ellipsoids
|
|
96
|
-
__version__ = '24.
|
|
96
|
+
__version__ = '24.06.24'
|
|
97
97
|
|
|
98
98
|
_f_0_0 = Float(f =_0_0) # zero flattening
|
|
99
99
|
_f__0_0 = Float(f_=_0_0) # zero inverse flattening
|
|
@@ -443,7 +443,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
443
443
|
'''
|
|
444
444
|
if self.f:
|
|
445
445
|
f = self._albersCyl._tanf if inverse else self._albersCyl._txif # PYCHOK attr
|
|
446
|
-
lat = atan1d(f(tan(
|
|
446
|
+
lat = atan1d(f(tan(Phid(lat)))) # PYCHOK attr
|
|
447
447
|
return _aux(lat, inverse, Ellipsoid.auxAuthalic)
|
|
448
448
|
|
|
449
449
|
def auxConformal(self, lat, inverse=False):
|
|
@@ -462,7 +462,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
462
462
|
'''
|
|
463
463
|
if self.f:
|
|
464
464
|
f = self.es_tauf if inverse else self.es_taupf # PYCHOK attr
|
|
465
|
-
lat = atan1d(f(tan(
|
|
465
|
+
lat = atan1d(f(tan(Phid(lat)))) # PYCHOK attr
|
|
466
466
|
return _aux(lat, inverse, Ellipsoid.auxConformal)
|
|
467
467
|
|
|
468
468
|
def auxGeocentric(self, lat, inverse=False):
|
|
@@ -481,7 +481,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
481
481
|
'''
|
|
482
482
|
if self.f:
|
|
483
483
|
f = self.a2_b2 if inverse else self.b2_a2
|
|
484
|
-
lat = atan1d(f * tan(
|
|
484
|
+
lat = atan1d(f * tan(Phid(lat)))
|
|
485
485
|
return _aux(lat, inverse, Ellipsoid.auxGeocentric)
|
|
486
486
|
|
|
487
487
|
def auxIsometric(self, lat, inverse=False):
|
|
@@ -503,7 +503,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
503
503
|
U{Snyder<https://Pubs.USGS.gov/pp/1395/report.pdf>}, pp 15-16.
|
|
504
504
|
'''
|
|
505
505
|
if self.f:
|
|
506
|
-
r =
|
|
506
|
+
r = Phid(lat, clip=0)
|
|
507
507
|
lat = degrees(atan1(self.es_tauf(sinh(r))) if inverse else
|
|
508
508
|
asinh(self.es_taupf(tan(r))))
|
|
509
509
|
# clip=0, since auxIsometric(+/-90) is far outside [-90..+90]
|
|
@@ -664,7 +664,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
664
664
|
instance.
|
|
665
665
|
|
|
666
666
|
@raise RangeError: Latitude B{C{lat}} outside valid range and
|
|
667
|
-
L{pygeodesy.rangerrors}
|
|
667
|
+
L{rangerrors<pygeodesy.rangerrors>} is C{True}.
|
|
668
668
|
|
|
669
669
|
@raise TypeError: Invalid B{C{lat}}.
|
|
670
670
|
|
|
@@ -702,7 +702,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
702
702
|
and polar radii) or C{0} for near-polar B{C{lat}}.
|
|
703
703
|
|
|
704
704
|
@raise RangeError: Latitude B{C{lat}} outside valid range and
|
|
705
|
-
L{pygeodesy.rangerrors}
|
|
705
|
+
L{rangerrors<pygeodesy.rangerrors>} is C{True}.
|
|
706
706
|
|
|
707
707
|
@raise ValueError: Invalid B{C{deg}} or B{C{lat}}.
|
|
708
708
|
'''
|
|
@@ -730,10 +730,10 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
730
730
|
|
|
731
731
|
@see: Function L{pygeodesy.flatLocal}/L{pygeodesy.hubeny}.
|
|
732
732
|
'''
|
|
733
|
-
phi0 =
|
|
733
|
+
phi0 = Phid(lat0=lat0)
|
|
734
734
|
m, n = self.roc2_(phi0, scaled=True)
|
|
735
|
-
m *=
|
|
736
|
-
n *=
|
|
735
|
+
m *= Phid(lat1=lat1) - phi0
|
|
736
|
+
n *= Lamd(lon1=lon1) - Lamd(lon0=lon0)
|
|
737
737
|
return Distance2Tuple(hypot(m, n), atan2b(n, m))
|
|
738
738
|
|
|
739
739
|
@Property_RO
|
|
@@ -1033,9 +1033,12 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1033
1033
|
def _Geodesics(self):
|
|
1034
1034
|
'''(INTERNAL) Get all C{Geodesic...} classes, I{once}.
|
|
1035
1035
|
'''
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1036
|
+
try:
|
|
1037
|
+
t = _MODS.geodesicw._wrapped.Geodesic,
|
|
1038
|
+
except ImportError:
|
|
1039
|
+
t = ()
|
|
1040
|
+
Ellipsoid._Geodesics = t = (_MODS.geodesicx.GeodesicExact, # overwrite property_RO
|
|
1041
|
+
_MODS.geodsolve.GeodesicSolve) + t
|
|
1039
1042
|
return t
|
|
1040
1043
|
|
|
1041
1044
|
@property_RO
|
|
@@ -1156,7 +1159,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1156
1159
|
v = v.times_(t, t, 0) # force z=0.0
|
|
1157
1160
|
h = x - a # equatorial
|
|
1158
1161
|
else: # normal in 1st quadrant
|
|
1159
|
-
x, y, i =
|
|
1162
|
+
x, y, i = _plumbTo3(x, y, self)
|
|
1160
1163
|
t, v = v, v.times_(x, x, y)
|
|
1161
1164
|
h = t.minus(v).length
|
|
1162
1165
|
|
|
@@ -1260,7 +1263,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1260
1263
|
@return: The meridional length at B{C{lat}}, negative on southern
|
|
1261
1264
|
hemisphere (C{meter}).
|
|
1262
1265
|
'''
|
|
1263
|
-
r = self._elliptic_e22.fEd(self.auxParametric(lat)) if self.f else
|
|
1266
|
+
r = self._elliptic_e22.fEd(self.auxParametric(lat)) if self.f else Phid(lat)
|
|
1264
1267
|
return Distance(Llat=self.b * r)
|
|
1265
1268
|
|
|
1266
1269
|
Lmeridian = Llat # meridional distance
|
|
@@ -1283,8 +1286,8 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1283
1286
|
return self.a
|
|
1284
1287
|
|
|
1285
1288
|
def m2degrees(self, distance, lat=0):
|
|
1286
|
-
'''Convert a distance to an angle along the equator or
|
|
1287
|
-
|
|
1289
|
+
'''Convert a distance to an angle along the equator or along
|
|
1290
|
+
a parallel of (geodetic) latitude.
|
|
1288
1291
|
|
|
1289
1292
|
@arg distance: Distance (C{meter}).
|
|
1290
1293
|
@kwarg lat: Parallel latitude (C{degrees90}, C{str}).
|
|
@@ -1292,7 +1295,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1292
1295
|
@return: Angle (C{degrees}) or C{INF} for near-polar B{C{lat}}.
|
|
1293
1296
|
|
|
1294
1297
|
@raise RangeError: Latitude B{C{lat}} outside valid range and
|
|
1295
|
-
L{pygeodesy.rangerrors}
|
|
1298
|
+
L{rangerrors<pygeodesy.rangerrors>} is C{True}.
|
|
1296
1299
|
|
|
1297
1300
|
@raise ValueError: Invalid B{C{distance}} or B{C{lat}}.
|
|
1298
1301
|
'''
|
|
@@ -1308,7 +1311,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1308
1311
|
@return: Angle (C{radians}) or C{INF} for near-polar B{C{lat}}.
|
|
1309
1312
|
|
|
1310
1313
|
@raise RangeError: Latitude B{C{lat}} outside valid range and
|
|
1311
|
-
L{pygeodesy.rangerrors}
|
|
1314
|
+
L{rangerrors<pygeodesy.rangerrors>} is C{True}.
|
|
1312
1315
|
|
|
1313
1316
|
@raise ValueError: Invalid B{C{distance}} or B{C{lat}}.
|
|
1314
1317
|
'''
|
|
@@ -1408,8 +1411,8 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1408
1411
|
Rvolumetric = R3
|
|
1409
1412
|
|
|
1410
1413
|
def radians2m(self, rad, lat=0):
|
|
1411
|
-
'''Convert an angle to the distance along the equator or
|
|
1412
|
-
|
|
1414
|
+
'''Convert an angle to the distance along the equator or along
|
|
1415
|
+
a parallel of (geodetic) latitude.
|
|
1413
1416
|
|
|
1414
1417
|
@arg rad: The angle (C{radians}).
|
|
1415
1418
|
@kwarg lat: Parallel latitude (C{degrees90}, C{str}).
|
|
@@ -1418,7 +1421,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1418
1421
|
and polar radii) or C{0} for near-polar B{C{lat}}.
|
|
1419
1422
|
|
|
1420
1423
|
@raise RangeError: Latitude B{C{lat}} outside valid range and
|
|
1421
|
-
L{pygeodesy.rangerrors}
|
|
1424
|
+
L{rangerrors<pygeodesy.rangerrors>} is C{True}.
|
|
1422
1425
|
|
|
1423
1426
|
@raise ValueError: Invalid B{C{rad}} or B{C{lat}}.
|
|
1424
1427
|
'''
|
|
@@ -1452,7 +1455,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1452
1455
|
@see: U{Geocentric Radius
|
|
1453
1456
|
<https://WikiPedia.org/wiki/Earth_radius#Geocentric_radius>}
|
|
1454
1457
|
'''
|
|
1455
|
-
r, a = self.a,
|
|
1458
|
+
r, a = self.a, Phid(lat)
|
|
1456
1459
|
if a and self.f:
|
|
1457
1460
|
if fabs(a) < PI_2:
|
|
1458
1461
|
s2, c2 = _s2_c2(a)
|
|
@@ -1555,7 +1558,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1555
1558
|
@return: Approximate earth radius (C{meter}).
|
|
1556
1559
|
|
|
1557
1560
|
@raise RangeError: Latitude B{C{lat}} outside valid range and
|
|
1558
|
-
L{pygeodesy.rangerrors}
|
|
1561
|
+
L{rangerrors<pygeodesy.rangerrors>} is C{True}.
|
|
1559
1562
|
|
|
1560
1563
|
@raise TypeError: Invalid B{C{lat}}.
|
|
1561
1564
|
|
|
@@ -1620,7 +1623,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1620
1623
|
prime vertical U{Radii of Curvature<https://WikiPedia.org/wiki/
|
|
1621
1624
|
Earth_radius#Radii_of_curvature>}.
|
|
1622
1625
|
'''
|
|
1623
|
-
return self.roc2_(
|
|
1626
|
+
return self.roc2_(Phid(lat), scaled=scaled)
|
|
1624
1627
|
|
|
1625
1628
|
def roc2_(self, phi, scaled=False):
|
|
1626
1629
|
'''Compute the I{meridional} and I{prime-vertical}, I{normal} radii of
|
|
@@ -1664,7 +1667,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1664
1667
|
@return: Directional radius of curvature (C{meter}).
|
|
1665
1668
|
|
|
1666
1669
|
@raise RangeError: Latitude B{C{lat}} outside valid range and
|
|
1667
|
-
L{pygeodesy.rangerrors}
|
|
1670
|
+
L{rangerrors<pygeodesy.rangerrors>} is C{True}.
|
|
1668
1671
|
|
|
1669
1672
|
@raise ValueError: Invalid B{C{lat}} or B{C{bearing}}.
|
|
1670
1673
|
|
|
@@ -1672,7 +1675,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1672
1675
|
'''
|
|
1673
1676
|
if self.f:
|
|
1674
1677
|
s2, c2 = _s2_c2(Bearing_(bearing))
|
|
1675
|
-
m, n = self.roc2_(
|
|
1678
|
+
m, n = self.roc2_(Phid(lat))
|
|
1676
1679
|
if n < m: # == n / (c2 * n / m + s2)
|
|
1677
1680
|
c2 *= n / m
|
|
1678
1681
|
elif m < n: # == m / (c2 + s2 * m / n)
|
|
@@ -1708,12 +1711,12 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1708
1711
|
Earth_radius#Radii_of_curvature>}
|
|
1709
1712
|
'''
|
|
1710
1713
|
# using ...
|
|
1711
|
-
# m, n = self.roc2_(
|
|
1714
|
+
# m, n = self.roc2_(Phid(lat))
|
|
1712
1715
|
# return sqrt(m * n)
|
|
1713
1716
|
# ... requires 1 or 2 sqrt
|
|
1714
1717
|
g = self.b
|
|
1715
1718
|
if self.f:
|
|
1716
|
-
s2, c2 = _s2_c2(
|
|
1719
|
+
s2, c2 = _s2_c2(Phid(lat))
|
|
1717
1720
|
g = g / (c2 + self.b2_a2 * s2)
|
|
1718
1721
|
return Radius(rocGauss=g)
|
|
1719
1722
|
|
|
@@ -1730,7 +1733,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1730
1733
|
Earth_radius#Radii_of_curvature>}
|
|
1731
1734
|
'''
|
|
1732
1735
|
if self.f:
|
|
1733
|
-
m, n = self.roc2_(
|
|
1736
|
+
m, n = self.roc2_(Phid(lat))
|
|
1734
1737
|
m *= n * _2_0 / (m + n) # == 2 / (1 / m + 1 / n)
|
|
1735
1738
|
else:
|
|
1736
1739
|
m = self.a
|
|
@@ -1749,7 +1752,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1749
1752
|
<https://www.EdWilliams.org/avform.htm#flat>} and U{Radii of
|
|
1750
1753
|
Curvature<https://WikiPedia.org/wiki/Earth_radius#Radii_of_curvature>}.
|
|
1751
1754
|
'''
|
|
1752
|
-
return self.roc2_(
|
|
1755
|
+
return self.roc2_(Phid(lat)).meridional if lat else \
|
|
1753
1756
|
self.rocEquatorial2.meridional
|
|
1754
1757
|
|
|
1755
1758
|
rocPolar = a2_b # synonymous
|
|
@@ -1769,7 +1772,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1769
1772
|
U{Radii of Curvature<https://WikiPedia.org/wiki/
|
|
1770
1773
|
Earth_radius#Radii_of_curvature>}.
|
|
1771
1774
|
'''
|
|
1772
|
-
return self.roc2_(
|
|
1775
|
+
return self.roc2_(Phid(lat)).prime_vertical if lat else \
|
|
1773
1776
|
self.rocEquatorial2.prime_vertical
|
|
1774
1777
|
|
|
1775
1778
|
rocTransverse = rocPrimeVertical # synonymous
|
|
@@ -1818,23 +1821,26 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1818
1821
|
'''
|
|
1819
1822
|
return Ellipsoid2(self, None, **name)
|
|
1820
1823
|
|
|
1821
|
-
def toStr(self, prec=8, terse=
|
|
1824
|
+
def toStr(self, prec=8, terse=4, **sep_name): # PYCHOK expected
|
|
1822
1825
|
'''Return this ellipsoid as a text string.
|
|
1823
1826
|
|
|
1824
1827
|
@kwarg prec: Number of decimal digits, unstripped (C{int}).
|
|
1825
|
-
@kwarg terse: Limit the number of items (C{int}, 0...18)
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
+
@kwarg terse: Limit the number of items (C{int}, 0...18),
|
|
1829
|
+
use C{B{terse}=0} or C{=None} for all.
|
|
1830
|
+
@kwarg sep_name: Optional C{B{name}=NN} (C{str}) or C{None}
|
|
1831
|
+
to exclude this ellipsoid's name and separator
|
|
1832
|
+
C{B{sep}=", "} to join the items (C{str}).
|
|
1828
1833
|
|
|
1829
1834
|
@return: This C{Ellipsoid}'s attributes (C{str}).
|
|
1830
1835
|
'''
|
|
1831
|
-
E =
|
|
1832
|
-
t = E.a, E.
|
|
1833
|
-
|
|
1836
|
+
E = Ellipsoid
|
|
1837
|
+
t = (E.a, E.f, E.f_, E.b, E.f2, E.n, E.e,
|
|
1838
|
+
E.e2, E.e21, E.e22, E.e32,
|
|
1839
|
+
E.A, E.L, E.R1, E.R2, E.R3,
|
|
1840
|
+
E.Rbiaxial, E.Rtriaxial)
|
|
1834
1841
|
if terse:
|
|
1835
1842
|
t = t[:terse]
|
|
1836
|
-
|
|
1837
|
-
return self._instr(n, prec, props=t)
|
|
1843
|
+
return self._instr(prec=prec, props=t, **sep_name)
|
|
1838
1844
|
|
|
1839
1845
|
def toTriaxial(self, **name):
|
|
1840
1846
|
'''Convert this ellipsoid to a L{Triaxial_}.
|
|
@@ -2270,10 +2276,10 @@ def n2f_(n):
|
|
|
2270
2276
|
return f2f_(n2f(n))
|
|
2271
2277
|
|
|
2272
2278
|
|
|
2273
|
-
def
|
|
2279
|
+
def _plumbTo3(px, py, E, eps=EPS): # in .height4 above
|
|
2274
2280
|
'''(INTERNAL) Nearest point on a 2-D ellipse in 1st quadrant.
|
|
2275
2281
|
|
|
2276
|
-
@see: Functions C{pygeodesy.triaxial.
|
|
2282
|
+
@see: Functions C{pygeodesy.triaxial._plumbTo4} and C{-._plumbTo5}.
|
|
2277
2283
|
'''
|
|
2278
2284
|
a, b, e0 = E.a, E.b, EPS0
|
|
2279
2285
|
if min(px, py, a, b) < e0:
|
|
@@ -2414,7 +2420,7 @@ if __name__ == '__main__':
|
|
|
2414
2420
|
Ellipsoids.Sphere, Ellipsoids.SpherePopular,
|
|
2415
2421
|
Ellipsoid(_EWGS84.b, _EWGS84.a, name='_Prolate')):
|
|
2416
2422
|
e = f2n(E.f) - E.n
|
|
2417
|
-
printf('# %s: %s', _DOT_('Ellipsoids', E.name), E.toStr(prec=10), nl=1)
|
|
2423
|
+
printf('# %s: %s', _DOT_('Ellipsoids', E.name), E.toStr(prec=10, terse=0), nl=1)
|
|
2418
2424
|
printf('# e=%s, f_=%s, f=%s, n=%s (%s)', fstr(E.e, prec=13, fmt=Fmt.e),
|
|
2419
2425
|
fstr(E.f_, prec=13, fmt=Fmt.e),
|
|
2420
2426
|
fstr(E.f, prec=13, fmt=Fmt.e),
|
|
@@ -2430,31 +2436,31 @@ if __name__ == '__main__':
|
|
|
2430
2436
|
|
|
2431
2437
|
# % python3 -m pygeodesy.ellipsoids
|
|
2432
2438
|
|
|
2433
|
-
# Ellipsoids.WGS84: name='WGS84', a=6378137,
|
|
2439
|
+
# Ellipsoids.WGS84: name='WGS84', a=6378137, f=0.0033528107, f_=298.257223563, b=6356752.3142451793, f2=0.0033640898, n=0.0016792204, e=0.0818191908, e2=0.00669438, e21=0.99330562, e22=0.0067394967, e32=0.0033584313, A=6367449.1458234144, L=10001965.7293127235, R1=6371008.7714150595, R2=6371007.1809184738, R3=6371000.7900091587, Rbiaxial=6367453.6345163295, Rtriaxial=6372797.5559594007
|
|
2434
2440
|
# e=8.1819190842622e-02, f_=2.98257223563e+02, f=3.3528106647475e-03, n=1.6792203863837e-03 (0.0e+00)
|
|
2435
2441
|
# AlphaKs 0.00083773182062446994, 0.00000076085277735725, 0.00000000119764550324, 0.00000000000242917068, 0.00000000000000571182, 0.0000000000000000148, 0.00000000000000000004, 0.0
|
|
2436
2442
|
# BetaKs 0.00083773216405794875, 0.0000000590587015222, 0.00000000016734826653, 0.00000000000021647981, 0.00000000000000037879, 0.00000000000000000072, 0.0, 0.0
|
|
2437
2443
|
# KsOrder 8
|
|
2438
2444
|
|
|
2439
|
-
# Ellipsoids.GRS80: name='GRS80', a=6378137,
|
|
2445
|
+
# Ellipsoids.GRS80: name='GRS80', a=6378137, f=0.0033528107, f_=298.2572221009, b=6356752.3141403468, f2=0.0033640898, n=0.0016792204, e=0.081819191, e2=0.00669438, e21=0.99330562, e22=0.0067394968, e32=0.0033584313, A=6367449.1457710434, L=10001965.7292304561, R1=6371008.7713801153, R2=6371007.1808835147, R3=6371000.7899741363, Rbiaxial=6367453.6344640013, Rtriaxial=6372797.5559332585
|
|
2440
2446
|
# e=8.1819191042833e-02, f_=2.9825722210088e+02, f=3.3528106811837e-03, n=1.6792203946295e-03 (0.0e+00)
|
|
2441
2447
|
# AlphaKs 0.00083773182472890429, 0.00000076085278481561, 0.00000000119764552086, 0.00000000000242917073, 0.00000000000000571182, 0.0000000000000000148, 0.00000000000000000004, 0.0
|
|
2442
2448
|
# BetaKs 0.0008377321681623882, 0.00000005905870210374, 0.000000000167348269, 0.00000000000021647982, 0.00000000000000037879, 0.00000000000000000072, 0.0, 0.0
|
|
2443
2449
|
# KsOrder 8
|
|
2444
2450
|
|
|
2445
|
-
# Ellipsoids.Sphere: name='Sphere', a=6371008.7714149999,
|
|
2451
|
+
# Ellipsoids.Sphere: name='Sphere', a=6371008.7714149999, f=0, f_=0, b=6371008.7714149999, f2=0, n=0, e=0, e2=0, e21=1, e22=0, e32=0, A=6371008.7714149999, L=10007557.1761167478, R1=6371008.7714149999, R2=6371008.7714149999, R3=6371008.7714149999, Rbiaxial=6371008.7714149999, Rtriaxial=6371008.7714149999
|
|
2446
2452
|
# e=0.0e+00, f_=0.0e+00, f=0.0e+00, n=0.0e+00 (0.0e+00)
|
|
2447
2453
|
# AlphaKs 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
|
|
2448
2454
|
# BetaKs 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
|
|
2449
2455
|
# KsOrder 8
|
|
2450
2456
|
|
|
2451
|
-
# Ellipsoids.SpherePopular: name='SpherePopular', a=6378137,
|
|
2457
|
+
# Ellipsoids.SpherePopular: name='SpherePopular', a=6378137, f=0, f_=0, b=6378137, f2=0, n=0, e=0, e2=0, e21=1, e22=0, e32=0, A=6378137, L=10018754.171394622, R1=6378137, R2=6378137, R3=6378137, Rbiaxial=6378137, Rtriaxial=6378137
|
|
2452
2458
|
# e=0.0e+00, f_=0.0e+00, f=0.0e+00, n=0.0e+00 (0.0e+00)
|
|
2453
2459
|
# AlphaKs 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
|
|
2454
2460
|
# BetaKs 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
|
|
2455
2461
|
# KsOrder 8
|
|
2456
2462
|
|
|
2457
|
-
# Ellipsoids._Prolate: name='_Prolate', a=6356752.3142451793,
|
|
2463
|
+
# Ellipsoids._Prolate: name='_Prolate', a=6356752.3142451793, f=-0.0033640898, f_=-297.257223563, b=6378137, f2=-0.0033528107, n=-0.0016792204, e=0.0820944379, e2=-0.0067394967, e21=1.0067394967, e22=-0.00669438, e32=-0.0033584313, A=6367449.1458234144, L=10035500.5204500314, R1=6363880.5428301189, R2=6363878.9413582645, R3=6363872.5644020075, Rbiaxial=6367453.6345163295, Rtriaxial=6362105.2243882557
|
|
2458
2464
|
# e=8.2094437949696e-02, f_=-2.97257223563e+02, f=-3.3640898209765e-03, n=-1.6792203863837e-03 (0.0e+00)
|
|
2459
2465
|
# AlphaKs -0.00084149152514366627, 0.00000076653480614871, -0.00000000120934503389, 0.0000000000024576225, -0.00000000000000578863, 0.00000000000000001502, -0.00000000000000000004, 0.0
|
|
2460
2466
|
# BetaKs -0.00084149187224351817, 0.00000005842735196773, -0.0000000001680487236, 0.00000000000021706261, -0.00000000000000038002, 0.00000000000000000073, -0.0, 0.0
|