pygeodesy 24.10.24__py2.py3-none-any.whl → 24.12.12__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.12.12.dist-info}/METADATA +6 -6
- PyGeodesy-24.12.12.dist-info/RECORD +118 -0
- {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.12.12.dist-info}/WHEEL +1 -1
- pygeodesy/__init__.py +5 -5
- pygeodesy/__main__.py +1 -1
- pygeodesy/albers.py +5 -5
- pygeodesy/auxilats/_CX_4.py +1 -1
- pygeodesy/auxilats/_CX_6.py +1 -1
- pygeodesy/auxilats/_CX_8.py +1 -1
- pygeodesy/auxilats/_CX_Rs.py +1 -1
- pygeodesy/auxilats/__init__.py +1 -1
- pygeodesy/auxilats/__main__.py +1 -1
- pygeodesy/auxilats/auxAngle.py +5 -5
- pygeodesy/auxilats/auxDLat.py +6 -6
- pygeodesy/auxilats/auxDST.py +2 -2
- pygeodesy/auxilats/auxLat.py +5 -5
- pygeodesy/auxilats/auxily.py +2 -2
- pygeodesy/azimuthal.py +55 -65
- pygeodesy/basics.py +35 -34
- pygeodesy/booleans.py +37 -37
- pygeodesy/cartesianBase.py +26 -65
- pygeodesy/clipy.py +1 -1
- pygeodesy/constants.py +7 -7
- pygeodesy/css.py +8 -9
- pygeodesy/datums.py +1 -1
- pygeodesy/deprecated/__init__.py +2 -2
- pygeodesy/deprecated/bases.py +1 -1
- pygeodesy/deprecated/classes.py +10 -10
- pygeodesy/deprecated/consterns.py +1 -1
- pygeodesy/deprecated/datum.py +1 -1
- pygeodesy/deprecated/functions.py +23 -13
- pygeodesy/deprecated/nvector.py +1 -1
- pygeodesy/deprecated/rhumbBase.py +1 -1
- pygeodesy/deprecated/rhumbaux.py +1 -1
- pygeodesy/deprecated/rhumbsolve.py +1 -1
- pygeodesy/deprecated/rhumbx.py +1 -1
- pygeodesy/dms.py +1 -1
- pygeodesy/ecef.py +63 -69
- pygeodesy/elevations.py +1 -1
- pygeodesy/ellipsoidalBase.py +106 -121
- pygeodesy/ellipsoidalBaseDI.py +115 -119
- pygeodesy/ellipsoidalExact.py +36 -38
- pygeodesy/ellipsoidalGeodSolve.py +1 -1
- pygeodesy/ellipsoidalKarney.py +1 -1
- pygeodesy/ellipsoidalNvector.py +1 -1
- pygeodesy/ellipsoidalVincenty.py +6 -5
- pygeodesy/ellipsoids.py +7 -8
- pygeodesy/elliptic.py +6 -6
- pygeodesy/epsg.py +1 -1
- pygeodesy/errors.py +25 -25
- pygeodesy/etm.py +84 -76
- pygeodesy/fmath.py +54 -51
- pygeodesy/formy.py +74 -106
- pygeodesy/frechet.py +1 -1
- pygeodesy/fstats.py +1 -1
- pygeodesy/fsums.py +82 -72
- pygeodesy/gars.py +1 -1
- pygeodesy/geodesici.py +4 -4
- pygeodesy/geodesicw.py +16 -15
- pygeodesy/geodesicx/_C4_24.py +2 -2
- pygeodesy/geodesicx/_C4_27.py +2 -2
- pygeodesy/geodesicx/_C4_30.py +2 -2
- pygeodesy/geodesicx/__init__.py +3 -3
- pygeodesy/geodesicx/__main__.py +1 -1
- pygeodesy/geodesicx/gx.py +6 -5
- pygeodesy/geodesicx/gxarea.py +2 -2
- pygeodesy/geodesicx/gxbases.py +2 -2
- pygeodesy/geodesicx/gxline.py +16 -12
- pygeodesy/geodsolve.py +8 -17
- pygeodesy/geohash.py +1 -1
- pygeodesy/geoids.py +6 -6
- pygeodesy/hausdorff.py +1 -1
- pygeodesy/heights.py +3 -3
- pygeodesy/internals.py +64 -80
- pygeodesy/interns.py +2 -3
- pygeodesy/iters.py +1 -1
- pygeodesy/karney.py +4 -4
- pygeodesy/ktm.py +20 -21
- pygeodesy/latlonBase.py +296 -346
- pygeodesy/lazily.py +15 -15
- pygeodesy/lcc.py +5 -5
- pygeodesy/ltp.py +55 -59
- pygeodesy/ltpTuples.py +208 -192
- pygeodesy/mgrs.py +9 -10
- pygeodesy/named.py +153 -3
- pygeodesy/namedTuples.py +58 -7
- pygeodesy/nvectorBase.py +122 -105
- pygeodesy/osgr.py +10 -13
- pygeodesy/points.py +1 -1
- pygeodesy/props.py +3 -3
- pygeodesy/resections.py +26 -26
- pygeodesy/rhumb/__init__.py +2 -2
- pygeodesy/rhumb/aux_.py +2 -2
- pygeodesy/rhumb/bases.py +2 -2
- pygeodesy/rhumb/ekx.py +4 -4
- pygeodesy/rhumb/solve.py +4 -4
- pygeodesy/simplify.py +291 -403
- pygeodesy/solveBase.py +1 -1
- pygeodesy/sphericalBase.py +1 -1
- pygeodesy/sphericalNvector.py +84 -127
- pygeodesy/sphericalTrigonometry.py +66 -71
- pygeodesy/streprs.py +10 -5
- pygeodesy/trf.py +1 -1
- pygeodesy/triaxials.py +23 -16
- pygeodesy/units.py +17 -17
- pygeodesy/unitsBase.py +1 -1
- pygeodesy/ups.py +4 -4
- pygeodesy/utily.py +202 -145
- pygeodesy/utm.py +10 -10
- pygeodesy/utmups.py +1 -1
- pygeodesy/utmupsBase.py +1 -1
- pygeodesy/vector2d.py +17 -17
- pygeodesy/vector3d.py +32 -23
- pygeodesy/vector3dBase.py +22 -19
- pygeodesy/webmercator.py +5 -5
- pygeodesy/wgrs.py +5 -5
- PyGeodesy-24.10.24.dist-info/RECORD +0 -118
- {PyGeodesy-24.10.24.dist-info → PyGeodesy-24.12.12.dist-info}/top_level.txt +0 -0
pygeodesy/ecef.py
CHANGED
|
@@ -73,20 +73,23 @@ from pygeodesy.interns import NN, _a_, _C_, _datum_, _ellipsoid_, _f_, _height_,
|
|
|
73
73
|
_lat_, _lon_, _M_, _name_, _singular_, _SPACE_, \
|
|
74
74
|
_x_, _xyz_, _y_, _z_
|
|
75
75
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
76
|
-
from pygeodesy.named import _name__, _name1__, _NamedBase,
|
|
76
|
+
from pygeodesy.named import _name__, _name1__, _NamedBase, _NamedLocal, \
|
|
77
|
+
_NamedTuple, _Pass, _xnamed
|
|
77
78
|
from pygeodesy.namedTuples import LatLon2Tuple, LatLon3Tuple, \
|
|
78
79
|
PhiLam2Tuple, Vector3Tuple, Vector4Tuple
|
|
79
|
-
from pygeodesy.props import deprecated_method, Property_RO,
|
|
80
|
+
from pygeodesy.props import deprecated_method, Property_RO, property_RO, \
|
|
81
|
+
property_ROver, property_doc_
|
|
80
82
|
# from pygeodesy.streprs import Fmt, unstr # from .fsums
|
|
81
83
|
from pygeodesy.units import _isRadius, Degrees, Height, Int, Lam, Lat, Lon, Meter, \
|
|
82
84
|
Phi, Scalar, Scalar_
|
|
83
|
-
from pygeodesy.utily import atan1, atan1d, atan2d, degrees90, degrees180, \
|
|
85
|
+
from pygeodesy.utily import atan1, atan1d, atan2, atan2d, degrees90, degrees180, \
|
|
84
86
|
sincos2, sincos2_, sincos2d, sincos2d_
|
|
87
|
+
# from pygeodesy.vector3d import Vector3d # _MODS
|
|
85
88
|
|
|
86
|
-
from math import
|
|
89
|
+
from math import cos, degrees, fabs, radians, sqrt
|
|
87
90
|
|
|
88
91
|
__all__ = _ALL_LAZY.ecef
|
|
89
|
-
__version__ = '24.06
|
|
92
|
+
__version__ = '24.12.06'
|
|
90
93
|
|
|
91
94
|
_Ecef_ = 'Ecef'
|
|
92
95
|
_prolate_ = 'prolate'
|
|
@@ -266,7 +269,7 @@ class _EcefBase(_NamedBase):
|
|
|
266
269
|
'''(INTERNAL) Get the valid geocentric classes. I{once}.
|
|
267
270
|
'''
|
|
268
271
|
return (Ecef9Tuple, # overwrite property_ROver
|
|
269
|
-
_MODS.cartesianBase.CartesianBase
|
|
272
|
+
_MODS.vector3d.Vector3d) # _MODS.cartesianBase.CartesianBase
|
|
270
273
|
|
|
271
274
|
@Property_RO
|
|
272
275
|
def _isYou(self):
|
|
@@ -326,7 +329,8 @@ class EcefFarrell21(_EcefBase):
|
|
|
326
329
|
def reverse(self, xyz, y=None, z=None, M=None, **lon00_name): # PYCHOK unused M
|
|
327
330
|
'''Convert from geocentric C{(x, y, z)} to geodetic C{(lat, lon, height)} using
|
|
328
331
|
I{Farrell}'s U{Table 2.1<https://Books.Google.com/books?id=fW4foWASY6wC>},
|
|
329
|
-
page 29
|
|
332
|
+
page 29, aka the I{Heikkinen application} of U{Ferrari's solution
|
|
333
|
+
<https://WikiPedia.org/wiki/Geographic_coordinate_conversion>}.
|
|
330
334
|
|
|
331
335
|
@arg xyz: A geocentric (C{Cartesian}, L{Ecef9Tuple}) or C{scalar} ECEF C{x}
|
|
332
336
|
coordinate (C{meter}).
|
|
@@ -366,9 +370,9 @@ class EcefFarrell21(_EcefBase):
|
|
|
366
370
|
p2 = p**2
|
|
367
371
|
G = p2 + ez - e2 * (a2 - b2) # p2 + ez - e4 * a2
|
|
368
372
|
F = b2 * z2 * 54
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
G *= fsumf_(
|
|
373
|
+
c = e4 * p2 * F / G**3
|
|
374
|
+
s = cbrt(sqrt(c * (c + _2_0)) + c + _1_0)
|
|
375
|
+
G *= fsumf_(s , _1_0, _1_0 / s) # k
|
|
372
376
|
P = F / (G**2 * _3_0)
|
|
373
377
|
Q = sqrt(_2_0 * e4 * P + _1_0)
|
|
374
378
|
Q1 = Q + _1_0
|
|
@@ -376,15 +380,15 @@ class EcefFarrell21(_EcefBase):
|
|
|
376
380
|
-P * ez / (Q * Q1),
|
|
377
381
|
-P * p2 * _0_5))
|
|
378
382
|
r = p + e2 * r0
|
|
379
|
-
v = b2 / (sqrt(r**2 + ez) * a)
|
|
383
|
+
v = b2 / (sqrt(r**2 + ez) * a) # z0 / z
|
|
380
384
|
|
|
381
385
|
h = hypot(r, z) * (_1_0 - v)
|
|
382
386
|
lat = atan1d((e2_ * v + _1_0) * z, p)
|
|
383
387
|
lon = self._polon(y, x, p, **lon00_name)
|
|
384
388
|
# note, phi and lam are swapped on page 29
|
|
385
389
|
|
|
386
|
-
except (ValueError, ZeroDivisionError) as
|
|
387
|
-
raise EcefError(x=x, y=y, z=z, cause=
|
|
390
|
+
except (ValueError, ZeroDivisionError) as X:
|
|
391
|
+
raise EcefError(x=x, y=y, z=z, cause=X)
|
|
388
392
|
|
|
389
393
|
return Ecef9Tuple(x, y, z, lat, lon, h,
|
|
390
394
|
1, None, self.datum,
|
|
@@ -638,9 +642,8 @@ class EcefSudano(_EcefBase):
|
|
|
638
642
|
R = hypot(x, y) # Rh
|
|
639
643
|
d = e - R
|
|
640
644
|
|
|
641
|
-
_a = fabs
|
|
642
645
|
lat = atan1d(z, R * E.e21)
|
|
643
|
-
sa, ca = sincos2d(
|
|
646
|
+
sa, ca = sincos2d(fabs(lat))
|
|
644
647
|
# Sudano's Eq (A-6) and (A-7) refactored/reduced,
|
|
645
648
|
# replacing Rn from Eq (A-4) with n = E.a / ca:
|
|
646
649
|
# N = ca**2 * ((z + E.e2 * n * sa) * ca - R * sa)
|
|
@@ -650,32 +653,30 @@ class EcefSudano(_EcefBase):
|
|
|
650
653
|
# = ca**2 * (E.e2 * E.a / E.e2s2(sa) - R / ca**2)
|
|
651
654
|
# N / D = (z * ca + (E.e2 * E.a - R) * sa) /
|
|
652
655
|
# (E.e2 * E.a / E.e2s2(sa) - R / ca**2)
|
|
653
|
-
_E = EPS_2
|
|
654
656
|
tol = self.tolerance
|
|
655
657
|
_S2 = Fsum(sa).fsum2f_
|
|
656
|
-
_rt = sqrt
|
|
657
658
|
for i in range(1, _TRIPS):
|
|
658
659
|
ca2 = _1_0 - sa**2
|
|
659
|
-
if ca2 <
|
|
660
|
+
if ca2 < EPS_2: # PYCHOK no cover
|
|
660
661
|
ca = _0_0
|
|
661
662
|
break
|
|
662
|
-
ca =
|
|
663
|
+
ca = sqrt(ca2)
|
|
663
664
|
r = e / E.e2s2(sa) - R / ca2
|
|
664
|
-
if
|
|
665
|
+
if fabs(r) < EPS_2:
|
|
665
666
|
break
|
|
666
667
|
lat = None
|
|
667
|
-
sa,
|
|
668
|
-
if
|
|
668
|
+
sa, t = _S2(-z * ca / r, -d * sa / r)
|
|
669
|
+
if fabs(t) < tol:
|
|
669
670
|
break
|
|
670
671
|
else:
|
|
671
672
|
t = unstr(self.reverse, x=x, y=y, z=z)
|
|
672
673
|
raise EcefError(t, txt=Fmt.no_convergence(r, tol))
|
|
673
674
|
|
|
674
675
|
if lat is None:
|
|
675
|
-
lat = copysign0(atan1d(
|
|
676
|
+
lat = copysign0(atan1d(fabs(sa), ca), z)
|
|
676
677
|
lon = self._polon(y, x, R, **lon00_name)
|
|
677
678
|
|
|
678
|
-
h = fsumf_(R * ca,
|
|
679
|
+
h = fsumf_(R * ca, fabs(z * sa), -E.a * E.e2s(sa)) # use Veness'
|
|
679
680
|
# because Sudano's Eq (7) doesn't produce the correct height
|
|
680
681
|
# h = (fabs(z) + R - E.a * cos(a + E.e21) * sa / ca) / (ca + sa)
|
|
681
682
|
return Ecef9Tuple(x, y, z, lat, lon, h,
|
|
@@ -1017,12 +1018,12 @@ class EcefMatrix(_NamedTuple):
|
|
|
1017
1018
|
return xyz_
|
|
1018
1019
|
|
|
1019
1020
|
|
|
1020
|
-
class Ecef9Tuple(_NamedTuple):
|
|
1021
|
-
'''9-Tuple C{(x, y, z, lat, lon, height, C, M, datum)} with I{geocentric}
|
|
1022
|
-
C{
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
C{
|
|
1021
|
+
class Ecef9Tuple(_NamedTuple, _NamedLocal):
|
|
1022
|
+
'''9-Tuple C{(x, y, z, lat, lon, height, C, M, datum)} with I{geocentric} C{x},
|
|
1023
|
+
C{y} and C{z} plus I{geodetic} C{lat}, C{lon} and C{height}, case C{C} (see
|
|
1024
|
+
the C{Ecef*.reverse} methods) and optionally, rotation matrix C{M} (L{EcefMatrix})
|
|
1025
|
+
and C{datum}, with C{lat} and C{lon} in C{degrees} and C{x}, C{y}, C{z} and
|
|
1026
|
+
C{height} in C{meter}, conventionally.
|
|
1026
1027
|
'''
|
|
1027
1028
|
_Names_ = (_x_, _y_, _z_, _lat_, _lon_, _height_, _C_, _M_, _datum_)
|
|
1028
1029
|
_Units_ = ( Meter, Meter, Meter, Lat, Lon, Height, Int, _Pass, _Pass)
|
|
@@ -1038,6 +1039,10 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1038
1039
|
'''DEPRECATED, use method L{toDatum}.'''
|
|
1039
1040
|
return self.toDatum(datum2)
|
|
1040
1041
|
|
|
1042
|
+
@property_RO
|
|
1043
|
+
def _ecef9(self):
|
|
1044
|
+
return self
|
|
1045
|
+
|
|
1041
1046
|
@Property_RO
|
|
1042
1047
|
def lam(self):
|
|
1043
1048
|
'''Get the longitude in C{radians} (C{float}).
|
|
@@ -1091,12 +1096,19 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1091
1096
|
@Property_RO
|
|
1092
1097
|
def lonVermeille(self):
|
|
1093
1098
|
'''Get the longitude in C{degrees [-225..+225]} after U{Vermeille
|
|
1094
|
-
<https://Search.ProQuest.com/docview/639493848>}
|
|
1099
|
+
<https://Search.ProQuest.com/docview/639493848>} 2004, p 95.
|
|
1095
1100
|
|
|
1096
1101
|
@see: Property C{lamVermeille}.
|
|
1097
1102
|
'''
|
|
1098
1103
|
return Lon(Vermeille=degrees(self.lamVermeille))
|
|
1099
1104
|
|
|
1105
|
+
def _ltp_toLocal(self, ltp, Cls_and_kwds, **nam_Cls): # for C{_NamedLocal}
|
|
1106
|
+
'''(INTERNAL) Invoke C{ltp._xLtp(ltp)._ecef2local}.
|
|
1107
|
+
'''
|
|
1108
|
+
Cls, kwds = self._ltp_toLocal2(Cls_and_kwds, **nam_Cls) # in ._NamedLocal
|
|
1109
|
+
ltp = self._ltp._xLtp(ltp, self._Ltp) # both in ._NamedLocal
|
|
1110
|
+
return ltp._ecef2local(self, Cls, kwds)
|
|
1111
|
+
|
|
1100
1112
|
@Property_RO
|
|
1101
1113
|
def phi(self):
|
|
1102
1114
|
'''Get the latitude in C{radians} (C{float}).
|
|
@@ -1137,13 +1149,13 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1137
1149
|
L{ellipsoidalNvector.Cartesian}, L{ellipsoidalVincenty.Cartesian},
|
|
1138
1150
|
L{sphericalNvector.Cartesian} or L{sphericalTrigonometry.Cartesian})
|
|
1139
1151
|
or C{None}.
|
|
1140
|
-
@kwarg Cartesian_kwds:
|
|
1152
|
+
@kwarg Cartesian_kwds: Optionally, additional B{C{Cartesian}} keyword arguments, ignored
|
|
1141
1153
|
if C{B{Cartesian} is None}.
|
|
1142
1154
|
|
|
1143
|
-
@return: A C{
|
|
1144
|
-
|
|
1155
|
+
@return: A B{C{Cartesian}} instance or a L{Vector4Tuple}C{(x, y, z, h)} if C{B{Cartesian}
|
|
1156
|
+
is None}.
|
|
1145
1157
|
|
|
1146
|
-
@raise TypeError: Invalid B{C{Cartesian}} or B{C{Cartesian_kwds}}.
|
|
1158
|
+
@raise TypeError: Invalid B{C{Cartesian}} or B{C{Cartesian_kwds}} item.
|
|
1147
1159
|
'''
|
|
1148
1160
|
if Cartesian in (None, Vector4Tuple):
|
|
1149
1161
|
r = self.xyzh
|
|
@@ -1177,17 +1189,15 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1177
1189
|
def toLatLon(self, LatLon=None, **LatLon_kwds):
|
|
1178
1190
|
'''Return the geodetic C{(lat, lon, height[, datum])} coordinates.
|
|
1179
1191
|
|
|
1180
|
-
@kwarg LatLon: Optional class to return C{(lat, lon, height[, datum])}
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
B{C{LatLon}} keyword arguments.
|
|
1192
|
+
@kwarg LatLon: Optional class to return C{(lat, lon, height[, datum])} or C{None}.
|
|
1193
|
+
@kwarg LatLon_kwds: Optional B{C{height}}, B{C{datum}} and other B{C{LatLon}}
|
|
1194
|
+
keyword arguments.
|
|
1184
1195
|
|
|
1185
|
-
@return:
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
datum)} depending on whether C{datum} is un-/specified.
|
|
1196
|
+
@return: A B{C{LatLon}} instance or if C{B{LatLon} is None}, a L{LatLon4Tuple}C{(lat,
|
|
1197
|
+
lon, height, datum)} or L{LatLon3Tuple}C{(lat, lon, height)} if C{datum} is
|
|
1198
|
+
specified or not.
|
|
1189
1199
|
|
|
1190
|
-
@raise TypeError: Invalid B{C{LatLon}} or B{C{LatLon_kwds}}.
|
|
1200
|
+
@raise TypeError: Invalid B{C{LatLon}} or B{C{LatLon_kwds}} item.
|
|
1191
1201
|
'''
|
|
1192
1202
|
lat, lon, D = self.lat, self.lon, self.datum # PYCHOK Ecef9Tuple
|
|
1193
1203
|
kwds = _name1__(LatLon_kwds, _or_nameof=self)
|
|
@@ -1205,33 +1215,17 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1205
1215
|
_xdatum(_xattr(r, datum=D), D)
|
|
1206
1216
|
return r
|
|
1207
1217
|
|
|
1208
|
-
def toLocal(self, ltp, Xyz=None, **Xyz_kwds):
|
|
1209
|
-
'''Convert this geocentric to I{local} C{x}, C{y} and C{z}.
|
|
1210
|
-
|
|
1211
|
-
@kwarg ltp: The I{local tangent plane} (LTP) to use (L{Ltp}).
|
|
1212
|
-
@kwarg Xyz: Optional class to return C{x}, C{y} and C{z}
|
|
1213
|
-
(L{XyzLocal}, L{Enu}, L{Ned}) or C{None}.
|
|
1214
|
-
@kwarg Xyz_kwds: Optional, additional B{C{Xyz}} keyword
|
|
1215
|
-
arguments, ignored if C{B{Xyz} is None}.
|
|
1216
|
-
|
|
1217
|
-
@return: An B{C{Xyz}} instance or if C{B{Xyz} is None},
|
|
1218
|
-
a L{Local9Tuple}C{(x, y, z, lat, lon, height,
|
|
1219
|
-
ltp, ecef, M)} with C{M=None}, always.
|
|
1220
|
-
|
|
1221
|
-
@raise TypeError: Invalid B{C{ltp}}.
|
|
1222
|
-
'''
|
|
1223
|
-
return _MODS.ltp._xLtp(ltp)._ecef2local(self, Xyz, Xyz_kwds)
|
|
1224
|
-
|
|
1225
1218
|
def toVector(self, Vector=None, **Vector_kwds):
|
|
1226
|
-
'''Return
|
|
1219
|
+
'''Return these geocentric C{(x, y, z)} coordinates as vector.
|
|
1220
|
+
|
|
1221
|
+
@kwarg Vector: Optional vector class to return C{(x, y, z)} or C{None}.
|
|
1222
|
+
@kwarg Vector_kwds: Optional, additional B{C{Vector}} keyword arguments,
|
|
1223
|
+
ignored if C{B{Vector} is None}.
|
|
1227
1224
|
|
|
1228
|
-
@
|
|
1229
|
-
|
|
1230
|
-
@kwarg Vector_kwds: Optional, additional B{C{Vector}} keyword
|
|
1231
|
-
arguments, ignored if C{B{Vector} is None}.
|
|
1225
|
+
@return: A B{C{Vector}} instance or a L{Vector3Tuple}C{(x, y, z)} if
|
|
1226
|
+
C{B{Vector} is None}.
|
|
1232
1227
|
|
|
1233
|
-
@
|
|
1234
|
-
L{Vector3Tuple}C{(x, y, z)} if C{B{Vector} is None}.
|
|
1228
|
+
@raise TypeError: Invalid B{C{Vector}} or B{C{Vector_kwds}} item.
|
|
1235
1229
|
|
|
1236
1230
|
@see: Propertes C{xyz} and C{xyzh}
|
|
1237
1231
|
'''
|
|
@@ -1319,7 +1313,7 @@ __all__ += _ALL_DOCS(_EcefBase)
|
|
|
1319
1313
|
|
|
1320
1314
|
# **) MIT License
|
|
1321
1315
|
#
|
|
1322
|
-
# Copyright (C) 2016-
|
|
1316
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1323
1317
|
#
|
|
1324
1318
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1325
1319
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/elevations.py
CHANGED
|
@@ -254,7 +254,7 @@ if __name__ == '__main__':
|
|
|
254
254
|
|
|
255
255
|
# **) MIT License
|
|
256
256
|
#
|
|
257
|
-
# Copyright (C) 2016-
|
|
257
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
258
258
|
#
|
|
259
259
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
260
260
|
# copy of this software and associated documentation files (the "Software"),
|