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

# Python 3-D coordinate conversions

3-D geographic coordinate conversions, with API similar to popular \$1000 Matlab Mapping Toolbox routines for:

PyMap3D is intended for non-interactive use on massively parallel (HPC) and embedded systems. Includes some relevant Vallado's algorithms.

API docs

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
vreckon vdist
lookAtSpheroid
``````

Abbreviations:

### 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.