pure Python coordinate conversions, following convention of several popular Matlab routines.
Project description
Python 3-D coordinate conversions
3-D geographic coordinate conversions, with API similar to popular $1000 Matlab Mapping Toolbox routines for:
- Python
- Matlab, GNU Octave
- modern Fortran
PyMap3D is intended for non-interactive use on massively parallel (HPC) and embedded systems. Includes some relevant Vallado's algorithms.
Why not PyProj?
- PyMap3D does not require anything beyond pure Python + Numpy.
- PyMap3D API is similar to Matlab Mapping Toolbox, while PyProj's interface is quite distinct
- PyMap3D intrinsically handles local coordinate systems such as ENU, while for PyProj ENU requires some additional effort.
- PyProj is oriented towards points on the planet surface, while PyMap3D handles points on or above the planet surface equally well, particularly important for airborne vehicles and remote sensing.
Prerequisites
- Python >= 3.6
- AstroPy (optional, used for ECI coordinates)
Install
pip install pymap3d
or for the latest development code:
git clone https://github.com/scivision/pymap3d
pip install -e .
One can verify Python functionality after installation by:
pip install -e .[tests]
pytest -rsv
Usage
Where consistent with the definition of the functions, all arguments may be arbitrarily shaped (scalar, N-D array).
import pymap3d as pm
x,y,z = pm.geodetic2ecef(lat,lon,alt)
az,el,range = pm.geodetic2aer(lat, lon, alt, observer_lat, observer_lon, 0)
Python argument unpacking can be used for compact function arguments with scalars or arbitrarily shaped N-D arrays:
aer = (az,el,slantrange)
obslla = (obs_lat,obs_lon,obs_alt)
lla = pm.aer2geodetic(*aer,*obslla)
where tuple lla
is comprised of scalar or N-D arrays (lat,lon,alt)
.
Functions
Popular mapping toolbox functions ported to Python include the following, where the source coordinate system (before the "2") is converted to the desired coordinate system:
aer2ecef aer2enu aer2geodetic aer2ned
ecef2aer ecef2enu ecef2enuv ecef2geodetic ecef2ned ecef2nedv
ecef2eci eci2ecef
enu2aer enu2ecef enu2geodetic
geodetic2aer geodetic2ecef geodetic2enu geodetic2ned
ned2aer ned2ecef ned2geodetic
azel2radec radec2azel
vreckon vdist
lookAtSpheroid
Abbreviations:
- AER: Azimuth, Elevation, Range
- ECEF: Earth-centered, Earth-fixed
- ECI: Earth-centered Inertial
- ENU: East North Up
- NED: North East Down
- radec: right ascension, declination
Caveats
- Atmospheric effects neglected in all functions not invoking AstroPy. Would need to update code to add these input parameters (just start a GitHub Issue to request).
- Planetary perturbations and nutation etc. not fully considered.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.