Python library for geographic system transformations with additional helper functions.
This package focuses on:
(3,1)
or (nPoints,3,1)
. Shapes (3,)
and (nPoints,3)
are also supported.pip install transforms84
The following coordinate transformations have been implemented:
The following velocity transformations have been implemented:
The following distance formulae have been implemented:
The following functions have been implemented:
See the Jupyter notebooks in examples to see how to use the transform84. Run pip install transforms84[examples]
to run the examples locally.
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 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.06379074e01], [-6.60007585e-01], [1.46643956e05]],
[[4.06379074e01], [-6.60007585e-01], [1.46643956e05]],
[[4.06379074e01], [-6.60007585e-01], [1.46643956e05]],
]
)
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.06379074e01], [-6.60007585e-01], [1.46643956e05]],
[[4.06379074e01], [-6.60007585e-01], [1.46643956e05]],
[[4.06379074e01], [-6.60007585e-01], [1.46643956e05]],
]
)
transforms84.systems
includes the WGS84
class, which is the WGS 84 version of the standard. Other standards can be created:
>> from transforms84.systems import WGS, WGS72
>> WGS72 == WGS(6378135.0, 6356750.520016094)
True
...in no particular order:
PRs are always welcome and appreciated!
After forking the repo install the dev requirements: pip install -e .[dev]
.
Pre-commit hooks may be installed: pre-commit install --hook-type pre-commit --hook-type pre-push
. This isn't required as pull requests are checked with tox and apply lint automatically.