pygeodesy 24.10.24__py2.py3-none-any.whl → 24.11.11__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.11.11.dist-info}/METADATA +4 -4
- {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.11.11.dist-info}/RECORD +54 -54
- {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.11.11.dist-info}/WHEEL +1 -1
- pygeodesy/__init__.py +2 -2
- pygeodesy/azimuthal.py +51 -61
- pygeodesy/basics.py +34 -33
- pygeodesy/booleans.py +36 -36
- pygeodesy/cartesianBase.py +5 -5
- pygeodesy/constants.py +4 -4
- pygeodesy/css.py +7 -8
- pygeodesy/deprecated/__init__.py +1 -1
- pygeodesy/deprecated/classes.py +9 -9
- pygeodesy/deprecated/functions.py +6 -6
- pygeodesy/ecef.py +11 -14
- pygeodesy/ellipsoidalBase.py +105 -120
- pygeodesy/ellipsoidalBaseDI.py +114 -118
- pygeodesy/ellipsoidalExact.py +35 -37
- pygeodesy/ellipsoids.py +3 -3
- pygeodesy/errors.py +24 -24
- pygeodesy/etm.py +80 -72
- pygeodesy/fmath.py +39 -37
- pygeodesy/formy.py +3 -2
- pygeodesy/fsums.py +51 -40
- pygeodesy/geodesicw.py +15 -14
- pygeodesy/geodesicx/__init__.py +2 -2
- pygeodesy/geodsolve.py +7 -16
- pygeodesy/geoids.py +5 -5
- pygeodesy/heights.py +2 -2
- pygeodesy/internals.py +63 -79
- pygeodesy/karney.py +2 -2
- pygeodesy/ktm.py +11 -13
- pygeodesy/latlonBase.py +6 -6
- pygeodesy/lazily.py +5 -5
- pygeodesy/lcc.py +4 -4
- pygeodesy/ltp.py +10 -10
- pygeodesy/ltpTuples.py +74 -75
- pygeodesy/mgrs.py +9 -10
- pygeodesy/named.py +4 -0
- pygeodesy/osgr.py +9 -12
- pygeodesy/props.py +2 -2
- pygeodesy/resections.py +9 -10
- pygeodesy/rhumb/__init__.py +1 -1
- pygeodesy/rhumb/solve.py +3 -3
- pygeodesy/simplify.py +5 -5
- pygeodesy/sphericalNvector.py +80 -123
- pygeodesy/sphericalTrigonometry.py +60 -66
- pygeodesy/units.py +2 -2
- pygeodesy/utm.py +6 -6
- pygeodesy/vector2d.py +13 -13
- pygeodesy/vector3d.py +19 -21
- pygeodesy/vector3dBase.py +18 -15
- pygeodesy/webmercator.py +4 -4
- pygeodesy/wgrs.py +4 -4
- {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.11.11.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PyGeodesy
|
|
3
|
-
Version: 24.
|
|
3
|
+
Version: 24.11.11
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -44,7 +44,7 @@ and nearest points, intersections of geodesic, great circle and rhumb lines, cir
|
|
|
44
44
|
secants, `3-point resections`_, triangulation, trilateration (by intersection, by overlap and in
|
|
45
45
|
3d), conversions and unrolling, among other things. For more information and further details see the
|
|
46
46
|
documentation_, the descriptions of `Latitude/Longitude`_, Vincenty_ and `Vector-based`_ geodesy, the
|
|
47
|
-
original `JavaScript source`_ or docs_ and *Karney*\'s Python geographiclib_ and
|
|
47
|
+
original `JavaScript source`_ or docs_ and *Karney*\'s Python geographiclib_ and C++ `GeographicLib.`_
|
|
48
48
|
|
|
49
49
|
Also included are modules for conversions to and from `Cassini-Soldner`_, ECEF_ (Earth-Centered,
|
|
50
50
|
Earth-Fixed cartesian), UTM_ (Universal Transverse Mercator and Exact_), UPS_ (Universal Polar
|
|
@@ -160,7 +160,7 @@ and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64
|
|
|
160
160
|
|
|
161
161
|
For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
|
|
162
162
|
|
|
163
|
-
*Last updated:
|
|
163
|
+
*Last updated: Nov 11, 2024.*
|
|
164
164
|
|
|
165
165
|
License
|
|
166
166
|
=======
|
|
@@ -200,7 +200,6 @@ DEALINGS IN THE SOFTWARE.
|
|
|
200
200
|
|
|
201
201
|
.. _Albers equal-area: https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1AlbersEqualArea.html
|
|
202
202
|
.. _C++ classes: https://GeographicLib.SourceForge.io/C++/doc/annotated.html
|
|
203
|
-
.. _C++ GeographicLib: https://GeographicLib.SourceForge.io/C++/doc/index.html
|
|
204
203
|
.. _Cartesian: https://mrJean1.GitHub.io/PyGeodesy/docs/pygeodesy-Cartesian-attributes-table.html
|
|
205
204
|
.. _Cassini-Soldner: https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1CassiniSoldner.html
|
|
206
205
|
.. _checked: https://GitHub.com/ActiveState/code/tree/master/recipes/Python/546532_PyChecker_postprocessor
|
|
@@ -222,6 +221,7 @@ DEALINGS IN THE SOFTWARE.
|
|
|
222
221
|
.. _GeoConvert: https://GeographicLib.SourceForge.io/C++/doc/utilities.html
|
|
223
222
|
.. _GeodSolve: https://GeographicLib.SourceForge.io/C++/doc/utilities.html
|
|
224
223
|
.. _geographiclib: https://PyPI.org/project/geographiclib
|
|
224
|
+
.. _GeographicLib.: https://GeographicLib.SourceForge.io/C++/doc/index.html
|
|
225
225
|
.. _Geohashes: https://www.Movable-Type.co.UK/scripts/geohash.html
|
|
226
226
|
.. _Geoid: https://mrJean1.GitHub.io/PyGeodesy/docs/pygeodesy.geoids-module.html
|
|
227
227
|
.. _Georefs (WGRS): https://WikiPedia.org/wiki/World_Geographic_Reference_System
|
|
@@ -1,81 +1,81 @@
|
|
|
1
1
|
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=
|
|
2
|
+
pygeodesy/__init__.py,sha256=qZJcMz6VeaGXNy3i3cKvEG1gGfPcrUSxk8kHkFW3o9g,42631
|
|
3
3
|
pygeodesy/__main__.py,sha256=1lE1jMp57iXpvu3TEh2unyT2qvtSa5nJPQn_K7Wmj3E,5442
|
|
4
4
|
pygeodesy/albers.py,sha256=BTeUqKPgygExYBLhRJh8b8FYdwuCIpCuo8ggCw6-Auw,30955
|
|
5
|
-
pygeodesy/azimuthal.py,sha256=
|
|
6
|
-
pygeodesy/basics.py,sha256=
|
|
7
|
-
pygeodesy/booleans.py,sha256=
|
|
8
|
-
pygeodesy/cartesianBase.py,sha256=
|
|
5
|
+
pygeodesy/azimuthal.py,sha256=WqyA4IWGYBL3wj4oYKCNgm7IcqCtuUhE9TY5hVm7uhU,49763
|
|
6
|
+
pygeodesy/basics.py,sha256=a74YOBmZLWj-CEFadl-ERD9J4qVECRYSL8HBR1gsxTk,30158
|
|
7
|
+
pygeodesy/booleans.py,sha256=IRD4gbzZVcpMg7jh24jtotDORA2jI5-adQkzVaLMnUY,73544
|
|
8
|
+
pygeodesy/cartesianBase.py,sha256=7YiW3i6_HNIgEwqw4NHoFJG5FQsv6dc8opE5w2M7JsY,46939
|
|
9
9
|
pygeodesy/clipy.py,sha256=hzI6IutTRkbssjPPgAjXv9OcgCIIZchjnMWaHin4YAU,27728
|
|
10
|
-
pygeodesy/constants.py,sha256=
|
|
11
|
-
pygeodesy/css.py,sha256=
|
|
10
|
+
pygeodesy/constants.py,sha256=450oXrMtOT_5A8DvQ_Sh_eu1Kg7CkYmaZpC45usCZDI,19825
|
|
11
|
+
pygeodesy/css.py,sha256=7y85FiUMarlZiiZ9Xn-UyRsnAaV3Met2bumARBGyr94,25642
|
|
12
12
|
pygeodesy/datums.py,sha256=trFx6KgEjlYY_VC6WViZhH1D-U3tDDDdbZXG6MD2H_U,34057
|
|
13
13
|
pygeodesy/dms.py,sha256=FiI-h3nXngSp624i0KlzHkBqYp5X5ucmvN6fLGi_Xgk,42174
|
|
14
|
-
pygeodesy/ecef.py,sha256=
|
|
14
|
+
pygeodesy/ecef.py,sha256=MdGNJHebXV4WxGYjUZlHZmZ1dKDv5LUG0xpyYFckuCo,59546
|
|
15
15
|
pygeodesy/elevations.py,sha256=4FuVcVNb_D09gmcvUlck344N4f7Jms76SIRrdutvKjk,10801
|
|
16
|
-
pygeodesy/ellipsoidalBase.py,sha256=
|
|
17
|
-
pygeodesy/ellipsoidalBaseDI.py,sha256
|
|
18
|
-
pygeodesy/ellipsoidalExact.py,sha256=
|
|
16
|
+
pygeodesy/ellipsoidalBase.py,sha256=GhJG4h8I7ySs6EfXdmVbXOZcvMDI7YYCc7yPj5vMHqo,55109
|
|
17
|
+
pygeodesy/ellipsoidalBaseDI.py,sha256=ZaIPVK187mD9CpORz9t9Vtz03TiVBZ_CRmVs-qMsKBY,38243
|
|
18
|
+
pygeodesy/ellipsoidalExact.py,sha256=vQuyv9jpHLnsWDAwC-GfysFrKC1NAz5hJamIZ7G3NSs,16972
|
|
19
19
|
pygeodesy/ellipsoidalGeodSolve.py,sha256=fAT4b3HXkM6i1W_C0rb4vbSxZqr4c6rS7PIvGF2ad7s,16666
|
|
20
20
|
pygeodesy/ellipsoidalKarney.py,sha256=qvJa8kZ4SgaRR2UbjtkcRxw_CRbwhXoUT4Dn_6DJ6Ag,18721
|
|
21
21
|
pygeodesy/ellipsoidalNvector.py,sha256=Ye6O6SIRiiwY6PJG4KD9kZ6GBpKkWWxZWsZC4k3eH-s,30039
|
|
22
22
|
pygeodesy/ellipsoidalVincenty.py,sha256=Eeh-lFB9y65kyYCZ5bc7uRIF9o6UT4lqdkk4EVRi0Pg,25946
|
|
23
|
-
pygeodesy/ellipsoids.py,sha256=
|
|
23
|
+
pygeodesy/ellipsoids.py,sha256=wlYlii-sU2UQBdzFeHpDOamKRtqJavXQXjCr1gRDiFs,106918
|
|
24
24
|
pygeodesy/elliptic.py,sha256=g_IuxDoVf0npEicUCT3x39GJqo1cfpkalC7aV1Z1hFY,45004
|
|
25
25
|
pygeodesy/epsg.py,sha256=Vq_M1g7Z0x5Noqsmt6OCQkPdYJj4jpWObtixL5pAjDA,8220
|
|
26
|
-
pygeodesy/errors.py,sha256=
|
|
27
|
-
pygeodesy/etm.py,sha256=
|
|
28
|
-
pygeodesy/fmath.py,sha256=
|
|
29
|
-
pygeodesy/formy.py,sha256=
|
|
26
|
+
pygeodesy/errors.py,sha256=AL-o8q1PqkTcCJTmY6g6iG9BoCpxUONhIFohgekryYw,32098
|
|
27
|
+
pygeodesy/etm.py,sha256=yUXxfdLKlr84a2gtv_ZGGxp1sLOqNvNr7XaOHNwqMb0,46722
|
|
28
|
+
pygeodesy/fmath.py,sha256=9F3381NhthGX92YoFKflAWOZlRwxFv4xJUPJnFy0Hdw,36848
|
|
29
|
+
pygeodesy/formy.py,sha256=s9s-aY3viaMMBnb4jhHE0ZowDUfIcuM-_r9gvilo5B4,75116
|
|
30
30
|
pygeodesy/frechet.py,sha256=F6TYbOEYSOFcll6nvp4GhqafUWXh1umAKb1QaMYQtuM,34372
|
|
31
31
|
pygeodesy/fstats.py,sha256=8Vn1cwlgCQD444WX8FfAEC-AXQcJDeI9_i14Mizp59U,28288
|
|
32
|
-
pygeodesy/fsums.py,sha256=
|
|
32
|
+
pygeodesy/fsums.py,sha256=ictqTC7QHDoXcvJxGN66Z_OHnnxSIwXQjlVAOffb8zM,103970
|
|
33
33
|
pygeodesy/gars.py,sha256=KRlyZUv1euEl7ZkDYSZG913GAfFMRG2m2hp37ObYY_Y,11829
|
|
34
34
|
pygeodesy/geodesici.py,sha256=4Elhe9Z8tcVFD46K0HKd_TSS24CQmgQGGlDk6DnBnmo,74775
|
|
35
|
-
pygeodesy/geodesicw.py,sha256=
|
|
36
|
-
pygeodesy/geodsolve.py,sha256=
|
|
35
|
+
pygeodesy/geodesicw.py,sha256=U4mLBOe3x2wGqMynBbO23drd1d9iUXOlBWuNMKdohQ0,28774
|
|
36
|
+
pygeodesy/geodsolve.py,sha256=qYDzQqpfrNcwts1z_yk1HjZ8IlmUXLpda46LHfu4fgs,28989
|
|
37
37
|
pygeodesy/geohash.py,sha256=gDmDI91GOJAdNiAcf9bHq8I581UfPnMmwjWyJlPHRlM,40201
|
|
38
|
-
pygeodesy/geoids.py,sha256=
|
|
38
|
+
pygeodesy/geoids.py,sha256=ZfKz2M8gSIGpzooq6or-GqiGQWsMFOLG7VQeiLwX6rA,82491
|
|
39
39
|
pygeodesy/hausdorff.py,sha256=-aKtRbMefDSoIk4V3wCvNrXPZ7Bqk1P6-XuGuI7o8Zc,34770
|
|
40
|
-
pygeodesy/heights.py,sha256=
|
|
41
|
-
pygeodesy/internals.py,sha256=
|
|
40
|
+
pygeodesy/heights.py,sha256=TaEDSLRD5Nsvo0SuU6u-ohATGOwMFxVd5j7DTA9izZc,42909
|
|
41
|
+
pygeodesy/internals.py,sha256=C3Iai8ViVYIC0UnY52fdYTZnfClELtQS4ccPij4Omyo,24299
|
|
42
42
|
pygeodesy/interns.py,sha256=t8hQ3Y1QHzVkoQxq8Z9f0YjkpRC0oB0G7hpV894aYjw,23403
|
|
43
43
|
pygeodesy/iters.py,sha256=xPH0ytomvJeKHu717Fjzi3QbRrEikO6n7vqkY_IDz1k,20311
|
|
44
|
-
pygeodesy/karney.py,sha256=
|
|
45
|
-
pygeodesy/ktm.py,sha256=
|
|
46
|
-
pygeodesy/latlonBase.py,sha256=
|
|
47
|
-
pygeodesy/lazily.py,sha256=
|
|
48
|
-
pygeodesy/lcc.py,sha256=
|
|
49
|
-
pygeodesy/ltp.py,sha256=
|
|
50
|
-
pygeodesy/ltpTuples.py,sha256=
|
|
51
|
-
pygeodesy/mgrs.py,sha256=
|
|
52
|
-
pygeodesy/named.py,sha256=
|
|
44
|
+
pygeodesy/karney.py,sha256=GvyR_tHLRWQ5tsFjnp0R8OTZaBXkPnL8eprSMDJx1mM,40466
|
|
45
|
+
pygeodesy/ktm.py,sha256=pMKiQgtXqnjTNPrVt21N_3x0dFPLuHW0IlOYg3dNjaY,27208
|
|
46
|
+
pygeodesy/latlonBase.py,sha256=2aI0ryg-tRgBuemkJYQkfLkNVi3t2cX2NM7w7wdIebw,79074
|
|
47
|
+
pygeodesy/lazily.py,sha256=JMLMYtzJBxCHyAAJ1pNBiDUVuFimhJChKWXv2nDzA0M,46655
|
|
48
|
+
pygeodesy/lcc.py,sha256=Oa-u7bf_N9aF3D8Yr75In3kXQ2M4SRgGkyyt8aixo8c,25671
|
|
49
|
+
pygeodesy/ltp.py,sha256=tEBBq0U_wfB_8NQG5eEW13nQ2Z8rL6zq1McGcv2YBuI,50751
|
|
50
|
+
pygeodesy/ltpTuples.py,sha256=1AHablDH-A9KRVHMcNPcyu4y6P9kOi10BcqvIKFQrKk,58545
|
|
51
|
+
pygeodesy/mgrs.py,sha256=kVoKDYtm4FhX8BoEKSYbiJ-G_DrT4trb08xjlvpEl1o,29819
|
|
52
|
+
pygeodesy/named.py,sha256=VGY4txpgn7rALFq98zhfCQ0pOC_aPUFVa56TItzFCeM,52510
|
|
53
53
|
pygeodesy/namedTuples.py,sha256=e0rV1Zb2tbx8fztXcSkUFsRTmZtye8B5i_Hi4vBUndU,28758
|
|
54
54
|
pygeodesy/nvectorBase.py,sha256=Xy1TDcH5UuUelVZ7aSKX85hx3fLlpDkYDhuoZijQ1vI,28644
|
|
55
|
-
pygeodesy/osgr.py,sha256
|
|
55
|
+
pygeodesy/osgr.py,sha256=-Ur966glrRhjxtV9DNo920j45PtsUPEQsiy8m1CMhOk,30777
|
|
56
56
|
pygeodesy/points.py,sha256=Vs9vShhBxebgo7UdHlt7Ov4D4Chfa723BZxV0_kpgGk,64389
|
|
57
|
-
pygeodesy/props.py,sha256=
|
|
58
|
-
pygeodesy/resections.py,sha256=
|
|
59
|
-
pygeodesy/simplify.py,sha256=
|
|
57
|
+
pygeodesy/props.py,sha256=Qhs5TpcqoHPA64l-P1GQgG8zlboDsAqzVchDsKv2dn8,24565
|
|
58
|
+
pygeodesy/resections.py,sha256=pl3THJgLKnWEfQaQD1lklt6GfFjaX24ceNZb8PpK7zY,43584
|
|
59
|
+
pygeodesy/simplify.py,sha256=b7oSR2B3yYpwElBeJiyYyK_yFbxwz2Bzx51pymIluwE,25251
|
|
60
60
|
pygeodesy/solveBase.py,sha256=DpgFNHmWs1GUwCViAU-9iBsmKLVFNc8kW1zrDNi31FY,18485
|
|
61
61
|
pygeodesy/sphericalBase.py,sha256=lsjzDWm3VUxKTpKASqZJDYw7M_CJ4eCgzp3LiCJvMt8,32110
|
|
62
|
-
pygeodesy/sphericalNvector.py,sha256=
|
|
63
|
-
pygeodesy/sphericalTrigonometry.py,sha256=
|
|
62
|
+
pygeodesy/sphericalNvector.py,sha256=Q3DUujU_xmNcPs0_vfAF8pQAtqOsBQLhq_Rz5WB-TdM,54778
|
|
63
|
+
pygeodesy/sphericalTrigonometry.py,sha256=lfhV2radLDKIK5NjkdtJSRb4alRAT-m0LS0Sb0EtOzk,63959
|
|
64
64
|
pygeodesy/streprs.py,sha256=ItNnTqkE_TMZtqgsRhDonrRDpi5gXtD44sQ_D3Qfsd0,23418
|
|
65
65
|
pygeodesy/trf.py,sha256=hxh6WA7IibL09dHoGMBKQeSXrRFPsYQV0F-LPAD40v4,119073
|
|
66
66
|
pygeodesy/triaxials.py,sha256=priBlyuraA1VhNbN0gv_UAXuulAwV14XjOBvu_oJA4U,63559
|
|
67
|
-
pygeodesy/units.py,sha256=
|
|
67
|
+
pygeodesy/units.py,sha256=Mr7kLZPSFSMp-xiKy6fqAXuop2LWSZIwWUElGMaWFJY,35316
|
|
68
68
|
pygeodesy/unitsBase.py,sha256=ZZ-VDntCOTjSerQJf9aaLE_J0lozrpmUhynRBaCtg24,14060
|
|
69
69
|
pygeodesy/ups.py,sha256=qRyk3tnQNRD7KgWGPANWOrg6Hxqd9eS7vN8or_tKk4E,23338
|
|
70
70
|
pygeodesy/utily.py,sha256=qLxVVE57PHEu1stJaULIYHZ6G-uNe7Fy_uoQfmNbXUg,36189
|
|
71
|
-
pygeodesy/utm.py,sha256=
|
|
71
|
+
pygeodesy/utm.py,sha256=mJLJq5sEnYYtOpBs2KYiDB6bjKxfFRS1_36-Yn7HLEM,31108
|
|
72
72
|
pygeodesy/utmups.py,sha256=g2Z_aEOt6fhV9f4fASlW4_K_O_P4zBsBbWfQV11mIKo,13196
|
|
73
73
|
pygeodesy/utmupsBase.py,sha256=S4s1Sehj9jSMy-XRxwtwVstG3QhyVt924V0FHu0cPIk,18730
|
|
74
|
-
pygeodesy/vector2d.py,sha256=
|
|
75
|
-
pygeodesy/vector3d.py,sha256=
|
|
76
|
-
pygeodesy/vector3dBase.py,sha256=
|
|
77
|
-
pygeodesy/webmercator.py,sha256=
|
|
78
|
-
pygeodesy/wgrs.py,sha256=
|
|
74
|
+
pygeodesy/vector2d.py,sha256=L-2g3EDZGZD6lYlTrDjInsIELul3UGVjR9eMRagVm6o,39649
|
|
75
|
+
pygeodesy/vector3d.py,sha256=8CA80VxV7XJvBrT3kVO13qMT3qsEoEIHvLYzFz7wIxE,42532
|
|
76
|
+
pygeodesy/vector3dBase.py,sha256=gLOFfUrSFFlmX3R-LmMfAvWwntAcgaF3YqBBtNbfbMw,36289
|
|
77
|
+
pygeodesy/webmercator.py,sha256=iMtKf_vNiM4wiH7rewVzpjMjI7C_qm_ZmSjQBTZ_y0s,14936
|
|
78
|
+
pygeodesy/wgrs.py,sha256=VWBkk_rf-DjpG9o_tqVMCR7FJyEh7holdTsJo1v9ads,15455
|
|
79
79
|
pygeodesy/auxilats/_CX_4.py,sha256=WsxGrwqEhdWBx-K5ocwwDuatIkDTZB-FwrqQITbcNU0,6829
|
|
80
80
|
pygeodesy/auxilats/_CX_6.py,sha256=PsaVhzOdCDyRuZ-SH6ZwbWrf_rAkidtwLuAQTlvv5XQ,11277
|
|
81
81
|
pygeodesy/auxilats/_CX_8.py,sha256=mxk12xvzOMNimyHM74fn9sFB0aUSBLojYqtenYhAekQ,18899
|
|
@@ -87,12 +87,12 @@ pygeodesy/auxilats/auxDLat.py,sha256=3sq7Wc-ykpVbldNh10IZ3tIlJ7DcQFDlmZ4nOhJEgo0
|
|
|
87
87
|
pygeodesy/auxilats/auxDST.py,sha256=BSHR0M3hQBR1KjF_BUJHrNzGXr2PblYXUQsMD5L1Kcc,10468
|
|
88
88
|
pygeodesy/auxilats/auxLat.py,sha256=7uxe7mtkY-9uSI3z2wmUNBqzCKyFujIpJU1v-8yDgds,31934
|
|
89
89
|
pygeodesy/auxilats/auxily.py,sha256=X1y4_qC40Th7CgmZILqoQCLAUQoyORcR5W-bN4X0W4I,7882
|
|
90
|
-
pygeodesy/deprecated/__init__.py,sha256=
|
|
90
|
+
pygeodesy/deprecated/__init__.py,sha256=r_oHilCAEi6DmNefqMxLswOD8r7KK0qVaQbw_jq-A-E,2815
|
|
91
91
|
pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8,1655
|
|
92
|
-
pygeodesy/deprecated/classes.py,sha256=
|
|
92
|
+
pygeodesy/deprecated/classes.py,sha256=mt0qomTmDwhI1o06cqgHs-_KPe9uwVX5q4QeRkwTyp0,12469
|
|
93
93
|
pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
|
|
94
94
|
pygeodesy/deprecated/datum.py,sha256=s8Hke053RucP5ACvg3gdX8weQfGM0x59pQyHpY11eOs,1875
|
|
95
|
-
pygeodesy/deprecated/functions.py,sha256
|
|
95
|
+
pygeodesy/deprecated/functions.py,sha256=rf743PWGPP69Ay2TydjnF8YCBXm3p5y1jZvLCPu1wtc,14217
|
|
96
96
|
pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
|
|
97
97
|
pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
|
|
98
98
|
pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
|
|
@@ -101,18 +101,18 @@ pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7k
|
|
|
101
101
|
pygeodesy/geodesicx/_C4_24.py,sha256=r5-So2i4z-OFY6NFYERUvhtxYHaYphPRgUUC3PWC5K4,90707
|
|
102
102
|
pygeodesy/geodesicx/_C4_27.py,sha256=Pkpns4kBAHxBcvi0f9l_3GQeE6qcrl123DccEQ593To,134215
|
|
103
103
|
pygeodesy/geodesicx/_C4_30.py,sha256=cseNhROi7DHi77kgdrXXDXO6yiiq00DNcX0HOVf2Rpg,201921
|
|
104
|
-
pygeodesy/geodesicx/__init__.py,sha256=
|
|
104
|
+
pygeodesy/geodesicx/__init__.py,sha256=1ALfFc-DVxhdicPFtqrfLd2up5-VnBSWX0ZB7aHk-S0,2478
|
|
105
105
|
pygeodesy/geodesicx/__main__.py,sha256=wsJPK6lW_PsgVCR1ZJksgGhwxwrsMGSXhYkhpjbknTc,4188
|
|
106
106
|
pygeodesy/geodesicx/gx.py,sha256=yeNpMQbw_uWfs4KOQX8RMAQt6WNsG3zsGgmZRVgbQIk,60612
|
|
107
107
|
pygeodesy/geodesicx/gxarea.py,sha256=cJaXwMMxjQ21RiCGU7c2YLXNmrqkRawHxQxsg7o5gas,19454
|
|
108
108
|
pygeodesy/geodesicx/gxbases.py,sha256=AyvsjiSENqikJK6qpm55rDkUlBSmTDk_-FoqzzMFX1M,6130
|
|
109
109
|
pygeodesy/geodesicx/gxline.py,sha256=zNQF8lz9caHZlsUcL8NfjG02KIza39Q6Qd6XizDp_UI,27537
|
|
110
|
-
pygeodesy/rhumb/__init__.py,sha256=
|
|
110
|
+
pygeodesy/rhumb/__init__.py,sha256=mejjuzcbm4zJJIWEcKCXObDIZoF1e_dtIaChg0mYbr4,2207
|
|
111
111
|
pygeodesy/rhumb/aux_.py,sha256=XN0zlNwhU525NdcHko-G_Igvc7-mzXbT7ypcVIt5ADw,16048
|
|
112
112
|
pygeodesy/rhumb/bases.py,sha256=e_ASUIK9ABtORVZaTMiFMGRc3w2wKGNDPdJEfVCp5CU,54162
|
|
113
113
|
pygeodesy/rhumb/ekx.py,sha256=JsmdCatWKqsffF8jCh4HDu5IKt_kHq1qUdmP1LMuofY,24044
|
|
114
|
-
pygeodesy/rhumb/solve.py,sha256=
|
|
115
|
-
PyGeodesy-24.
|
|
116
|
-
PyGeodesy-24.
|
|
117
|
-
PyGeodesy-24.
|
|
118
|
-
PyGeodesy-24.
|
|
114
|
+
pygeodesy/rhumb/solve.py,sha256=uP7TJyR529HNZsgmXeV6yAHhDJVBoUC-fEVBUx4-Sd0,23943
|
|
115
|
+
PyGeodesy-24.11.11.dist-info/METADATA,sha256=mv6od5GdIMWcu0qcRzP4L3B3jhe9pWXj56V8xRRefRk,19916
|
|
116
|
+
PyGeodesy-24.11.11.dist-info/WHEEL,sha256=QyeGbh-t8WT0nt0_LNSP02jN-g4ymd1egk1U3osCGMU,110
|
|
117
|
+
PyGeodesy-24.11.11.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
118
|
+
PyGeodesy-24.11.11.dist-info/RECORD,,
|
pygeodesy/__init__.py
CHANGED
|
@@ -23,7 +23,7 @@ the U{documentation<https://mrJean1.GitHub.io/PyGeodesy>}, the descriptions of U
|
|
|
23
23
|
<https://www.Movable-Type.co.UK/scripts/latlong-vincenty.html>} and U{Vector-based
|
|
24
24
|
<https://www.Movable-Type.co.UK/scripts/latlong-vectors.html>} geodesy, the original U{JavaScript source
|
|
25
25
|
<https://GitHub.com/ChrisVeness/geodesy>} or U{docs<https://www.Movable-Type.co.UK/scripts/geodesy/docs>}
|
|
26
|
-
and I{Karney}'s Python U{geographiclib<https://PyPI.org/project/geographiclib>} and
|
|
26
|
+
and I{Karney}'s Python U{geographiclib<https://PyPI.org/project/geographiclib>} and C++ U{GeographicLib
|
|
27
27
|
<https://GeographicLib.SourceForge.io/C++/doc/index.html>}.
|
|
28
28
|
|
|
29
29
|
Also included are modules for conversions to and from U{Cassini-Soldner
|
|
@@ -598,7 +598,7 @@ else:
|
|
|
598
598
|
|
|
599
599
|
from pygeodesy.internals import _version2, _DOT_ # PYCHOK import
|
|
600
600
|
# from pygeodesy.interns import _DOT_ # from .internals
|
|
601
|
-
__version__ = '24.
|
|
601
|
+
__version__ = '24.11.11'
|
|
602
602
|
# see setup.py for similar logic
|
|
603
603
|
version = _DOT_(*_version2(__version__, n=3))
|
|
604
604
|
|
pygeodesy/azimuthal.py
CHANGED
|
@@ -49,7 +49,7 @@ from pygeodesy.ellipsoidalBase import LatLonEllipsoidalBase as _LLEB, \
|
|
|
49
49
|
_xinstanceof
|
|
50
50
|
from pygeodesy.datums import _spherical_datum, _WGS84
|
|
51
51
|
from pygeodesy.errors import _ValueError, _xdatum, _xkwds
|
|
52
|
-
from pygeodesy.fmath import euclid, hypot as _hypot, Fsum
|
|
52
|
+
from pygeodesy.fmath import euclid, fdot_, hypot as _hypot, Fsum
|
|
53
53
|
# from pygeodesy.fsums import Fsum # from .fmath
|
|
54
54
|
# from pygeodesy.formy import antipode # _MODS
|
|
55
55
|
from pygeodesy.interns import _azimuth_, _datum_, _lat_, _lon_, _scale_, \
|
|
@@ -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.07
|
|
73
|
+
__version__ = '24.11.07'
|
|
74
74
|
|
|
75
75
|
_EPS_K = _EPStol * _0_1 # Karney's eps_ or _EPSmin * _0_1?
|
|
76
76
|
_over_horizon_ = 'over horizon'
|
|
@@ -154,10 +154,10 @@ class _AzimuthalBase(_NamedBase):
|
|
|
154
154
|
s0, c0 = self._sc0
|
|
155
155
|
|
|
156
156
|
cb *= ca
|
|
157
|
-
k, t = _k_t_2(s0
|
|
157
|
+
k, t = _k_t_2(fdot_(s0, sa, c0, cb))
|
|
158
158
|
if t:
|
|
159
159
|
r = k * self.radius
|
|
160
|
-
y = r * (c0
|
|
160
|
+
y = r * fdot_(c0, sa, -s0, cb)
|
|
161
161
|
e, n, z, _ = _enzh4(r * sb * ca, y, None)
|
|
162
162
|
else: # 0 or 180
|
|
163
163
|
e = n = z = _0_0
|
|
@@ -233,11 +233,11 @@ class _AzimuthalBase(_NamedBase):
|
|
|
233
233
|
Lon_(lon0=lon0, Error=AzimuthalError))
|
|
234
234
|
self._sc0 = sincos2d(self.lat0)
|
|
235
235
|
|
|
236
|
-
def reverse(self, x, y,
|
|
236
|
+
def reverse(self, x, y, **name_LatLon_and_kwds):
|
|
237
237
|
'''I{Must be overloaded}.'''
|
|
238
|
-
self._notOverloaded(x, y,
|
|
238
|
+
self._notOverloaded(x, y, **name_LatLon_and_kwds) # PYCHOK no cover
|
|
239
239
|
|
|
240
|
-
def _reverse(self, x, y, _c, lea, LatLon, **name_LatLon_kwds):
|
|
240
|
+
def _reverse(self, x, y, _c, lea, LatLon=None, **name_LatLon_kwds):
|
|
241
241
|
'''(INTERNAL) Azimuthal (spherical) reverse C{x, y} to C{lat, lon}.
|
|
242
242
|
'''
|
|
243
243
|
e, n, z, r = _enzh4(x, y)
|
|
@@ -379,15 +379,14 @@ class Equidistant(_AzimuthalBase):
|
|
|
379
379
|
|
|
380
380
|
return self._forward(lat, lon, name, _k_t)
|
|
381
381
|
|
|
382
|
-
def reverse(self, x, y,
|
|
382
|
+
def reverse(self, x, y, **name_LatLon_and_kwds):
|
|
383
383
|
'''Convert an azimuthal equidistant location to geodetic lat- and longitude.
|
|
384
384
|
|
|
385
385
|
@arg x: Easting of the location (C{meter}).
|
|
386
386
|
@arg y: Northing of the location (C{meter}).
|
|
387
|
-
@kwarg
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
ignored if C{B{LatLon} is None}.
|
|
387
|
+
@kwarg name_LatLon_and_kwds: Optional C{B{name}=NN} and class C{B{LatLon}=None}
|
|
388
|
+
to use and optionally, additional B{C{LatLon}} keyword arguments,
|
|
389
|
+
ignored if C{B{LatLon} is None}.
|
|
391
390
|
|
|
392
391
|
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
393
392
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
@@ -401,7 +400,7 @@ class Equidistant(_AzimuthalBase):
|
|
|
401
400
|
def _c(c):
|
|
402
401
|
return c if c > EPS else None
|
|
403
402
|
|
|
404
|
-
return self._reverse(x, y, _c, False,
|
|
403
|
+
return self._reverse(x, y, _c, False, **name_LatLon_and_kwds)
|
|
405
404
|
|
|
406
405
|
|
|
407
406
|
def equidistant(lat0, lon0, datum=_WGS84, exact=False, geodsolve=False, **name):
|
|
@@ -505,9 +504,8 @@ class _EquidistantBase(_AzimuthalGeodesic):
|
|
|
505
504
|
@arg x: Easting of the location (C{meter}).
|
|
506
505
|
@arg y: Northing of the location (C{meter}).
|
|
507
506
|
@kwarg LatLon: Class to use (C{LatLon}) or C{None}.
|
|
508
|
-
@kwarg name_LatLon_kwds: Optional C{B{name}=NN}
|
|
509
|
-
|
|
510
|
-
ignored if C{B{LatLon} is None}.
|
|
507
|
+
@kwarg name_LatLon_kwds: Optional C{B{name}=NN} and optionally, additional
|
|
508
|
+
B{C{LatLon}} keyword arguments, ignored if C{B{LatLon} is None}.
|
|
511
509
|
|
|
512
510
|
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
513
511
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
@@ -670,15 +668,14 @@ class Gnomonic(_AzimuthalBase):
|
|
|
670
668
|
|
|
671
669
|
return self._forward(lat, lon, name, _k_t)
|
|
672
670
|
|
|
673
|
-
def reverse(self, x, y,
|
|
671
|
+
def reverse(self, x, y, **name_LatLon_and_kwds):
|
|
674
672
|
'''Convert an azimuthal equidistant location to geodetic lat- and longitude.
|
|
675
673
|
|
|
676
674
|
@arg x: Easting of the location (C{meter}).
|
|
677
675
|
@arg y: Northing of the location (C{meter}).
|
|
678
|
-
@kwarg
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
ignored if C{B{LatLon} is None}.
|
|
676
|
+
@kwarg name_LatLon_and_kwds: Optional C{B{name}=NN} and class C{B{LatLon}=None}
|
|
677
|
+
for the location and optionally, additional B{C{LatLon}} keyword
|
|
678
|
+
arguments, ignored if C{B{LatLon} is None}.
|
|
682
679
|
|
|
683
680
|
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
684
681
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
@@ -692,7 +689,7 @@ class Gnomonic(_AzimuthalBase):
|
|
|
692
689
|
def _c(c):
|
|
693
690
|
return atan1(c) if c > EPS else None
|
|
694
691
|
|
|
695
|
-
return self._reverse(x, y, _c, False,
|
|
692
|
+
return self._reverse(x, y, _c, False, **name_LatLon_and_kwds)
|
|
696
693
|
|
|
697
694
|
|
|
698
695
|
def gnomonic(lat0, lon0, datum=_WGS84, exact=False, geodsolve=False, **name):
|
|
@@ -787,20 +784,18 @@ class _GnomonicBase(_AzimuthalGeodesic):
|
|
|
787
784
|
@arg x: Easting of the location (C{meter}).
|
|
788
785
|
@arg y: Northing of the location (C{meter}).
|
|
789
786
|
@kwarg LatLon: Class to use (C{LatLon}) or C{None}.
|
|
790
|
-
@kwarg name_LatLon_kwds: Optional C{B{name}=NN} for the location and
|
|
791
|
-
|
|
792
|
-
ignored if C{B{LatLon} is None}.
|
|
787
|
+
@kwarg name_LatLon_kwds: Optional C{B{name}=NN} for the location and optionally,
|
|
788
|
+
additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon} is None}.
|
|
793
789
|
|
|
794
790
|
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
795
791
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
796
792
|
|
|
797
793
|
@raise AzimuthalError: No convergence.
|
|
798
794
|
|
|
799
|
-
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon}
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
to this.
|
|
795
|
+
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon} in the range
|
|
796
|
+
C{[-180..180] degrees}. The C{azimuth} is clockwise from true North. The
|
|
797
|
+
scale is C{1 / reciprocal**2} in C{radial} direction and C{1 / reciprocal}
|
|
798
|
+
in the direction perpendicular to this.
|
|
804
799
|
'''
|
|
805
800
|
e, n, z, q = _enzh4(x, y)
|
|
806
801
|
|
|
@@ -974,30 +969,28 @@ class LambertEqualArea(_AzimuthalBase):
|
|
|
974
969
|
|
|
975
970
|
return self._forward(lat, lon, name, _k_t)
|
|
976
971
|
|
|
977
|
-
def reverse(self, x, y,
|
|
972
|
+
def reverse(self, x, y, **name_LatLon_and_kwds):
|
|
978
973
|
'''Convert an azimuthal Lambert-equal-area location to geodetic lat- and longitude.
|
|
979
974
|
|
|
980
975
|
@arg x: Easting of the location (C{meter}).
|
|
981
976
|
@arg y: Northing of the location (C{meter}).
|
|
982
|
-
@kwarg
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
arguments, ignored if C{B{LatLon} is None}.
|
|
977
|
+
@kwarg name_LatLon_and_kwds: Optional C{B{name}=NN} and class C{B{LatLon}=None}
|
|
978
|
+
to use and optionally, additional B{C{LatLon}} keyword arguments,
|
|
979
|
+
ignored if C{B{LatLon} is None}.
|
|
986
980
|
|
|
987
981
|
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
988
982
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
989
983
|
|
|
990
|
-
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon}
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
perpendicular to this.
|
|
984
|
+
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon} in the
|
|
985
|
+
range C{[-180..180] degrees}. The C{scale} of the projection is C{1}
|
|
986
|
+
in I{radial} direction, C{azimuth} clockwise from true North and is C{1
|
|
987
|
+
/ reciprocal} in the direction perpendicular to this.
|
|
995
988
|
'''
|
|
996
989
|
def _c(c):
|
|
997
990
|
c *= _0_5
|
|
998
991
|
return (asin1(c) * _2_0) if c > EPS else None
|
|
999
992
|
|
|
1000
|
-
return self._reverse(x, y, _c, True,
|
|
993
|
+
return self._reverse(x, y, _c, True, **name_LatLon_and_kwds)
|
|
1001
994
|
|
|
1002
995
|
|
|
1003
996
|
class Orthographic(_AzimuthalBase):
|
|
@@ -1028,29 +1021,27 @@ class Orthographic(_AzimuthalBase):
|
|
|
1028
1021
|
|
|
1029
1022
|
return self._forward(lat, lon, name, _k_t)
|
|
1030
1023
|
|
|
1031
|
-
def reverse(self, x, y,
|
|
1024
|
+
def reverse(self, x, y, **name_LatLon_and_kwds):
|
|
1032
1025
|
'''Convert an azimuthal orthographic location to geodetic lat- and longitude.
|
|
1033
1026
|
|
|
1034
1027
|
@arg x: Easting of the location (C{meter}).
|
|
1035
1028
|
@arg y: Northing of the location (C{meter}).
|
|
1036
|
-
@kwarg
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
ignored if C{B{LatLon} is None}.
|
|
1029
|
+
@kwarg name_LatLon_and_kwds: Optional C{B{name}=NN} and class C{B{LatLon}=None}
|
|
1030
|
+
to use and optionally, additional B{C{LatLon}} keyword arguments,
|
|
1031
|
+
ignored if C{B{LatLon} is None}.
|
|
1040
1032
|
|
|
1041
1033
|
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
1042
1034
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
1043
1035
|
|
|
1044
|
-
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon}
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
perpendicular to this.
|
|
1036
|
+
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon} in the
|
|
1037
|
+
range C{[-180..180] degrees}. The C{scale} of the projection is C{1}
|
|
1038
|
+
in I{radial} direction, C{azimuth} clockwise from true North and is C{1
|
|
1039
|
+
/ reciprocal} in the direction perpendicular to this.
|
|
1049
1040
|
'''
|
|
1050
1041
|
def _c(c):
|
|
1051
1042
|
return asin1(c) if c > EPS else None
|
|
1052
1043
|
|
|
1053
|
-
return self._reverse(x, y, _c, False,
|
|
1044
|
+
return self._reverse(x, y, _c, False, **name_LatLon_and_kwds)
|
|
1054
1045
|
|
|
1055
1046
|
|
|
1056
1047
|
class Stereographic(_AzimuthalBase):
|
|
@@ -1101,28 +1092,27 @@ class Stereographic(_AzimuthalBase):
|
|
|
1101
1092
|
self._k0 = Scalar_(factor, name=n, low=EPS, high=2) # XXX high=1, 2, other?
|
|
1102
1093
|
self._k02 = self._k0 * _2_0
|
|
1103
1094
|
|
|
1104
|
-
def reverse(self, x, y,
|
|
1095
|
+
def reverse(self, x, y, **name_LatLon_and_kwds):
|
|
1105
1096
|
'''Convert an azimuthal stereographic location to geodetic lat- and longitude.
|
|
1106
1097
|
|
|
1107
1098
|
@arg x: Easting of the location (C{meter}).
|
|
1108
1099
|
@arg y: Northing of the location (C{meter}).
|
|
1109
|
-
@kwarg
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
ignored if C{B{LatLon} is None}.
|
|
1100
|
+
@kwarg name_LatLon_and_kwds: Optional C{B{name}=NN} and class C{B{LatLon}=None}
|
|
1101
|
+
to use and optionally, additional B{C{LatLon}} keyword arguments,
|
|
1102
|
+
ignored if C{B{LatLon} is None}.
|
|
1113
1103
|
|
|
1114
1104
|
@return: The geodetic (C{LatLon}) or if C{B{LatLon} is None} an
|
|
1115
1105
|
L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
|
|
1116
1106
|
|
|
1117
1107
|
@note: The C{lat} will be in range C{[-90..90] degrees}, C{lon} in range
|
|
1118
|
-
C{[-180..180] degrees} and C{azimuth} clockwise from true North.
|
|
1119
|
-
|
|
1120
|
-
|
|
1108
|
+
C{[-180..180] degrees} and C{azimuth} clockwise from true North. The
|
|
1109
|
+
C{scale} of the projection is C{1} in I{radial} direction and is C{1
|
|
1110
|
+
/ reciprocal} in the direction perpendicular to this.
|
|
1121
1111
|
'''
|
|
1122
1112
|
def _c(c):
|
|
1123
1113
|
return (atan2(c, self._k02) * _2_0) if c > EPS else None
|
|
1124
1114
|
|
|
1125
|
-
return self._reverse(x, y, _c, False,
|
|
1115
|
+
return self._reverse(x, y, _c, False, **name_LatLon_and_kwds)
|
|
1126
1116
|
|
|
1127
1117
|
|
|
1128
1118
|
__all__ += _ALL_DOCS(_AzimuthalBase, _AzimuthalGeodesic, _EquidistantBase, _GnomonicBase)
|
pygeodesy/basics.py
CHANGED
|
@@ -37,7 +37,7 @@ from math import copysign as _copysign
|
|
|
37
37
|
# import inspect as _inspect # _MODS
|
|
38
38
|
|
|
39
39
|
__all__ = _ALL_LAZY.basics
|
|
40
|
-
__version__ = '24.
|
|
40
|
+
__version__ = '24.11.02'
|
|
41
41
|
|
|
42
42
|
_below_ = 'below'
|
|
43
43
|
_list_tuple_types = (list, tuple)
|
|
@@ -111,29 +111,29 @@ except NameError: # Python 3+
|
|
|
111
111
|
return ub
|
|
112
112
|
|
|
113
113
|
|
|
114
|
-
def _args_kwds_count2(func, exelf=True):
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
114
|
+
# def _args_kwds_count2(func, exelf=True): # in .formy
|
|
115
|
+
# '''(INTERNAL) Get a C{func}'s args and kwds count as 2-tuple
|
|
116
|
+
# C{(nargs, nkwds)}, including arg C{self} for methods.
|
|
117
|
+
#
|
|
118
|
+
# @kwarg exelf: If C{True}, exclude C{self} in the C{args}
|
|
119
|
+
# of a method (C{bool}).
|
|
120
|
+
# '''
|
|
121
|
+
# i = _MODS.inspect
|
|
122
|
+
# try:
|
|
123
|
+
# a = k = 0
|
|
124
|
+
# for _, p in i.signature(func).parameters.items():
|
|
125
|
+
# if p.kind is p.POSITIONAL_OR_KEYWORD:
|
|
126
|
+
# if p.default is p.empty:
|
|
127
|
+
# a += 1
|
|
128
|
+
# else:
|
|
129
|
+
# k += 1
|
|
130
|
+
# except AttributeError: # Python 2-
|
|
131
|
+
# s = i.getargspec(func)
|
|
132
|
+
# k = len(s.defaults or ())
|
|
133
|
+
# a = len(s.args) - k
|
|
134
|
+
# if exelf and a > 0 and i.ismethod(func):
|
|
135
|
+
# a -= 1
|
|
136
|
+
# return a, k
|
|
137
137
|
|
|
138
138
|
|
|
139
139
|
def _args_kwds_names(func, splast=False):
|
|
@@ -222,7 +222,7 @@ def halfs2(str2):
|
|
|
222
222
|
return str2[:h], str2[h:]
|
|
223
223
|
|
|
224
224
|
|
|
225
|
-
def int1s(x):
|
|
225
|
+
def int1s(x): # PYCHOK no cover
|
|
226
226
|
'''Count the number of 1-bits in an C{int}, I{unsigned}.
|
|
227
227
|
|
|
228
228
|
@note: C{int1s(-B{x}) == int1s(abs(B{x}))}.
|
|
@@ -736,7 +736,7 @@ def _xcopy(obj, deep=False):
|
|
|
736
736
|
return _deepcopy(obj) if deep else _copy(obj)
|
|
737
737
|
|
|
738
738
|
|
|
739
|
-
def _xcoverage(where, *required):
|
|
739
|
+
def _xcoverage(where, *required): # in .__main__ # PYCHOK no cover
|
|
740
740
|
'''(INTERNAL) Import C{coverage} and check required version.
|
|
741
741
|
'''
|
|
742
742
|
try:
|
|
@@ -847,15 +847,16 @@ def _xor(x, *xs):
|
|
|
847
847
|
return x
|
|
848
848
|
|
|
849
849
|
|
|
850
|
-
def _xpackages(
|
|
850
|
+
def _xpackages(_xpkgf):
|
|
851
851
|
'''(INTERNAL) Check dependency to be excluded.
|
|
852
852
|
'''
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
853
|
+
if _XPACKAGES: # PYCHOK no cover
|
|
854
|
+
n = _xpkgf.__name__[2:] # _DUNDER_nameof, less '_x'
|
|
855
|
+
if n.lower() in _XPACKAGES:
|
|
856
|
+
E = _PYGEODESY(_xpackages)
|
|
857
|
+
x = _SPACE_(n, _in_, E)
|
|
858
|
+
e = _enquote(_getenv(E, NN))
|
|
859
|
+
raise ImportError(_EQUAL_(x, e))
|
|
859
860
|
|
|
860
861
|
|
|
861
862
|
def _xscalar(**names_values):
|