Loading .travis.yml +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ before_install: - conda env update -n test -f environment.yml script: - pytest tests - PYTHONPATH=. pytest tests after_success: - coveralls Loading knoten/utils.py 0 → 100644 +43 −0 Original line number Diff line number Diff line import pyproj def reproject(record, semi_major, semi_minor, source_proj, dest_proj, **kwargs): """ Thin wrapper around PyProj's Transform() function to transform 1 or more three-dimensional point from one coordinate system to another. If converting between Cartesian body-centered body-fixed (BCBF) coordinates and Longitude/Latitude/Altitude coordinates, the values input for semi-major and semi-minor axes determine whether latitudes are planetographic or planetocentric and determine the shape of the datum for altitudes. If semi_major == semi_minor, then latitudes are interpreted/created as planetocentric and altitudes are interpreted/created as referenced to a spherical datum. If semi_major != semi_minor, then latitudes are interpreted/created as planetographic and altitudes are interpreted/created as referenced to an ellipsoidal datum. Parameters ---------- record : object Pandas series object semi_major : float Radius from the center of the body to the equater semi_minor : float Radius from the pole to the center of mass source_proj : str Pyproj string that defines a projection space ie. 'geocent' dest_proj : str Pyproj string that defines a project space ie. 'latlon' Returns ------- : list Transformed coordinates as y, x, z """ source_pyproj = pyproj.Proj(proj = source_proj, a = semi_major, b = semi_minor) dest_pyproj = pyproj.Proj(proj = dest_proj, a = semi_major, b = semi_minor) y, x, z = pyproj.transform(source_pyproj, dest_pyproj, record[0], record[1], record[2], **kwargs) return y, x, z tests/test_reproject.py 0 → 100644 +10 −0 Original line number Diff line number Diff line from unittest import mock import pytest from knoten import utils def test_reproject(): with mock.patch('pyproj.transform', return_value=[1,1,1]) as mock_pyproj: res = utils.reproject([1,1,1], 10, 10, 'geocent', 'latlon') mock_pyproj.assert_called_once() assert res == (1,1,1) Loading
.travis.yml +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ before_install: - conda env update -n test -f environment.yml script: - pytest tests - PYTHONPATH=. pytest tests after_success: - coveralls Loading
knoten/utils.py 0 → 100644 +43 −0 Original line number Diff line number Diff line import pyproj def reproject(record, semi_major, semi_minor, source_proj, dest_proj, **kwargs): """ Thin wrapper around PyProj's Transform() function to transform 1 or more three-dimensional point from one coordinate system to another. If converting between Cartesian body-centered body-fixed (BCBF) coordinates and Longitude/Latitude/Altitude coordinates, the values input for semi-major and semi-minor axes determine whether latitudes are planetographic or planetocentric and determine the shape of the datum for altitudes. If semi_major == semi_minor, then latitudes are interpreted/created as planetocentric and altitudes are interpreted/created as referenced to a spherical datum. If semi_major != semi_minor, then latitudes are interpreted/created as planetographic and altitudes are interpreted/created as referenced to an ellipsoidal datum. Parameters ---------- record : object Pandas series object semi_major : float Radius from the center of the body to the equater semi_minor : float Radius from the pole to the center of mass source_proj : str Pyproj string that defines a projection space ie. 'geocent' dest_proj : str Pyproj string that defines a project space ie. 'latlon' Returns ------- : list Transformed coordinates as y, x, z """ source_pyproj = pyproj.Proj(proj = source_proj, a = semi_major, b = semi_minor) dest_pyproj = pyproj.Proj(proj = dest_proj, a = semi_major, b = semi_minor) y, x, z = pyproj.transform(source_pyproj, dest_pyproj, record[0], record[1], record[2], **kwargs) return y, x, z
tests/test_reproject.py 0 → 100644 +10 −0 Original line number Diff line number Diff line from unittest import mock import pytest from knoten import utils def test_reproject(): with mock.patch('pyproj.transform', return_value=[1,1,1]) as mock_pyproj: res = utils.reproject([1,1,1], 10, 10, 'geocent', 'latlon') mock_pyproj.assert_called_once() assert res == (1,1,1)