Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion pymap3d/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@
from .enu import enu2geodetic, geodetic2enu, aer2enu, enu2aer # noqa: F401
from .aer import ecef2aer, aer2ecef, geodetic2aer, aer2geodetic, eci2aer, aer2eci # noqa: F401
from .los import lookAtSpheroid # noqa: F401
from .lox import isometric, meridian_dist, loxodrome_inverse # noqa: F401
from .lox import loxodrome_direct, loxodrome_inverse, meridianarc, departure, meanm
from .latitude import geodetic2isometric, isometric2geodetic, geodetic2rectifying, rectifying2geodetic, geodetic2conformal, conformal2geodetic, geodetic2parametric, parametric2geodetic, geodetic2geocentric, geocentric2geodetic, geodetic2authalic, authalic2geodetic
from .rcurve import rcurve_meridian, rcurve_parallel, rcurve_transverse
from .rsphere import rsphere_authalic, rsphere_biaxial, rsphere_curve, rsphere_eqavol, rsphere_euler, rsphere_rectifying, rsphere_triaxial
from .util import wrapToPi, wrapTo2Pi, sph2cart, cart2sph, pol2cart, cart2pol
else: # pure Python only
from .math import * # type: ignore # noqa: F401, F403
2 changes: 1 addition & 1 deletion pymap3d/ecef.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def ecef2geodetic(x: float, y: float, z: float,
eps = ((ell.semiminor_axis * u - ell.semimajor_axis * huE + E**2) * sin(Beta)) / (ell.semimajor_axis * huE * 1 / cos(Beta) - E**2 * cos(Beta))

Beta += eps
# %% final output
# final output
lat = arctan(ell.semimajor_axis / ell.semiminor_axis * tan(Beta))

lon = arctan2(y, x)
Expand Down
8 changes: 4 additions & 4 deletions pymap3d/eci.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,14 @@ def eci2ecef(x: float, y: float, z: float = None,
z : float
target z ECEF coordinate
"""
# %%
#
# FIXME: temporary old API, which was a single N x 3 numpy.ndarray
if z is None and isinstance(y, (str, datetime)):
time = y
z = x[:, 2]
y = x[:, 1]
x = x[:, 0]
# %%
#
x = np.atleast_1d(x)
y = np.atleast_1d(y)
z = np.atleast_1d(z)
Expand Down Expand Up @@ -112,14 +112,14 @@ def ecef2eci(x: float, y: float, z: float = None,
z : float
target z ECI coordinate
"""
# %%
#
# FIXME: temporary old API, which was a single N x 3 numpy.ndarray
if z is None and isinstance(y, (str, datetime)):
time = y
z = x[:, 2]
y = x[:, 1]
x = x[:, 0]
# %%
#
x = np.atleast_1d(x)
y = np.atleast_1d(y)
z = np.atleast_1d(z)
Expand Down
22 changes: 21 additions & 1 deletion pymap3d/ellipsoid.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@

from math import sqrt

class Ellipsoid:
"""
Expand Down Expand Up @@ -26,48 +26,68 @@ def __init__(self, model='wgs84'):
self.semimajor_axis = 6378137.
self.flattening = 1 / 298.2572235630
self.semiminor_axis = self.semimajor_axis * (1 - self.flattening)
self.thirdflattening = (self.semimajor_axis - self.semiminor_axis) / (self.semimajor_axis + self.semiminor_axis)
self.eccentricity = sqrt(2*self.flattening * self.flattening**2)
elif model == 'wgs72':
self.semimajor_axis = 6378135.
self.flattening = 1 / 298.26
self.semiminor_axis = self.semimajor_axis * (1 - self.flattening)
self.thirdflattening = (self.semimajor_axis - self.semiminor_axis) / (self.semimajor_axis + self.semiminor_axis)
self.eccentricity = sqrt(2*self.flattening * self.flattening**2)
elif model == 'grs80':
"""https://en.wikipedia.org/wiki/GRS_80"""
self.semimajor_axis = 6378137.
self.flattening = 1 / 298.257222100882711243
self.semiminor_axis = self.semimajor_axis * (1 - self.flattening)
self.thirdflattening = (self.semimajor_axis - self.semiminor_axis) / (self.semimajor_axis + self.semiminor_axis)
self.eccentricity = sqrt(2*self.flattening * self.flattening**2)
elif model == 'clarke1866':
self.semimajor_axis = 6378206.4
self.semiminor_axis = 6356583.8
self.flattening = -(self.semiminor_axis / self.semimajor_axis - 1)
self.thirdflattening = (self.semimajor_axis - self.semiminor_axis) / (self.semimajor_axis + self.semiminor_axis)
self.eccentricity = sqrt(2*self.flattening * self.flattening**2)
elif model == 'mars':
"""
https://tharsis.gsfc.nasa.gov/geodesy.html
"""
self.semimajor_axis = 3396900.
self.semiminor_axis = 3376097.80585952
self.flattening = 1 / 163.295274386012
self.thirdflattening = (self.semimajor_axis - self.semiminor_axis) / (self.semimajor_axis + self.semiminor_axis)
self.eccentricity = sqrt(2*self.flattening * self.flattening**2)
elif model == 'moon':
self.semimajor_axis = 1738000.
self.semiminor_axis = self.semimajor_axis
self.flattening = 0.
self.thirdflattening = (self.semimajor_axis - self.semiminor_axis) / (self.semimajor_axis + self.semiminor_axis)
self.eccentricity = sqrt(2*self.flattening * self.flattening**2)
elif model == 'venus':
self.semimajor_axis = 6051000.
self.semiminor_axis = self.semimajor_axis
self.thirdflattening = (self.semimajor_axis - self.semiminor_axis) / (self.semimajor_axis + self.semiminor_axis)
self.eccentricity = sqrt(2*self.flattening * self.flattening**2)
self.flattening = 0.
elif model == 'jupiter':
self.semimajor_axis = 71492000.
self.flattening = 1 / 15.415446277169725
self.flattening = -(self.semiminor_axis / self.semimajor_axis - 1)
self.thirdflattening = (self.semimajor_axis - self.semiminor_axis) / (self.semimajor_axis + self.semiminor_axis)
self.eccentricity = sqrt(2*self.flattening * self.flattening**2)
elif model == 'io':
"""
https://doi.org/10.1006/icar.1998.5987
"""
self.semimajor_axis = 1829.7
self.flattening = 1 / 131.633093525179
self.semiminor_axis = self.semimajor_axis * (1 - self.flattening)
self.thirdflattening = (self.semimajor_axis - self.semiminor_axis) / (self.semimajor_axis + self.semiminor_axis)
self.eccentricity = sqrt(2*self.flattening * self.flattening**2)
elif model == 'pluto':
self.semimajor_axis = 1187000.
self.semiminor_axis = self.semimajor_axis
self.flattening = 0.
self.thirdflattening = (self.semimajor_axis - self.semiminor_axis) / (self.semimajor_axis + self.semiminor_axis)
self.eccentricity = sqrt(2*self.flattening * self.flattening**2)
else:
raise NotImplementedError('{} model not implemented, let us know and we will add it (or make a pull request)'.format(model))
Loading