pygeodesy 24.7.24__py2.py3-none-any.whl → 24.8.4__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.7.24.dist-info → PyGeodesy-24.8.4.dist-info}/METADATA +6 -6
- {PyGeodesy-24.7.24.dist-info → PyGeodesy-24.8.4.dist-info}/RECORD +26 -26
- pygeodesy/__init__.py +4 -5
- pygeodesy/auxilats/auxAngle.py +2 -2
- pygeodesy/auxilats/auxDST.py +2 -2
- pygeodesy/azimuthal.py +4 -4
- pygeodesy/cartesianBase.py +2 -2
- pygeodesy/css.py +5 -5
- pygeodesy/ellipsoids.py +3 -3
- pygeodesy/formy.py +2 -2
- pygeodesy/gars.py +59 -52
- pygeodesy/geodesici.py +4 -10
- pygeodesy/geohash.py +484 -267
- pygeodesy/geoids.py +6 -2
- pygeodesy/heights.py +30 -40
- pygeodesy/internals.py +19 -6
- pygeodesy/karney.py +2 -2
- pygeodesy/latlonBase.py +2 -2
- pygeodesy/lazily.py +17 -16
- pygeodesy/ltp.py +2 -2
- pygeodesy/ltpTuples.py +6 -6
- pygeodesy/triaxials.py +4 -4
- pygeodesy/units.py +34 -17
- pygeodesy/wgrs.py +93 -83
- {PyGeodesy-24.7.24.dist-info → PyGeodesy-24.8.4.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.7.24.dist-info → PyGeodesy-24.8.4.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.8.4
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -8,7 +8,7 @@ Author-email: mrJean1@Gmail.com
|
|
|
8
8
|
Maintainer: Jean M. Brouwers
|
|
9
9
|
Maintainer-email: mrJean1@Gmail.com
|
|
10
10
|
License: MIT
|
|
11
|
-
Keywords: AER Albers altitude Andoyer annulus antipode area attitude Authalic auxiliary azimuth azimuthal azimuth-elevation-range bearing bank Barsky Barth beta boolean cached Cagnoli cartesian Cassini Cassini-Soldner chord circle-intersections circumcenter circumcircle circumradius clip Cohen Cohen-Sutherland Collins composite conformal conic constants contact-triangle Cook Correia cosines-law coverage curvature cylindrical datum deprecation deficit development discrete distance Douglas earth east-north-up eccentricity ECEF elevation ellipsoid ellipsoidal-latitude-beta ellipsoidal-longitude-omega elliptic ENU EPSG equal-area equidistant equirectangular ETM ETRF Euclidean even-odd-rule ExactTM excess Farrell Farrell-Barth flattening Field-Of-View fmath footprint Forster Forster-Hormann-Popa Forsythe FOV fractional Frechet Fréchet frustum Fsum GARS geocentric GeoConvert GeodesicExact geodesy geodetic GeodSolve GeodTest geographiclib
|
|
11
|
+
Keywords: AER Albers altitude Andoyer annulus antipode area attitude Authalic auxiliary azimuth azimuthal azimuth-elevation-range bearing bank Barsky Barth beta boolean cached Cagnoli cartesian Cassini Cassini-Soldner chord circle-intersections circumcenter circumcircle circumradius clip Cohen Cohen-Sutherland Collins composite conformal conic constants contact-triangle Cook Correia cosines-law coverage curvature cylindrical datum deprecation deficit development discrete distance Douglas earth east-north-up eccentricity ECEF elevation ellipsoid ellipsoidal-latitude-beta ellipsoidal-longitude-omega elliptic ENU EPSG equal-area equidistant equirectangular ETM ETRF Euclidean even-odd-rule ExactTM excess Farrell Farrell-Barth flattening Field-Of-View fmath footprint Forster Forster-Hormann-Popa Forsythe FOV fractional Frechet Fréchet frustum Fsum GARS geocentric GeoConvert GeodesicExact geodesy geodetic GeodSolve GeodTest geographiclib Geohash geoid geoidHeight GeoidHeights georef Girard gnomonic gons grades gradians Greiner Greiner-Hormann Hartzell Hausdorff Haversine heading height Heron Hodgman horizon Hormann Hubeny IDW incenter incirle infix_@_operator inradius intermediate interpolate intersect intersection intersection3d intersections IntersectTool Inverse-Distance-Weighting Isometric ITRF Jacobi Jacobi-Conformal Jarque-Bera Jekel Karney Krueger Krüger kurtosis Lambert latitude law-of-cosines least-squares Lesh L_Huilier LHuilier Liang Liang-Barsky linearize Line-Of-Sight LocalCartesian local-tangent-plane local-x-y-z longitude LOS loxodrome lstsq LTP lune LV03 LV95 mean memoize memoized Mercator Meeus MGRS nearest NED Niemeyer normalize Norrdine north-east-down numpy n-vector Nvector oblate omega orthographic orthometric-height OSGB OSGR overlap parallel parallel-of-latitude Parametric path-intersection perimeter Peucker Pierlot pitch plumb Point-Of-View polar Popa POV precision-cubic-root precision-hypotenuse precision-powers precision-running-summation precision-square-root precision-summation prolate Pseudo-Mercator PyGeodesy PyInstaller PyPy radical radii radius Ramer Ramer-Douglas-Peucker Rectifying Reduced resect resection Rey-Jer Reumann Reumann-Witkam rhumb RhumbSolve running-linear-regression running-statistics running-stats running-summation scipy secant semi-perimeter sexagecimal simplify skewness Snellius Snellius-Pothenot Snyder Soddy Soddy-circles Soldner sphere sphere-intersections spherical-deficit spherical-excess spherical-triangle standard-deviation stereographic Sudano surface-area Sutherland Sutherland-Hodgman tangent-circles Terrestrial-Reference-Frame Thomas Tienstra tilt TMcoords TMExact toise transverse TransverseMercatorExact TRF triangle triangulate triaxial triaxial-ellipsoid trigonometry trilaterate trilaterate-2d trilaterate-3d umbilic-point unit unroll UPS UTM UTM/UPS variance velocities Veness Vermeille viewing-frustum Vincenty Visvalingam Visvalingam-Whyatt volume volumetric Web-Mercator Welford WGRS WGS Whyatt Wildberger Witkam winding-number XYZ yaw You
|
|
12
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
13
13
|
Classifier: Environment :: Console
|
|
14
14
|
Classifier: Intended Audience :: Developers
|
|
@@ -16,9 +16,6 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
16
16
|
Classifier: Operating System :: OS Independent
|
|
17
17
|
Classifier: Programming Language :: Python
|
|
18
18
|
Classifier: Programming Language :: Python :: 2.7
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
22
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
23
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
24
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -99,6 +96,9 @@ Modules ``ellipsoidalGeodSolve`` and ``geodsolve`` and ``azimuthal`` classes ``E
|
|
|
99
96
|
and ``GnomonicGeodSolve`` depend on *Karney*\'s C++ utility GeodSolve_ to be executable and set with
|
|
100
97
|
env variable ``PYGEODESY_GEODSOLVE`` or with property ``Ellipsoid.geodsolve``.
|
|
101
98
|
|
|
99
|
+
Class ``Intersectool`` in module ``geodesici`` needs *Karney*\'s C++ utility IntersectTool_ to be
|
|
100
|
+
executable and set with env variable ``PYGEODESY_INTERSECTTOOL``.
|
|
101
|
+
|
|
102
102
|
To compare ``MGRS`` results from modules ``mgrs`` and ``testMgrs`` with *Karney*\'s C++ utility
|
|
103
103
|
GeoConvert_, the latter must be executable and set with env variable ``PYGEODESY_GEOCONVERT``.
|
|
104
104
|
|
|
@@ -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:
|
|
162
|
+
*Last updated: Aug 04, 2024.*
|
|
163
163
|
|
|
164
164
|
License
|
|
165
165
|
=======
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=
|
|
2
|
+
pygeodesy/__init__.py,sha256=pjLvi1mnybZenPXxPN_4a_OUOSAa8vIwar_gXiTJfI4,42175
|
|
3
3
|
pygeodesy/__main__.py,sha256=VWxepzxGqR5wsHYyIHFSsRMlZ27keX3xyEhBuGDRXxk,4727
|
|
4
4
|
pygeodesy/albers.py,sha256=JXqeWAteV2N601e5R-D7bCsa8qAYv3oWm7M3R4uszXM,31078
|
|
5
|
-
pygeodesy/azimuthal.py,sha256=
|
|
5
|
+
pygeodesy/azimuthal.py,sha256=erI5DTM0-Nr5YC2LnBTVNbUKlrnnXJUwKe0SCQ7-Soc,50223
|
|
6
6
|
pygeodesy/basics.py,sha256=mSim8pSrRLMFYTnTrJDvkthfrw2MWBmMya3hOHWX4co,29785
|
|
7
7
|
pygeodesy/booleans.py,sha256=5IeA6QWihiPWSv2JnCbMT53ey1WYIU7od5VQ1YUFqX8,73529
|
|
8
|
-
pygeodesy/cartesianBase.py,sha256=
|
|
8
|
+
pygeodesy/cartesianBase.py,sha256=FHXBzIsvU817CQuhgsk4JSRuZQ2rm1ll-gqKUx47x6I,46927
|
|
9
9
|
pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
|
|
10
10
|
pygeodesy/constants.py,sha256=-weWOuHwE-qI6pYRLcTucI0KNcNJm6vPNzxwrJzACKs,19192
|
|
11
|
-
pygeodesy/css.py,sha256=
|
|
11
|
+
pygeodesy/css.py,sha256=rPr5EcGm_blVt72h-851ytpVxdPhx1MEqqGs3Ppx3eI,25651
|
|
12
12
|
pygeodesy/datums.py,sha256=-m9-cvUVOaJ92eeFgc3O54lel3WqnVYcS7o6WCXkNyw,34043
|
|
13
13
|
pygeodesy/dms.py,sha256=QxiRtyc8QSiW-egm6Mrcrgmi_deWz3YnYwIm82JS4TU,44443
|
|
14
14
|
pygeodesy/ecef.py,sha256=_yy_TIUGsXmEZ7aRcmchbJwTp7x__edx6EPiS3Xznes,59587
|
|
@@ -20,34 +20,34 @@ pygeodesy/ellipsoidalGeodSolve.py,sha256=CqdNNqdwuUNIwZvYVMsk3rnW0U3KMgEoSQj_VIc
|
|
|
20
20
|
pygeodesy/ellipsoidalKarney.py,sha256=XIvmSmMt0CGd0LtXxcDHX3KXXR2Mn8cRukefNQErJFU,18720
|
|
21
21
|
pygeodesy/ellipsoidalNvector.py,sha256=BbCWTZr9he3ayC8YEtLRXWVJ-g4HqHBuTVJsM33JKhw,30038
|
|
22
22
|
pygeodesy/ellipsoidalVincenty.py,sha256=gsUFMKgqMZKT02jDm7TEJ_jSHX8d-KJCz91iCfku5kg,25951
|
|
23
|
-
pygeodesy/ellipsoids.py,sha256=
|
|
23
|
+
pygeodesy/ellipsoids.py,sha256=i7piclEb17hYt5wqL7Q0p5qLuRVvz3yonUSUcvmiozc,108005
|
|
24
24
|
pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
|
|
25
25
|
pygeodesy/epsg.py,sha256=oWHX_QVChE5roktAyXUmPmX49XHiryYmXTHxQzrAprE,8222
|
|
26
26
|
pygeodesy/errors.py,sha256=-UnQ1GhkiTR6uBd0z0vd_pFEmjWXlOESRDwMdxY_JD0,30605
|
|
27
27
|
pygeodesy/etm.py,sha256=y3dAqS-iWnbWzmsu4zB7kryAp_I17XEdzNRRk0klTww,44696
|
|
28
28
|
pygeodesy/fmath.py,sha256=EOHD0uZ8VULZtXAk8tVeuPaSTozPDCN8GJcemCo-jqg,33709
|
|
29
|
-
pygeodesy/formy.py,sha256=
|
|
29
|
+
pygeodesy/formy.py,sha256=PrAlrSASKIXeFvawueyo7kRC-UJJSEQR3APhirHqhtE,75032
|
|
30
30
|
pygeodesy/frechet.py,sha256=F6TYbOEYSOFcll6nvp4GhqafUWXh1umAKb1QaMYQtuM,34372
|
|
31
31
|
pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
|
|
32
32
|
pygeodesy/fsums.py,sha256=VbI_1i-0BCeRpPnG58EDPVKossR7JORZzFXEspoaiJU,80839
|
|
33
|
-
pygeodesy/gars.py,sha256=
|
|
34
|
-
pygeodesy/geodesici.py,sha256=
|
|
33
|
+
pygeodesy/gars.py,sha256=OLsBs8rkOeehVhO1Rqqip0wxxfaxrKpF8QyuMK3V1_Y,11776
|
|
34
|
+
pygeodesy/geodesici.py,sha256=rbHsTKnne7atLGGumPOm7HPogM_ugKnohFmY6uSft6g,74966
|
|
35
35
|
pygeodesy/geodesicw.py,sha256=oEs96Epw839BH3rVpxVdpXuQRBudbOftUsSBUid8fcc,28710
|
|
36
36
|
pygeodesy/geodsolve.py,sha256=M1kU9HOKnvf8agv_V4fN0QcNh40N6dExuCd0pPTKsoM,23540
|
|
37
|
-
pygeodesy/geohash.py,sha256=
|
|
38
|
-
pygeodesy/geoids.py,sha256=
|
|
37
|
+
pygeodesy/geohash.py,sha256=EyssZKlyxoySV4wbp8Zy2rDETuq-J7bwcQndv0iUMcY,39848
|
|
38
|
+
pygeodesy/geoids.py,sha256=UstNCTde42mSxlu6JHyxIX8V425QP2pnPb__ZkjB7cc,80761
|
|
39
39
|
pygeodesy/hausdorff.py,sha256=-aKtRbMefDSoIk4V3wCvNrXPZ7Bqk1P6-XuGuI7o8Zc,34770
|
|
40
|
-
pygeodesy/heights.py,sha256=
|
|
41
|
-
pygeodesy/internals.py,sha256=
|
|
40
|
+
pygeodesy/heights.py,sha256=5k5p73UNsAk6uFRDBUkh2lIc1EZTqiG9ViUCcoQnlxI,43244
|
|
41
|
+
pygeodesy/internals.py,sha256=NiubVptqyoPuWiyB9ma8ApXbMbzrzCiw9IqToPg5AlM,20751
|
|
42
42
|
pygeodesy/interns.py,sha256=kReVkCWA_rw8GyaYFVRI9dfdXu7MF9nD1MgoXsdsK7I,23273
|
|
43
43
|
pygeodesy/iters.py,sha256=xPH0ytomvJeKHu717Fjzi3QbRrEikO6n7vqkY_IDz1k,20311
|
|
44
|
-
pygeodesy/karney.py,sha256=
|
|
44
|
+
pygeodesy/karney.py,sha256=y9xMgJX0W0tLrQQnO6c9-It7QgDSOcd4Irvs2D68vBI,38035
|
|
45
45
|
pygeodesy/ktm.py,sha256=EJ52Llx5DPFNNl2DEH8rL1-k955qOxYZLAg4-UpnlbA,27246
|
|
46
|
-
pygeodesy/latlonBase.py,sha256=
|
|
47
|
-
pygeodesy/lazily.py,sha256=
|
|
46
|
+
pygeodesy/latlonBase.py,sha256=jyL5Eqg1BWYmOrHG4GAFjL3U5iADJdv_QEI-AHK-hz0,78949
|
|
47
|
+
pygeodesy/lazily.py,sha256=Fbb3XltvdbSTqhM1mTHrK9qTFt8a3JUQitvuPYxpCr4,47153
|
|
48
48
|
pygeodesy/lcc.py,sha256=oDooTzFHnqsMtSKmmmfEbypHpdlPltfo7Mt0pAO4-_A,25669
|
|
49
|
-
pygeodesy/ltp.py,sha256=
|
|
50
|
-
pygeodesy/ltpTuples.py,sha256=
|
|
49
|
+
pygeodesy/ltp.py,sha256=JhEhn5uM0OW9xeEFdVbfBhI7LQkPglvFqMlbBzgqOUg,50766
|
|
50
|
+
pygeodesy/ltpTuples.py,sha256=S03fH1aAzQbFEB-ig-nGRi2NXHkiSMuL_ugR3ytd_5A,58331
|
|
51
51
|
pygeodesy/mgrs.py,sha256=w50bvM3qDtHDBDBRQ_EgZnPn7vxVXgoFnleeZgefkVk,29679
|
|
52
52
|
pygeodesy/named.py,sha256=T0LPPhCKJFu2S5IaQmUUbwTS21JbXmkHsvKRgTpT2Nk,52267
|
|
53
53
|
pygeodesy/namedTuples.py,sha256=UDmL4kCihvf8tIUVXzGzRLzL_1BLuyqm04pite6YUuk,28495
|
|
@@ -63,8 +63,8 @@ pygeodesy/sphericalNvector.py,sha256=MiWcCy5CdvXsCa3963GeUMEnSYGhBiXzkoAEX_tGX4Q
|
|
|
63
63
|
pygeodesy/sphericalTrigonometry.py,sha256=Jf3FUUYEWXbNkiagr0HyMJ6E-cNghnTjcdgntTm28RE,64076
|
|
64
64
|
pygeodesy/streprs.py,sha256=xudQ6zi5jFT_CmstSPysjxpZKyLBQNkUk1ETh0uvQ04,23030
|
|
65
65
|
pygeodesy/trf.py,sha256=CRFHmu0lFNtc41fddXavEkHmgnTFWEqR4RTFodcFKsw,119022
|
|
66
|
-
pygeodesy/triaxials.py,sha256=
|
|
67
|
-
pygeodesy/units.py,sha256=
|
|
66
|
+
pygeodesy/triaxials.py,sha256=BirxUH-heFmFslT9E7bgOYrKyGFPW5BMnYkiFlhD7j0,62723
|
|
67
|
+
pygeodesy/units.py,sha256=KHtejDr2I8EcWNBdupdyCkrjnjZIY3NIM1P5ghMaBBA,35270
|
|
68
68
|
pygeodesy/unitsBase.py,sha256=yT7dgfwxtd1hHEn02NwPAdStsVWDfPH-Qdfrhvje7Yw,14057
|
|
69
69
|
pygeodesy/ups.py,sha256=zapIvzoVuj_FDGC6sr8O8ynPhfqXwUg-EFCVnJdM9Eo,23329
|
|
70
70
|
pygeodesy/utily.py,sha256=Zb6L9unzHHhp67znmQLLdizvyX6p4eczR1PDtcyWH-s,36189
|
|
@@ -75,15 +75,15 @@ pygeodesy/vector2d.py,sha256=zJq5PB777_mFJpKD-rt_T0Vm4SNbVwF7pc3KxX8uCT8,34994
|
|
|
75
75
|
pygeodesy/vector3d.py,sha256=uDNnYSj4BL_Nec6SkyxXDbYaNjvI15HQX0xh25dRLI8,44883
|
|
76
76
|
pygeodesy/vector3dBase.py,sha256=Om0Uq1zgjuJ6slj12KiFus_tobjYTPxgVZejNd0YzFI,35729
|
|
77
77
|
pygeodesy/webmercator.py,sha256=stO_thswe_D4uxXWH43YWSN6-WWWpv_uIuOwvBIp8Ug,14932
|
|
78
|
-
pygeodesy/wgrs.py,sha256=
|
|
78
|
+
pygeodesy/wgrs.py,sha256=SN5L1t-T-GsIFwhI99pbB5EPjOsKq_uP8YXshEqvcrA,15456
|
|
79
79
|
pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
|
|
80
80
|
pygeodesy/auxilats/_CX_6.py,sha256=x4hrHxunjqqkEsZbVW1dyn3R5mR8EWYOuX77RzDEyh4,14856
|
|
81
81
|
pygeodesy/auxilats/_CX_8.py,sha256=t-OO48t4cCOsOgMi1FoyPw2DQqybVZFsgQMqAYP-jKY,25304
|
|
82
82
|
pygeodesy/auxilats/__init__.py,sha256=YNp41rRC5DmAhBx4RPqoqh4yxD9Vjf9Wk_USwqeZYcE,2881
|
|
83
83
|
pygeodesy/auxilats/__main__.py,sha256=Vuj1YSp1LV0zejVzi6EYauka1Dv8kwOHI_aeHxQEVYk,2899
|
|
84
|
-
pygeodesy/auxilats/auxAngle.py,sha256=
|
|
84
|
+
pygeodesy/auxilats/auxAngle.py,sha256=nr-su1loEbv1uVxg7_cEjH0M1DLyodsulPfq4NVT5kY,16745
|
|
85
85
|
pygeodesy/auxilats/auxDLat.py,sha256=3sq7Wc-ykpVbldNh10IZ3tIlJ7DcQFDlmZ4nOhJEgo0,10969
|
|
86
|
-
pygeodesy/auxilats/auxDST.py,sha256=
|
|
86
|
+
pygeodesy/auxilats/auxDST.py,sha256=6rFoF2TmFnJZ2KR8sbYERqruovWkS1LMMGwiU6TgAtw,10467
|
|
87
87
|
pygeodesy/auxilats/auxLat.py,sha256=QeTx8dqov1NwNSEam9VC_wq36nRCUpbJpY4hH1NvyNg,32493
|
|
88
88
|
pygeodesy/auxilats/auxily.py,sha256=evkD4NGJPGdy3QtP7zI76IY2uDTGc1YjsVG4-BwzZIg,8235
|
|
89
89
|
pygeodesy/deprecated/__init__.py,sha256=cBYqbh5Njkd5SnaJDaMUP6PL66HfLWii_JoLjnKfnP4,2815
|
|
@@ -111,7 +111,7 @@ pygeodesy/rhumb/aux_.py,sha256=lOjpEU3Pe2I5DwC933UCf-SW73l5NMuDACeZhbVs3lE,16657
|
|
|
111
111
|
pygeodesy/rhumb/bases.py,sha256=awpP60K6EOzS753oXM-h9S6paS6FwoCnco8Zt8n81jY,54162
|
|
112
112
|
pygeodesy/rhumb/ekx.py,sha256=JsmdCatWKqsffF8jCh4HDu5IKt_kHq1qUdmP1LMuofY,24044
|
|
113
113
|
pygeodesy/rhumb/solve.py,sha256=3bzvHfvHtgq_rc7iiTL6h7yjtdGNutvJUYn9K9MpFKM,24046
|
|
114
|
-
PyGeodesy-24.
|
|
115
|
-
PyGeodesy-24.
|
|
116
|
-
PyGeodesy-24.
|
|
117
|
-
PyGeodesy-24.
|
|
114
|
+
PyGeodesy-24.8.4.dist-info/METADATA,sha256=3DSSgW62gsowGJvtr9xL2w1tC5u_oy-VgPxAhOdwq1g,19739
|
|
115
|
+
PyGeodesy-24.8.4.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
116
|
+
PyGeodesy-24.8.4.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
117
|
+
PyGeodesy-24.8.4.dist-info/RECORD,,
|
pygeodesy/__init__.py
CHANGED
|
@@ -99,11 +99,10 @@ and L{GnomonicGeodSolve} depend on I{Karney}'s C++ utility U{GeodSolve
|
|
|
99
99
|
<https://GeographicLib.SourceForge.io/C++/doc/GeodSolve.1.html>} to be executable and set with
|
|
100
100
|
env variable C{PYGEODESY_GEODSOLVE} or with property L{Ellipsoid.geodsolve}.
|
|
101
101
|
|
|
102
|
-
Class L{Intersectool}
|
|
102
|
+
Class L{Intersectool} in module L{geodesici} needs I{Karney}'s C++ utility U{IntersectTool
|
|
103
103
|
<https://GeographicLib.SourceForge.io/C++/doc/IntersectTool.1.html>} to be executable and set with
|
|
104
104
|
env variable C{PYGEODESY_INTERSECTTOOL}.
|
|
105
105
|
|
|
106
|
-
|
|
107
106
|
To compare C{MGRS} results from modules L{mgrs} and C{testMgrs} with I{Karney}'s C++ utility
|
|
108
107
|
U{GeoConvert<https://GeographicLib.SourceForge.io/C++/doc/GeoConvert.1.html>}, the latter must
|
|
109
108
|
be executable and set with env variable C{PYGEODESY_GEOCONVERT}.
|
|
@@ -211,6 +210,7 @@ The following environment variables are observed by C{PyGeodesy}:
|
|
|
211
210
|
|
|
212
211
|
and these to control standard or I{named} C{repr}esentations:
|
|
213
212
|
|
|
213
|
+
- C{PYGEODESY_AZIMUTH_STD_REPR} - see method L{Azimuth<pygeodesy.Azimuth>}C{.__repr__}.
|
|
214
214
|
- C{PYGEODESY_BEARING_STD_REPR} - see method L{Bearing<pygeodesy.Bearing>}C{.__repr__}.
|
|
215
215
|
- C{PYGEODESY_BOOL_STD_REPR} - see method L{Bool<pygeodesy.Bool>}C{.__repr__}.
|
|
216
216
|
- C{PYGEODESY_DEGREES_STD_REPR} - see method L{Degrees<pygeodesy.Degrees>}C{.__repr__}.
|
|
@@ -507,8 +507,7 @@ if _init__all__ and not _lazy_import2: # import and set __all__
|
|
|
507
507
|
from pygeodesy.geodesicw import * # PYCHOK __all__
|
|
508
508
|
from pygeodesy.geodesicx import * # PYCHOK __all__
|
|
509
509
|
from pygeodesy.geodsolve import * # PYCHOK __all__
|
|
510
|
-
from pygeodesy.geohash import
|
|
511
|
-
Neighbors8Dict, Resolutions2Tuple # PYCHOK lazily
|
|
510
|
+
from pygeodesy.geohash import * # PYCHOK __all__
|
|
512
511
|
from pygeodesy.geoids import * # PYCHOK __all__
|
|
513
512
|
from pygeodesy.hausdorff import * # PYCHOK __all__
|
|
514
513
|
from pygeodesy.heights import * # PYCHOK __all__
|
|
@@ -596,7 +595,7 @@ else:
|
|
|
596
595
|
|
|
597
596
|
from pygeodesy.internals import _version2, _DOT_ # PYCHOK import
|
|
598
597
|
# from pygeodesy.interns import _DOT_ # from .internals
|
|
599
|
-
__version__ = '24.
|
|
598
|
+
__version__ = '24.08.04'
|
|
600
599
|
# see setup.py for similar logic
|
|
601
600
|
version = _DOT_(*_version2(__version__, n=3))
|
|
602
601
|
|
pygeodesy/auxilats/auxAngle.py
CHANGED
|
@@ -32,7 +32,7 @@ from pygeodesy.utily import atan2d, sincos2, sincos2d
|
|
|
32
32
|
from math import asinh, atan2, copysign, degrees, fabs, radians, sinh
|
|
33
33
|
|
|
34
34
|
__all__ = ()
|
|
35
|
-
__version__ = '24.07.
|
|
35
|
+
__version__ = '24.07.25'
|
|
36
36
|
|
|
37
37
|
_0_INF_NAN_NINF = (0, _0_0) + _INF_NAN_NINF
|
|
38
38
|
_MAX_2 = MAX * _0_5 # PYCHOK used!
|
|
@@ -278,7 +278,7 @@ class AuxAngle(_Named):
|
|
|
278
278
|
def _RhumbAux(self):
|
|
279
279
|
'''(INTERNAL) Import the L{RhumbAux} class, I{once}.
|
|
280
280
|
'''
|
|
281
|
-
return _MODS.rhumb.aux_.RhumbAux # overwrite
|
|
281
|
+
return _MODS.rhumb.aux_.RhumbAux # overwrite property_ROver
|
|
282
282
|
|
|
283
283
|
@Property_RO
|
|
284
284
|
def tan(self):
|
pygeodesy/auxilats/auxDST.py
CHANGED
|
@@ -24,7 +24,7 @@ from pygeodesy.karney import _2cos2x, _ALL_DOCS
|
|
|
24
24
|
from pygeodesy.props import property_RO, property_ROver
|
|
25
25
|
|
|
26
26
|
__all__ = ()
|
|
27
|
-
__version__ = '24.07.
|
|
27
|
+
__version__ = '24.07.25'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class AuxDST(object):
|
|
@@ -78,7 +78,7 @@ class AuxDST(object):
|
|
|
78
78
|
def _fft_numpy(self):
|
|
79
79
|
'''(INTERNAL) Get the C{numpy.fft} module, I{once}.
|
|
80
80
|
'''
|
|
81
|
-
return _xnumpy(AuxDST, 1, 16).fft # overwrite
|
|
81
|
+
return _xnumpy(AuxDST, 1, 16).fft # overwrite property_ROver
|
|
82
82
|
|
|
83
83
|
def _fft_real(self, data):
|
|
84
84
|
'''(INTERNAL) NumPy's I{kissfft}-like C{transform_real} function,
|
pygeodesy/azimuthal.py
CHANGED
|
@@ -62,7 +62,7 @@ from pygeodesy.namedTuples import LatLon2Tuple, LatLon4Tuple
|
|
|
62
62
|
from pygeodesy.props import deprecated_Property_RO, Property_RO, \
|
|
63
63
|
property_doc_, _update_all
|
|
64
64
|
from pygeodesy.streprs import Fmt, _fstrLL0, unstr
|
|
65
|
-
from pygeodesy.units import
|
|
65
|
+
from pygeodesy.units import Azimuth, Easting, Lat_, Lon_, Northing, \
|
|
66
66
|
Scalar, Scalar_
|
|
67
67
|
from pygeodesy.utily import asin1, atan1, atan2b, atan2d, sincos2, \
|
|
68
68
|
sincos2d, sincos2d_
|
|
@@ -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.07.25'
|
|
74
74
|
|
|
75
75
|
_EPS_K = _EPStol * _0_1 # Karney's eps_ or _EPSmin * _0_1?
|
|
76
76
|
_over_horizon_ = 'over horizon'
|
|
@@ -323,7 +323,7 @@ class Azimuthal7Tuple(_NamedTuple):
|
|
|
323
323
|
C{1} or C{-1} in the L{Equidistant} case.
|
|
324
324
|
'''
|
|
325
325
|
_Names_ = (_x_, _y_, _lat_, _lon_, _azimuth_, _scale_, _datum_)
|
|
326
|
-
_Units_ = ( Easting, Northing, Lat_, Lon_,
|
|
326
|
+
_Units_ = ( Easting, Northing, Lat_, Lon_, Azimuth, Scalar, _Pass)
|
|
327
327
|
|
|
328
328
|
def antipodal(self, azimuth=None):
|
|
329
329
|
'''Return this tuple with the antipodal C{lat} and C{lon}.
|
|
@@ -332,7 +332,7 @@ class Azimuthal7Tuple(_NamedTuple):
|
|
|
332
332
|
(C{compass degrees360}).
|
|
333
333
|
'''
|
|
334
334
|
a = _MODS.formy.antipode(self.lat, self.lon) # PYCHOK named
|
|
335
|
-
z = self.azimuth if azimuth is None else
|
|
335
|
+
z = self.azimuth if azimuth is None else Azimuth(azimuth) # PYCHOK named
|
|
336
336
|
return _NamedTuple.dup(self, lat=a.lat, lon=a.lon, azimuth=z)
|
|
337
337
|
|
|
338
338
|
|
pygeodesy/cartesianBase.py
CHANGED
|
@@ -43,7 +43,7 @@ from pygeodesy.vector3d import Vector3d, _xyzhdlln4
|
|
|
43
43
|
# from math import atan2, degrees, fabs, radians, sqrt # from .fmath, .utily
|
|
44
44
|
|
|
45
45
|
__all__ = _ALL_LAZY.cartesianBase
|
|
46
|
-
__version__ = '24.07.
|
|
46
|
+
__version__ = '24.07.29'
|
|
47
47
|
|
|
48
48
|
_r_ = 'r'
|
|
49
49
|
_theta_ = 'theta'
|
|
@@ -300,7 +300,7 @@ class CartesianBase(Vector3d):
|
|
|
300
300
|
coordinates I{at height} in C{meter}, conventionally.
|
|
301
301
|
|
|
302
302
|
@note: This cartesian's coordinates are returned if B{C{earth}} and this
|
|
303
|
-
datum or B{C{
|
|
303
|
+
datum or B{C{height}} and/or this height are C{None} or undefined.
|
|
304
304
|
|
|
305
305
|
@note: Include keyword argument C{B{datum}=None} if class B{C{Cartesian}}
|
|
306
306
|
does not accept a B{C{datum}} keyword agument.
|
pygeodesy/css.py
CHANGED
|
@@ -27,13 +27,13 @@ from pygeodesy.namedTuples import EasNor2Tuple, EasNor3Tuple, \
|
|
|
27
27
|
from pygeodesy.props import deprecated_Property_RO, Property, \
|
|
28
28
|
Property_RO, _update_all
|
|
29
29
|
from pygeodesy.streprs import Fmt, _fstrENH2, _fstrLL0, _xzipairs
|
|
30
|
-
from pygeodesy.units import
|
|
30
|
+
from pygeodesy.units import Azimuth, Degrees, Easting, Height, _heigHt, \
|
|
31
31
|
Lat_, Lon_, Northing, Scalar
|
|
32
32
|
|
|
33
33
|
# from math import fabs # from .karney
|
|
34
34
|
|
|
35
35
|
__all__ = _ALL_LAZY.css
|
|
36
|
-
__version__ = '24.
|
|
36
|
+
__version__ = '24.07.25'
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
def _CS0(cs0):
|
|
@@ -578,7 +578,7 @@ class EasNorAziRk4Tuple(_NamedTuple):
|
|
|
578
578
|
C{reciprocal} of azimuthal northing scale, both in C{degrees}.
|
|
579
579
|
'''
|
|
580
580
|
_Names_ = (_easting_, _northing_, _azimuth_, _reciprocal_)
|
|
581
|
-
_Units_ = ( Easting, Northing,
|
|
581
|
+
_Units_ = ( Easting, Northing, Azimuth, Scalar)
|
|
582
582
|
|
|
583
583
|
|
|
584
584
|
class EasNorAziRkEqu6Tuple(_NamedTuple):
|
|
@@ -589,7 +589,7 @@ class EasNorAziRkEqu6Tuple(_NamedTuple):
|
|
|
589
589
|
C{equatorarc} and C{equatorazimuth}, all in C{degrees}.
|
|
590
590
|
'''
|
|
591
591
|
_Names_ = EasNorAziRk4Tuple._Names_ + ('equatorarc', 'equatorazimuth')
|
|
592
|
-
_Units_ = EasNorAziRk4Tuple._Units_ + ( Degrees,
|
|
592
|
+
_Units_ = EasNorAziRk4Tuple._Units_ + ( Degrees, Azimuth)
|
|
593
593
|
|
|
594
594
|
|
|
595
595
|
class LatLonAziRk4Tuple(_NamedTuple):
|
|
@@ -598,7 +598,7 @@ class LatLonAziRk4Tuple(_NamedTuple):
|
|
|
598
598
|
C{reciprocal} the reciprocal of azimuthal northing scale.
|
|
599
599
|
'''
|
|
600
600
|
_Names_ = (_lat_, _lon_, _azimuth_, _reciprocal_)
|
|
601
|
-
_Units_ = ( Lat_, Lon_,
|
|
601
|
+
_Units_ = ( Lat_, Lon_, Azimuth, Scalar)
|
|
602
602
|
|
|
603
603
|
|
|
604
604
|
def toCss(latlon, cs0=None, height=None, Css=Css, **name):
|
pygeodesy/ellipsoids.py
CHANGED
|
@@ -93,7 +93,7 @@ from pygeodesy.utily import atan1, atan1d, atan2b, degrees90, m2radians, radians
|
|
|
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.07.
|
|
96
|
+
__version__ = '24.07.25'
|
|
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
|
|
@@ -1040,7 +1040,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1040
1040
|
_MODS.geodesicw._wrapped.Geodesic)
|
|
1041
1041
|
except ImportError:
|
|
1042
1042
|
pass
|
|
1043
|
-
return t # overwrite
|
|
1043
|
+
return t # overwrite property_ROver
|
|
1044
1044
|
|
|
1045
1045
|
@property_RO
|
|
1046
1046
|
def geodesicw(self):
|
|
@@ -1523,7 +1523,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
1523
1523
|
'''(INTERNAL) Get all C{Rhumb...} classes, I{once}.
|
|
1524
1524
|
'''
|
|
1525
1525
|
p = _MODS.rhumb
|
|
1526
|
-
return (p.aux_.RhumbAux, # overwrite
|
|
1526
|
+
return (p.aux_.RhumbAux, # overwrite property_ROver
|
|
1527
1527
|
p.ekx.Rhumb, p.solve.RhumbSolve)
|
|
1528
1528
|
|
|
1529
1529
|
@property
|
pygeodesy/formy.py
CHANGED
|
@@ -42,7 +42,7 @@ from contextlib import contextmanager
|
|
|
42
42
|
from math import asin, atan, atan2, cos, degrees, fabs, radians, sin, sqrt # pow
|
|
43
43
|
|
|
44
44
|
__all__ = _ALL_LAZY.formy
|
|
45
|
-
__version__ = '24.
|
|
45
|
+
__version__ = '24.07.29'
|
|
46
46
|
|
|
47
47
|
_RADIANS2 = (PI / _180_0)**2 # degrees- to radians-squared
|
|
48
48
|
_ratio_ = 'ratio'
|
|
@@ -962,7 +962,7 @@ def hartzell(pov, los=False, earth=_WGS84, **name_LatLon_and_kwds):
|
|
|
962
962
|
B{C{datum}} if different and to convert from B{C{earth}}.
|
|
963
963
|
|
|
964
964
|
@return: The intersection (L{Vector3d}, B{C{pov}}'s C{cartesian type} or the
|
|
965
|
-
given B{C{LatLon}} instance) with attribute C{
|
|
965
|
+
given B{C{LatLon}} instance) with attribute C{height} set to the
|
|
966
966
|
distance to the B{C{pov}}.
|
|
967
967
|
|
|
968
968
|
@raise IntersectionError: Invalid B{C{pov}} or B{C{pov}} inside the earth or
|
pygeodesy/gars.py
CHANGED
|
@@ -3,33 +3,33 @@
|
|
|
3
3
|
|
|
4
4
|
u'''I{Global Area Reference System} (GARS) en-/decoding.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Transcoded from C++ class U{GARS
|
|
10
|
-
<https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1GARS.html>}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
<https://
|
|
6
|
+
Class L{Garef} and several functions to encode, decode and inspect
|
|
7
|
+
GARS references.
|
|
8
|
+
|
|
9
|
+
Transcoded from I{Charles Karney}'s C++ class U{GARS
|
|
10
|
+
<https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1GARS.html>}.
|
|
11
|
+
|
|
12
|
+
@see: U{Global Area Reference System
|
|
13
|
+
<https://WikiPedia.org/wiki/Global_Area_Reference_System>} and U{NGA
|
|
14
|
+
(GARS)<https://Earth-Info.NGA.mil/GandG/coordsys/grids/gars.html>}.
|
|
14
15
|
'''
|
|
15
16
|
|
|
16
17
|
# from pygeodesy.basics import isstr # from .named
|
|
17
18
|
from pygeodesy.constants import _off90, _1_over, _0_5, \
|
|
18
19
|
_1_0 # PYCHOK used!
|
|
19
|
-
from pygeodesy.dms import parse3llh, Fmt # parseDMS2
|
|
20
20
|
from pygeodesy.errors import _ValueError, _xkwds, _xStrError
|
|
21
|
-
from pygeodesy.interns import NN, _0to9_, _AtoZnoIO_, _COMMA_
|
|
21
|
+
from pygeodesy.interns import NN, _0to9_, _AtoZnoIO_, _COMMA_, _SPACE_
|
|
22
22
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_OTHER
|
|
23
|
-
from pygeodesy.named import _name__, isstr, Property_RO
|
|
23
|
+
from pygeodesy.named import _name__, Fmt, isstr, Property_RO
|
|
24
24
|
from pygeodesy.namedTuples import LatLon2Tuple, LatLonPrec3Tuple
|
|
25
25
|
# from pygeodesy.props import Property_RO # from .named
|
|
26
|
-
# from pygeodesy.streprs import Fmt # from .
|
|
26
|
+
# from pygeodesy.streprs import Fmt # from .named
|
|
27
27
|
from pygeodesy.units import Int_, Lat, Lon, Precision_, Scalar_, Str
|
|
28
28
|
|
|
29
29
|
from math import floor
|
|
30
30
|
|
|
31
31
|
__all__ = _ALL_LAZY.gars
|
|
32
|
-
__version__ = '24.
|
|
32
|
+
__version__ = '24.08.02'
|
|
33
33
|
|
|
34
34
|
_Digits = _0to9_
|
|
35
35
|
_LatLen = 2
|
|
@@ -88,7 +88,7 @@ def _2garstr2(garef):
|
|
|
88
88
|
if n < _MinLen or n > _MaxLen \
|
|
89
89
|
or garstr[:3] == 'INV' \
|
|
90
90
|
or not garstr.isalnum():
|
|
91
|
-
raise ValueError
|
|
91
|
+
raise ValueError()
|
|
92
92
|
return garstr, _2Precision(n - _MinLen)
|
|
93
93
|
|
|
94
94
|
except (AttributeError, TypeError, ValueError) as x:
|
|
@@ -111,45 +111,45 @@ class Garef(Str):
|
|
|
111
111
|
'''Garef class, a named C{str}.
|
|
112
112
|
'''
|
|
113
113
|
# no str.__init__ in Python 3
|
|
114
|
-
def __new__(cls,
|
|
115
|
-
'''New L{Garef} from an other L{Garef} instance or garef
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
@arg
|
|
119
|
-
|
|
120
|
-
@kwarg
|
|
121
|
-
|
|
122
|
-
|
|
114
|
+
def __new__(cls, lat_gll, lon=None, precision=1, **name):
|
|
115
|
+
'''New L{Garef} from an other L{Garef} instance or garef C{str}
|
|
116
|
+
or from a lat- and longitude.
|
|
117
|
+
|
|
118
|
+
@arg lat_gll: Latitude (C{degrees90}), a garef (L{Garef},
|
|
119
|
+
C{str}) or a location (C{LatLon}, C{LatLon*Tuple}).
|
|
120
|
+
@kwarg lon: Logitude (C{degrees180)}, required if B{C{lat_gll}}
|
|
121
|
+
is C{degrees90}, ignored otherwise.
|
|
122
|
+
@kwarg precision: The desired garef resolution and length (C{int}
|
|
123
|
+
0..2), see L{encode<pygeodesy.gars.encode>}.
|
|
123
124
|
@kwarg name: Optional C{B{name}=NN} (C{str}).
|
|
124
125
|
|
|
125
126
|
@return: New L{Garef}.
|
|
126
127
|
|
|
127
|
-
@raise
|
|
128
|
+
@raise GARSError: INValid B{C{lat_gll}}.
|
|
128
129
|
|
|
129
|
-
@raise
|
|
130
|
+
@raise RangeError: Invalid B{C{lat_gll}} or B{C{lon}}.
|
|
130
131
|
|
|
131
|
-
@raise
|
|
132
|
+
@raise TypeError: Invalid B{C{lat_gll}} or B{C{lon}}.
|
|
132
133
|
'''
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
self = Str.__new__(cls, g, name=_name__(name, _or_nameof=cll))
|
|
134
|
+
if lon is None:
|
|
135
|
+
if isinstance(lat_gll, Garef):
|
|
136
|
+
g, ll, p = str(lat_gll), lat_gll.latlon, lat_gll.precision
|
|
137
|
+
elif isstr(lat_gll):
|
|
138
|
+
ll = lat_gll.replace(_COMMA_, _SPACE_).split()
|
|
139
|
+
if len(ll) > 1:
|
|
140
|
+
g, ll, p = _encode3(ll[0], ll[1], precision)
|
|
141
|
+
else:
|
|
142
|
+
g, ll = lat_gll.upper(), None
|
|
143
|
+
_, p = _2garstr2(g) # validate
|
|
144
|
+
else: # assume LatLon
|
|
145
|
+
try:
|
|
146
|
+
g, ll, p = _encode3(lat_gll.lat, lat_gll.lon, precision)
|
|
147
|
+
except AttributeError:
|
|
148
|
+
raise _xStrError(Garef, gll=lat_gll, Error=GARSError)
|
|
149
|
+
else:
|
|
150
|
+
g, ll, p = _encode3(lat_gll, lon, precision)
|
|
151
|
+
|
|
152
|
+
self = Str.__new__(cls, g, name=_name__(name, _or_nameof=lat_gll))
|
|
153
153
|
self._latlon = ll
|
|
154
154
|
self._precision = p
|
|
155
155
|
return self
|
|
@@ -251,7 +251,7 @@ def decode3(garef, center=True, **name):
|
|
|
251
251
|
precision, name=n)
|
|
252
252
|
|
|
253
253
|
|
|
254
|
-
def encode(lat, lon, precision=1):
|
|
254
|
+
def encode(lat, lon, precision=1):
|
|
255
255
|
'''Encode a lat-/longitude as a C{garef} of the given precision.
|
|
256
256
|
|
|
257
257
|
@arg lat: Latitude (C{degrees}).
|
|
@@ -269,6 +269,13 @@ def encode(lat, lon, precision=1): # MCCABE 14
|
|
|
269
269
|
resolution is B{30′} for B{C{precision}} 0, B{15′} for 1
|
|
270
270
|
and B{5′} for 2, respectively.
|
|
271
271
|
'''
|
|
272
|
+
g, _, _ = _encode3(lat, lon, precision)
|
|
273
|
+
return g
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def _encode3(lat, lon, precision): # MCCABE 14
|
|
277
|
+
'''Return 3-tuple C{(garef, (lat, lon), p)}.
|
|
278
|
+
'''
|
|
272
279
|
def _digit(x, y, m):
|
|
273
280
|
return _Digits[m * (m - y - 1) + x + 1],
|
|
274
281
|
|
|
@@ -282,12 +289,12 @@ def encode(lat, lon, precision=1): # MCCABE 14
|
|
|
282
289
|
p = _2Precision(precision)
|
|
283
290
|
|
|
284
291
|
lat, lon = _2fll(lat, lon)
|
|
285
|
-
lat = _off90(lat)
|
|
286
292
|
|
|
287
|
-
ix, x = _2divmod2(lon,
|
|
288
|
-
iy, y = _2divmod2(lat, _LatOrig_M4)
|
|
293
|
+
ix, x = _2divmod2( lon, _LonOrig_M4)
|
|
294
|
+
iy, y = _2divmod2(_off90(lat), _LatOrig_M4)
|
|
289
295
|
|
|
290
|
-
g = _str(_Digits,
|
|
296
|
+
g = _str(_Digits, ix + 1, _LonLen) + \
|
|
297
|
+
_str(_Letters, iy, _LatLen)
|
|
291
298
|
if p > 0:
|
|
292
299
|
ix, x = divmod(x, _M3)
|
|
293
300
|
iy, y = divmod(y, _M3)
|
|
@@ -295,7 +302,7 @@ def encode(lat, lon, precision=1): # MCCABE 14
|
|
|
295
302
|
if p > 1:
|
|
296
303
|
g += _digit(x, y, _M3)
|
|
297
304
|
|
|
298
|
-
return NN.join(g)
|
|
305
|
+
return NN.join(g), (lat, lon), p
|
|
299
306
|
|
|
300
307
|
|
|
301
308
|
def precision(res):
|
pygeodesy/geodesici.py
CHANGED
|
@@ -49,14 +49,14 @@ from pygeodesy.props import deprecated_method, Property, \
|
|
|
49
49
|
from pygeodesy.solveBase import _SolveCapsBase, pairs
|
|
50
50
|
# from pygeodesy.streprs import pairs # from .solveBase
|
|
51
51
|
# from pygeodesy.streprs import Fmt, unstr # from .ellipsoids
|
|
52
|
-
from pygeodesy.units import Degrees, Float, Int,
|
|
53
|
-
|
|
52
|
+
from pygeodesy.units import Azimuth as Azi, Degrees, Float, Int, \
|
|
53
|
+
_isDegrees, Lat, Lon, Meter, Meter_
|
|
54
54
|
from pygeodesy.utily import sincos2, atan2, fabs, radians
|
|
55
55
|
|
|
56
56
|
# from math import atan2, ceil as _ceil, fabs, radians # .fsums, .utily
|
|
57
57
|
|
|
58
58
|
__all__ = _ALL_LAZY.geodesici
|
|
59
|
-
__version__ = '24.07.
|
|
59
|
+
__version__ = '24.07.25'
|
|
60
60
|
|
|
61
61
|
_0t = 0, # int
|
|
62
62
|
_1_1t = -1, +1
|
|
@@ -77,12 +77,6 @@ _sX0_ = 'sX0'
|
|
|
77
77
|
_TRIPS = 128
|
|
78
78
|
|
|
79
79
|
|
|
80
|
-
class Azi(Degrees):
|
|
81
|
-
'''(INTERNAL) Azimuth C{Unit}.
|
|
82
|
-
'''
|
|
83
|
-
pass
|
|
84
|
-
|
|
85
|
-
|
|
86
80
|
class XDict(ADict):
|
|
87
81
|
'''4+Item result from L{Intersectool} and L{Intersector} methods
|
|
88
82
|
C{All}, C{Closest}, C{Next} and C{Segment} with the intersection
|
|
@@ -597,7 +591,7 @@ class Intersectool(_IntersectBase, _SolveCapsBase):
|
|
|
597
591
|
def _GeodesicExact(self):
|
|
598
592
|
'''Get the I{class} L{GeodesicExact}, I{once}.
|
|
599
593
|
'''
|
|
600
|
-
return _MODS.geodesicx.GeodesicExact # overwrite
|
|
594
|
+
return _MODS.geodesicx.GeodesicExact # overwrite property_ROver
|
|
601
595
|
|
|
602
596
|
def _In5T(self, glA, glB, S, X, k2=False, **_2X):
|
|
603
597
|
A = GDict(glA).set_(lat2=X.latA, lon2=X.lonA, s12=S.sA)
|