Skip to main content

pure Python coordinate conversions, following convention of several popular Matlab routines.

Project description Maintainability

Python / Matlab / Fortran 3-D coordinate conversions

3-D coordinate conversions for Python, Matlab, GNU Octave and Fortran. Follows API of popular $1000 Matlab Mapping Toolbox routines.

API docs:

For those not having:

  • AstroPy: lower accuracy fallback functions are included for some functions.
  • Numpy: without numpy, scalar inputs are handled with pure Python builtins.

Why not PyProj? PyMap3D does not require anything beyond pure Python. PyProj is very powerful and comprehensive, but requires a learning curve to use, particularly for Python users accustomed to Matlab.


  • Python PyMap3D: any of Python 2.6, 2.7, 3.3, 3.4, 3.5, 3.6, 3.7, … * optional: Numpy, AstroPy (for full functionality)
  • Matlab / GNU Octave: under matlab/
  • Fortran MapTran: under fortran/: any Fortran compiler (tested with gfortran)


This repo is 3 separate packages, you can use them independently, they don’t rely on each other.

  • Python PyMap3D:

    python -m pip install -e .
  • Fortran MapTran:

    cd bin
    cmake ..



import pymap3d as pm

x,y,z = pm.geodetic2ecef(lat,lon,alt)

az,el,range = pm.geodetic2aer(lat, lon, alt, 42, -82, 0)

Matlab / GNU Octave

The syntax is reasonably compatible with the $1000 Matlab Mapping Toolbox. Under the matlab/ directory:

x,y,z = geodetic2ecef([],lat,lon,alt)

az,el,range = geodetic2aer(lat, lon, alt, 42, -82, 0)


The Fortran API is simple like PyMap3D. Fortran 2008 standard is used, in particular Impure Elemental, which enables seamless support of scalar or array coordinate inputs. The subroutine last three arguments are typically the output (each subroutine is documented). Default precision is real64, set at the top of fortran/maptran.f90.

use maptran

call geodetic2ecef(lat,lon,alt, x,y,z)
call geodetic2aer(lat,lon,alt, -42., -82., 0.)


Popular mapping toolbox functions ported to Python include:

aer2ecef  aer2enu  aer2geodetic  aer2ned
ecef2aer  ecef2enu  ecef2enuv  ecef2geodetic  ecef2ned  ecef2nedv  ecef2eci
enu2aer  enu2ecef  enu2ecefv  enu2geodetic
geodetic2aer  geodetic2ecef  geodetic2enu  geodetic2ned
ned2aer  ned2ecef  ned2ecefv  ned2geodetic
vreckon vdist
azel2radec radec2azel


  • Atmospheric effects neglected in all functions not invoking AstroPy. Need to update code to add these input parameters (just start a GitHub Issue to request).
  • Planetary perturbations and nutation etc. not fully considered.

Matlab / Octave

The matlab/ directory contains a subset of the Python conversion functions, usable from Matlab or GNU Octave. Mathworks currently charges $1000 for the Matlab Mapping Toolbox that provides these functions.

  • The full set of Python conversions can be accessed from Matlab >= R2014b by commands like:

    lla = py.pymap3d.geodetic2ecef(x,y,z)
  • Matlab documentation generated by m2html.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pymap3d, version 1.5.2
Filename, size File type Python version Upload date Hashes
Filename, size pymap3d-1.5.2-py3-none-any.whl (24.6 kB) File type Wheel Python version 3.6 Upload date Hashes View hashes
Filename, size pymap3d-1.5.2.tar.gz (18.2 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page