Skip to main content

Simple coordinate transformations with helper functions

Project description

transforms84

PyPI - Version PyPI - Python Version Codecov PyPI - License

Small geographic coordinate systems Python library with a few additional helper functions.

This package focuses on:

  1. Performance
  2. Input and output coordinates of ideal mathematical shapes. Ideally, all coordinates should be of shapes (3,1) or (nPoints,3,1), but shapes (3,) and (nPoints,3) are supported too.
  3. Functions that adapt to differing input matrices shapes: one-to-one, many-to-many and one-to-many points. See below for an example.

Installation

pip install transforms84

Operations

Transformations

The following transformations have been implemented:

  • geodetic → ECEF
  • ECEF → geodetic
  • ECEF → ENU
  • ENU → ECEF
  • ENU → AER
  • AER → ENU

Distances

The following distance formulae have been implemented:

  • Haversine

Helpers

The following functions have been implemented:

  • Angular difference (smallest and largest)
  • [rad, rad, X] → [deg, deg, X]
  • [deg, deg, X] → [rad, rad, X]

Examples

See the Jupyter notebooks in examples to see how to use the transform84. Run pip install transforms84[examples] to run the examples locally.

Many-to-many & one-to-many

The transforms.ECEF2ENU transformation accepts same and differing matrix shape sizes. Below showcases the many-to-many method where three target points, rrm_target, in the geodetic coordinate system (WGS84) are transformed to the local ENU coordinate system about the point rrm_local, where both matrices are of shape (3, 3, 1):

>> import numpy as np
>> from transforms84.systems import WGS84
>> from transforms84.helpers import DDM2RRM
>> from transforms84.transforms import ECEF2ENU, geodetic2ECEF

>> rrm_local = DDM2RRM(np.array([[[30], [31], [0]], [[30], [31], [0]], [[30], [31], [0]]], dtype=np.float64))  # convert each point from [deg, deg, X] to [rad, rad, X]
>> rrm_target = DDM2RRM(np.array([[[31], [32], [0]], [[31], [32], [0]], [[31], [32], [0]]], dtype=np.float64))
>> ECEF2ENU(rrm_local, geodetic2ECEF(rrm_target, WGS84.a, WGS84.b), WGS84.a, WGS84.b)  # geodetic2ECEF -> ECEF2ENU
array([[[ 4.06379074e+01],
        [-6.60007585e-01],
        [ 1.46643956e+05]],

       [[ 4.06379074e+01],
        [-6.60007585e-01],
        [ 1.46643956e+05]],

       [[ 4.06379074e+01],
        [-6.60007585e-01],
        [ 1.46643956e+05]]])

We can achieve the same result using the one-to-many method with a single local point of shape (3, 1):

>> rrm_local = DDM2RRM(np.array([[30], [31], [0]], dtype=np.float64))
>> ECEF2ENU(rrm_local, geodetic2ECEF(rrm_target, WGS84.a, WGS84.b), WGS84.a, WGS84.b)
array([[[ 4.06379074e+01],
        [-6.60007585e-01],
        [ 1.46643956e+05]],

       [[ 4.06379074e+01],
        [-6.60007585e-01],
        [ 1.46643956e+05]],

       [[ 4.06379074e+01],
        [-6.60007585e-01],
        [ 1.46643956e+05]]])

Contributing

PRs are always welcome and appreciated! Please install the pre-commit hooks before making commits.

Project details


Download files

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

Source Distribution

transforms84-0.2.0.tar.gz (20.1 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page