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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyGeodesy
3
- Version: 24.7.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 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 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
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: July 24, 2024.*
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=uYrhqWUaNgzSKAETWoDZc9AqmYmIDtug9wVvfyEH_Aw,42191
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=5tMMKlzKyfGnreOHChrquBi241ZvIOBTUn_pbZCIJWc,50231
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=nn2JNYbPJhL0lzkUvDEQDR_omNgmMIYuS1nCwYtlXnQ,46927
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=B_EKq757XdQSUy83HAxEf3H5Iyd7mw3DbJB5Wi3obAc,25651
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=GbLZPLkSYGAE7JlGFhhZ4inhH501yNJ60jpMM_cVoNA,108003
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=ZpPaQBQvaFiA-UcrgaiiV_iGxlfTqNdlR1Ngx-1oinY,75032
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=gJKZuGPKw8rlRLx1hywZrpGucpHXLvMe8fr8izgSW2s,11370
34
- pygeodesy/geodesici.py,sha256=U-hxztCvASJTnvDJxMI2jgeZOIwTalX-xFsfJWWG-Wg,75023
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=rOOGOHcTnxIPX2p5ieA1gQ_ZcRlUxjIcroPHa7a85ak,31876
38
- pygeodesy/geoids.py,sha256=PVTYfSe67SRZtII9Qi1FXTDtRPoabwEtRbFXkgiKjdI,80639
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=9kvyJj0-D3syZMdHNDXIfZT3MyhHH2fcqW_y-u7Tn2M,43197
41
- pygeodesy/internals.py,sha256=YUcf9wWXT7XztviEBN2uBww8Bt7gnqks2sAZt7k_j3w,20426
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=nuuc49Crv3Rt2tKtn8rizyfvKhyQiMekfTFEcyfj-sk,38035
44
+ pygeodesy/karney.py,sha256=y9xMgJX0W0tLrQQnO6c9-It7QgDSOcd4Irvs2D68vBI,38035
45
45
  pygeodesy/ktm.py,sha256=EJ52Llx5DPFNNl2DEH8rL1-k955qOxYZLAg4-UpnlbA,27246
46
- pygeodesy/latlonBase.py,sha256=8DxTwivt3SG6wCLJLXBesY6hlNFgLCksdH3AdQFz2G0,78949
47
- pygeodesy/lazily.py,sha256=GZuV0nXH2-jrBxKqKuD839fJFtUFDHsPh4mA7p5uJZI,46932
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=4ElW1AsN_k_jppvp9Mv2RFs5Q97yhJSnCStcmg9Rl-k,50765
50
- pygeodesy/ltpTuples.py,sha256=r3uHMBCxr31IsCMp_OtpevQPmULJhucn8JZ2bGjuiVI,58338
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=ixDpZ3RdZmHV8RcmPnXxiPCoinno4Qj4JcYuS1EKD04,62722
67
- pygeodesy/units.py,sha256=mTn0APS0SW9fKn3IYf5usV63Xaw2B9DzkwefPNVu-Es,34607
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=k2OhMue84yH_xaezo0sdxL1-X7fZRqZZ4-Rl1reDYSM,14792
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=eRkUhML8_a6NKlC3SZvPE7gjMden_TR9_KkhBfLszj8,16744
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=lKEgUlnJ3JNHLu_ZPBn7eKgwxK9yAHa77r9OCUiLdds,10466
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.7.24.dist-info/METADATA,sha256=eAD31ElQO-EdA8Ko3O5OLhFI59h7qky1Fjnke2urSLg,19717
115
- PyGeodesy-24.7.24.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
116
- PyGeodesy-24.7.24.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
117
- PyGeodesy-24.7.24.dist-info/RECORD,,
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} and module L{geodesici} need I{Karney}'s C++ utility U{IntersectTool
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 Geohash, GeohashError, \
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.07.24'
598
+ __version__ = '24.08.04'
600
599
  # see setup.py for similar logic
601
600
  version = _DOT_(*_version2(__version__, n=3))
602
601
 
@@ -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.12'
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 propertyROver
281
+ return _MODS.rhumb.aux_.RhumbAux # overwrite property_ROver
282
282
 
283
283
  @Property_RO
284
284
  def tan(self):
@@ -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.12'
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 propertyROver
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 Bearing, Easting, Lat_, Lon_, Northing, \
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.06.11'
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_, Bearing, Scalar, _Pass)
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 Bearing(azimuth=azimuth) # PYCHOK named
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
 
@@ -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.12'
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{heigth}} and/or this height are C{None} or undefined.
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 Bearing, Degrees, Easting, Height, _heigHt, \
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.06.11'
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, Bearing, Scalar)
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, Bearing)
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_, Bearing, Scalar)
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.16'
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 propertyROver
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 propertyROver
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.06.15'
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{heigth} set to the
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
- Classes L{Garef} and L{GARSError} and several functions to encode,
7
- decode and inspect I{Global Area Reference System} (GARS) references.
8
-
9
- Transcoded from C++ class U{GARS
10
- <https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1GARS.html>}
11
- by I{Charles Karney}. See also U{Global Area Reference System
12
- <https://WikiPedia.org/wiki/Global_Area_Reference_System>} and U{NGA (GARS)
13
- <https://Earth-Info.NGA.mil/GandG/coordsys/grids/gars.html>}.
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 .dms
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.06.15'
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, cll, precision=1, **name):
115
- '''New L{Garef} from an other L{Garef} instance or garef
116
- C{str} or from a C{LatLon} instance or lat-/longitude C{str}.
117
-
118
- @arg cll: Cell or location (L{Garef} or C{str}, C{LatLon}
119
- or C{str}).
120
- @kwarg precision: Optional, the desired garef resolution
121
- and length (C{int} 0..2), see function
122
- L{gars.encode} for more details.
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 RangeError: Invalid B{C{cll}} lat- or longitude.
128
+ @raise GARSError: INValid B{C{lat_gll}}.
128
129
 
129
- @raise TypeError: Invalid B{C{cll}}.
130
+ @raise RangeError: Invalid B{C{lat_gll}} or B{C{lon}}.
130
131
 
131
- @raise GARSError: INValid or non-alphanumeric B{C{cll}}.
132
+ @raise TypeError: Invalid B{C{lat_gll}} or B{C{lon}}.
132
133
  '''
133
- ll = p = None
134
-
135
- if isinstance(cll, Garef):
136
- g, p = _2garstr2(str(cll))
137
-
138
- elif isstr(cll):
139
- if _COMMA_ in cll:
140
- ll = _2fll(*parse3llh(cll))
141
- g = encode(*ll, precision=precision) # PYCHOK false
142
- else:
143
- g = cll.upper()
144
-
145
- else: # assume LatLon
146
- try:
147
- ll = _2fll(cll.lat, cll.lon)
148
- g = encode(*ll, precision=precision) # PYCHOK false
149
- except AttributeError:
150
- raise _xStrError(Garef, cll=cll) # Error=GARSError
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): # MCCABE 14
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, _LonOrig_M4)
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, ix + 1, _LonLen) + _str(_Letters, iy, _LatLen)
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, _isDegrees, \
53
- Lat, Lon, Meter, Meter_
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.22'
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 propertyROver
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)