pygeodesy 24.11.11__py2.py3-none-any.whl → 25.1.5__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.11.11.dist-info → PyGeodesy-25.1.5.dist-info}/METADATA +34 -35
- PyGeodesy-25.1.5.dist-info/RECORD +118 -0
- {PyGeodesy-24.11.11.dist-info → PyGeodesy-25.1.5.dist-info}/WHEEL +1 -1
- pygeodesy/__init__.py +19 -19
- 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 +5 -5
- pygeodesy/basics.py +60 -8
- pygeodesy/booleans.py +1 -1
- pygeodesy/cartesianBase.py +22 -61
- pygeodesy/clipy.py +1 -1
- pygeodesy/constants.py +5 -5
- pygeodesy/css.py +1 -1
- pygeodesy/datums.py +1 -1
- pygeodesy/deprecated/__init__.py +2 -2
- pygeodesy/deprecated/bases.py +1 -1
- pygeodesy/deprecated/classes.py +86 -2
- pygeodesy/deprecated/consterns.py +1 -1
- pygeodesy/deprecated/datum.py +5 -5
- pygeodesy/deprecated/functions.py +42 -8
- 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 +53 -56
- pygeodesy/elevations.py +1 -1
- pygeodesy/ellipsoidalBase.py +3 -3
- pygeodesy/ellipsoidalBaseDI.py +1 -1
- pygeodesy/ellipsoidalExact.py +1 -1
- pygeodesy/ellipsoidalGeodSolve.py +1 -1
- pygeodesy/ellipsoidalKarney.py +1 -1
- pygeodesy/ellipsoidalNvector.py +1 -1
- pygeodesy/ellipsoidalVincenty.py +6 -5
- pygeodesy/ellipsoids.py +4 -5
- pygeodesy/elliptic.py +6 -6
- pygeodesy/epsg.py +1 -1
- pygeodesy/errors.py +1 -1
- pygeodesy/etm.py +5 -5
- pygeodesy/fmath.py +18 -17
- pygeodesy/formy.py +409 -555
- pygeodesy/frechet.py +29 -86
- pygeodesy/fstats.py +1 -1
- pygeodesy/fsums.py +32 -33
- pygeodesy/gars.py +1 -1
- pygeodesy/geodesici.py +7 -7
- pygeodesy/geodesicw.py +1 -1
- 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 +2 -2
- pygeodesy/geodesicx/__main__.py +4 -5
- 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 +1 -1
- pygeodesy/geohash.py +1 -1
- pygeodesy/geoids.py +277 -203
- pygeodesy/hausdorff.py +23 -81
- pygeodesy/heights.py +115 -150
- pygeodesy/internals.py +1 -1
- pygeodesy/interns.py +2 -3
- pygeodesy/iters.py +1 -1
- pygeodesy/karney.py +3 -3
- pygeodesy/ktm.py +16 -15
- pygeodesy/latlonBase.py +323 -409
- pygeodesy/lazily.py +53 -44
- pygeodesy/lcc.py +1 -1
- pygeodesy/ltp.py +46 -50
- pygeodesy/ltpTuples.py +147 -130
- pygeodesy/mgrs.py +1 -1
- pygeodesy/named.py +149 -3
- pygeodesy/namedTuples.py +58 -7
- pygeodesy/nvectorBase.py +122 -105
- pygeodesy/osgr.py +1 -1
- pygeodesy/points.py +1 -1
- pygeodesy/props.py +1 -1
- pygeodesy/resections.py +18 -17
- pygeodesy/rhumb/__init__.py +1 -1
- pygeodesy/rhumb/aux_.py +2 -2
- pygeodesy/rhumb/bases.py +2 -2
- pygeodesy/rhumb/ekx.py +4 -4
- pygeodesy/rhumb/solve.py +1 -1
- pygeodesy/simplify.py +289 -401
- pygeodesy/solveBase.py +1 -1
- pygeodesy/sphericalBase.py +1 -1
- pygeodesy/sphericalNvector.py +5 -5
- pygeodesy/sphericalTrigonometry.py +7 -6
- pygeodesy/streprs.py +10 -5
- pygeodesy/trf.py +1 -1
- pygeodesy/triaxials.py +23 -16
- pygeodesy/units.py +16 -16
- pygeodesy/unitsBase.py +1 -1
- pygeodesy/ups.py +4 -4
- pygeodesy/utily.py +341 -211
- pygeodesy/utm.py +5 -5
- pygeodesy/utmups.py +1 -1
- pygeodesy/utmupsBase.py +1 -1
- pygeodesy/vector2d.py +5 -5
- pygeodesy/vector3d.py +14 -3
- pygeodesy/vector3dBase.py +5 -5
- pygeodesy/webmercator.py +1 -1
- pygeodesy/wgrs.py +1 -1
- PyGeodesy-24.11.11.dist-info/RECORD +0 -118
- {PyGeodesy-24.11.11.dist-info → PyGeodesy-25.1.5.dist-info}/top_level.txt +0 -0
|
@@ -11,10 +11,10 @@ from pygeodesy.interns import NN, _area_, _COMMASPACE_, _negative_, \
|
|
|
11
11
|
from pygeodesy.lazily import _ALL_DEPRECATED, _ALL_MODS as _MODS
|
|
12
12
|
from pygeodesy.props import deprecated_function
|
|
13
13
|
# from pygeodesy.resections import TriAngle5Tuple as _TriAngle5Tuple # from .classes
|
|
14
|
-
from pygeodesy.units import Number_, Scalar_
|
|
14
|
+
from pygeodesy.units import _1mm, Number_, Scalar_
|
|
15
15
|
|
|
16
16
|
__all__ = _ALL_DEPRECATED.deprecated_functions
|
|
17
|
-
__version__ = '24.
|
|
17
|
+
__version__ = '24.12.31'
|
|
18
18
|
|
|
19
19
|
_WGS84 = _UTM = object()
|
|
20
20
|
|
|
@@ -84,6 +84,30 @@ def copysign(x, y): # PYCHOK no cover
|
|
|
84
84
|
return _MODS.basics.copysign0(x, y)
|
|
85
85
|
|
|
86
86
|
|
|
87
|
+
@deprecated_function
|
|
88
|
+
def cosineAndoyerLambert(lat1, lon1, lat2, lon2, **datum_wrap):
|
|
89
|
+
'''DEPRECATED on 2024.12.31, use function L{pygeodesy.cosineLaw} with C{B{corr}=1}.'''
|
|
90
|
+
return _MODS.formy.cosineLaw(lat1, lon1, lat2, lon2, corr=1, **datum_wrap)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@deprecated_function
|
|
94
|
+
def cosineAndoyerLambert_(phi2, phi1, lam21, **datum):
|
|
95
|
+
'''DEPRECATED on 2024.12.31, use function L{pygeodesy.cosineLaw_} with C{B{corr}=1}.'''
|
|
96
|
+
return _MODS.formy.cosineLaw_(phi2, phi1, lam21, corr=1, **datum)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@deprecated_function
|
|
100
|
+
def cosineForsytheAndoyerLambert(lat1, lon1, lat2, lon2, **datum_wrap):
|
|
101
|
+
'''DEPRECATED on 2024.12.31, use function L{pygeodesy.cosineLaw} with C{B{corr}=2}.'''
|
|
102
|
+
return _MODS.formy.cosineLaw(lat1, lon1, lat2, lon2, corr=2, **datum_wrap)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
@deprecated_function
|
|
106
|
+
def cosineForsytheAndoyerLambert_(phi2, phi1, lam21, **datum):
|
|
107
|
+
'''DEPRECATED on 2024.12.31, use function L{pygeodesy.cosineLaw_} with C{B{corr}=2}.'''
|
|
108
|
+
return _MODS.formy.cosineLaw_(phi2, phi1, lam21, corr=2, **datum)
|
|
109
|
+
|
|
110
|
+
|
|
87
111
|
@deprecated_function
|
|
88
112
|
def decodeEPSG2(arg): # PYCHOK no cover
|
|
89
113
|
'''DEPRECATED, use function L{epsg.decode2}.
|
|
@@ -295,11 +319,21 @@ def scalar(value, low=EPS, high=1.0, name=_scalar_, Error=ValueError): # PYCHOK
|
|
|
295
319
|
|
|
296
320
|
|
|
297
321
|
@deprecated_function
|
|
298
|
-
def simplify2(points, pipe
|
|
299
|
-
'''DEPRECATED, use function L{pygeodesy.simplifyRW}.
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
322
|
+
def simplify2(points, pipe=_1mm, **radius_shortest_indices_options): # PYCHOK no cover
|
|
323
|
+
'''DEPRECATED, use function L{pygeodesy.simplifyRW}.'''
|
|
324
|
+
return _MODS.simplify.simplifyRW(points, pipe=pipe, **radius_shortest_indices_options)
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
@deprecated_function
|
|
328
|
+
def simplifyRDPm(points, distance=_1mm, **radius_shortest_indices_options):
|
|
329
|
+
'''DEPRECATED on 2024.11.28, use function L{pygeodesy.simplifyRDP}C{(points, modified=True, ...)}.'''
|
|
330
|
+
return _MODS.simplify.simplifyRDP(points, modified=True, distance=distance, **radius_shortest_indices_options)
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
@deprecated_function
|
|
334
|
+
def simplifyVWm(points, area=_1mm, **radius_attr_indices_options):
|
|
335
|
+
'''DEPRECATED on 2024.11.28, use function L{pygeodesy.simplifyVW}C{(points, modified=True, ...)}.'''
|
|
336
|
+
return _MODS.simplify.simplifyVW(points, modified=True, area=area, **radius_attr_indices_options)
|
|
303
337
|
|
|
304
338
|
|
|
305
339
|
@deprecated_function
|
|
@@ -366,7 +400,7 @@ def utmZoneBand2(lat, lon): # PYCHOK no cover
|
|
|
366
400
|
|
|
367
401
|
# **) MIT License
|
|
368
402
|
#
|
|
369
|
-
# Copyright (C) 2018-
|
|
403
|
+
# Copyright (C) 2018-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
370
404
|
#
|
|
371
405
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
372
406
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/deprecated/nvector.py
CHANGED
|
@@ -27,7 +27,7 @@ assert (_ALL_OTHER(LatLonNvectorBase, Nvector, sumOf) +
|
|
|
27
27
|
|
|
28
28
|
# **) MIT License
|
|
29
29
|
#
|
|
30
|
-
# Copyright (C) 2016-
|
|
30
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
31
31
|
#
|
|
32
32
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
33
33
|
# copy of this software and associated documentation files (the "Software"),
|
|
@@ -11,7 +11,7 @@ __version__ = '23.11.26'
|
|
|
11
11
|
|
|
12
12
|
# **) MIT License
|
|
13
13
|
#
|
|
14
|
-
# Copyright (C) 2016-
|
|
14
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
15
15
|
#
|
|
16
16
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
17
17
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/deprecated/rhumbaux.py
CHANGED
|
@@ -12,7 +12,7 @@ __version__ = '23.12.02'
|
|
|
12
12
|
|
|
13
13
|
# **) MIT License
|
|
14
14
|
#
|
|
15
|
-
# Copyright (C) 2016-
|
|
15
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
16
16
|
#
|
|
17
17
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
18
18
|
# copy of this software and associated documentation files (the "Software"),
|
|
@@ -12,7 +12,7 @@ __version__ = '23.11.26'
|
|
|
12
12
|
|
|
13
13
|
# **) MIT License
|
|
14
14
|
#
|
|
15
|
-
# Copyright (C) 2016-
|
|
15
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
16
16
|
#
|
|
17
17
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
18
18
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/deprecated/rhumbx.py
CHANGED
|
@@ -12,7 +12,7 @@ __version__ = '23.11.30'
|
|
|
12
12
|
|
|
13
13
|
# **) MIT License
|
|
14
14
|
#
|
|
15
|
-
# Copyright (C) 2016-
|
|
15
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
16
16
|
#
|
|
17
17
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
18
18
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/dms.py
CHANGED
|
@@ -941,7 +941,7 @@ def toDMS(deg, form=_F_DMS, prec=2, sep=S_SEP, ddd=2, neg=_MINUS_, pos=_PLUS_, *
|
|
|
941
941
|
|
|
942
942
|
# **) MIT License
|
|
943
943
|
#
|
|
944
|
-
# Copyright (C) 2016-
|
|
944
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
945
945
|
#
|
|
946
946
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
947
947
|
# copy of this software and associated documentation files (the "Software"),
|
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.
|
|
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,7 +380,7 @@ 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)
|
|
@@ -1014,12 +1018,12 @@ class EcefMatrix(_NamedTuple):
|
|
|
1014
1018
|
return xyz_
|
|
1015
1019
|
|
|
1016
1020
|
|
|
1017
|
-
class Ecef9Tuple(_NamedTuple):
|
|
1018
|
-
'''9-Tuple C{(x, y, z, lat, lon, height, C, M, datum)} with I{geocentric}
|
|
1019
|
-
C{
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
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.
|
|
1023
1027
|
'''
|
|
1024
1028
|
_Names_ = (_x_, _y_, _z_, _lat_, _lon_, _height_, _C_, _M_, _datum_)
|
|
1025
1029
|
_Units_ = ( Meter, Meter, Meter, Lat, Lon, Height, Int, _Pass, _Pass)
|
|
@@ -1035,6 +1039,10 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1035
1039
|
'''DEPRECATED, use method L{toDatum}.'''
|
|
1036
1040
|
return self.toDatum(datum2)
|
|
1037
1041
|
|
|
1042
|
+
@property_RO
|
|
1043
|
+
def _ecef9(self):
|
|
1044
|
+
return self
|
|
1045
|
+
|
|
1038
1046
|
@Property_RO
|
|
1039
1047
|
def lam(self):
|
|
1040
1048
|
'''Get the longitude in C{radians} (C{float}).
|
|
@@ -1088,12 +1096,19 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1088
1096
|
@Property_RO
|
|
1089
1097
|
def lonVermeille(self):
|
|
1090
1098
|
'''Get the longitude in C{degrees [-225..+225]} after U{Vermeille
|
|
1091
|
-
<https://Search.ProQuest.com/docview/639493848>}
|
|
1099
|
+
<https://Search.ProQuest.com/docview/639493848>} 2004, p 95.
|
|
1092
1100
|
|
|
1093
1101
|
@see: Property C{lamVermeille}.
|
|
1094
1102
|
'''
|
|
1095
1103
|
return Lon(Vermeille=degrees(self.lamVermeille))
|
|
1096
1104
|
|
|
1105
|
+
def _ltp_toLocal(self, ltp, Xyz_kwds, **Xyz): # overloads C{_NamedLocal}'s
|
|
1106
|
+
'''(INTERNAL) Invoke C{ltp._xLtp(ltp)._ecef2local}.
|
|
1107
|
+
'''
|
|
1108
|
+
Xyz_ = self._ltp_toLocal2(Xyz_kwds, **Xyz) # in ._NamedLocal
|
|
1109
|
+
ltp = self._ltp._xLtp(ltp, self._Ltp) # both in ._NamedLocal
|
|
1110
|
+
return ltp._ecef2local(self, *Xyz_)
|
|
1111
|
+
|
|
1097
1112
|
@Property_RO
|
|
1098
1113
|
def phi(self):
|
|
1099
1114
|
'''Get the latitude in C{radians} (C{float}).
|
|
@@ -1134,13 +1149,13 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1134
1149
|
L{ellipsoidalNvector.Cartesian}, L{ellipsoidalVincenty.Cartesian},
|
|
1135
1150
|
L{sphericalNvector.Cartesian} or L{sphericalTrigonometry.Cartesian})
|
|
1136
1151
|
or C{None}.
|
|
1137
|
-
@kwarg Cartesian_kwds:
|
|
1152
|
+
@kwarg Cartesian_kwds: Optionally, additional B{C{Cartesian}} keyword arguments, ignored
|
|
1138
1153
|
if C{B{Cartesian} is None}.
|
|
1139
1154
|
|
|
1140
|
-
@return: A C{
|
|
1141
|
-
|
|
1155
|
+
@return: A B{C{Cartesian}} instance or a L{Vector4Tuple}C{(x, y, z, h)} if C{B{Cartesian}
|
|
1156
|
+
is None}.
|
|
1142
1157
|
|
|
1143
|
-
@raise TypeError: Invalid B{C{Cartesian}} or B{C{Cartesian_kwds}}.
|
|
1158
|
+
@raise TypeError: Invalid B{C{Cartesian}} or B{C{Cartesian_kwds}} item.
|
|
1144
1159
|
'''
|
|
1145
1160
|
if Cartesian in (None, Vector4Tuple):
|
|
1146
1161
|
r = self.xyzh
|
|
@@ -1174,17 +1189,15 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1174
1189
|
def toLatLon(self, LatLon=None, **LatLon_kwds):
|
|
1175
1190
|
'''Return the geodetic C{(lat, lon, height[, datum])} coordinates.
|
|
1176
1191
|
|
|
1177
|
-
@kwarg LatLon: Optional class to return C{(lat, lon, height[, datum])}
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
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.
|
|
1181
1195
|
|
|
1182
|
-
@return:
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
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.
|
|
1186
1199
|
|
|
1187
|
-
@raise TypeError: Invalid B{C{LatLon}} or B{C{LatLon_kwds}}.
|
|
1200
|
+
@raise TypeError: Invalid B{C{LatLon}} or B{C{LatLon_kwds}} item.
|
|
1188
1201
|
'''
|
|
1189
1202
|
lat, lon, D = self.lat, self.lon, self.datum # PYCHOK Ecef9Tuple
|
|
1190
1203
|
kwds = _name1__(LatLon_kwds, _or_nameof=self)
|
|
@@ -1202,33 +1215,17 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1202
1215
|
_xdatum(_xattr(r, datum=D), D)
|
|
1203
1216
|
return r
|
|
1204
1217
|
|
|
1205
|
-
def toLocal(self, ltp, Xyz=None, **Xyz_kwds):
|
|
1206
|
-
'''Convert this geocentric to I{local} C{x}, C{y} and C{z}.
|
|
1207
|
-
|
|
1208
|
-
@kwarg ltp: The I{local tangent plane} (LTP) to use (L{Ltp}).
|
|
1209
|
-
@kwarg Xyz: Optional class to return C{x}, C{y} and C{z}
|
|
1210
|
-
(L{XyzLocal}, L{Enu}, L{Ned}) or C{None}.
|
|
1211
|
-
@kwarg Xyz_kwds: Optional, additional B{C{Xyz}} keyword
|
|
1212
|
-
arguments, ignored if C{B{Xyz} is None}.
|
|
1213
|
-
|
|
1214
|
-
@return: An B{C{Xyz}} instance or if C{B{Xyz} is None},
|
|
1215
|
-
a L{Local9Tuple}C{(x, y, z, lat, lon, height,
|
|
1216
|
-
ltp, ecef, M)} with C{M=None}, always.
|
|
1217
|
-
|
|
1218
|
-
@raise TypeError: Invalid B{C{ltp}}.
|
|
1219
|
-
'''
|
|
1220
|
-
return _MODS.ltp._xLtp(ltp)._ecef2local(self, Xyz, Xyz_kwds)
|
|
1221
|
-
|
|
1222
1218
|
def toVector(self, Vector=None, **Vector_kwds):
|
|
1223
|
-
'''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}.
|
|
1224
1224
|
|
|
1225
|
-
@
|
|
1226
|
-
|
|
1227
|
-
@kwarg Vector_kwds: Optional, additional B{C{Vector}} keyword
|
|
1228
|
-
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}.
|
|
1229
1227
|
|
|
1230
|
-
@
|
|
1231
|
-
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.
|
|
1232
1229
|
|
|
1233
1230
|
@see: Propertes C{xyz} and C{xyzh}
|
|
1234
1231
|
'''
|
|
@@ -1316,7 +1313,7 @@ __all__ += _ALL_DOCS(_EcefBase)
|
|
|
1316
1313
|
|
|
1317
1314
|
# **) MIT License
|
|
1318
1315
|
#
|
|
1319
|
-
# Copyright (C) 2016-
|
|
1316
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1320
1317
|
#
|
|
1321
1318
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1322
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"),
|
pygeodesy/ellipsoidalBase.py
CHANGED
|
@@ -35,7 +35,7 @@ from pygeodesy.units import Epoch, _isDegrees, Radius_, _1mm as _TOL_M
|
|
|
35
35
|
# from math import fabs # from .latlonBase
|
|
36
36
|
|
|
37
37
|
__all__ = _ALL_LAZY.ellipsoidalBase
|
|
38
|
-
__version__ = '24.
|
|
38
|
+
__version__ = '24.12.04'
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class CartesianEllipsoidalBase(CartesianBase):
|
|
@@ -666,7 +666,7 @@ class LatLonEllipsoidalBase(LatLonBase):
|
|
|
666
666
|
B{C{point2}} (C{bool}).
|
|
667
667
|
@kwarg equidistant: An azimuthal equidistant projection (I{class} or function
|
|
668
668
|
L{pygeodesy.equidistant}) or C{None} for this point's preferred
|
|
669
|
-
C{Equidistant}, like L{Equidistant<LatLonEllipsoidalBase.
|
|
669
|
+
C{Equidistant}, like L{Equidistant<LatLonEllipsoidalBase.Equidistant>}.
|
|
670
670
|
@kwarg tol: Convergence tolerance (C{meter}, conventionally).
|
|
671
671
|
|
|
672
672
|
@return: Closest point (C{LatLon}).
|
|
@@ -1148,7 +1148,7 @@ __all__ += _ALL_DOCS(CartesianEllipsoidalBase, LatLonEllipsoidalBase)
|
|
|
1148
1148
|
|
|
1149
1149
|
# **) MIT License
|
|
1150
1150
|
#
|
|
1151
|
-
# Copyright (C) 2016-
|
|
1151
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1152
1152
|
#
|
|
1153
1153
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1154
1154
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ellipsoidalBaseDI.py
CHANGED
|
@@ -885,7 +885,7 @@ del _1_0, _0_01
|
|
|
885
885
|
|
|
886
886
|
# **) MIT License
|
|
887
887
|
#
|
|
888
|
-
# Copyright (C) 2016-
|
|
888
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
889
889
|
#
|
|
890
890
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
891
891
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ellipsoidalExact.py
CHANGED
|
@@ -320,7 +320,7 @@ __all__ += _ALL_OTHER(Cartesian, LatLon, # classes
|
|
|
320
320
|
|
|
321
321
|
# **) MIT License
|
|
322
322
|
#
|
|
323
|
-
# Copyright (C) 2016-
|
|
323
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
324
324
|
#
|
|
325
325
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
326
326
|
# copy of this software and associated documentation files (the "Software"),
|
|
@@ -314,7 +314,7 @@ __all__ += _ALL_OTHER(Cartesian, LatLon, # classes
|
|
|
314
314
|
|
|
315
315
|
# **) MIT License
|
|
316
316
|
#
|
|
317
|
-
# Copyright (C) 2016-
|
|
317
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
318
318
|
#
|
|
319
319
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
320
320
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ellipsoidalKarney.py
CHANGED
|
@@ -359,7 +359,7 @@ __all__ += _ALL_OTHER(Cartesian, LatLon, # classes
|
|
|
359
359
|
|
|
360
360
|
# **) MIT License
|
|
361
361
|
#
|
|
362
|
-
# Copyright (C) 2016-
|
|
362
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
363
363
|
#
|
|
364
364
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
365
365
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ellipsoidalNvector.py
CHANGED
|
@@ -657,7 +657,7 @@ __all__ += _ALL_OTHER(Cartesian, LatLon, Ned, Nvector, # classes
|
|
|
657
657
|
|
|
658
658
|
# **) MIT License
|
|
659
659
|
#
|
|
660
|
-
# Copyright (C) 2016-
|
|
660
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
661
661
|
#
|
|
662
662
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
663
663
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ellipsoidalVincenty.py
CHANGED
|
@@ -67,12 +67,13 @@ from pygeodesy.props import deprecated_function, deprecated_method, \
|
|
|
67
67
|
property_doc_, property_RO
|
|
68
68
|
# from pygeodesy.streprs import Fmt # from .points
|
|
69
69
|
from pygeodesy.units import Number_, Scalar_
|
|
70
|
-
from pygeodesy.utily import atan2b, atan2d, sincos2, sincos2d,
|
|
70
|
+
from pygeodesy.utily import atan2, atan2b, atan2d, sincos2, sincos2d, \
|
|
71
|
+
unroll180, wrap180
|
|
71
72
|
|
|
72
|
-
from math import
|
|
73
|
+
from math import cos, degrees, fabs, radians, tan as _tan
|
|
73
74
|
|
|
74
75
|
__all__ = _ALL_LAZY.ellipsoidalVincenty
|
|
75
|
-
__version__ = '24.
|
|
76
|
+
__version__ = '24.11.26'
|
|
76
77
|
|
|
77
78
|
_antipodal_to_ = _SPACE_(_antipodal_, _to_)
|
|
78
79
|
|
|
@@ -383,7 +384,7 @@ def _sincos22(sa):
|
|
|
383
384
|
def _sincostan3r(a, f):
|
|
384
385
|
# I{Reduced} 3-tuple C{(sin(B{a}), cos(B{a}), tan(B{a}))}
|
|
385
386
|
if a: # see L{sincostan3}
|
|
386
|
-
t = (_1_0 - f) *
|
|
387
|
+
t = (_1_0 - f) * _tan(a)
|
|
387
388
|
if t:
|
|
388
389
|
c = _1_0 / hypot1(t)
|
|
389
390
|
s = c * t
|
|
@@ -567,7 +568,7 @@ __all__ += _ALL_DOCS(Cartesian, LatLon, intersecant2, # from .ellipsoidalBaseDI
|
|
|
567
568
|
|
|
568
569
|
# **) MIT License
|
|
569
570
|
#
|
|
570
|
-
# Copyright (C) 2016-
|
|
571
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
571
572
|
#
|
|
572
573
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
573
574
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/ellipsoids.py
CHANGED
|
@@ -90,10 +90,10 @@ from pygeodesy.units import Bearing_, Distance, Float, Float_, Height, Lamd, Lat
|
|
|
90
90
|
Meter2, Meter3, Phi, Phid, Radius, Radius_, Scalar
|
|
91
91
|
from pygeodesy.utily import atan1, atan1d, atan2b, degrees90, m2radians, radians2m, sincos2d
|
|
92
92
|
|
|
93
|
-
from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan
|
|
93
|
+
from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan # as _tan
|
|
94
94
|
|
|
95
95
|
__all__ = _ALL_LAZY.ellipsoids
|
|
96
|
-
__version__ = '24.
|
|
96
|
+
__version__ = '24.11.26'
|
|
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
|
|
@@ -660,8 +660,7 @@ class Ellipsoid(_NamedEnumItem):
|
|
|
660
660
|
|
|
661
661
|
@arg lat: Geodetic latitude (C{degrees90}, C{str}).
|
|
662
662
|
|
|
663
|
-
@return: A L{Circle4Tuple}C{(radius, height, lat, beta)}
|
|
664
|
-
instance.
|
|
663
|
+
@return: A L{Circle4Tuple}C{(radius, height, lat, beta)}.
|
|
665
664
|
|
|
666
665
|
@raise RangeError: Latitude B{C{lat}} outside valid range and
|
|
667
666
|
L{rangerrors<pygeodesy.rangerrors>} is C{True}.
|
|
@@ -2427,7 +2426,7 @@ if __name__ == '__main__':
|
|
|
2427
2426
|
|
|
2428
2427
|
# **) MIT License
|
|
2429
2428
|
#
|
|
2430
|
-
# Copyright (C) 2016-
|
|
2429
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
2431
2430
|
#
|
|
2432
2431
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
2433
2432
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/elliptic.py
CHANGED
|
@@ -24,7 +24,7 @@ Following is a copy of I{Karney}'s U{EllipticFunction.hpp
|
|
|
24
24
|
<https://GeographicLib.SourceForge.io/C++/doc/EllipticFunction_8hpp_source.html>}
|
|
25
25
|
file C{Header}.
|
|
26
26
|
|
|
27
|
-
Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-
|
|
27
|
+
Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2024)
|
|
28
28
|
and licensed under the MIT/X11 License. For more information, see the
|
|
29
29
|
U{GeographicLib<https://GeographicLib.SourceForge.io>} documentation.
|
|
30
30
|
|
|
@@ -93,13 +93,13 @@ from pygeodesy.named import _Named, _NamedTuple, _ALL_LAZY, Fmt, unstr
|
|
|
93
93
|
from pygeodesy.props import _allPropertiesOf_n, Property_RO, _update_all
|
|
94
94
|
# from pygeodesy.streprs import Fmt, unstr # from .named
|
|
95
95
|
from pygeodesy.units import Scalar, Scalar_
|
|
96
|
-
|
|
96
|
+
from pygeodesy.utily import atan2 # sincos2 as _sincos2
|
|
97
97
|
|
|
98
|
-
from math import asin, asinh, atan,
|
|
99
|
-
|
|
98
|
+
from math import asin, asinh, atan, ceil, cosh, fabs, floor, radians, \
|
|
99
|
+
sin, sinh, sqrt, tan, tanh # tan as _tan
|
|
100
100
|
|
|
101
101
|
__all__ = _ALL_LAZY.elliptic
|
|
102
|
-
__version__ = '24.
|
|
102
|
+
__version__ = '24.11.26'
|
|
103
103
|
|
|
104
104
|
_TolRD = zqrt(EPS * 0.002)
|
|
105
105
|
_TolRF = zqrt(EPS * 0.030)
|
|
@@ -1246,7 +1246,7 @@ def _RJ(inst, x, y, z, p, *over):
|
|
|
1246
1246
|
|
|
1247
1247
|
# **) MIT License
|
|
1248
1248
|
#
|
|
1249
|
-
# Copyright (C) 2016-
|
|
1249
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1250
1250
|
#
|
|
1251
1251
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1252
1252
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/epsg.py
CHANGED
|
@@ -223,7 +223,7 @@ __all__ += _ALL_DOCS(decode2, encode)
|
|
|
223
223
|
|
|
224
224
|
# **) MIT License
|
|
225
225
|
#
|
|
226
|
-
# Copyright (C) 2016-
|
|
226
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
227
227
|
#
|
|
228
228
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
229
229
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/errors.py
CHANGED
|
@@ -914,7 +914,7 @@ def _xStrError(*Refs, **name_value_Error): # in .gars, .geohash, .wgrs
|
|
|
914
914
|
|
|
915
915
|
# **) MIT License
|
|
916
916
|
#
|
|
917
|
-
# Copyright (C) 2016-
|
|
917
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
918
918
|
#
|
|
919
919
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
920
920
|
# copy of this software and associated documentation files (the "Software"),
|
pygeodesy/etm.py
CHANGED
|
@@ -17,7 +17,7 @@ Following is a copy of I{Karney}'s U{TransverseMercatorExact.hpp
|
|
|
17
17
|
<https://GeographicLib.SourceForge.io/C++/doc/TransverseMercatorExact_8hpp_source.html>}
|
|
18
18
|
file C{Header}.
|
|
19
19
|
|
|
20
|
-
Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-
|
|
20
|
+
Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2008-2024) and licensed
|
|
21
21
|
under the MIT/X11 License. For more information, see the U{GeographicLib<https://
|
|
22
22
|
GeographicLib.SourceForge.io>} documentation.
|
|
23
23
|
|
|
@@ -86,14 +86,14 @@ from pygeodesy.props import deprecated_method, deprecated_property_RO, \
|
|
|
86
86
|
property_doc_, _allPropertiesOf_n
|
|
87
87
|
from pygeodesy.streprs import Fmt, pairs, unstr
|
|
88
88
|
from pygeodesy.units import Degrees, Scalar_
|
|
89
|
-
from pygeodesy.utily import atan1d, atan2d, _loneg, sincos2
|
|
89
|
+
from pygeodesy.utily import atan1d, atan2, atan2d, _loneg, sincos2
|
|
90
90
|
from pygeodesy.utm import _cmlon, _LLEB, _parseUTM5, _toBand, _toXtm8, \
|
|
91
91
|
_to7zBlldfn, Utm, UTMError
|
|
92
92
|
|
|
93
|
-
from math import asinh,
|
|
93
|
+
from math import asinh, degrees, radians, sinh, sqrt
|
|
94
94
|
|
|
95
95
|
__all__ = _ALL_LAZY.etm
|
|
96
|
-
__version__ = '24.11.
|
|
96
|
+
__version__ = '24.11.24'
|
|
97
97
|
|
|
98
98
|
_OVERFLOW = _1_EPS**2 # ~2e+31
|
|
99
99
|
_TAYTOL = pow(EPS, 0.6)
|
|
@@ -1197,7 +1197,7 @@ if __name__ == '__main__': # MCCABE 16
|
|
|
1197
1197
|
|
|
1198
1198
|
# **) MIT License
|
|
1199
1199
|
#
|
|
1200
|
-
# Copyright (C) 2016-
|
|
1200
|
+
# Copyright (C) 2016-2025 -- mrJean1 at Gmail -- All Rights Reserved.
|
|
1201
1201
|
#
|
|
1202
1202
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
1203
1203
|
# copy of this software and associated documentation files (the "Software"),
|