pygeodesy 24.6.9__py2.py3-none-any.whl → 24.6.24__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.6.24.dist-info}/METADATA +2 -2
- PyGeodesy-24.6.24.dist-info/RECORD +117 -0
- pygeodesy/__init__.py +33 -32
- 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 +9 -1
- 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 +16 -2
- 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 +100 -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 +909 -0
- pygeodesy/geodesicw.py +11 -13
- pygeodesy/geodesicx/__init__.py +4 -4
- pygeodesy/geodesicx/gx.py +18 -28
- pygeodesy/geodesicx/gxbases.py +20 -8
- pygeodesy/geodesicx/gxline.py +16 -22
- pygeodesy/geodsolve.py +80 -10
- pygeodesy/geohash.py +26 -34
- pygeodesy/geoids.py +28 -37
- pygeodesy/hausdorff.py +17 -18
- pygeodesy/heights.py +2 -2
- pygeodesy/internals.py +6 -0
- pygeodesy/interns.py +2 -2
- pygeodesy/karney.py +20 -4
- pygeodesy/ktm.py +13 -16
- pygeodesy/latlonBase.py +17 -19
- pygeodesy/lazily.py +7 -6
- pygeodesy/lcc.py +28 -31
- pygeodesy/ltp.py +7 -8
- pygeodesy/ltpTuples.py +68 -70
- 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/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 +204 -271
- 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.6.24.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.6.24.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PyGeodesy
|
|
3
|
-
Version: 24.6.
|
|
3
|
+
Version: 24.6.24
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -159,7 +159,7 @@ and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64
|
|
|
159
159
|
|
|
160
160
|
For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
|
|
161
161
|
|
|
162
|
-
*Last updated: June
|
|
162
|
+
*Last updated: June 24, 2024.*
|
|
163
163
|
|
|
164
164
|
License
|
|
165
165
|
=======
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
+
pygeodesy/__init__.py,sha256=QKI7NviUtivEdGiX532XzHBvGfTLEul0e0lBo7gMbDA,41475
|
|
3
|
+
pygeodesy/__main__.py,sha256=UmTd6Qw20g_pgnQjdaHePm-xuOEBi1tUNRLO0eL0-rU,4593
|
|
4
|
+
pygeodesy/albers.py,sha256=JXqeWAteV2N601e5R-D7bCsa8qAYv3oWm7M3R4uszXM,31078
|
|
5
|
+
pygeodesy/azimuthal.py,sha256=5tMMKlzKyfGnreOHChrquBi241ZvIOBTUn_pbZCIJWc,50231
|
|
6
|
+
pygeodesy/basics.py,sha256=YgrXYea-m47l0_cAeyWlEvCzpzvfZDKpkievC77qJdY,29590
|
|
7
|
+
pygeodesy/booleans.py,sha256=5IeA6QWihiPWSv2JnCbMT53ey1WYIU7od5VQ1YUFqX8,73529
|
|
8
|
+
pygeodesy/cartesianBase.py,sha256=WaAod_-nwgX8MjNhu4rr_V9PmEaI0F8gKPCUH4-Olyc,46968
|
|
9
|
+
pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
|
|
10
|
+
pygeodesy/constants.py,sha256=-weWOuHwE-qI6pYRLcTucI0KNcNJm6vPNzxwrJzACKs,19192
|
|
11
|
+
pygeodesy/css.py,sha256=B_EKq757XdQSUy83HAxEf3H5Iyd7mw3DbJB5Wi3obAc,25651
|
|
12
|
+
pygeodesy/datums.py,sha256=-m9-cvUVOaJ92eeFgc3O54lel3WqnVYcS7o6WCXkNyw,34043
|
|
13
|
+
pygeodesy/dms.py,sha256=QxiRtyc8QSiW-egm6Mrcrgmi_deWz3YnYwIm82JS4TU,44443
|
|
14
|
+
pygeodesy/ecef.py,sha256=yRydxBDiyvfrTTrQLawo-x2eGNcbd8CNQjBWfd3oSI8,59677
|
|
15
|
+
pygeodesy/elevations.py,sha256=4FuVcVNb_D09gmcvUlck344N4f7Jms76SIRrdutvKjk,10801
|
|
16
|
+
pygeodesy/ellipsoidalBase.py,sha256=olFcHvMeoW8Z_0T-Bn3XOpGGatoluaOZ50Fzm-ByAVg,55126
|
|
17
|
+
pygeodesy/ellipsoidalBaseDI.py,sha256=OxbSBntV9xiOgsb-0un0cUYIVoPiIiH-lt3baBkbaS8,38400
|
|
18
|
+
pygeodesy/ellipsoidalExact.py,sha256=GnSMNVnSG4VyORMcQZKxpA-R6HA0gWbTBkEIg1qrVaE,16945
|
|
19
|
+
pygeodesy/ellipsoidalGeodSolve.py,sha256=CqdNNqdwuUNIwZvYVMsk3rnW0U3KMgEoSQj_VIcFBEI,16665
|
|
20
|
+
pygeodesy/ellipsoidalKarney.py,sha256=XIvmSmMt0CGd0LtXxcDHX3KXXR2Mn8cRukefNQErJFU,18720
|
|
21
|
+
pygeodesy/ellipsoidalNvector.py,sha256=BbCWTZr9he3ayC8YEtLRXWVJ-g4HqHBuTVJsM33JKhw,30038
|
|
22
|
+
pygeodesy/ellipsoidalVincenty.py,sha256=gsUFMKgqMZKT02jDm7TEJ_jSHX8d-KJCz91iCfku5kg,25951
|
|
23
|
+
pygeodesy/ellipsoids.py,sha256=fraKj3NPStXablvzejt-LgQsghcp-MgMUvU6nh4L2YI,108034
|
|
24
|
+
pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
|
|
25
|
+
pygeodesy/epsg.py,sha256=oWHX_QVChE5roktAyXUmPmX49XHiryYmXTHxQzrAprE,8222
|
|
26
|
+
pygeodesy/errors.py,sha256=4LmkeCrslywBbLzCJ07A1LPFjbUHkkJrcscSzROxNZs,30300
|
|
27
|
+
pygeodesy/etm.py,sha256=y3dAqS-iWnbWzmsu4zB7kryAp_I17XEdzNRRk0klTww,44696
|
|
28
|
+
pygeodesy/fmath.py,sha256=EOHD0uZ8VULZtXAk8tVeuPaSTozPDCN8GJcemCo-jqg,33709
|
|
29
|
+
pygeodesy/formy.py,sha256=ZpPaQBQvaFiA-UcrgaiiV_iGxlfTqNdlR1Ngx-1oinY,75032
|
|
30
|
+
pygeodesy/frechet.py,sha256=F6TYbOEYSOFcll6nvp4GhqafUWXh1umAKb1QaMYQtuM,34372
|
|
31
|
+
pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
|
|
32
|
+
pygeodesy/fsums.py,sha256=LzsPQHY3bByOFFXPSo7E8lbYKWy5cif02WJk2JfnMvA,80455
|
|
33
|
+
pygeodesy/gars.py,sha256=gJKZuGPKw8rlRLx1hywZrpGucpHXLvMe8fr8izgSW2s,11370
|
|
34
|
+
pygeodesy/geodesici.py,sha256=C2yVPoczJJOWwOH7Yk3zmIdL-PpN28pkjHIfqP1LC3U,33462
|
|
35
|
+
pygeodesy/geodesicw.py,sha256=g7eJ9HHj47ob08X385aceTg3SHX3utTudp0KVOacgcA,27040
|
|
36
|
+
pygeodesy/geodsolve.py,sha256=VL7h8NUMyBviBot_sHuSGVOhDq3PP6WSGdx2oz7QmEI,24298
|
|
37
|
+
pygeodesy/geohash.py,sha256=rOOGOHcTnxIPX2p5ieA1gQ_ZcRlUxjIcroPHa7a85ak,31876
|
|
38
|
+
pygeodesy/geoids.py,sha256=oxn0MSgbvwBkrwyg1vS7PhhYZ_zbjLxC50W-8FTIxeU,80680
|
|
39
|
+
pygeodesy/hausdorff.py,sha256=-aKtRbMefDSoIk4V3wCvNrXPZ7Bqk1P6-XuGuI7o8Zc,34770
|
|
40
|
+
pygeodesy/heights.py,sha256=9kvyJj0-D3syZMdHNDXIfZT3MyhHH2fcqW_y-u7Tn2M,43197
|
|
41
|
+
pygeodesy/internals.py,sha256=LSDiYfCMs6zEzWPiQyRrg-XkH14B6IlSQwFbf40XKJM,19522
|
|
42
|
+
pygeodesy/interns.py,sha256=kReVkCWA_rw8GyaYFVRI9dfdXu7MF9nD1MgoXsdsK7I,23273
|
|
43
|
+
pygeodesy/iters.py,sha256=xPH0ytomvJeKHu717Fjzi3QbRrEikO6n7vqkY_IDz1k,20311
|
|
44
|
+
pygeodesy/karney.py,sha256=EUyt_vcPjY0bTbNahq-nshkKdJPdHv2RI2GjdJpa8gg,35725
|
|
45
|
+
pygeodesy/ktm.py,sha256=u0xjvqhG2k18jg7bNclRr3D9umiZXKXQGRjmL_VX4yY,27437
|
|
46
|
+
pygeodesy/latlonBase.py,sha256=M-Xe4KK8aOnQUxNJkODlTa5ApzhqXCggc_d8HlMdnIc,78987
|
|
47
|
+
pygeodesy/lazily.py,sha256=T_TmKqLJi_-IC6nHn_MqTfNxI8WJT4kobWwfVYJ5V5U,46616
|
|
48
|
+
pygeodesy/lcc.py,sha256=oDooTzFHnqsMtSKmmmfEbypHpdlPltfo7Mt0pAO4-_A,25669
|
|
49
|
+
pygeodesy/ltp.py,sha256=gQLZwcSIiXJrbRlaWnxAX8AK2VzH9l3jDqoNb3jcVD4,50773
|
|
50
|
+
pygeodesy/ltpTuples.py,sha256=bi1lJIbQ8lIX3vDgugQmG-mQN0EZIRe0TZlPAu8GUC8,58338
|
|
51
|
+
pygeodesy/mgrs.py,sha256=w50bvM3qDtHDBDBRQ_EgZnPn7vxVXgoFnleeZgefkVk,29679
|
|
52
|
+
pygeodesy/named.py,sha256=_2zgvL0cPg2JL3JpyWMZ7cc9e_I0y_4XPVYb2e7zEZg,52243
|
|
53
|
+
pygeodesy/namedTuples.py,sha256=UDmL4kCihvf8tIUVXzGzRLzL_1BLuyqm04pite6YUuk,28495
|
|
54
|
+
pygeodesy/nvectorBase.py,sha256=7BvbRQbtTpDsE7BMHt3vpbuCQZUV_k79HvygbG7ak10,28683
|
|
55
|
+
pygeodesy/osgr.py,sha256=O8mLlmnQkcyXU4xczLGD1zhSyt8RQ3EsXctUnCIjO8U,30819
|
|
56
|
+
pygeodesy/points.py,sha256=GirmbiqjD7Q0Z4SDySQO__Jgun-i8vMdJ81U2Kz8V0w,64408
|
|
57
|
+
pygeodesy/props.py,sha256=8dGmTpdEABnLbBngmaOIpM0h4NYiBteMOHc_r4iNpAg,21988
|
|
58
|
+
pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
|
|
59
|
+
pygeodesy/simplify.py,sha256=NybC-pfze0ObEm4ZCz6ZQrjJlQ-QyA83E6mSJqCuKq4,25223
|
|
60
|
+
pygeodesy/solveBase.py,sha256=FGuvHvloiyBdE0H50o8rOxtD_n6gCx1Gp31Ckn-N7hk,16852
|
|
61
|
+
pygeodesy/sphericalBase.py,sha256=YvjMZmmfy9pZeKHbY-ca0oi-Jy-OxsG9dhefy5LTjRA,32237
|
|
62
|
+
pygeodesy/sphericalNvector.py,sha256=MiWcCy5CdvXsCa3963GeUMEnSYGhBiXzkoAEX_tGX4Q,56952
|
|
63
|
+
pygeodesy/sphericalTrigonometry.py,sha256=Jf3FUUYEWXbNkiagr0HyMJ6E-cNghnTjcdgntTm28RE,64076
|
|
64
|
+
pygeodesy/streprs.py,sha256=xudQ6zi5jFT_CmstSPysjxpZKyLBQNkUk1ETh0uvQ04,23030
|
|
65
|
+
pygeodesy/trf.py,sha256=CRFHmu0lFNtc41fddXavEkHmgnTFWEqR4RTFodcFKsw,119022
|
|
66
|
+
pygeodesy/triaxials.py,sha256=SLAlzdpOa8kFSkpP-lhL-swzsZkuqufZET_gJtoA_54,62750
|
|
67
|
+
pygeodesy/units.py,sha256=2ZFrFOB__jjs8OYkSGyusYB60fs3FihubydriBdSNYg,34607
|
|
68
|
+
pygeodesy/unitsBase.py,sha256=yT7dgfwxtd1hHEn02NwPAdStsVWDfPH-Qdfrhvje7Yw,14057
|
|
69
|
+
pygeodesy/ups.py,sha256=zapIvzoVuj_FDGC6sr8O8ynPhfqXwUg-EFCVnJdM9Eo,23329
|
|
70
|
+
pygeodesy/utily.py,sha256=Zb6L9unzHHhp67znmQLLdizvyX6p4eczR1PDtcyWH-s,36189
|
|
71
|
+
pygeodesy/utm.py,sha256=lCp7mNEaJNrAYnbdPaNUKkhbsX_GdssTEkp68uYdMLI,31091
|
|
72
|
+
pygeodesy/utmups.py,sha256=g2Z_aEOt6fhV9f4fASlW4_K_O_P4zBsBbWfQV11mIKo,13196
|
|
73
|
+
pygeodesy/utmupsBase.py,sha256=TJJeHSASjggUpzdpxwrOTH1tfHvDBxly47GJL27D8zY,18729
|
|
74
|
+
pygeodesy/vector2d.py,sha256=zJq5PB777_mFJpKD-rt_T0Vm4SNbVwF7pc3KxX8uCT8,34994
|
|
75
|
+
pygeodesy/vector3d.py,sha256=uDNnYSj4BL_Nec6SkyxXDbYaNjvI15HQX0xh25dRLI8,44883
|
|
76
|
+
pygeodesy/vector3dBase.py,sha256=Om0Uq1zgjuJ6slj12KiFus_tobjYTPxgVZejNd0YzFI,35729
|
|
77
|
+
pygeodesy/webmercator.py,sha256=stO_thswe_D4uxXWH43YWSN6-WWWpv_uIuOwvBIp8Ug,14932
|
|
78
|
+
pygeodesy/wgrs.py,sha256=k2OhMue84yH_xaezo0sdxL1-X7fZRqZZ4-Rl1reDYSM,14792
|
|
79
|
+
pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
|
|
80
|
+
pygeodesy/auxilats/_CX_6.py,sha256=x4hrHxunjqqkEsZbVW1dyn3R5mR8EWYOuX77RzDEyh4,14856
|
|
81
|
+
pygeodesy/auxilats/_CX_8.py,sha256=t-OO48t4cCOsOgMi1FoyPw2DQqybVZFsgQMqAYP-jKY,25304
|
|
82
|
+
pygeodesy/auxilats/__init__.py,sha256=YNp41rRC5DmAhBx4RPqoqh4yxD9Vjf9Wk_USwqeZYcE,2881
|
|
83
|
+
pygeodesy/auxilats/__main__.py,sha256=Vuj1YSp1LV0zejVzi6EYauka1Dv8kwOHI_aeHxQEVYk,2899
|
|
84
|
+
pygeodesy/auxilats/auxAngle.py,sha256=8Gsae1URFCfD6t0oNI1ZJmgtik_EOvSAwrNmAZSMm2I,16729
|
|
85
|
+
pygeodesy/auxilats/auxDLat.py,sha256=3sq7Wc-ykpVbldNh10IZ3tIlJ7DcQFDlmZ4nOhJEgo0,10969
|
|
86
|
+
pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
|
|
87
|
+
pygeodesy/auxilats/auxLat.py,sha256=QeTx8dqov1NwNSEam9VC_wq36nRCUpbJpY4hH1NvyNg,32493
|
|
88
|
+
pygeodesy/auxilats/auxily.py,sha256=spSRS9beouT-qH98QhqMk9sm2qKubW8kwNYVWkFu3iU,8234
|
|
89
|
+
pygeodesy/deprecated/__init__.py,sha256=sGIgKL1Kmpz9upmGSxZEDdsGHNZhkpYAgsRw3FdI574,2815
|
|
90
|
+
pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
|
|
91
|
+
pygeodesy/deprecated/classes.py,sha256=ietjn0Jvil-moZwIlQLDdo5ehSPQ28RsmiLKkwI9v50,12124
|
|
92
|
+
pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
|
|
93
|
+
pygeodesy/deprecated/datum.py,sha256=s8Hke053RucP5ACvg3gdX8weQfGM0x59pQyHpY11eOs,1875
|
|
94
|
+
pygeodesy/deprecated/functions.py,sha256=EZMZe9WGkcbwmLDoWO2xKJyFlUkWAAMxmlbtCLa28lM,13866
|
|
95
|
+
pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
|
|
96
|
+
pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
|
|
97
|
+
pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
|
|
98
|
+
pygeodesy/deprecated/rhumbsolve.py,sha256=QprjRfo5T1_C4ovaa1cffAcmNczzkhGIfmybAup9a9w,1431
|
|
99
|
+
pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7ks,1425
|
|
100
|
+
pygeodesy/geodesicx/_C4_24.py,sha256=kS4XMR9m7iBs01V8K0Oz9qTYmjN-icIQGpc_8iwVhig,90750
|
|
101
|
+
pygeodesy/geodesicx/_C4_27.py,sha256=bPbj2Ckrn9WJglm3SNTXyMkULNwANM0tCQ-LKxP1L58,134258
|
|
102
|
+
pygeodesy/geodesicx/_C4_30.py,sha256=QZO8p971ztJwDGLOaJYgIhklztz9GlqbtS-xRP_E7o4,201964
|
|
103
|
+
pygeodesy/geodesicx/__init__.py,sha256=T_cX27kXyapbKcfsO6oMQMxYktXpV8i8PEWfKnxByPM,2478
|
|
104
|
+
pygeodesy/geodesicx/__main__.py,sha256=JnKrYmg1q9J5wRRqUy-dQ9abj2-2jpWtrolMMaFfWiY,3176
|
|
105
|
+
pygeodesy/geodesicx/gx.py,sha256=Liyp9UFJi2ZeN5J_2SCV2ia3ZcqvOC2hNdOcfcnXZdc,61121
|
|
106
|
+
pygeodesy/geodesicx/gxarea.py,sha256=-Kwe6spe2MSQbeLFDd6UN2NOi4JOjYhHAEzonOU3u4A,19409
|
|
107
|
+
pygeodesy/geodesicx/gxbases.py,sha256=Awt9zc1lyPS0vp4df2u4H_rhMeFu1pJaZPhb1iMoc-Q,5693
|
|
108
|
+
pygeodesy/geodesicx/gxline.py,sha256=_3l84g-RHoYIuOCMbvGiIY3CJuauSEcJwrZqp2n1J3s,27001
|
|
109
|
+
pygeodesy/rhumb/__init__.py,sha256=kTuNSKiiQyXvQdYc5KUd5admuKJ2QmDCWQwkIobnM-w,2207
|
|
110
|
+
pygeodesy/rhumb/aux_.py,sha256=lOjpEU3Pe2I5DwC933UCf-SW73l5NMuDACeZhbVs3lE,16657
|
|
111
|
+
pygeodesy/rhumb/bases.py,sha256=awpP60K6EOzS753oXM-h9S6paS6FwoCnco8Zt8n81jY,54162
|
|
112
|
+
pygeodesy/rhumb/ekx.py,sha256=JsmdCatWKqsffF8jCh4HDu5IKt_kHq1qUdmP1LMuofY,24044
|
|
113
|
+
pygeodesy/rhumb/solve.py,sha256=EDlLpbnw2FiNANOTau0emk29AEAaJpmckjK_cprvLNA,24035
|
|
114
|
+
PyGeodesy-24.6.24.dist-info/METADATA,sha256=LldxAeBs_4-a7sOoy6-xCGSoGE9p8_vSxzFvcXewufo,19412
|
|
115
|
+
PyGeodesy-24.6.24.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
116
|
+
PyGeodesy-24.6.24.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
117
|
+
PyGeodesy-24.6.24.dist-info/RECORD,,
|
pygeodesy/__init__.py
CHANGED
|
@@ -145,7 +145,7 @@ Test coverage has been measured with U{coverage<https://PyPI.org/project/coverag
|
|
|
145
145
|
|
|
146
146
|
PyPy 7.3.12 (Python 3.10.12), Python 3.11.5, 3.10.8 and 3.9.6 ran on Apple M1 Silicon (C{arm64}), I{natively}.
|
|
147
147
|
Python 3.8.10 and 2.7.18 ran on Intel (C{x86_64}) or Intel I{emulation} ("C{arm64_x86_64}", see function
|
|
148
|
-
L{pygeodesy.machine}).
|
|
148
|
+
L{machine<pygeodesy.machine>}).
|
|
149
149
|
|
|
150
150
|
The tests also ran with Python 3.11.5 (and U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on
|
|
151
151
|
U{Debian 11<https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master>} in 64-bit only and with Python 3.11.5,
|
|
@@ -192,34 +192,34 @@ Env variables
|
|
|
192
192
|
|
|
193
193
|
The following environment variables are observed by C{PyGeodesy}:
|
|
194
194
|
|
|
195
|
-
- C{PYGEODESY_EXCEPTION_CHAINING} - see module L{pygeodesy.errors}.
|
|
196
|
-
- C{PYGEODESY_FMT_FORM} - see module L{pygeodesy.dms}.
|
|
197
|
-
- C{PYGEODESY_FSUM_RESIDUAL} - see module L{pygeodesy.fsums} and class L{pygeodesy.Fsum}.
|
|
198
|
-
- C{PYGEODESY_GEOCONVERT} - see module L{pygeodesy.mgrs}.
|
|
199
|
-
- C{PYGEODESY_GEODSOLVE} - see module L{pygeodesy.geodsolve}.
|
|
200
|
-
- C{PYGEODESY_LAZY_IMPORT} - see module L{pygeodesy.lazily} and variable L{pygeodesy.isLazy}.
|
|
201
|
-
- C{PYGEODESY_NOTIMPLEMENTED} - __special__ methods return C{NotImplemented} if set to "std".
|
|
202
|
-
- C{PYGEODESY_RHUMBSOLVE} - see module L{pygeodesy.rhumb.solve}.
|
|
203
|
-
- C{PYGEODESY_UPS_POLES} - see modules L{pygeodesy.ups} and L{pygeodesy.mgrs}.
|
|
195
|
+
- C{PYGEODESY_EXCEPTION_CHAINING} - see module L{errors<pygeodesy.errors>}.
|
|
196
|
+
- C{PYGEODESY_FMT_FORM} - see module L{dms<pygeodesy.dms>}.
|
|
197
|
+
- C{PYGEODESY_FSUM_RESIDUAL} - see module L{fsums<pygeodesy.fsums>} and class L{Fsum<pygeodesy.Fsum>}.
|
|
198
|
+
- C{PYGEODESY_GEOCONVERT} - see module L{mgrs<pygeodesy.mgrs>}.
|
|
199
|
+
- C{PYGEODESY_GEODSOLVE} - see module L{geodsolve<pygeodesy.geodsolve>}.
|
|
200
|
+
- C{PYGEODESY_LAZY_IMPORT} - see module L{lazily<pygeodesy.lazily>} and variable L{isLazy<pygeodesy.isLazy>}.
|
|
201
|
+
- C{PYGEODESY_NOTIMPLEMENTED} - C{__special__} methods return C{NotImplemented} if set to "std".
|
|
202
|
+
- C{PYGEODESY_RHUMBSOLVE} - see module L{rhumb.solve<pygeodesy.rhumb.solve>}.
|
|
203
|
+
- C{PYGEODESY_UPS_POLES} - see modules L{ups<pygeodesy.ups>} and L{mgrs<pygeodesy.mgrs>}.
|
|
204
204
|
|
|
205
205
|
and these to control standard or I{named} C{repr}esentations:
|
|
206
206
|
|
|
207
|
-
- C{PYGEODESY_BEARING_STD_REPR} - see method L{pygeodesy.Bearing}C{.__repr__}.
|
|
208
|
-
- C{PYGEODESY_BOOL_STD_REPR} - see method L{pygeodesy.Bool}C{.__repr__}.
|
|
209
|
-
- C{PYGEODESY_DEGREES_STD_REPR} - see method L{pygeodesy.Degrees}C{.__repr__}.
|
|
210
|
-
- C{PYGEODESY_FLOAT_STD_REPR} - see method L{pygeodesy.Float}C{.__repr__}.
|
|
211
|
-
- C{PYGEODESY_INT_STD_REPR} - see method L{pygeodesy.Int}C{.__repr__}.
|
|
212
|
-
- C{PYGEODESY_METER_STD_REPR} - see method L{pygeodesy.Meter}C{.__repr__}.
|
|
213
|
-
- C{PYGEODESY_RADIANS_STD_REPR} - see method L{pygeodesy.Radians}C{.__repr__}.
|
|
214
|
-
- C{PYGEODESY_STR_STD_REPR} - see method L{pygeodesy.Str}C{.__repr__}.
|
|
207
|
+
- C{PYGEODESY_BEARING_STD_REPR} - see method L{Bearing<pygeodesy.Bearing>}C{.__repr__}.
|
|
208
|
+
- C{PYGEODESY_BOOL_STD_REPR} - see method L{Bool<pygeodesy.Bool>}C{.__repr__}.
|
|
209
|
+
- C{PYGEODESY_DEGREES_STD_REPR} - see method L{Degrees<pygeodesy.Degrees>}C{.__repr__}.
|
|
210
|
+
- C{PYGEODESY_FLOAT_STD_REPR} - see method L{Float<pygeodesy.Float>}C{.__repr__}.
|
|
211
|
+
- C{PYGEODESY_INT_STD_REPR} - see method L{Int<pygeodesy.Int>}C{.__repr__}.
|
|
212
|
+
- C{PYGEODESY_METER_STD_REPR} - see method L{Meter<pygeodesy.Meter>}C{.__repr__}.
|
|
213
|
+
- C{PYGEODESY_RADIANS_STD_REPR} - see method L{Radians<pygeodesy.Radians>}C{.__repr__}.
|
|
214
|
+
- C{PYGEODESY_STR_STD_REPR} - see method L{Str<pygeodesy.Str>}C{.__repr__}.
|
|
215
215
|
|
|
216
216
|
plus during development:
|
|
217
217
|
|
|
218
218
|
- C{PYGEODESY_FOR_DOCS} - for extended documentation by C{epydoc}.
|
|
219
|
-
- C{PYGEODESY_GEOGRAPHICLIB} - see module L{pygeodesy.karney}.
|
|
220
|
-
- C{PYGEODESY_WARNINGS} - see module L{pygeodesy.props} and function L{pygeodesy.DeprecationWarnings}.
|
|
221
|
-
- C{PYGEODESY_XPACKAGES} - see module L{pygeodesy.basics}.
|
|
222
|
-
- C{PYTHONDEVMODE} - see modules L{pygeodesy.errors} and L{pygeodesy.props}.
|
|
219
|
+
- C{PYGEODESY_GEOGRAPHICLIB} - see module L{karney<pygeodesy.karney>}.
|
|
220
|
+
- C{PYGEODESY_WARNINGS} - see module L{props<pygeodesy.props>} and function L{DeprecationWarnings<pygeodesy.DeprecationWarnings>}.
|
|
221
|
+
- C{PYGEODESY_XPACKAGES} - see module L{basics<pygeodesy.basics>}.
|
|
222
|
+
- C{PYTHONDEVMODE} - see modules L{errors<pygeodesy.errors>} and L{props<pygeodesy.props>}.
|
|
223
223
|
|
|
224
224
|
and:
|
|
225
225
|
|
|
@@ -233,8 +233,7 @@ and:
|
|
|
233
233
|
License
|
|
234
234
|
=======
|
|
235
235
|
|
|
236
|
-
**) U{Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
237
|
-
<https://OpenSource.org/licenses/MIT>}
|
|
236
|
+
**) U{Copyright (C) 2016-2024 -- mrJean1 at Gmail -- All Rights Reserved.<https://OpenSource.org/licenses/MIT>}
|
|
238
237
|
|
|
239
238
|
C{Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
|
240
239
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
@@ -298,14 +297,14 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.}
|
|
|
298
297
|
@var F_RAD__: Convert degrees to radians and format as signed "-/+RR" I{without} symbol, I{without} suffix (C{str}).
|
|
299
298
|
|
|
300
299
|
@var DIG: System's M{float decimal digits} = 15 (C{int}).
|
|
301
|
-
@var INF: Infinity (C{float}), see functions L{pygeodesy.isinf} and L{pygeodesy.isfinite} and C{NINF}.
|
|
302
|
-
@var INT0: C{int(0)}, missing Z-components, C{if B{z}=B{INT0}}, see functions L{pygeodesy.isint0}, L{pygeodesy.meeus2}
|
|
300
|
+
@var INF: Infinity (C{float}), see functions L{isinf<pygeodesy.isinf>} and L{isfinite<pygeodesy.isfinite>} and C{NINF}.
|
|
301
|
+
@var INT0: C{int(0)}, missing Z-components, C{if B{z}=B{INT0}}, see functions L{isint0<pygeodesy.isint0>}, L{meeus2<pygeodesy.meeus2>}
|
|
303
302
|
@var MANT_DIG: System's M{float mantissa bits} = 53 (C{int}).
|
|
304
303
|
@var MAX: System's M{float max} ≈ 1.798e+308 (C{float}).
|
|
305
304
|
@var MIN: System's M{float min} ≈ 2.225e-308 (C{float}).
|
|
306
|
-
@var NAN: Not-A-Number (C{float}), see function L{pygeodesy.isnan}.
|
|
307
|
-
@var NEG0: Negative 0.0 (C{float}), see function L{pygeodesy.isneg0}.
|
|
308
|
-
@var NINF: Negative infinity (C{float}), see function L{pygeodesy.isninf} and C{INF}.
|
|
305
|
+
@var NAN: Not-A-Number (C{float}), see function L{isnan<pygeodesy.isnan>}.
|
|
306
|
+
@var NEG0: Negative 0.0 (C{float}), see function L{isneg0<pygeodesy.isneg0>}.
|
|
307
|
+
@var NINF: Negative infinity (C{float}), see function L{isninf<pygeodesy.isninf>} and C{INF}.
|
|
309
308
|
@var NN: Empty (C{str}), U{I{Nomen Nescio}<https://Wiktionary.org/wiki/N.N.>}.
|
|
310
309
|
|
|
311
310
|
@var PI: Constant M{math.pi} (C{float}).
|
|
@@ -331,9 +330,9 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.}
|
|
|
331
330
|
@var S_DEG: Degrees symbol, default C{"°"}
|
|
332
331
|
@var S_MIN: Minutes symbol, default C{"′"} aka I{PRIME}
|
|
333
332
|
@var S_SEC: Seconds symbol, default C{"″"} aka I{DOUBLE_PRIME}
|
|
334
|
-
@var S_RAD: Radians symbol, default C{""} aka L{pygeodesy.NN}
|
|
333
|
+
@var S_RAD: Radians symbol, default C{""} aka L{NN<pygeodesy.NN>}
|
|
335
334
|
@var S_DMS: If C{True} include, otherwise cancel all DMS symbols, default C{True}.
|
|
336
|
-
@var S_SEP: Separator between C{deg°|min′|sec″|suffix}, default C{""} aka L{pygeodesy.NN}
|
|
335
|
+
@var S_SEP: Separator between C{deg°|min′|sec″|suffix}, default C{""} aka L{NN<pygeodesy.NN>}
|
|
337
336
|
|
|
338
337
|
@var Conics: Registered, predefined conics (C{enum-like}).
|
|
339
338
|
@var Datums: Registered, predefined datums (C{enum-like}).
|
|
@@ -413,6 +412,7 @@ if _init__all__ and not _lazy_import2: # import and set __all__
|
|
|
413
412
|
import pygeodesy.fstats as fstats # PYCHOK exported
|
|
414
413
|
import pygeodesy.fsums as fsums # PYCHOK exported
|
|
415
414
|
import pygeodesy.gars as gars # PYCHOK exported
|
|
415
|
+
import pygeodesy.geodesici as geodesici # PYCHOK exported
|
|
416
416
|
import pygeodesy.geodesicw as geodesicw # PYCHOK exported
|
|
417
417
|
import pygeodesy.geodesicx as geodesicx # PYCHOK exported
|
|
418
418
|
import pygeodesy.geodsolve as geodsolve # PYCHOK exported
|
|
@@ -497,6 +497,7 @@ if _init__all__ and not _lazy_import2: # import and set __all__
|
|
|
497
497
|
from pygeodesy.fstats import * # PYCHOK __all__
|
|
498
498
|
from pygeodesy.fsums import * # PYCHOK __all__
|
|
499
499
|
from pygeodesy.gars import Garef, GARSError # PYCHOK lazily
|
|
500
|
+
from pygeodesy.geodesici import * # PYCHOK __all__
|
|
500
501
|
from pygeodesy.geodesicw import * # PYCHOK __all__
|
|
501
502
|
from pygeodesy.geodesicx import * # PYCHOK __all__
|
|
502
503
|
from pygeodesy.geodsolve import * # PYCHOK __all__
|
|
@@ -589,7 +590,7 @@ else:
|
|
|
589
590
|
|
|
590
591
|
from pygeodesy.internals import _version2, _DOT_ # PYCHOK import
|
|
591
592
|
# from pygeodesy.interns import _DOT_ # from .internals
|
|
592
|
-
__version__ = '24.06.
|
|
593
|
+
__version__ = '24.06.24'
|
|
593
594
|
# see setup.py for similar logic
|
|
594
595
|
version = _DOT_(*_version2(__version__, n=3))
|
|
595
596
|
|
pygeodesy/albers.py
CHANGED
|
@@ -38,7 +38,7 @@ from pygeodesy.utily import atan1, atan1d, degrees360, sincos2, sincos2d, \
|
|
|
38
38
|
from math import atan2, atanh, degrees, fabs, radians, sqrt
|
|
39
39
|
|
|
40
40
|
__all__ = _ALL_LAZY.albers
|
|
41
|
-
__version__ = '24.
|
|
41
|
+
__version__ = '24.06.11'
|
|
42
42
|
|
|
43
43
|
_k1_ = 'k1'
|
|
44
44
|
_NUMIT = 8 # XXX 4?
|
|
@@ -354,7 +354,7 @@ class _AlbersBase(_NamedBase):
|
|
|
354
354
|
and optional, additional B{C{LatLon}} keyword
|
|
355
355
|
arguments, ignored if C{B{LatLon} is None}.
|
|
356
356
|
|
|
357
|
-
@return: The geodetic (C{LatLon}) or if B{
|
|
357
|
+
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
358
358
|
L{Albers7Tuple}C{(x, y, lat, lon, gamma, scale, datum)}.
|
|
359
359
|
|
|
360
360
|
@note: The origin latitude is returned by C{property lat0}. No
|
pygeodesy/auxilats/__init__.py
CHANGED
|
@@ -29,7 +29,7 @@ from pygeodesy.lazily import _ALL_OTHER
|
|
|
29
29
|
# no modules: auxAngle, auxDLat, auxDST, auxily, auxLat
|
|
30
30
|
__all__ = _ALL_OTHER(Aux, AuxAngle, AuxDLat, AuxDST, AuxLat,
|
|
31
31
|
AuxBeta, AuxChi, AuxMu, AuxPhi, AuxTheta, AuxXi)
|
|
32
|
-
__version__ = '24.
|
|
32
|
+
__version__ = '24.06.16'
|
|
33
33
|
|
|
34
34
|
# **) MIT License
|
|
35
35
|
#
|
pygeodesy/auxilats/auxAngle.py
CHANGED
|
@@ -14,14 +14,14 @@ under the MIT/X11 License. For more information, see the U{GeographicLib
|
|
|
14
14
|
# make sure int/int division yields float quotient, see .basics
|
|
15
15
|
from __future__ import division as _; del _ # PYCHOK semicolon
|
|
16
16
|
|
|
17
|
-
from pygeodesy.auxilats.auxily import Aux, _Aux2Greek
|
|
18
|
-
from pygeodesy.basics import _xinstanceof
|
|
17
|
+
from pygeodesy.auxilats.auxily import Aux, _Aux2Greek, AuxError
|
|
18
|
+
from pygeodesy.basics import map1, map2, _xinstanceof
|
|
19
19
|
from pygeodesy.constants import EPS, _INF_NAN_NINF, MAX, NAN, _0_0, _0_5, _1_0, \
|
|
20
20
|
_copysign_1_0, _over, _pos_self, isfinite, isnan
|
|
21
|
-
from pygeodesy.errors import AuxError
|
|
21
|
+
# from pygeodesy.errors import AuxError # from .auxilats.auxily
|
|
22
22
|
from pygeodesy.fmath import hypot, unstr
|
|
23
23
|
from pygeodesy.fsums import _add_op_, _iadd_op_, _isub_op_, _sub_op_
|
|
24
|
-
from pygeodesy.named import
|
|
24
|
+
from pygeodesy.named import _Named, _ALL_DOCS, _MODS
|
|
25
25
|
# from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS # from .named
|
|
26
26
|
from pygeodesy.props import Property, Property_RO, property_RO, _update_all
|
|
27
27
|
# from pygeodesy.streprs import unstr # from .fmath
|
|
@@ -31,7 +31,7 @@ from pygeodesy.utily import atan2d, sincos2, sincos2d
|
|
|
31
31
|
from math import asinh, atan2, copysign, degrees, fabs, radians, sinh
|
|
32
32
|
|
|
33
33
|
__all__ = ()
|
|
34
|
-
__version__ = '24.
|
|
34
|
+
__version__ = '24.06.16'
|
|
35
35
|
|
|
36
36
|
_0_INF_NAN_NINF = (0, _0_0) + _INF_NAN_NINF
|
|
37
37
|
_MAX_2 = MAX * _0_5 # PYCHOK used!
|
|
@@ -44,38 +44,37 @@ class AuxAngle(_Named):
|
|
|
44
44
|
'''
|
|
45
45
|
_AUX = None # overloaded/-ridden
|
|
46
46
|
_diff = NAN # default
|
|
47
|
-
_iter = None # like .
|
|
47
|
+
_iter = None # like ._NamedBase
|
|
48
48
|
_y = _0_0
|
|
49
49
|
_x = _1_0
|
|
50
50
|
|
|
51
|
-
def __init__(self, y_angle=_0_0, x=_1_0, **
|
|
51
|
+
def __init__(self, y_angle=_0_0, x=_1_0, aux=None, **name):
|
|
52
52
|
'''New L{AuxAngle}.
|
|
53
53
|
|
|
54
54
|
@kwarg y_angle: The Y component (C{scalar}, including C{INF}, C{NAN}
|
|
55
55
|
and C{NINF}) or a previous L{AuxAngle} instance.
|
|
56
|
-
@kwarg x: The X component,
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
@kwarg x: The X component, required if C{B{y_angle}} is C{scalar},
|
|
57
|
+
ignored otherwise.
|
|
58
|
+
@kwarg aux: I{Auxiliary} kind (C{Aux.KIND}), like B{C{x}}.
|
|
59
|
+
@kwarg name: Optional C{B{name}=NN} see (C{str}).
|
|
59
60
|
|
|
60
61
|
@raise AuxError: Invalid B{C{y_angle}}, B{C{x}} or B{C{aux}}.
|
|
61
62
|
'''
|
|
62
|
-
name, aux = _name2__(**name_aux)
|
|
63
63
|
try:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if aux:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
self._AUX = a
|
|
64
|
+
try:
|
|
65
|
+
yx = y_angle._yx
|
|
66
|
+
aux = y_angle._AUX
|
|
67
|
+
if self._diff != y_angle._diff:
|
|
68
|
+
self._diff = y_angle._diff
|
|
69
|
+
except AttributeError:
|
|
70
|
+
yx = y_angle, x
|
|
71
|
+
if aux in _AUXClass:
|
|
72
|
+
if self._AUX != aux:
|
|
73
|
+
self._AUX = aux
|
|
74
|
+
elif aux is not None:
|
|
75
|
+
raise ValueError() # _invalid_
|
|
76
|
+
except Exception as X:
|
|
77
|
+
raise AuxError(y=y_angle, x=x, aux=aux, cause=X)
|
|
79
78
|
self._y, self._x = _yx2(yx)
|
|
80
79
|
if name:
|
|
81
80
|
self.name = name
|
|
@@ -84,7 +83,7 @@ class AuxAngle(_Named):
|
|
|
84
83
|
'''Return this angle's absolute value (L{AuxAngle}).
|
|
85
84
|
'''
|
|
86
85
|
a = self._copy_2(self.__abs__)
|
|
87
|
-
a._yx =
|
|
86
|
+
a._yx = map2(fabs, self._yx)
|
|
88
87
|
return a
|
|
89
88
|
|
|
90
89
|
def __add__(self, other):
|
|
@@ -230,28 +229,28 @@ class AuxAngle(_Named):
|
|
|
230
229
|
return self._diff
|
|
231
230
|
|
|
232
231
|
@staticmethod
|
|
233
|
-
def fromDegrees(deg, **
|
|
232
|
+
def fromDegrees(deg, **aux_name):
|
|
234
233
|
'''Get an L{AuxAngle} from degrees.
|
|
235
234
|
'''
|
|
236
|
-
return _AuxClass(**
|
|
235
|
+
return _AuxClass(**aux_name)(*sincos2d(deg), **aux_name)
|
|
237
236
|
|
|
238
237
|
@staticmethod
|
|
239
|
-
def fromLambertianDegrees(psi, **
|
|
238
|
+
def fromLambertianDegrees(psi, **aux_name):
|
|
240
239
|
'''Get an L{AuxAngle} from I{Lambertian} degrees.
|
|
241
240
|
'''
|
|
242
|
-
return _AuxClass(**
|
|
241
|
+
return _AuxClass(**aux_name)(sinh(radians(psi)), **aux_name)
|
|
243
242
|
|
|
244
243
|
@staticmethod
|
|
245
|
-
def fromLambertianRadians(psi, **
|
|
244
|
+
def fromLambertianRadians(psi, **aux_name):
|
|
246
245
|
'''Get an L{AuxAngle} from I{Lambertian} radians.
|
|
247
246
|
'''
|
|
248
|
-
return _AuxClass(**
|
|
247
|
+
return _AuxClass(**aux_name)(sinh(psi), **aux_name)
|
|
249
248
|
|
|
250
249
|
@staticmethod
|
|
251
|
-
def fromRadians(rad, **
|
|
250
|
+
def fromRadians(rad, **aux_name):
|
|
252
251
|
'''Get an L{AuxAngle} from radians.
|
|
253
252
|
'''
|
|
254
|
-
return _AuxClass(**
|
|
253
|
+
return _AuxClass(**aux_name)(*sincos2(rad), **aux_name)
|
|
255
254
|
|
|
256
255
|
@Property_RO
|
|
257
256
|
def iteration(self):
|
|
@@ -514,13 +513,15 @@ def _AuxClass(aux=None, **unused): # PYCHOK C{classof(aux)}
|
|
|
514
513
|
|
|
515
514
|
|
|
516
515
|
def _yx2(yx):
|
|
516
|
+
'''(INTERNAL) Validate 2-tuple C{(y, x)}.
|
|
517
|
+
'''
|
|
517
518
|
try:
|
|
518
|
-
y, x =
|
|
519
|
+
y, x = yx
|
|
520
|
+
y, x = map1(float, y, x)
|
|
519
521
|
if y in _0_INF_NAN_NINF:
|
|
520
522
|
x = _copysign_1_0(x)
|
|
521
|
-
except (TypeError, ValueError) as
|
|
522
|
-
y, x =
|
|
523
|
-
raise AuxError(y=y, x=x, cause=e)
|
|
523
|
+
except (TypeError, ValueError) as X:
|
|
524
|
+
raise AuxError(y=y, x=x, cause=X)
|
|
524
525
|
return y, x
|
|
525
526
|
|
|
526
527
|
|
pygeodesy/auxilats/auxDLat.py
CHANGED
|
@@ -26,7 +26,7 @@ from pygeodesy.elliptic import Elliptic as _Ef, Fsum
|
|
|
26
26
|
from math import atan2, cos, sin, sqrt
|
|
27
27
|
|
|
28
28
|
__all__ = ()
|
|
29
|
-
__version__ = '
|
|
29
|
+
__version__ = '24.06.16'
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class AuxDLat(AuxLat):
|
|
@@ -138,7 +138,8 @@ class AuxDLat(AuxLat):
|
|
|
138
138
|
txy = tx * ty
|
|
139
139
|
if txy < 0 or (isinf(ty) and not tx):
|
|
140
140
|
_a = atan1
|
|
141
|
-
r =
|
|
141
|
+
r = _a(fm1 * ty) - _a(fm1 * tx)
|
|
142
|
+
r = _over(r, _a(ty) - _a(tx))
|
|
142
143
|
elif tx == ty: # includes tx = ty = inf
|
|
143
144
|
if txy > 1: # == tx**2
|
|
144
145
|
txy = _1_over(txy)
|
pygeodesy/auxilats/auxLat.py
CHANGED
|
@@ -22,8 +22,9 @@ from pygeodesy.basics import _reverange, _xinstanceof, _passarg
|
|
|
22
22
|
from pygeodesy.constants import INF, MAX_EXP, MIN_EXP, NAN, PI_2, PI_4, _EPSqrt, \
|
|
23
23
|
_0_0, _0_0s, _0_1, _0_25, _0_5, _1_0, _2_0, _3_0, \
|
|
24
24
|
_360_0, isfinite, isinf, isnan, _log2, _over
|
|
25
|
-
from pygeodesy.datums import _ellipsoidal_datum, _WGS84,
|
|
26
|
-
|
|
25
|
+
from pygeodesy.datums import _ellipsoidal_datum, _WGS84, \
|
|
26
|
+
Ellipsoid, _name__, _EWGS84
|
|
27
|
+
# from pygeodesy.ellipsoids import Ellipsoid, _EWGS84 # from .datums
|
|
27
28
|
from pygeodesy.elliptic import Elliptic as _Ef
|
|
28
29
|
from pygeodesy.errors import AuxError, _xkwds_not, _xkwds_pop2, _Xorder
|
|
29
30
|
# from pygeodesy.fmath import cbrt # from .karney
|
|
@@ -46,7 +47,7 @@ except ImportError: # Python 3.11-
|
|
|
46
47
|
return pow(_2_0, x)
|
|
47
48
|
|
|
48
49
|
__all__ = ()
|
|
49
|
-
__version__ = '24.
|
|
50
|
+
__version__ = '24.06.16'
|
|
50
51
|
|
|
51
52
|
_TRIPS = 1024 # XXX 2 or 3?
|
|
52
53
|
|
|
@@ -64,24 +65,21 @@ class AuxLat(AuxAngle):
|
|
|
64
65
|
<https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1AuxLatitude.html>}.
|
|
65
66
|
'''
|
|
66
67
|
_csc = dict() # global coeffs cache: [aL][k], upto max(k) * (4 + 6 + 8) floats
|
|
67
|
-
_E =
|
|
68
|
+
_E = _EWGS84
|
|
68
69
|
# _Lmax = 0 # overwritten below
|
|
69
70
|
_mAL = 6 # 4, 6 or 8 aka Lmax
|
|
70
71
|
|
|
71
|
-
def __init__(self, a_earth=
|
|
72
|
+
def __init__(self, a_earth=_EWGS84, f=None, b=None, **ALorder_name):
|
|
72
73
|
'''New L{AuxLat} instance on an ellipsoid or datum.
|
|
73
74
|
|
|
74
|
-
@arg a_earth: Equatorial radius, semi-axis (C{meter}) or an
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
@kwarg ALorder_name: Optional C{B{name}=NN} (C{str}) and optional
|
|
83
|
-
keyword argument C{B{ALorder}=6} for the order of
|
|
84
|
-
this L{AuxLat}, see property C{ALorder}.
|
|
75
|
+
@arg a_earth: Equatorial radius, semi-axis (C{meter}) or an ellipsoid or
|
|
76
|
+
datum (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}).
|
|
77
|
+
@kwarg f: Flattening: M{(a - b) / a} (C{float}, near zero for spherical),
|
|
78
|
+
required if B{C{a_earth}} is C{scalar} and C{B{b}=None}.
|
|
79
|
+
@kwarg b: Optional polar radius, semi-axis (C{meter}, required if B{C{a_earth}}
|
|
80
|
+
is C{scalar} and C{B{f}=None}.
|
|
81
|
+
@kwarg ALorder_name: Optional C{B{name}=NN} (C{str}) and optional order of
|
|
82
|
+
this L{AuxLat} C{B{ALorder}=6}, see property C{ALorder}.
|
|
85
83
|
'''
|
|
86
84
|
if ALorder_name:
|
|
87
85
|
M = self._mAL
|
|
@@ -91,7 +89,7 @@ class AuxLat(AuxAngle):
|
|
|
91
89
|
else:
|
|
92
90
|
name = NN
|
|
93
91
|
try:
|
|
94
|
-
if a_earth
|
|
92
|
+
if a_earth not in (_EWGS84, _WGS84):
|
|
95
93
|
n = _name__(name, name__=AuxLat)
|
|
96
94
|
if b is f is None:
|
|
97
95
|
E = _ellipsoidal_datum(a_earth, name=n).ellipsoid # XXX raiser=_earth_
|
|
@@ -101,7 +99,7 @@ class AuxLat(AuxAngle):
|
|
|
101
99
|
raise ValueError(_not_scalar_)
|
|
102
100
|
self._E = E
|
|
103
101
|
elif not (b is f is None):
|
|
104
|
-
# _UnexpectedError into AuxError
|
|
102
|
+
# turn _UnexpectedError into AuxError
|
|
105
103
|
name = _name__(name, **_xkwds_not(None, b=b, f=f))
|
|
106
104
|
|
|
107
105
|
if name:
|
pygeodesy/auxilats/auxily.py
CHANGED
pygeodesy/azimuthal.py
CHANGED
|
@@ -70,7 +70,7 @@ from pygeodesy.utily import asin1, atan1, atan2b, atan2d, sincos2, \
|
|
|
70
70
|
from math import acos, atan2, degrees, fabs, sin, sqrt
|
|
71
71
|
|
|
72
72
|
__all__ = _ALL_LAZY.azimuthal
|
|
73
|
-
__version__ = '24.
|
|
73
|
+
__version__ = '24.06.11'
|
|
74
74
|
|
|
75
75
|
_EPS_K = _EPStol * _0_1 # Karney's eps_ or _EPSmin * _0_1?
|
|
76
76
|
_over_horizon_ = 'over horizon'
|
|
@@ -364,8 +364,8 @@ class Equidistant(_AzimuthalBase):
|
|
|
364
364
|
|
|
365
365
|
@raise AzimuthalError: Invalid B{C{lat}} or B{C{lon}}.
|
|
366
366
|
|
|
367
|
-
@note: The C{scale} will be C{-1} if B{C{(lat, lon)}} is antipodal to
|
|
368
|
-
|
|
367
|
+
@note: The C{scale} will be C{-1} if B{C{(lat, lon)}} is antipodal to the
|
|
368
|
+
projection center C{(lat0, lon0)}.
|
|
369
369
|
'''
|
|
370
370
|
def _k_t(c):
|
|
371
371
|
k = _N_1_0 if c < 0 else _1_0
|
|
@@ -389,7 +389,7 @@ class Equidistant(_AzimuthalBase):
|
|
|
389
389
|
optional, additional B{C{LatLon}} keyword arguments,
|
|
390
390
|
ignored if C{B{LatLon} is None}.
|
|
391
391
|
|
|
392
|
-
@return: The geodetic (C{LatLon}) or if B{
|
|
392
|
+
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
393
393
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
394
394
|
|
|
395
395
|
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon}
|
|
@@ -509,7 +509,7 @@ class _EquidistantBase(_AzimuthalGeodesic):
|
|
|
509
509
|
optional, additional B{C{LatLon}} keyword arguments,
|
|
510
510
|
ignored if C{B{LatLon} is None}.
|
|
511
511
|
|
|
512
|
-
@return: The geodetic (C{LatLon}) or if B{
|
|
512
|
+
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
513
513
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
514
514
|
|
|
515
515
|
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon}
|
|
@@ -680,7 +680,7 @@ class Gnomonic(_AzimuthalBase):
|
|
|
680
680
|
optional, additional B{C{LatLon}} keyword arguments,
|
|
681
681
|
ignored if C{B{LatLon} is None}.
|
|
682
682
|
|
|
683
|
-
@return: The geodetic (C{LatLon}) or if B{
|
|
683
|
+
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
684
684
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
685
685
|
|
|
686
686
|
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon}
|
|
@@ -791,7 +791,7 @@ class _GnomonicBase(_AzimuthalGeodesic):
|
|
|
791
791
|
optional, additional B{C{LatLon}} keyword arguments,
|
|
792
792
|
ignored if C{B{LatLon} is None}.
|
|
793
793
|
|
|
794
|
-
@return: The geodetic (C{LatLon}) or if B{
|
|
794
|
+
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
795
795
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
796
796
|
|
|
797
797
|
@raise AzimuthalError: No convergence.
|
|
@@ -984,7 +984,7 @@ class LambertEqualArea(_AzimuthalBase):
|
|
|
984
984
|
and optional, additional B{C{LatLon}} keyword
|
|
985
985
|
arguments, ignored if C{B{LatLon} is None}.
|
|
986
986
|
|
|
987
|
-
@return: The geodetic (C{LatLon}) or if B{
|
|
987
|
+
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
988
988
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
989
989
|
|
|
990
990
|
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon}
|
|
@@ -1038,7 +1038,7 @@ class Orthographic(_AzimuthalBase):
|
|
|
1038
1038
|
optional, additional B{C{LatLon}} keyword arguments,
|
|
1039
1039
|
ignored if C{B{LatLon} is None}.
|
|
1040
1040
|
|
|
1041
|
-
@return: The geodetic (C{LatLon}) or if B{
|
|
1041
|
+
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
1042
1042
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
1043
1043
|
|
|
1044
1044
|
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon}
|
|
@@ -1111,7 +1111,7 @@ class Stereographic(_AzimuthalBase):
|
|
|
1111
1111
|
optional, additional B{C{LatLon}} keyword arguments,
|
|
1112
1112
|
ignored if C{B{LatLon} is None}.
|
|
1113
1113
|
|
|
1114
|
-
@return: The geodetic (C{LatLon}) or if B{
|
|
1114
|
+
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
1115
1115
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
1116
1116
|
|
|
1117
1117
|
@note: The C{lat} will be in range C{[-90..90] degrees}, C{lon} in range
|