pygeodesy 24.6.1__py2.py3-none-any.whl → 24.6.9__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {PyGeodesy-24.6.1.dist-info → PyGeodesy-24.6.9.dist-info}/METADATA +2 -2
- {PyGeodesy-24.6.1.dist-info → PyGeodesy-24.6.9.dist-info}/RECORD +43 -43
- pygeodesy/__init__.py +1 -1
- pygeodesy/booleans.py +52 -65
- pygeodesy/cartesianBase.py +138 -147
- pygeodesy/ecef.py +46 -52
- pygeodesy/ellipsoidalBase.py +6 -43
- pygeodesy/ellipsoidalNvector.py +7 -7
- pygeodesy/errors.py +2 -2
- pygeodesy/frechet.py +3 -4
- pygeodesy/fsums.py +2 -2
- pygeodesy/geodsolve.py +23 -25
- pygeodesy/geohash.py +14 -27
- pygeodesy/geoids.py +1 -1
- pygeodesy/hausdorff.py +6 -7
- pygeodesy/heights.py +14 -27
- pygeodesy/internals.py +13 -12
- pygeodesy/interns.py +3 -9
- pygeodesy/iters.py +2 -2
- pygeodesy/latlonBase.py +189 -176
- pygeodesy/lazily.py +90 -54
- pygeodesy/lcc.py +2 -2
- pygeodesy/ltp.py +37 -17
- pygeodesy/ltpTuples.py +124 -115
- pygeodesy/mgrs.py +28 -1
- pygeodesy/named.py +92 -67
- pygeodesy/namedTuples.py +43 -14
- pygeodesy/nvectorBase.py +19 -22
- pygeodesy/points.py +2 -2
- pygeodesy/rhumb/solve.py +8 -61
- pygeodesy/solveBase.py +22 -19
- pygeodesy/sphericalBase.py +17 -11
- pygeodesy/streprs.py +6 -4
- pygeodesy/trf.py +3 -3
- pygeodesy/triaxials.py +70 -49
- pygeodesy/units.py +40 -65
- pygeodesy/unitsBase.py +2 -2
- pygeodesy/utily.py +5 -4
- pygeodesy/utmupsBase.py +2 -2
- pygeodesy/vector3d.py +34 -36
- pygeodesy/vector3dBase.py +12 -9
- {PyGeodesy-24.6.1.dist-info → PyGeodesy-24.6.9.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.6.1.dist-info → PyGeodesy-24.6.9.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PyGeodesy
|
|
3
|
-
Version: 24.6.
|
|
3
|
+
Version: 24.6.9
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -159,7 +159,7 @@ and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64
|
|
|
159
159
|
|
|
160
160
|
For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
|
|
161
161
|
|
|
162
|
-
*Last updated: June
|
|
162
|
+
*Last updated: June 09, 2024.*
|
|
163
163
|
|
|
164
164
|
License
|
|
165
165
|
=======
|
|
@@ -1,78 +1,78 @@
|
|
|
1
1
|
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=
|
|
2
|
+
pygeodesy/__init__.py,sha256=MliQ7bvn1U4dND9REeqtweBQF8d_LWeWIliPvZwBkeg,41046
|
|
3
3
|
pygeodesy/__main__.py,sha256=UmTd6Qw20g_pgnQjdaHePm-xuOEBi1tUNRLO0eL0-rU,4593
|
|
4
4
|
pygeodesy/albers.py,sha256=2t8EjmoFWmkdTb4DUHMlECkwTPDS1wpNf92WD_UWXds,31081
|
|
5
5
|
pygeodesy/azimuthal.py,sha256=RQdZbHoLlHSamhnJ4GMrrRU6UrYmTpa1yK59nYB-A4o,50252
|
|
6
6
|
pygeodesy/basics.py,sha256=Ez1tApjFnk6vNsYXeZzi28hYsa5AhUYobLS1Anna2g0,29381
|
|
7
|
-
pygeodesy/booleans.py,sha256=
|
|
8
|
-
pygeodesy/cartesianBase.py,sha256
|
|
7
|
+
pygeodesy/booleans.py,sha256=_19jhaMqcPdaOfKdSElh50y2JQemXcu9Xcx0CqJ90ZE,73533
|
|
8
|
+
pygeodesy/cartesianBase.py,sha256=-n3g68SO-3399cqyzgDXAolQnQfyOhzFYixhATpWZVI,47216
|
|
9
9
|
pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
|
|
10
10
|
pygeodesy/constants.py,sha256=-weWOuHwE-qI6pYRLcTucI0KNcNJm6vPNzxwrJzACKs,19192
|
|
11
11
|
pygeodesy/css.py,sha256=RXlLh76tVDFClVh7L1U3FFrLZvjBPFASDf3vq8dHecE,25778
|
|
12
12
|
pygeodesy/datums.py,sha256=GYbtvPyzDChHYgnNleBqsM-MNwLNQqrO2_MMV4Z9kmI,34006
|
|
13
13
|
pygeodesy/dms.py,sha256=VujWxk1L2Kp6OMfnu0XPI-j8bnyJ33sFmtB9_MbHqSU,44455
|
|
14
|
-
pygeodesy/ecef.py,sha256=
|
|
14
|
+
pygeodesy/ecef.py,sha256=35lTlGfCM4t45IFpjfXHSUXJSyGUEjuqUK-YWRRplLs,59680
|
|
15
15
|
pygeodesy/elevations.py,sha256=1qZM2w0rDF7jHunydpTEmdLwOwF81KUL9L6RALJC7K4,10807
|
|
16
|
-
pygeodesy/ellipsoidalBase.py,sha256=
|
|
16
|
+
pygeodesy/ellipsoidalBase.py,sha256=ljWfrFENRFFWxhyvptfipEWM8xKeTs329F2OP4lZvKI,55297
|
|
17
17
|
pygeodesy/ellipsoidalBaseDI.py,sha256=lPUPP5lVsCzI5RIukxmJ5MH6j2Mb7mdvftQ0tsvsW6g,38585
|
|
18
18
|
pygeodesy/ellipsoidalExact.py,sha256=a_2C6S6hGRumavy5giRoC9QAhnjqpujiXyu92od6nKo,16951
|
|
19
19
|
pygeodesy/ellipsoidalGeodSolve.py,sha256=nzT6KOubBOxXRHYafOo5ByQ90VOY1zvaS7byhnwaFqE,16830
|
|
20
20
|
pygeodesy/ellipsoidalKarney.py,sha256=m07XlZKWvBnOzIKV6P7RNttk8G5s2JRBH2RVF_lg0_k,19243
|
|
21
|
-
pygeodesy/ellipsoidalNvector.py,sha256=
|
|
21
|
+
pygeodesy/ellipsoidalNvector.py,sha256=kRmWclV0NFnEJv3m3TxBNJMu7wyrZZO2iUrNrr-_m9g,30261
|
|
22
22
|
pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7cn4,26004
|
|
23
23
|
pygeodesy/ellipsoids.py,sha256=_fbQy9k_k40Li6jAOlHcSlEPPUnliZsqjIR2be3h2QI,120238
|
|
24
24
|
pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
|
|
25
25
|
pygeodesy/epsg.py,sha256=oWHX_QVChE5roktAyXUmPmX49XHiryYmXTHxQzrAprE,8222
|
|
26
|
-
pygeodesy/errors.py,sha256=
|
|
26
|
+
pygeodesy/errors.py,sha256=3GPp5Axnbnch93VWO-E7uEAAfVnRzbByafNCtKR6g_I,28443
|
|
27
27
|
pygeodesy/etm.py,sha256=DeX0mZQcHK0KbmOZodp2iv2TEFtRjYziSL9oUEV2YxU,44952
|
|
28
28
|
pygeodesy/fmath.py,sha256=EOHD0uZ8VULZtXAk8tVeuPaSTozPDCN8GJcemCo-jqg,33709
|
|
29
29
|
pygeodesy/formy.py,sha256=JKFqC7OlxBvB9sOH9OaWJX4bLkf0dMqW3LcVrwdnt7A,75121
|
|
30
|
-
pygeodesy/frechet.py,sha256=
|
|
30
|
+
pygeodesy/frechet.py,sha256=GL4R26drObd1qFyg4hV-L9btdXaIj7xzrKjQUA-7JKc,34342
|
|
31
31
|
pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
|
|
32
|
-
pygeodesy/fsums.py,sha256=
|
|
32
|
+
pygeodesy/fsums.py,sha256=35PAG1f5DO1KgnEWujH5TSbaas6a6eETAeeJxGcUW1A,80453
|
|
33
33
|
pygeodesy/gars.py,sha256=gVnLQIEofyf_dA8dhpLrmhtIxGhBHZVRw8PbWgYUnnY,11400
|
|
34
34
|
pygeodesy/geodesicw.py,sha256=PwUO5jCGExhMt6cKkQwVnPTHMMVadkTrd6pV4UWZYNY,27064
|
|
35
|
-
pygeodesy/geodsolve.py,sha256=
|
|
36
|
-
pygeodesy/geohash.py,sha256=
|
|
37
|
-
pygeodesy/geoids.py,sha256=
|
|
38
|
-
pygeodesy/hausdorff.py,sha256=
|
|
39
|
-
pygeodesy/heights.py,sha256=
|
|
40
|
-
pygeodesy/internals.py,sha256=
|
|
41
|
-
pygeodesy/interns.py,sha256=
|
|
42
|
-
pygeodesy/iters.py,sha256=
|
|
35
|
+
pygeodesy/geodsolve.py,sha256=lC-81_56RUpgyJPDTXv0ih73tEuMNp3evDvyP4CDKSs,21974
|
|
36
|
+
pygeodesy/geohash.py,sha256=hAgcl8p4DSswBdrNj-SzmWYMU2q6h5yczeLKtpRvmZA,32080
|
|
37
|
+
pygeodesy/geoids.py,sha256=ztWLvRLpOPqC_52sxJVzVk7_g4o2REVxx5d3hh7jZ8g,80887
|
|
38
|
+
pygeodesy/hausdorff.py,sha256=bhxy8_3dAoR1syc-X90AbANNrulMFdwRyvNxjYfcw6I,34713
|
|
39
|
+
pygeodesy/heights.py,sha256=3-4ESUw7s7fggRRTXIR1YpV3K-Qk8x3nlt7BkNa54lw,43191
|
|
40
|
+
pygeodesy/internals.py,sha256=0y4Wwx7bGife4-quIyAf7l6MR91Tmfjrie1FuqNSM5Y,19354
|
|
41
|
+
pygeodesy/interns.py,sha256=njF6hxFJRhhWLsrfx21XX8V3ZvS59ujfzk2spWBGSBM,23258
|
|
42
|
+
pygeodesy/iters.py,sha256=xPH0ytomvJeKHu717Fjzi3QbRrEikO6n7vqkY_IDz1k,20311
|
|
43
43
|
pygeodesy/karney.py,sha256=iGoi32hDPdaMR39i6pypcbY2hqvHFVPFROYcjjA-Jrw,35121
|
|
44
44
|
pygeodesy/ktm.py,sha256=itQElJegrfhpAuMujAWFTcyuMSeKIgSyw5qkkHFs7vE,27519
|
|
45
|
-
pygeodesy/latlonBase.py,sha256=
|
|
46
|
-
pygeodesy/lazily.py,sha256=
|
|
47
|
-
pygeodesy/lcc.py,sha256=
|
|
48
|
-
pygeodesy/ltp.py,sha256=
|
|
49
|
-
pygeodesy/ltpTuples.py,sha256=
|
|
50
|
-
pygeodesy/mgrs.py,sha256=
|
|
51
|
-
pygeodesy/named.py,sha256=
|
|
52
|
-
pygeodesy/namedTuples.py,sha256=
|
|
53
|
-
pygeodesy/nvectorBase.py,sha256=
|
|
45
|
+
pygeodesy/latlonBase.py,sha256=EK7hM0GrLrpfCrtYc0frdS_hF1UxSo8KkqP0Bg5nq24,79072
|
|
46
|
+
pygeodesy/lazily.py,sha256=b6x3Dfob6HCoiwHaF8lhtnFQei3w2qW8yoMURPdr7tA,46519
|
|
47
|
+
pygeodesy/lcc.py,sha256=H6HTbruMKwboVxAnM1EsieBJHKqWhdd47bCYDzTIioE,25746
|
|
48
|
+
pygeodesy/ltp.py,sha256=oFuGZgWFKI7YjldlyTNhbLLOS7AVixLf5iemEhHhRbA,50857
|
|
49
|
+
pygeodesy/ltpTuples.py,sha256=VFJWeGJ96NUPaxwc1JT82dMYgE3NpnUwzu0osaaHfVE,58414
|
|
50
|
+
pygeodesy/mgrs.py,sha256=cKYnLKUorr_27Rca4V5I1-R6RPGnTlzrlYFuENnnjnI,29707
|
|
51
|
+
pygeodesy/named.py,sha256=oZEqvA1rORBY44J8oi2I6XpBchCnyi_QgAvd-zlx25A,51885
|
|
52
|
+
pygeodesy/namedTuples.py,sha256=UDmL4kCihvf8tIUVXzGzRLzL_1BLuyqm04pite6YUuk,28495
|
|
53
|
+
pygeodesy/nvectorBase.py,sha256=jT_tmA7JW_C66h7zbgP4mKxcYnmLVVpv6j-ZTvZC3NI,28744
|
|
54
54
|
pygeodesy/osgr.py,sha256=g-uCTy735aUNh5odTp27PY8CLDnTaquc1_oTs8Qv6zg,30827
|
|
55
|
-
pygeodesy/points.py,sha256=
|
|
55
|
+
pygeodesy/points.py,sha256=whMm-9Nzlhr19nPNVkXB0nIg52iMvQ4q2Xg_Eor_Yz0,64415
|
|
56
56
|
pygeodesy/props.py,sha256=8dGmTpdEABnLbBngmaOIpM0h4NYiBteMOHc_r4iNpAg,21988
|
|
57
57
|
pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
|
|
58
58
|
pygeodesy/simplify.py,sha256=NybC-pfze0ObEm4ZCz6ZQrjJlQ-QyA83E6mSJqCuKq4,25223
|
|
59
|
-
pygeodesy/solveBase.py,sha256=
|
|
60
|
-
pygeodesy/sphericalBase.py,sha256=
|
|
59
|
+
pygeodesy/solveBase.py,sha256=FGuvHvloiyBdE0H50o8rOxtD_n6gCx1Gp31Ckn-N7hk,16852
|
|
60
|
+
pygeodesy/sphericalBase.py,sha256=eIvQz573LR9xPFZK4t5Z0TEVz4aPKI9MdMtgFDbm7Zo,32284
|
|
61
61
|
pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
|
|
62
62
|
pygeodesy/sphericalTrigonometry.py,sha256=SqkFi2_Cy1LOzlZvvO4tpwxkS-AEBhdfRTgopXFTISw,64208
|
|
63
|
-
pygeodesy/streprs.py,sha256=
|
|
64
|
-
pygeodesy/trf.py,sha256=
|
|
65
|
-
pygeodesy/triaxials.py,sha256=
|
|
66
|
-
pygeodesy/units.py,sha256=
|
|
67
|
-
pygeodesy/unitsBase.py,sha256=
|
|
63
|
+
pygeodesy/streprs.py,sha256=jZigK7DeHAFi2HTbvA5sXE1bJ8jeyJC1spBnzz7nTSs,24018
|
|
64
|
+
pygeodesy/trf.py,sha256=CRFHmu0lFNtc41fddXavEkHmgnTFWEqR4RTFodcFKsw,119022
|
|
65
|
+
pygeodesy/triaxials.py,sha256=klirzOo6yxTmd-eQM4PHMnszUo71JR0VKIUy9mYUam8,62860
|
|
66
|
+
pygeodesy/units.py,sha256=gHmNw5HO78zeG3zUPfwf3wrV9LKQxBLOPPzbLivMiWA,38196
|
|
67
|
+
pygeodesy/unitsBase.py,sha256=9WC7GgLJWc9MMKX1xFIlgXNKGpK9k0Do1lA6vAkLE8s,13539
|
|
68
68
|
pygeodesy/ups.py,sha256=p9F49qQ9tGGf18fnFWJ5DdqQA-FdNe_BcuIGAi5tIoE,23419
|
|
69
|
-
pygeodesy/utily.py,sha256=
|
|
69
|
+
pygeodesy/utily.py,sha256=u5yGJvNKiNtafrokDaydHzBPe8vAGuy7WXrPP7yNSnk,36149
|
|
70
70
|
pygeodesy/utm.py,sha256=ZxBvDcCkdnmTRzMOHyhADHdZJSUo0U0xBAsg0rEeTHk,31148
|
|
71
71
|
pygeodesy/utmups.py,sha256=_GCrF3TljW4k5W9uKwilO1ivPLAbOArxlzi7jPJ4rbc,13226
|
|
72
|
-
pygeodesy/utmupsBase.py,sha256=
|
|
72
|
+
pygeodesy/utmupsBase.py,sha256=rRTSGgBbZiIp_C1v2elAjHKEIjYN1rt27lECXc55hH8,18764
|
|
73
73
|
pygeodesy/vector2d.py,sha256=zJq5PB777_mFJpKD-rt_T0Vm4SNbVwF7pc3KxX8uCT8,34994
|
|
74
|
-
pygeodesy/vector3d.py,sha256=
|
|
75
|
-
pygeodesy/vector3dBase.py,sha256=
|
|
74
|
+
pygeodesy/vector3d.py,sha256=t1MVIYCfnP-EdHiV3PAuVDcjLrDNZ3E48UOW-2rw5js,44953
|
|
75
|
+
pygeodesy/vector3dBase.py,sha256=R6rQlqoO8pvzhfjz6jK1llL74c9SldafPXHbdBrPCIA,35732
|
|
76
76
|
pygeodesy/webmercator.py,sha256=J89VAROczHNpD34AuIWD3vxfogk3ZKoYj1w0lXOCkYA,14968
|
|
77
77
|
pygeodesy/wgrs.py,sha256=AKUrYRCC67lOeJ6vUDAiGb_mY6R3ZwflXpOaP3wauOg,14774
|
|
78
78
|
pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
|
|
@@ -109,8 +109,8 @@ pygeodesy/rhumb/__init__.py,sha256=70qKVuNKkddfqMSxZ9c0VCZM1w0_Ka_nBWwtpfxxh2o,2
|
|
|
109
109
|
pygeodesy/rhumb/aux_.py,sha256=UJEnoam_MLx2dBxgzjn_zU59f9wwDDNotdsV3ccWZFU,16652
|
|
110
110
|
pygeodesy/rhumb/bases.py,sha256=J8fXg42CcAI1VR4Hz-MctOwUs029PWRTRIo6sSZYo8I,54089
|
|
111
111
|
pygeodesy/rhumb/ekx.py,sha256=GZLJOqAEy_120q27rdt7kyEvkuoBPk6LOhOzjPOTOr8,24084
|
|
112
|
-
pygeodesy/rhumb/solve.py,sha256=
|
|
113
|
-
PyGeodesy-24.6.
|
|
114
|
-
PyGeodesy-24.6.
|
|
115
|
-
PyGeodesy-24.6.
|
|
116
|
-
PyGeodesy-24.6.
|
|
112
|
+
pygeodesy/rhumb/solve.py,sha256=EDlLpbnw2FiNANOTau0emk29AEAaJpmckjK_cprvLNA,24035
|
|
113
|
+
PyGeodesy-24.6.9.dist-info/METADATA,sha256=9j-xNRochKcXdPvnUAMAvuX3teuN-uBTTweCnqr7af0,19411
|
|
114
|
+
PyGeodesy-24.6.9.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
115
|
+
PyGeodesy-24.6.9.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
116
|
+
PyGeodesy-24.6.9.dist-info/RECORD,,
|
pygeodesy/__init__.py
CHANGED
|
@@ -589,7 +589,7 @@ else:
|
|
|
589
589
|
|
|
590
590
|
from pygeodesy.internals import _version2, _DOT_ # PYCHOK import
|
|
591
591
|
# from pygeodesy.interns import _DOT_ # from .internals
|
|
592
|
-
__version__ = '24.06.
|
|
592
|
+
__version__ = '24.06.09'
|
|
593
593
|
# see setup.py for similar logic
|
|
594
594
|
version = _DOT_(*_version2(__version__, n=3))
|
|
595
595
|
|
pygeodesy/booleans.py
CHANGED
|
@@ -20,7 +20,7 @@ from __future__ import division as _; del _ # PYCHOK semicolon
|
|
|
20
20
|
from pygeodesy.basics import isodd, issubclassof, map2, _xscalar
|
|
21
21
|
from pygeodesy.constants import EPS, EPS2, INT0, _0_0, _0_5, _1_0
|
|
22
22
|
from pygeodesy.errors import ClipError, _IsnotError, _TypeError, \
|
|
23
|
-
_ValueError, _xattr, _xkwds_get
|
|
23
|
+
_ValueError, _xattr, _xkwds_get, _xkwds_pop2
|
|
24
24
|
from pygeodesy.fmath import favg, hypot, hypot2
|
|
25
25
|
# from pygeodesy.fsums import fsum1 # _MODS
|
|
26
26
|
from pygeodesy.interns import NN, _BANG_, _clip_, _clipid_, _COMMASPACE_, \
|
|
@@ -43,7 +43,7 @@ from pygeodesy.utily import fabs, _unrollon, _Wrap
|
|
|
43
43
|
# from math import fabs # from .utily
|
|
44
44
|
|
|
45
45
|
__all__ = _ALL_LAZY.booleans
|
|
46
|
-
__version__ = '24.
|
|
46
|
+
__version__ = '24.06.06'
|
|
47
47
|
|
|
48
48
|
_0_EPS = EPS # near-zero, positive
|
|
49
49
|
_EPS_0 = -EPS # near-zero, negative
|
|
@@ -124,30 +124,28 @@ class _LatLonBool(_Named):
|
|
|
124
124
|
_next = None # link to the next vertex
|
|
125
125
|
_prev = None # link to the previous vertex
|
|
126
126
|
|
|
127
|
-
def __init__(self, lat_ll, lon=None, height=0, clipid=INT0,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
@kwarg lon: Longitude (C{scalar}), iff B{C{lat_ll}} is
|
|
137
|
-
scalar, ignored otherwise.
|
|
127
|
+
def __init__(self, lat_ll, lon=None, height=0, clipid=INT0, wrap=False, **name):
|
|
128
|
+
'''New C{LatLon[FHP|GH]} from separate C{lat}, C{lon}, C{height} and C{clipid}
|
|
129
|
+
scalars or from a previous C{LatLon[FHP|GH]}, C{Clip[FHP|GH]4Tuple} or some
|
|
130
|
+
other C{LatLon} instance.
|
|
131
|
+
|
|
132
|
+
@arg lat_ll: Latitude (C{scalar}) or a lat-/longitude (C{LatLon[FHP|GH]},
|
|
133
|
+
C{Clip[FHP|GH]4Tuple} or some other C{LatLon}).
|
|
134
|
+
@kwarg lon: Longitude (C{scalar}), iff B{C{lat_ll}} is scalar, ignored
|
|
135
|
+
otherwise.
|
|
138
136
|
@kwarg height: Height (C{scalar}), conventionally C{meter}.
|
|
139
137
|
@kwarg clipid: Clip identifier (C{int}).
|
|
140
|
-
@kwarg wrap: If C{True}, wrap or I{normalize} B{C{lat}}
|
|
141
|
-
|
|
142
|
-
@kwarg name: Optional name (C{str}).
|
|
138
|
+
@kwarg wrap: If C{True}, wrap or I{normalize} B{C{lat}} and B{C{lon}} (C{bool}).
|
|
139
|
+
@kwarg name: Optional C{B{name}=NN} (C{str}).
|
|
143
140
|
'''
|
|
141
|
+
h, name = _xkwds_pop2(name, h=height) if name else (height, name)
|
|
142
|
+
|
|
144
143
|
if lon is None:
|
|
145
144
|
y, x = lat_ll.lat, lat_ll.lon
|
|
146
|
-
h = _xattr(lat_ll, height=
|
|
145
|
+
h = _xattr(lat_ll, height=h)
|
|
147
146
|
c = _xattr(lat_ll, clipid=clipid)
|
|
148
147
|
else:
|
|
149
|
-
y, x = lat_ll, lon
|
|
150
|
-
h, c = height, clipid
|
|
148
|
+
y, x, c = lat_ll, lon, clipid
|
|
151
149
|
self.y, self.x = _Wrap.latlon(y, x) if wrap else (y, x)
|
|
152
150
|
# don't duplicate defaults
|
|
153
151
|
if self._height != h:
|
|
@@ -301,22 +299,17 @@ class LatLonFHP(_LatLonBool):
|
|
|
301
299
|
_2split = None # or C{._Clip}
|
|
302
300
|
_2xing = False
|
|
303
301
|
|
|
304
|
-
def __init__(self, lat_ll,
|
|
305
|
-
'''New C{LatLonFHP} from separate C{lat}, C{lon}, C{h}eight
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
@arg lat_ll: Latitude (C{scalar}) or a lat
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
C{B{name}=NN}. If C{B{wrap} is True}, wrap
|
|
316
|
-
or I{normalize} the lat- and longitude
|
|
317
|
-
(C{bool}). Optional B{C{name}} (C{str}).
|
|
318
|
-
'''
|
|
319
|
-
_LatLonBool.__init__(self, lat_ll, *lon_h_clipid, **wrap_name)
|
|
302
|
+
def __init__(self, lat_ll, lon=None, height=0, clipid=INT0, **wrap_name):
|
|
303
|
+
'''New C{LatLonFHP} from separate C{lat}, C{lon}, C{h}eight and C{clipid}
|
|
304
|
+
scalars, or from a previous L{LatLonFHP}, L{ClipFHP4Tuple} or some other
|
|
305
|
+
C{LatLon} instance.
|
|
306
|
+
|
|
307
|
+
@arg lat_ll: Latitude (C{scalar}) or a lat-/longitude (L{LatLonFHP},
|
|
308
|
+
L{ClipFHP4Tuple} or some other C{LatLon}).
|
|
309
|
+
|
|
310
|
+
@see: L{Here<_LatLonBool.__init__>} for further details.
|
|
311
|
+
'''
|
|
312
|
+
_LatLonBool.__init__(self, lat_ll, lon, height, clipid, **wrap_name)
|
|
320
313
|
|
|
321
314
|
def __add__(self, other):
|
|
322
315
|
_other(self, other)
|
|
@@ -364,15 +357,15 @@ class LatLonFHP(_LatLonBool):
|
|
|
364
357
|
# return d
|
|
365
358
|
|
|
366
359
|
def isenclosedBy(self, *composites_points, **wrap):
|
|
367
|
-
'''Is this point inside one or more composites or polygons based
|
|
368
|
-
the U{winding number<https://www.ScienceDirect.com/science/
|
|
369
|
-
|
|
360
|
+
'''Is this point inside one or more composites or polygons based on
|
|
361
|
+
the U{winding number<https://www.ScienceDirect.com/science/article/
|
|
362
|
+
pii/S0925772101000128>}?
|
|
370
363
|
|
|
371
364
|
@arg composites_points: Composites and/or iterables of points
|
|
372
365
|
(L{ClipFHP4Tuple}, L{ClipGH4Tuple}, L{LatLonFHP},
|
|
373
366
|
L{LatLonGH} or any C{LatLon}).
|
|
374
|
-
@kwarg wrap:
|
|
375
|
-
C{points} (C{bool}).
|
|
367
|
+
@kwarg wrap: Optional keyword argument C{B{wrap}=False}, if C{True},
|
|
368
|
+
wrap or I{normalize} and unroll all C{points} (C{bool}).
|
|
376
369
|
|
|
377
370
|
@raise ValueError: Some C{points} invalid.
|
|
378
371
|
|
|
@@ -462,22 +455,17 @@ class LatLonGH(_LatLonBool):
|
|
|
462
455
|
'''
|
|
463
456
|
_entry = None # entry or exit iff intersection
|
|
464
457
|
|
|
465
|
-
def __init__(self, lat_ll,
|
|
466
|
-
'''New C{LatLonGH} from separate C{lat}, C{lon}, C{h}eight
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
@arg lat_ll: Latitude (C{scalar}) or a lat
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
ignored otherwise.
|
|
475
|
-
@kwarg wrap_name: Keyword arguments C{B{wrap}=False} and
|
|
476
|
-
C{B{name}=NN}. If C{B{wrap} is True}, wrap
|
|
477
|
-
or I{normalize} the lat- and longitude
|
|
478
|
-
(C{bool}). Optional B{C{name}} (C{str}).
|
|
458
|
+
def __init__(self, lat_ll, lon=None, height=0, clipid=INT0, **wrap_name):
|
|
459
|
+
'''New C{LatLonGH} from separate C{lat}, C{lon}, C{h}eight and C{clipid}
|
|
460
|
+
scalars, or from a previous L{LatLonGH}, L{ClipGH4Tuple} or some other
|
|
461
|
+
C{LatLon} instance.
|
|
462
|
+
|
|
463
|
+
@arg lat_ll: Latitude (C{scalar}) or a lat-/longitude (L{LatLonGH},
|
|
464
|
+
L{ClipGH4Tuple} or some other C{LatLon}).
|
|
465
|
+
|
|
466
|
+
@see: L{Here<_LatLonBool.__init__>} for further details.
|
|
479
467
|
'''
|
|
480
|
-
_LatLonBool.__init__(self, lat_ll,
|
|
468
|
+
_LatLonBool.__init__(self, lat_ll, lon, height, clipid, **wrap_name)
|
|
481
469
|
|
|
482
470
|
def _check(self):
|
|
483
471
|
# Check-mark this vertex and its link.
|
|
@@ -498,8 +486,8 @@ class LatLonGH(_LatLonBool):
|
|
|
498
486
|
@arg composites_points: Composites and/or iterables of points
|
|
499
487
|
(L{ClipFHP4Tuple}, L{ClipGH4Tuple}, L{LatLonFHP},
|
|
500
488
|
L{LatLonGH} or any C{LatLon}).
|
|
501
|
-
@kwarg wrap:
|
|
502
|
-
C{points} (C{bool}).
|
|
489
|
+
@kwarg wrap: Optional keyword argument C{B{wrap}=False}, if C{True},
|
|
490
|
+
wrap or I{normalize} and unroll all C{points} (C{bool}).
|
|
503
491
|
|
|
504
492
|
@raise ValueError: Some B{C{points}} invalid.
|
|
505
493
|
'''
|
|
@@ -667,7 +655,7 @@ class _Clip(_Named):
|
|
|
667
655
|
return map2(float, _MODS.points.boundsOf(self, wrap=False))
|
|
668
656
|
|
|
669
657
|
def _bltr4eps(self, eps):
|
|
670
|
-
# Get the ._bltr4 bounds tuple, oversized.
|
|
658
|
+
# Get the ._bltr4 bounds tuple, slightly oversized.
|
|
671
659
|
if eps > 0: # > EPS
|
|
672
660
|
yb, xl, yt, xr = self._bltr4
|
|
673
661
|
yb, yt = _low_high_eps2(yb, yt, eps)
|
|
@@ -806,8 +794,8 @@ class _Clip(_Named):
|
|
|
806
794
|
|
|
807
795
|
def _noXings(self, Union):
|
|
808
796
|
# Are all intersections non-CROSSINGs, -BOUNCINGs?
|
|
809
|
-
|
|
810
|
-
return all(v._label not in
|
|
797
|
+
Xings = _L.BOUNCINGs if Union else _L.CROSSINGs
|
|
798
|
+
return all(v._label not in Xings for v in self._intersections())
|
|
811
799
|
|
|
812
800
|
def _OpenClipError(self, s, e): # PYCHOK no cover
|
|
813
801
|
# Return a C{CloseError} instance
|
|
@@ -1810,7 +1798,7 @@ class BooleanFHP(_CompositeFHP, _BooleanBase):
|
|
|
1810
1798
|
@kwarg raiser: If C{True}, throw L{ClipError} exceptions (C{bool}).
|
|
1811
1799
|
@kwarg esp: Tolerance for eliminating null edges (C{degrees}, same
|
|
1812
1800
|
units as the B{C{lls}} coordinates).
|
|
1813
|
-
@kwarg name: Optional name (C{str}).
|
|
1801
|
+
@kwarg name: Optional C{B{name}=NN} (C{str}).
|
|
1814
1802
|
'''
|
|
1815
1803
|
_CompositeFHP.__init__(self, lls, raiser=raiser, eps=eps, **name)
|
|
1816
1804
|
|
|
@@ -1874,7 +1862,7 @@ class BooleanGH(_CompositeGH, _BooleanBase):
|
|
|
1874
1862
|
attempt to handle the latter (C{bool}).
|
|
1875
1863
|
@kwarg esp: Tolerance for eliminating null edges (C{degrees}, same
|
|
1876
1864
|
units as the B{C{lls}} coordinates).
|
|
1877
|
-
@kwarg name: Optional name (C{str}).
|
|
1865
|
+
@kwarg name: Optional C{B{name}=NN} (C{str}).
|
|
1878
1866
|
'''
|
|
1879
1867
|
_CompositeGH.__init__(self, lls, raiser=raiser, xtend=xtend, eps=eps, **name)
|
|
1880
1868
|
|
|
@@ -1937,9 +1925,8 @@ def isBoolean(obj):
|
|
|
1937
1925
|
|
|
1938
1926
|
@arg obj: The object (any C{type}).
|
|
1939
1927
|
|
|
1940
|
-
@return: C{True} if B{C{obj}} is L{BooleanFHP},
|
|
1941
|
-
|
|
1942
|
-
C{False} otherwise.
|
|
1928
|
+
@return: C{True} if B{C{obj}} is L{BooleanFHP}, L{BooleanGH}
|
|
1929
|
+
or some other composite, C{False} otherwise.
|
|
1943
1930
|
'''
|
|
1944
1931
|
return isinstance(obj, _CompositeBase)
|
|
1945
1932
|
|