Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

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

Project Description

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.

Release History

This version
History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


Download Files

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

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(24.6 kB) Copy SHA256 Hash SHA256
Wheel 3.6 Feb 18, 2018
(18.2 kB) Copy SHA256 Hash SHA256
Source None Feb 18, 2018

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Google Google Cloud Servers