pygeodesy 24.6.9__py2.py3-none-any.whl → 24.7.7__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/METADATA +2 -2
- PyGeodesy-24.7.7.dist-info/RECORD +117 -0
- pygeodesy/__init__.py +39 -32
- pygeodesy/__main__.py +6 -1
- pygeodesy/albers.py +2 -2
- pygeodesy/auxilats/__init__.py +1 -1
- pygeodesy/auxilats/auxAngle.py +40 -39
- pygeodesy/auxilats/auxDLat.py +3 -2
- pygeodesy/auxilats/auxLat.py +16 -18
- pygeodesy/auxilats/auxily.py +1 -1
- pygeodesy/azimuthal.py +10 -10
- pygeodesy/basics.py +16 -4
- pygeodesy/booleans.py +4 -4
- pygeodesy/cartesianBase.py +11 -14
- pygeodesy/css.py +14 -18
- pygeodesy/datums.py +6 -6
- pygeodesy/deprecated/__init__.py +1 -1
- pygeodesy/deprecated/classes.py +25 -4
- pygeodesy/deprecated/datum.py +3 -3
- pygeodesy/deprecated/functions.py +6 -8
- pygeodesy/dms.py +23 -27
- pygeodesy/ecef.py +4 -4
- pygeodesy/elevations.py +4 -4
- pygeodesy/ellipsoidalBase.py +23 -28
- pygeodesy/ellipsoidalBaseDI.py +19 -23
- pygeodesy/ellipsoidalExact.py +3 -3
- pygeodesy/ellipsoidalGeodSolve.py +15 -23
- pygeodesy/ellipsoidalKarney.py +37 -60
- pygeodesy/ellipsoidalNvector.py +38 -44
- pygeodesy/ellipsoidalVincenty.py +11 -14
- pygeodesy/ellipsoids.py +107 -101
- pygeodesy/errors.py +109 -48
- pygeodesy/etm.py +32 -44
- pygeodesy/formy.py +55 -58
- pygeodesy/frechet.py +18 -20
- pygeodesy/fsums.py +3 -3
- pygeodesy/gars.py +3 -4
- pygeodesy/geodesici.py +1696 -0
- pygeodesy/geodesicw.py +15 -15
- pygeodesy/geodesicx/__init__.py +4 -4
- pygeodesy/geodesicx/gx.py +34 -55
- pygeodesy/geodesicx/gxbases.py +20 -8
- pygeodesy/geodesicx/gxline.py +93 -88
- pygeodesy/geodsolve.py +108 -59
- pygeodesy/geohash.py +26 -34
- pygeodesy/geoids.py +28 -37
- pygeodesy/hausdorff.py +17 -18
- pygeodesy/heights.py +2 -2
- pygeodesy/internals.py +46 -13
- pygeodesy/interns.py +2 -2
- pygeodesy/karney.py +78 -15
- pygeodesy/ktm.py +13 -16
- pygeodesy/latlonBase.py +17 -19
- pygeodesy/lazily.py +28 -25
- pygeodesy/lcc.py +28 -31
- pygeodesy/ltp.py +7 -8
- pygeodesy/ltpTuples.py +71 -73
- pygeodesy/mgrs.py +8 -9
- pygeodesy/named.py +19 -10
- pygeodesy/nvectorBase.py +9 -10
- pygeodesy/osgr.py +9 -9
- pygeodesy/points.py +6 -6
- pygeodesy/rhumb/__init__.py +1 -1
- pygeodesy/rhumb/aux_.py +5 -5
- pygeodesy/rhumb/bases.py +30 -31
- pygeodesy/rhumb/ekx.py +3 -4
- pygeodesy/rhumb/solve.py +21 -22
- pygeodesy/solveBase.py +177 -123
- pygeodesy/sphericalBase.py +10 -11
- pygeodesy/sphericalNvector.py +13 -13
- pygeodesy/sphericalTrigonometry.py +86 -97
- pygeodesy/streprs.py +4 -34
- pygeodesy/triaxials.py +48 -43
- pygeodesy/units.py +208 -275
- pygeodesy/unitsBase.py +115 -107
- pygeodesy/ups.py +26 -31
- pygeodesy/utily.py +8 -8
- pygeodesy/utm.py +35 -40
- pygeodesy/utmups.py +43 -46
- pygeodesy/utmupsBase.py +8 -9
- pygeodesy/vector3d.py +26 -27
- pygeodesy/vector3dBase.py +6 -7
- pygeodesy/webmercator.py +19 -21
- pygeodesy/wgrs.py +18 -20
- PyGeodesy-24.6.9.dist-info/RECORD +0 -116
- {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.6.9.dist-info → PyGeodesy-24.7.7.dist-info}/top_level.txt +0 -0
pygeodesy/karney.py
CHANGED
|
@@ -143,13 +143,14 @@ from pygeodesy.basics import _copysign, int1s, isint, itemsorted, neg, unsigned0
|
|
|
143
143
|
_xgeographiclib, _zip, _version_info
|
|
144
144
|
from pygeodesy.constants import NAN, _isfinite as _math_isfinite, _0_0, \
|
|
145
145
|
_1_16th, _1_0, _2_0, _180_0, _N_180_0, _360_0
|
|
146
|
-
from pygeodesy.errors import GeodesicError, _ValueError, _xkwds, _xkwds_get1
|
|
146
|
+
from pygeodesy.errors import GeodesicError, _ValueError, _xkwds, _xkwds_get1, \
|
|
147
|
+
_xkwds_kwds, _xkwds_not
|
|
147
148
|
from pygeodesy.fmath import cbrt, fremainder, norm2
|
|
148
149
|
# from pygeodesy.internals import _version_info # from .basics
|
|
149
|
-
from pygeodesy.interns import _2_, _a12_, _area_, _azi2_, _azi12_,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
150
|
+
from pygeodesy.interns import NN, _2_, _a12_, _area_, _azi1_, _azi2_, _azi12_, \
|
|
151
|
+
_composite_, _lat1_, _lat2_, _lon1_, _lon2_, \
|
|
152
|
+
_m12_, _M12_, _M21_, _number_, _s12_, _S12_, \
|
|
153
|
+
_UNDER_, _X_, _BAR_ # PYCHOK used!
|
|
153
154
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS, _getenv
|
|
154
155
|
from pygeodesy.named import ADict, _NamedBase, _NamedTuple, notImplemented, _Pass
|
|
155
156
|
from pygeodesy.props import deprecated_method, Property_RO
|
|
@@ -160,7 +161,7 @@ from pygeodesy.utily import atan2d, sincos2d, tand, _unrollon, fabs
|
|
|
160
161
|
# from math import fabs # from .utily
|
|
161
162
|
|
|
162
163
|
__all__ = _ALL_LAZY.karney
|
|
163
|
-
__version__ = '24.
|
|
164
|
+
__version__ = '24.07.09'
|
|
164
165
|
|
|
165
166
|
_K_2_0 = _getenv('PYGEODESY_GEOGRAPHICLIB', _2_) == _2_
|
|
166
167
|
_perimeter_ = 'perimeter'
|
|
@@ -211,10 +212,10 @@ class Caps(object): # PYCHOK
|
|
|
211
212
|
'''(INTERNAL) Overriden by C{Caps} below.
|
|
212
213
|
'''
|
|
213
214
|
EMPTY = 0 # formerly aka NONE
|
|
214
|
-
_CAP_1 = 1 << 0 # for
|
|
215
|
-
_CAP_1p = 1 << 1 # for
|
|
216
|
-
|
|
217
|
-
_CAP_3 = 1 << 3 # for
|
|
215
|
+
_CAP_1 = 1 << 0 # for goedesici/-w
|
|
216
|
+
_CAP_1p = 1 << 1 # for goedesici/-w
|
|
217
|
+
_CAP_2 = 1 << 2
|
|
218
|
+
_CAP_3 = 1 << 3 # for goedesici/-w
|
|
218
219
|
# _CAP_4 = 1 << 4
|
|
219
220
|
# _CAP_ALL = 0x1F
|
|
220
221
|
# _CAP_MASK = _CAP_ALL
|
|
@@ -233,7 +234,9 @@ class Caps(object): # PYCHOK
|
|
|
233
234
|
_DIRECT3 = AZIMUTH | LATITUDE | LONGITUDE | _CAP_3 # for goedesicw only
|
|
234
235
|
_INVERSE3 = AZIMUTH | DISTANCE | _CAP_1 # for goedesicw only
|
|
235
236
|
_STD = STANDARD | _CAP_3 | _CAP_1 # for goedesicw only
|
|
236
|
-
_STD_LINE = _STD | _CAP_1p
|
|
237
|
+
_STD_LINE = _STD | _CAP_2 | _CAP_1p # for goedesici/-w
|
|
238
|
+
|
|
239
|
+
LINE_CAPS = _STD_LINE | REDUCEDLENGTH | GEODESICSCALE # .geodesici only
|
|
237
240
|
|
|
238
241
|
LINE_OFF = 1 << 15 # Line without updates from parent geodesic or rhumb
|
|
239
242
|
LONG_UNROLL = 1 << 16 # unroll C{lon2} in .Direct and .Position
|
|
@@ -246,14 +249,14 @@ class Caps(object): # PYCHOK
|
|
|
246
249
|
AZIMUTH_DISTANCE_AREA = AZIMUTH | DISTANCE | AREA
|
|
247
250
|
|
|
248
251
|
_ANGLE_ONLY = 1 << 18 # angular distance C{a12} only
|
|
249
|
-
|
|
252
|
+
_S_CALPs_ = 1 << 19 # (INTERNAL) GeodesicExact._GenInverse
|
|
250
253
|
|
|
251
254
|
_DEBUG_AREA = 1 << 20 # (INTERNAL) include Line details
|
|
252
255
|
_DEBUG_DIRECT = 1 << 21 # (INTERNAL) include Direct details
|
|
253
256
|
_DEBUG_INVERSE = 1 << 22 # (INTERNAL) include Inverse details
|
|
254
257
|
_DEBUG_LINE = 1 << 23 # (INTERNAL) include Line details
|
|
255
258
|
_DEBUG_ALL = _DEBUG_AREA | _DEBUG_DIRECT | _DEBUG_INVERSE | \
|
|
256
|
-
_DEBUG_LINE | _ANGLE_ONLY |
|
|
259
|
+
_DEBUG_LINE | _ANGLE_ONLY | _S_CALPs_
|
|
257
260
|
|
|
258
261
|
_OUT_ALL = ALL
|
|
259
262
|
_OUT_MASK = ALL | LONG_UNROLL | REVERSE2 | _DEBUG_ALL
|
|
@@ -271,7 +274,7 @@ class Caps(object): # PYCHOK
|
|
|
271
274
|
s = []
|
|
272
275
|
for c, C in itemsorted(self.__class__.__dict__):
|
|
273
276
|
if isint(C) and (Csk & C) and int1s(C) == 1 \
|
|
274
|
-
and (C in (Caps.REVERSE2, Caps.
|
|
277
|
+
and (C in (Caps.REVERSE2, Caps._S_CALPs_)
|
|
275
278
|
or c.replace(_UNDER_, NN).isupper()):
|
|
276
279
|
s.append(c)
|
|
277
280
|
return sep.join(s) if sep else tuple(s)
|
|
@@ -308,6 +311,15 @@ and C{ALL} - all of the above.
|
|
|
308
311
|
|
|
309
312
|
C{STANDARD} = C{AZIMUTH | DISTANCE | DISTANCE_IN | LATITUDE | LONGITUDE}'''
|
|
310
313
|
|
|
314
|
+
_KEY2Caps = dict(azi2=Caps.AZIMUTH, # see GDict._unCaps
|
|
315
|
+
lat2=Caps.LATITUDE,
|
|
316
|
+
lon2=Caps.LONGITUDE,
|
|
317
|
+
m12 =Caps.REDUCEDLENGTH,
|
|
318
|
+
M12 =Caps.GEODESICSCALE,
|
|
319
|
+
M21 =Caps.GEODESICSCALE,
|
|
320
|
+
s12 =Caps.DISTANCE,
|
|
321
|
+
S12 =Caps.AREA)
|
|
322
|
+
|
|
311
323
|
|
|
312
324
|
class _CapsBase(_NamedBase): # in .auxilats, .geodesicx.gxbases
|
|
313
325
|
'''(INTERNAL) Base class for C{[_]Geodesic*Exact}.
|
|
@@ -320,11 +332,13 @@ class _CapsBase(_NamedBase): # in .auxilats, .geodesicx.gxbases
|
|
|
320
332
|
EMPTY = Caps.EMPTY # aka NONE
|
|
321
333
|
GEODESICSCALE = Caps.GEODESICSCALE
|
|
322
334
|
LATITUDE = Caps.LATITUDE
|
|
335
|
+
LINE_CAPS = Caps.LINE_CAPS
|
|
323
336
|
LINE_OFF = Caps.LINE_OFF
|
|
324
337
|
LONGITUDE = Caps.LONGITUDE
|
|
325
338
|
LONG_UNROLL = Caps.LONG_UNROLL
|
|
326
339
|
REDUCEDLENGTH = Caps.REDUCEDLENGTH
|
|
327
340
|
STANDARD = Caps.STANDARD
|
|
341
|
+
_STD_LINE = Caps._STD_LINE # for geodesici
|
|
328
342
|
|
|
329
343
|
_caps = 0 # None
|
|
330
344
|
_debug = 0 # or Caps._DEBUG_...
|
|
@@ -418,6 +432,12 @@ class GDict(ADict): # XXX _NamedDict
|
|
|
418
432
|
'''
|
|
419
433
|
return self._toTuple(Inverse10Tuple, dflt)
|
|
420
434
|
|
|
435
|
+
def _toNAN(self, outmask): # .GeodesicLineExact._GenPosition
|
|
436
|
+
'''(INTERNAL) Convert this C{GDict} to all C{NAN}s.
|
|
437
|
+
'''
|
|
438
|
+
d = dict((n, NAN) for n in GeodSolve12Tuple._Names_)
|
|
439
|
+
return self.set_(**d)._unCaps(outmask)
|
|
440
|
+
|
|
421
441
|
@deprecated_method
|
|
422
442
|
def toRhumb7Tuple(self, dflt=NAN): # PYCHOK no cover
|
|
423
443
|
'''DEPRECATED on 23.12.07, use method C{toRhumb8Tuple}.
|
|
@@ -453,6 +473,39 @@ class GDict(ADict): # XXX _NamedDict
|
|
|
453
473
|
t = tuple(_g(self, n, dflt) for n in nTuple._Names_)
|
|
454
474
|
return nTuple(t, iteration=self._iteration)
|
|
455
475
|
|
|
476
|
+
def _2X(self, gl, _2X=_X_): # .Intesectool, .Intersector
|
|
477
|
+
'''(INTERNAL) Rename attr tail from C{-2} to C{-X} or C{-M}.
|
|
478
|
+
'''
|
|
479
|
+
X = GDict(self)
|
|
480
|
+
for n in (_lat2_, _lon2_, _azi2_, _s12_, _a12_):
|
|
481
|
+
if n in X: # X._X = X._2
|
|
482
|
+
X[n[:-1] + _2X] = X.pop(n)
|
|
483
|
+
v = getattr(gl, n, X)
|
|
484
|
+
if v is not X: # X._2 = gl._2
|
|
485
|
+
X[n] = v
|
|
486
|
+
return X
|
|
487
|
+
|
|
488
|
+
def _unCaps(self, outmask): # in .geodsolve
|
|
489
|
+
'''(INTERNAL) Remove superfluous items.
|
|
490
|
+
'''
|
|
491
|
+
for k, m in _KEY2Caps.items():
|
|
492
|
+
if k in self and not (outmask & m):
|
|
493
|
+
self.pop(k) # delattr(self, k)
|
|
494
|
+
return self
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
class GeodSolve12Tuple(_GTuple):
|
|
498
|
+
'''12-Tuple C{(lat1, lon1, azi1, lat2, lon2, azi2, s12, a12, m12, M12, M21, S12)} with
|
|
499
|
+
angles C{lat1}, C{lon1}, C{azi1}, C{lat2}, C{lon2} and C{azi2} and arc C{a12} all in
|
|
500
|
+
C{degrees}, initial C{azi1} and final C{azi2} forward azimuths, distance C{s12} and
|
|
501
|
+
reduced length C{m12} in C{meter}, area C{S12} in C{meter} I{squared} and geodesic
|
|
502
|
+
scale factors C{M12} and C{M21}, both C{scalar}, see U{GeodSolve
|
|
503
|
+
<https://GeographicLib.SourceForge.io/C++/doc/GeodSolve.1.html>}.
|
|
504
|
+
'''
|
|
505
|
+
# from GeodSolve --help option -f ... lat1 lon1 azi1 lat2 lon2 azi2 s12 a12 m12 M12 M21 S12
|
|
506
|
+
_Names_ = (_lat1_, _lon1_, _azi1_, _lat2_, _lon2_, _azi2_, _s12_, _a12_, _m12_, _M12_, _M21_, _S12_)
|
|
507
|
+
_Units_ = (_Lat, _Lon, _Azi, _Lat, _Lon, _Azi, _M, _Deg, _Pass, _Pass, _Pass, _M2)
|
|
508
|
+
|
|
456
509
|
|
|
457
510
|
class Inverse10Tuple(_GTuple):
|
|
458
511
|
'''10-Tuple C{(a12, s12, salp1, calp1, salp2, calp2, m12, M12, M21, S12)} with arc length
|
|
@@ -671,6 +724,16 @@ def _isfinite(x): # mimick geomath.Math.isfinite
|
|
|
671
724
|
return _math_isfinite(x) # and fabs(x) <= _MAX
|
|
672
725
|
|
|
673
726
|
|
|
727
|
+
def _llz2line(line, **llz2):
|
|
728
|
+
'''(INTERNAL) Set C{line.lat2, .lon2, .azi2} from C{llz2}.
|
|
729
|
+
'''
|
|
730
|
+
if llz2:
|
|
731
|
+
llz2 = _xkwds_not(None, **_xkwds_kwds(llz2, lat2=None, lon2=None, azi2=None))
|
|
732
|
+
if llz2:
|
|
733
|
+
line.__dict__.update(llz2)
|
|
734
|
+
return line
|
|
735
|
+
|
|
736
|
+
|
|
674
737
|
def _norm2(x, y): # mimick geomath.Math.norm
|
|
675
738
|
'''Normalize C{B{x}} and C{B{y}}.
|
|
676
739
|
|
|
@@ -882,7 +945,7 @@ def _unroll2(lon1, lon2, wrap=False): # see .ellipsoidalBaseDI._intersects2
|
|
|
882
945
|
'''Unroll B{C{lon2 - lon1}} like C{geodesic.Geodesic.Inverse}.
|
|
883
946
|
|
|
884
947
|
@return: 2-Tuple C{(B{lon2} - B{lon1}, B{lon2})} with B{C{lon2}}
|
|
885
|
-
unrolled if B{
|
|
948
|
+
unrolled if C{B{wrap} is True}, normalized otherwise.
|
|
886
949
|
'''
|
|
887
950
|
if wrap:
|
|
888
951
|
d, t = _diff182(lon1, lon2)
|
pygeodesy/ktm.py
CHANGED
|
@@ -67,7 +67,7 @@ from cmath import polar
|
|
|
67
67
|
from math import atan2, asinh, cos, cosh, degrees, fabs, sin, sinh, sqrt, tanh
|
|
68
68
|
|
|
69
69
|
__all__ = _ALL_LAZY.ktm
|
|
70
|
-
__version__ = '24.
|
|
70
|
+
__version__ = '24.06.11'
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
class KTMError(_ValueError):
|
|
@@ -119,18 +119,16 @@ class KTransverseMercator(_NamedBase):
|
|
|
119
119
|
raiser=False, **TMorder_name):
|
|
120
120
|
'''New L{KTransverseMercator}.
|
|
121
121
|
|
|
122
|
-
@kwarg a_earth: This rhumb's earth (L{Ellipsoid}, L{Ellipsoid2},
|
|
123
|
-
L{
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
is a C{scalar}, ignored otherwise.
|
|
122
|
+
@kwarg a_earth: This rhumb's earth (L{Ellipsoid}, L{Ellipsoid2}, L{a_f2Tuple},
|
|
123
|
+
L{Datum}, 2-tuple (C{a, f})) or the equatorial radius (C{meter}).
|
|
124
|
+
@kwarg f: The ellipsoid's flattening (C{scalar}), required if B{C{a_earth}} is
|
|
125
|
+
is C{meter}, ignored otherwise.
|
|
127
126
|
@kwarg lon0: The central meridian (C{degrees180}).
|
|
128
127
|
@kwarg k0: Central scale factor (C{scalar}).
|
|
129
|
-
@kwarg raiser: If C{True}, throw a L{KTMError} for C{forward}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
this L{KTransverseMercator}, see property C{TMorder}.
|
|
128
|
+
@kwarg raiser: If C{True}, throw a L{KTMError} for C{forward} singularities (C{bool}).
|
|
129
|
+
@kwarg TMorder_name: Optional C{B{name}=NN} (C{str}) and optional keyword argument
|
|
130
|
+
C{B{TMorder}=6} for the order of this L{KTransverseMercator}, see
|
|
131
|
+
property C{TMorder}.
|
|
134
132
|
|
|
135
133
|
@raise KTMError: Invalid B{C{a_earth}}, B{C{f}} or B{C{TMorder}}.
|
|
136
134
|
'''
|
|
@@ -229,14 +227,13 @@ class KTransverseMercator(_NamedBase):
|
|
|
229
227
|
@arg lon0: Central meridian of the projection (C{degrees180}).
|
|
230
228
|
@kwarg name: Optional C{B{name}=NN} (C{str}).
|
|
231
229
|
|
|
232
|
-
@return: L{Forward4Tuple}C{(easting, northing, gamma, scale)}
|
|
233
|
-
|
|
230
|
+
@return: L{Forward4Tuple}C{(easting, northing, gamma, scale)} with
|
|
231
|
+
C{easting} and C{northing} in C{meter}, unfalsed, the
|
|
234
232
|
meridian convergence C{gamma} at point in C{degrees180}
|
|
235
233
|
and the C{scale} of projection at point C{scalar}. Any
|
|
236
234
|
value may be C{NAN}, C{NINF} or C{INF} for singularities.
|
|
237
235
|
|
|
238
|
-
@raise KTMError: For singularities, iff property C{raiser} is
|
|
239
|
-
C{True}.
|
|
236
|
+
@raise KTMError: For singularities, iff property C{raiser} is C{True}.
|
|
240
237
|
'''
|
|
241
238
|
lat, _lat = _unsigned2(_fix90(lat - self._lat0))
|
|
242
239
|
lon, _ = _diff182((self.lon0 if lon0 is None else lon0), lon)
|
|
@@ -343,7 +340,7 @@ class KTransverseMercator(_NamedBase):
|
|
|
343
340
|
@arg lat0: Latitude of the central parallel (C{degrees90}).
|
|
344
341
|
@arg lon0: Longitude of the central parallel (C{degrees180}).
|
|
345
342
|
|
|
346
|
-
@return: 2-Tuple C{(lat0, lon0)}
|
|
343
|
+
@return: 2-Tuple C{(lat0, lon0)} with the previous central
|
|
347
344
|
parallel and meridian.
|
|
348
345
|
|
|
349
346
|
@raise KTMError: Invalid B{C{lat0}} or B{C{lon0}}.
|
pygeodesy/latlonBase.py
CHANGED
|
@@ -54,7 +54,7 @@ from contextlib import contextmanager
|
|
|
54
54
|
from math import asin, cos, degrees, fabs, radians
|
|
55
55
|
|
|
56
56
|
__all__ = _ALL_LAZY.latlonBase
|
|
57
|
-
__version__ = '24.06.
|
|
57
|
+
__version__ = '24.06.11'
|
|
58
58
|
|
|
59
59
|
_formy = _MODS.into(formy=__name__)
|
|
60
60
|
|
|
@@ -143,17 +143,17 @@ class LatLonBase(_NamedBase):
|
|
|
143
143
|
bounding box centered at this location.
|
|
144
144
|
|
|
145
145
|
@arg wide: Longitudinal box width (C{meter}, same units as
|
|
146
|
-
B{C{radius}} or C{degrees} if B{
|
|
146
|
+
B{C{radius}} or C{degrees} if C{B{radius} is None}).
|
|
147
147
|
@arg tall: Latitudinal box size (C{meter}, same units as
|
|
148
|
-
B{C{radius}} or C{degrees} if B{
|
|
148
|
+
B{C{radius}} or C{degrees} if C{B{radius} is None}).
|
|
149
149
|
@kwarg radius: Mean earth radius (C{meter}) or C{None} if I{both}
|
|
150
150
|
B{C{wide}} and B{C{tall}} are in C{degrees}.
|
|
151
151
|
@kwarg height: Height for C{latlonSW} and C{latlonNE} (C{meter}),
|
|
152
152
|
overriding the point's height.
|
|
153
153
|
@kwarg name: Optional C{B{name}=NN} (C{str}).
|
|
154
154
|
|
|
155
|
-
@return: A L{Bounds2Tuple}C{(latlonSW, latlonNE)}, the
|
|
156
|
-
|
|
155
|
+
@return: A L{Bounds2Tuple}C{(latlonSW, latlonNE)}, the lower-left
|
|
156
|
+
and upper-right corner (C{LatLon}).
|
|
157
157
|
|
|
158
158
|
@see: U{https://www.Movable-Type.co.UK/scripts/latlong-db.html}
|
|
159
159
|
'''
|
|
@@ -1396,13 +1396,12 @@ class LatLonBase(_NamedBase):
|
|
|
1396
1396
|
(C{meter}, conventionally).
|
|
1397
1397
|
@kwarg Cartesian: Optional class to return the geocentric
|
|
1398
1398
|
coordinates (C{Cartesian}) or C{None}.
|
|
1399
|
-
@kwarg Cartesian_kwds: Optional, additional B{C{Cartesian}}
|
|
1400
|
-
|
|
1401
|
-
C{B{Cartesian} is None}.
|
|
1399
|
+
@kwarg Cartesian_kwds: Optional, additional B{C{Cartesian}} keyword
|
|
1400
|
+
arguments, ignored if C{B{Cartesian} is None}.
|
|
1402
1401
|
|
|
1403
|
-
@return: A B{C{Cartesian}} or if B{C{Cartesian}
|
|
1404
|
-
|
|
1405
|
-
|
|
1402
|
+
@return: A B{C{Cartesian}} or if B{C{Cartesian} is None}, an
|
|
1403
|
+
L{Ecef9Tuple}C{(x, y, z, lat, lon, height, C, M, datum)}
|
|
1404
|
+
with C{C=0} and C{M} if available.
|
|
1406
1405
|
|
|
1407
1406
|
@raise TypeError: Invalid B{C{Cartesian}} or B{C{Cartesian_kwds}}.
|
|
1408
1407
|
|
|
@@ -1512,11 +1511,10 @@ class LatLonBase(_NamedBase):
|
|
|
1512
1511
|
additional B{C{Nvector}} keyword arguments, ignored if
|
|
1513
1512
|
C{B{Nvector} is None}.
|
|
1514
1513
|
|
|
1515
|
-
@return: An B{C{Nvector}} or
|
|
1516
|
-
|
|
1514
|
+
@return: An named B{C{Nvector}} or if C{B{Nvector} is None} a named
|
|
1515
|
+
L{Vector4Tuple}C{(x, y, z, h)}.
|
|
1517
1516
|
|
|
1518
|
-
@raise TypeError: Invalid B{C{h}}, B{C{Nvector}} or
|
|
1519
|
-
B{C{name_Nvector_kwds}} item.
|
|
1517
|
+
@raise TypeError: Invalid B{C{h}}, B{C{Nvector}} or B{C{name_Nvector_kwds}}.
|
|
1520
1518
|
|
|
1521
1519
|
@see: Methods C{toCartesian}, C{toVector} and C{toVector3d}.
|
|
1522
1520
|
'''
|
|
@@ -1548,7 +1546,7 @@ class LatLonBase(_NamedBase):
|
|
|
1548
1546
|
|
|
1549
1547
|
@return: This point in the specified C{B{form}at}, etc. (C{str} or
|
|
1550
1548
|
a 2- or 3-tuple C{(lat_str, lon_str[, height_str])} if
|
|
1551
|
-
C{
|
|
1549
|
+
B{C{joined}} is C{NN} or C{None}).
|
|
1552
1550
|
|
|
1553
1551
|
@see: Function L{pygeodesy.latDMS} or L{pygeodesy.lonDMS} for more
|
|
1554
1552
|
details about keyword arguments C{B{form}at}, C{B{prec}ision},
|
|
@@ -1569,10 +1567,10 @@ class LatLonBase(_NamedBase):
|
|
|
1569
1567
|
@kwarg Vector_kwds: Optional, additional B{C{Vector}} keyword
|
|
1570
1568
|
arguments, ignored if C{B{Vector} is None}.
|
|
1571
1569
|
|
|
1572
|
-
@return: A named B{C{Vector}} or if B{
|
|
1570
|
+
@return: A named B{C{Vector}} or if C{B{Vector} is None} a
|
|
1573
1571
|
named L{Vector3Tuple}C{(x, y, z)}.
|
|
1574
1572
|
|
|
1575
|
-
@raise TypeError: Invalid B{C{Vector}} or B{C{Vector_kwds}}
|
|
1573
|
+
@raise TypeError: Invalid B{C{Vector}} or B{C{Vector_kwds}}.
|
|
1576
1574
|
|
|
1577
1575
|
@see: Methods C{toCartesian}, C{toNvector} and C{toVector3d}.
|
|
1578
1576
|
'''
|
|
@@ -1587,7 +1585,7 @@ class LatLonBase(_NamedBase):
|
|
|
1587
1585
|
|
|
1588
1586
|
@return: Named, unit vector or vector (L{Vector3d}).
|
|
1589
1587
|
|
|
1590
|
-
@raise TypeError: Invalid B{C{Vector3d_kwds}}
|
|
1588
|
+
@raise TypeError: Invalid B{C{Vector3d_kwds}}.
|
|
1591
1589
|
|
|
1592
1590
|
@see: Methods C{toCartesian}, C{toNvector} and C{toVector}.
|
|
1593
1591
|
'''
|
pygeodesy/lazily.py
CHANGED
|
@@ -48,26 +48,27 @@ except ImportError as x: # Python 2.6-
|
|
|
48
48
|
from os import getenv as _getenv
|
|
49
49
|
# import sys as _sys # from .interns
|
|
50
50
|
|
|
51
|
-
__as__
|
|
52
|
-
_dunder_all_
|
|
53
|
-
_enabled_
|
|
54
|
-
_FOR_DOCS
|
|
55
|
-
_i0
|
|
56
|
-
_init__all__
|
|
57
|
-
_lazily_
|
|
58
|
-
_lazily_imported_
|
|
59
|
-
_PYGEODESY_GEOCONVERT_
|
|
60
|
-
_PYGEODESY_GEODSOLVE_
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
51
|
+
__as__ = ' as '
|
|
52
|
+
_dunder_all_ = '__all__' # in .__main__
|
|
53
|
+
_enabled_ = 'enabled'
|
|
54
|
+
_FOR_DOCS = _getenv('PYGEODESY_FOR_DOCS', NN) # for epydoc ...
|
|
55
|
+
_i0 = () # PYCHOK empty tuple
|
|
56
|
+
_init__all__ = _FOR_DOCS or _getenv('PYGEODESY_INIT__ALL__', _dunder_all_) == _dunder_all_ # PYCHOK exported
|
|
57
|
+
_lazily_ = 'lazily'
|
|
58
|
+
_lazily_imported_ = _SPACE_(_HASH_, _lazily_, 'imported')
|
|
59
|
+
_PYGEODESY_GEOCONVERT_ = 'PYGEODESY_GEOCONVERT' # PYCHOK .mgrs, test.bases
|
|
60
|
+
_PYGEODESY_GEODSOLVE_ = 'PYGEODESY_GEODSOLVE' # PYCHOK .geodsolve, test.bases
|
|
61
|
+
_PYGEODESY_INTERSECTTOOL_ = 'PYGEODESY_INTERSECTTOOL' # PYCHOK .intersectool, test.bases
|
|
62
|
+
_PYGEODESY_LAZY_IMPORT_ = 'PYGEODESY_LAZY_IMPORT'
|
|
63
|
+
_PYGEODESY_RHUMBSOLVE_ = 'PYGEODESY_RHUMBSOLVE' # PYCHOK .rhumb.solve, test.bases
|
|
64
|
+
_PYTHON_X_DEV = getattr(_sys, '_xoptions', {}).get('dev', # Python 3.2+
|
|
64
65
|
_getenv('PYTHONDEVMODE', NN)) # PYCHOK exported
|
|
65
|
-
_sys_version_info2
|
|
66
|
-
_unlazy = _unLazy0
|
|
67
|
-
_WARNINGS_X_DEV
|
|
68
|
-
|
|
66
|
+
_sys_version_info2 = _sys.version_info[:2] # in .basics, .fmath, ...
|
|
67
|
+
_unlazy = _unLazy0 = _isfrozen or _sys_version_info2 < (3, 7) # PYCHOK mod.__getattr__ 3.7+
|
|
68
|
+
_WARNINGS_X_DEV = _getenv('PYGEODESY_WARNINGS', NN) and (
|
|
69
|
+
_PYTHON_X_DEV or bool(_sys.warnoptions)) # PYCHOK .props
|
|
69
70
|
# @module_property[_RO?] <https://GitHub.com/jtushman/proxy_tools/>
|
|
70
|
-
isLazy
|
|
71
|
+
isLazy = None # see @var isLazy in .__init__
|
|
71
72
|
|
|
72
73
|
|
|
73
74
|
class LazyAttributeError(AttributeError):
|
|
@@ -283,6 +284,8 @@ _ALL_LAZY = _NamedEnum_RO(_name='_ALL_LAZY',
|
|
|
283
284
|
fsums=_i('Fsum', 'DivMod2Tuple', 'Fsum2Tuple', 'ResidualError',
|
|
284
285
|
'fsum', 'fsum_', 'fsumf_', 'fsum1', 'fsum1_', 'fsum1f_'),
|
|
285
286
|
gars=_i('Garef', 'GARSError'),
|
|
287
|
+
geodesici=_i('Intersectool', 'Intersectool5Tuple', 'Middle5Tuple',
|
|
288
|
+
'Intersector', 'Intersector5Tuple', 'XDict'),
|
|
286
289
|
geodesicw=_i('Geodesic', 'GeodesicLine', 'Geodesic_WGS84'),
|
|
287
290
|
geodesicx=_i('gx', 'gxarea', 'gxbases', 'gxline', # modules
|
|
288
291
|
'GeodesicAreaExact', 'GeodesicExact', 'GeodesicLineExact', 'PolygonArea'),
|
|
@@ -367,9 +370,9 @@ _ALL_LAZY = _NamedEnum_RO(_name='_ALL_LAZY',
|
|
|
367
370
|
units=_i('Band', 'Bearing', 'Bearing_', 'Bool',
|
|
368
371
|
'Degrees', 'Degrees_', 'Degrees2', 'Distance', 'Distance_', 'Easting', 'Epoch',
|
|
369
372
|
'Feet', 'FIx', 'Float_', 'Height', 'Height_', 'HeightX', 'Int_',
|
|
370
|
-
'Lam', '
|
|
373
|
+
'Lam', 'Lamd', 'Lat', 'Lat_', 'Lon', 'Lon_',
|
|
371
374
|
'Meter', 'Meter_', 'Meter2', 'Meter3', 'Northing', 'Number_',
|
|
372
|
-
'Phi', '
|
|
375
|
+
'Phi', 'Phid', 'Precision_', 'Radians', 'Radians_', 'Radians2',
|
|
373
376
|
'Radius_', 'Scalar', 'Scalar_', 'Zone'),
|
|
374
377
|
unitsBase=_i('Float', 'Int', 'Radius', 'Str'),
|
|
375
378
|
ups=_i('Ups', 'UPSError', 'parseUPS5', 'toUps8', 'upsZoneBand5'),
|
|
@@ -406,13 +409,13 @@ _ALL_DEPRECATED = _NamedEnum_RO(_name='_ALL_DEPRECATED',
|
|
|
406
409
|
deprecated_bases=_i('LatLonHeightBase', 'points2'),
|
|
407
410
|
deprecated_classes=_i('ClipCS3Tuple', 'EasNorExact4Tuple', 'EcefCartesian', 'Fn_rt',
|
|
408
411
|
'HeightIDW', 'HeightIDW2', 'HeightIDW3', 'Helmert7Tuple',
|
|
409
|
-
'LatLonExact4Tuple', 'NearestOn4Tuple', 'Ned3Tuple',
|
|
410
|
-
'RefFrameError', 'Rhumb7Tuple', 'RhumbOrder2Tuple',
|
|
411
|
-
'Transform7Tuple', 'TriAngle4Tuple', 'UtmUps4Tuple'),
|
|
412
|
+
'Lam_', 'LatLonExact4Tuple', 'NearestOn4Tuple', 'Ned3Tuple',
|
|
413
|
+
'Phi_', 'RefFrameError', 'Rhumb7Tuple', 'RhumbOrder2Tuple',
|
|
414
|
+
'Transform7Tuple', 'TriAngle4Tuple', 'UtmUps4Tuple', 'XDist'),
|
|
412
415
|
deprecated_consterns=_i('EPS1_2', 'MANTIS', 'OK'),
|
|
413
416
|
deprecated_datum=_i('Curvature2Tuple', 'Datum', 'Ellipsoid', 'Transform', # assert
|
|
414
417
|
'Datums', 'Ellipsoids', 'Transforms',
|
|
415
|
-
'
|
|
418
|
+
'R_FM', 'R_KM', 'R_M', 'R_MA', 'R_MB', 'R_NM', 'R_SM', 'R_VM'),
|
|
416
419
|
deprecated_functions=_i('anStr', 'areaof', 'atand', 'bounds', # most of the DEPRECATED functions, except ...
|
|
417
420
|
'clipCS3', 'clipDMS', 'clipStr', 'collins', 'copysign', # ... ellipsoidal, spherical flavors
|
|
418
421
|
'decodeEPSG2', 'encodeEPSG', 'enStr2', 'equirectangular_', 'equirectangular3',
|
|
@@ -518,7 +521,7 @@ class _ALL_MODS(_internals._MODS_Base):
|
|
|
518
521
|
_internals._MODS = _ALL_MODS = _ALL_MODS() # PYCHOK singleton
|
|
519
522
|
|
|
520
523
|
__all__ = _ALL_LAZY.lazily
|
|
521
|
-
__version__ = '24.
|
|
524
|
+
__version__ = '24.07.09'
|
|
522
525
|
|
|
523
526
|
|
|
524
527
|
def _ALL_OTHER(*objs):
|
pygeodesy/lcc.py
CHANGED
|
@@ -41,14 +41,14 @@ from pygeodesy.namedTuples import EasNor3Tuple, LatLonDatum3Tuple, \
|
|
|
41
41
|
LatLon2Tuple, _LL4Tuple, PhiLam2Tuple
|
|
42
42
|
from pygeodesy.props import deprecated_method, Property, Property_RO, _update_all
|
|
43
43
|
from pygeodesy.streprs import Fmt, _fstrENH2, _xzipairs
|
|
44
|
-
from pygeodesy.units import Easting, Height, _heigHt,
|
|
44
|
+
from pygeodesy.units import Easting, Height, _heigHt, Lamd, Northing, Phid, \
|
|
45
45
|
Scalar_
|
|
46
46
|
from pygeodesy.utily import atan1, degrees90, degrees180, sincos2, tanPI_2_2
|
|
47
47
|
|
|
48
48
|
from math import atan, fabs, log, radians, sin, sqrt
|
|
49
49
|
|
|
50
50
|
__all__ = _ALL_LAZY.lcc
|
|
51
|
-
__version__ = '24.06.
|
|
51
|
+
__version__ = '24.06.24'
|
|
52
52
|
|
|
53
53
|
_E0_ = 'E0'
|
|
54
54
|
_N0_ = 'N0'
|
|
@@ -107,8 +107,8 @@ class Conic(_NamedEnumItem):
|
|
|
107
107
|
_xinstanceof(_LLEB, latlon0=latlon0)
|
|
108
108
|
self._phi0, self._lam0 = latlon0.philam
|
|
109
109
|
|
|
110
|
-
self._par1 =
|
|
111
|
-
self._par2 = self._par1 if par2 is None else
|
|
110
|
+
self._par1 = Phid(par1=par1)
|
|
111
|
+
self._par2 = self._par1 if par2 is None else Phid(par2=par2)
|
|
112
112
|
|
|
113
113
|
if k0 != 1:
|
|
114
114
|
self._k0 = Scalar_(k0=k0)
|
|
@@ -117,7 +117,7 @@ class Conic(_NamedEnumItem):
|
|
|
117
117
|
if N0:
|
|
118
118
|
self._N0 = Easting(N0=N0, falsed=True)
|
|
119
119
|
if opt3:
|
|
120
|
-
self._opt3 =
|
|
120
|
+
self._opt3 = Lamd(opt3=opt3)
|
|
121
121
|
|
|
122
122
|
self.toDatum(latlon0.datum)._dup2(self)
|
|
123
123
|
self._register(Conics, name)
|
|
@@ -278,20 +278,19 @@ class Conic(_NamedEnumItem):
|
|
|
278
278
|
|
|
279
279
|
return c
|
|
280
280
|
|
|
281
|
-
def toStr(self, prec=8, name
|
|
281
|
+
def toStr(self, prec=8, **name): # PYCHOK expected
|
|
282
282
|
'''Return this conic as a string.
|
|
283
283
|
|
|
284
284
|
@kwarg prec: Number of (decimal) digits, unstripped (C{int}).
|
|
285
|
-
@kwarg name: Overriding name (C{str}) or C{None} to
|
|
286
|
-
this conic's name.
|
|
285
|
+
@kwarg name: Overriding C{B{name}=NN} (C{str}) or C{None} to
|
|
286
|
+
exclude this conic's name.
|
|
287
287
|
|
|
288
288
|
@return: Conic attributes (C{str}).
|
|
289
289
|
'''
|
|
290
|
-
a = [
|
|
291
|
-
_E0_, _N0_, _k0_, _SP_]
|
|
290
|
+
a = [_lat0_, _lon0_, _par1_, _par2_, _E0_, _N0_, _k0_, _SP_]
|
|
292
291
|
if self._SP == 1:
|
|
293
292
|
_ = a.pop(a.index(_par2_))
|
|
294
|
-
return self._instr(datum=self.datum, *a)
|
|
293
|
+
return self._instr(datum=self.datum, prec=prec, *a, **name)
|
|
295
294
|
|
|
296
295
|
def _dup2(self, c):
|
|
297
296
|
'''(INTERNAL) Copy this conic to C{c}.
|
|
@@ -537,22 +536,21 @@ class Lcc(_NamedBase):
|
|
|
537
536
|
def toLatLon(self, LatLon=None, datum=None, height=None, **LatLon_kwds):
|
|
538
537
|
'''Convert this L{Lcc} to an (ellipsoidal) geodetic point.
|
|
539
538
|
|
|
540
|
-
@kwarg LatLon: Optional, ellipsoidal class to return the
|
|
541
|
-
|
|
542
|
-
@kwarg datum: Optional datum to use, otherwise use this
|
|
543
|
-
|
|
544
|
-
L{
|
|
545
|
-
@kwarg height: Optional height for the point, overriding
|
|
546
|
-
|
|
547
|
-
@kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword
|
|
548
|
-
|
|
539
|
+
@kwarg LatLon: Optional, ellipsoidal class to return the geodetic
|
|
540
|
+
point (C{LatLon}) or C{None}.
|
|
541
|
+
@kwarg datum: Optional datum to use, otherwise use this B{C{Lcc}}'s
|
|
542
|
+
conic.datum (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or
|
|
543
|
+
L{a_f2Tuple}).
|
|
544
|
+
@kwarg height: Optional height for the point, overriding the default height
|
|
545
|
+
(C{meter}).
|
|
546
|
+
@kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments,
|
|
547
|
+
ignored if C{B{LatLon} is None}.
|
|
549
548
|
|
|
550
|
-
@return: The point (B{C{LatLon}}) or a
|
|
551
|
-
L{LatLon4Tuple}C{(lat, lon, height, datum)}
|
|
552
|
-
if B{C{LatLon}} is C{None}.
|
|
549
|
+
@return: The point (B{C{LatLon}}) or if C{B{LatLon} is None}, a
|
|
550
|
+
L{LatLon4Tuple}C{(lat, lon, height, datum)}.
|
|
553
551
|
|
|
554
|
-
@raise TypeError: If B{C{LatLon}} or B{C{datum}} is
|
|
555
|
-
not
|
|
552
|
+
@raise TypeError: If B{C{LatLon}} or B{C{datum}} is not ellipsoidal or
|
|
553
|
+
not valid.
|
|
556
554
|
'''
|
|
557
555
|
if LatLon:
|
|
558
556
|
_xsubclassof(_LLEB, LatLon=LatLon)
|
|
@@ -622,13 +620,12 @@ def toLcc(latlon, conic=Conics.WRF_Lb, height=None, Lcc=Lcc,
|
|
|
622
620
|
@kwarg height: Optional height for the point, overriding the
|
|
623
621
|
default height (C{meter}).
|
|
624
622
|
@kwarg Lcc: Class to return the I{Lambert} location (L{Lcc}).
|
|
625
|
-
@kwarg name_Lcc_kwds: Optional C{B{name}=NN} (C{str})
|
|
626
|
-
|
|
627
|
-
|
|
623
|
+
@kwarg name_Lcc_kwds: Optional C{B{name}=NN} (C{str}) and optional,
|
|
624
|
+
additional B{C{Lcc}} keyword arguments, ignored if
|
|
625
|
+
B{C{Lcc} is None}.
|
|
628
626
|
|
|
629
|
-
@return: The I{Lambert} location (L{Lcc}) or
|
|
630
|
-
L{EasNor3Tuple}C{(easting, northing, height)}
|
|
631
|
-
C{B{Lcc} is None}.
|
|
627
|
+
@return: The I{Lambert} location (L{Lcc}) or if C{B{Lcc} is None},
|
|
628
|
+
an L{EasNor3Tuple}C{(easting, northing, height)}.
|
|
632
629
|
|
|
633
630
|
@raise TypeError: If B{C{latlon}} is not ellipsoidal.
|
|
634
631
|
'''
|
pygeodesy/ltp.py
CHANGED
|
@@ -44,7 +44,7 @@ from pygeodesy.vector3d import _ALL_LAZY, Vector3d
|
|
|
44
44
|
# from math import fabs, floor as _floor # from .fmath, .fsums
|
|
45
45
|
|
|
46
46
|
__all__ = _ALL_LAZY.ltp
|
|
47
|
-
__version__ = '24.06.
|
|
47
|
+
__version__ = '24.06.11'
|
|
48
48
|
|
|
49
49
|
_height0_ = _height_ + _0_
|
|
50
50
|
_narrow_ = 'narrow'
|
|
@@ -154,7 +154,7 @@ class Attitude(_NamedBase):
|
|
|
154
154
|
additional B{C{Vector}} keyword arguments, ignored if
|
|
155
155
|
C{B{Vector} is None}.
|
|
156
156
|
|
|
157
|
-
@return: A named B{C{Vector}} instance or if B{
|
|
157
|
+
@return: A named B{C{Vector}} instance or if C{B{Vector} is None},
|
|
158
158
|
a named L{Vector3Tuple}C{(x, y, z)}.
|
|
159
159
|
|
|
160
160
|
@raise AttitudeError: Invalid B{C{x_xyz}}, B{C{y}} or B{C{z}}.
|
|
@@ -419,13 +419,12 @@ class LocalCartesian(_NamedBase):
|
|
|
419
419
|
@kwarg latlonh0: The (geodetic) origin (C{LatLon}, L{LatLon4Tuple}, L{Ltp}
|
|
420
420
|
L{LocalCartesian} or L{Ecef9Tuple}) or the C{scalar}
|
|
421
421
|
latitude of the (goedetic) origin (C{degrees}).
|
|
422
|
-
@kwarg lon0: Longitude of the (goedetic) origin (C{degrees})
|
|
423
|
-
B{C{latlonh0}}, ignored otherwise.
|
|
422
|
+
@kwarg lon0: Longitude of the (goedetic) origin (C{degrees}), required if
|
|
423
|
+
B{C{latlonh0}} is C{scalar}, ignored otherwise.
|
|
424
424
|
@kwarg height0: Optional height (C{meter}, conventionally) at the (goedetic)
|
|
425
425
|
origin perpendicular to and above (or below) the ellipsoid's
|
|
426
|
-
surface
|
|
427
|
-
@kwarg ecef: An ECEF converter (L{EcefKarney} I{only})
|
|
428
|
-
B{C{latlonh0}}, ignored otherwise.
|
|
426
|
+
surface, like B{C{lon0}}.
|
|
427
|
+
@kwarg ecef: An ECEF converter (L{EcefKarney} I{only}), like B{C{lon0}}.
|
|
429
428
|
@kwarg lon00_name: Optional C{B{name}=NN} (C{str}) and keyword argument
|
|
430
429
|
C{B{lon00}=B{lon0}} for the arbitrary I{polar} longitude
|
|
431
430
|
(C{degrees}), see method C{reverse} and property C{lon00}
|
|
@@ -1104,7 +1103,7 @@ def tyr3d(tilt=INT0, yaw=INT0, roll=INT0, Vector=Vector3d, **name_Vector_kwds):
|
|
|
1104
1103
|
additional B{C{Vector}} keyword arguments, ignored if
|
|
1105
1104
|
C{B{Vector} is None}.
|
|
1106
1105
|
|
|
1107
|
-
@return: A named B{C{Vector}} instance or if B{
|
|
1106
|
+
@return: A named B{C{Vector}} instance or if C{B{Vector} is None},
|
|
1108
1107
|
a named L{Vector3Tuple}C{(x, y, z)}.
|
|
1109
1108
|
|
|
1110
1109
|
@raise AttitudeError: Invalid B{C{tilt}}, B{C{yaw}} or B{C{roll}}.
|