diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-04-10 23:37:25 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-04-10 23:37:25 +0000 |
| commit | f3cf78f1e734dd12a51f4ee84b83c29663d278fd (patch) | |
| tree | 1bbd0a7d64a19070b07539da406a641c6dc4e646 | |
| parent | 656e9497008a437b4e41f21bb1f39afc5490be47 (diff) | |
automatic import of python-pymap3d
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-pymap3d.spec | 641 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 643 insertions, 0 deletions
@@ -0,0 +1 @@ +/pymap3d-3.0.1.tar.gz diff --git a/python-pymap3d.spec b/python-pymap3d.spec new file mode 100644 index 0000000..f1ad1a8 --- /dev/null +++ b/python-pymap3d.spec @@ -0,0 +1,641 @@ +%global _empty_manifest_terminate_build 0 +Name: python-pymap3d +Version: 3.0.1 +Release: 1 +Summary: pure Python (no prereqs) coordinate conversions, following convention of several popular Matlab routines. +License: BSD License +URL: https://pypi.org/project/pymap3d/ +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/db/4a/af76300b03bcc4621e44213626cd6d64f3168cb468ecdcebcab48f508928/pymap3d-3.0.1.tar.gz +BuildArch: noarch + +Requires: python3-dateutil +Requires: python3-numpy +Requires: python3-pytest-cov +Requires: python3-black[jupyter] +Requires: python3-isort +Requires: python3-astropy +Requires: python3-xarray +Requires: python3-flake8 +Requires: python3-flake8-bugbear +Requires: python3-flake8-builtins +Requires: python3-flake8-blind-except +Requires: python3-mypy +Requires: python3-types-python-dateutil +Requires: python3-types-requests +Requires: python3-pyproj +Requires: python3-pytest +Requires: python3-pytest-timeout + +%description +# Python 3-D coordinate conversions + +[](https://doi.org/10.5281/zenodo.213676) +[](https://doi.org/10.21105/joss.00580) +[](https://codecov.io/gh/geospace-code/pymap3d) + + +[](https://pypi.python.org/pypi/pymap3d) +[](http://pepy.tech/project/pymap3d) + +Pure Python (no prerequistes beyond Python itself) 3-D geographic coordinate conversions and geodesy. +API similar to popular $1000 Matlab Mapping Toolbox routines for Python +PyMap3D is intended for non-interactive use on massively parallel (HPC) and embedded systems. + +[API docs](https://geospace-code.github.io/pymap3d/) + +Thanks to our [contributors](./.github/contributors.md). + +## Similar toolboxes in other code languages + +* [Matlab, GNU Octave](https://github.com/geospace-code/matmap3d) +* [Fortran](https://github.com/geospace-code/maptran3d) +* [Rust](https://github.com/gberrante/map_3d) + +## Prerequisites + +Numpy and AstroPy are optional. +Algorithms from Vallado and Meeus are used if AstroPy is not present. + +## Install + +```sh +python3 -m pip install pymap3d +``` + +or for the latest development code: + +```sh +git clone https://github.com/geospace-code/pymap3d + +pip install -e pymap3d +``` + +One can verify Python functionality after installation by: + +```sh +pytest pymap3d +``` + +## Usage + +Where consistent with the definition of the functions, all arguments may +be arbitrarily shaped (scalar, N-D array). + +```python +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](https://www.python.org/dev/peps/pep-0448/) +[argument unpacking](https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists) +can be used for compact function arguments with scalars or arbitrarily +shaped N-D arrays: + +```python +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)`. + +Example scripts are in the [examples](./Examples) directory. + +Native Python float is typically [64 bit](https://docs.python.org/3/library/stdtypes.html#typesnumeric). +Numpy can select real precision bits: 32, 64, 128, etc. + +### 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 eci2aer aer2eci geodetic2eci eci2geodetic +enu2aer enu2ecef enu2geodetic +geodetic2aer geodetic2ecef geodetic2enu geodetic2ned +ned2aer ned2ecef ned2geodetic +azel2radec radec2azel +lookAtSpheroid +track2 departure meanm +rcurve rsphere +geod2geoc geoc2geod +geodetic2spherical spherical2geodetic +``` + +Vincenty functions "vincenty.vreckon" and "vincenty.vdist" are accessed like: + +```python +import pymap3d.vincenty as pmv + +lat2, lon2 = pmv.vreckon(lat1, lon1, ground_range_m, azimuth_deg) +dist_m, azimuth_deg = pmv.vdist(lat1, lon1, lat2, lon2) +``` + +Additional functions: + +* loxodrome_inverse: rhumb line distance and azimuth between ellipsoid points (lat,lon) akin to Matlab `distance('rh', ...)` and `azimuth('rh', ...)` +* loxodrome_direct +* geodetic latitude transforms to/from: parametric, authalic, isometric, and more in pymap3d.latitude + +Abbreviations: + +* [AER: Azimuth, Elevation, Range](https://en.wikipedia.org/wiki/Spherical_coordinate_system) +* [ECEF: Earth-centered, Earth-fixed](https://en.wikipedia.org/wiki/ECEF) +* [ECI: Earth-centered Inertial using IERS](https://www.iers.org/IERS/EN/Home/home_node.html) via `astropy` +* [ENU: East North Up](https://en.wikipedia.org/wiki/Axes_conventions#Ground_reference_frames:_ENU_and_NED) +* [NED: North East Down](https://en.wikipedia.org/wiki/North_east_down) +* [radec: right ascension, declination](https://en.wikipedia.org/wiki/Right_ascension) + +### Ellipsoid + +Numerous functions in pymap3d use an ellipsoid model. +The default is WGS84 Ellipsoid. +Numerous other ellipsoids are available in pymap3d.Ellipsoid. + +Print available ellipsoid models: + +```python +import pymap3d as pm + +print(pm.Ellipsoid.models) +``` + +Specify GRS80 ellipsoid: + +```python +import pymap3d as pm + +ell = pm.Ellipsoid.from_name('grs80') +``` + +### array vs scalar + +Use of pymap3d on embedded systems or other streaming data applications often deal with scalar position data. +These data are handled efficiently with the Python math stdlib module. +Vector data can be handled via list comprehension. + +Those needing multidimensional data with SIMD and other Numpy and/or PyPy accelerated performance can do so automatically by installing Numpy. +pymap3d seamlessly falls back to Python's math module if Numpy isn't present. +To keep the code clean, only scalar data can be used without Numpy. +As noted above, use list comprehension if you need vector data without Numpy. + +### 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. + +## Notes + +As compared to [PyProj](https://github.com/jswhit/pyproj): + +* PyMap3D does not require anything beyond pure Python for most transforms +* Astronomical conversions are done using (optional) AstroPy for established accuracy +* 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 PyProj ENU requires some [additional effort](https://github.com/jswhit/pyproj/issues/105). +* 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. + +### AstroPy.Units.Quantity + +At this time, +[AstroPy.Units.Quantity](http://docs.astropy.org/en/stable/units/) +is not supported. +Let us know if this is of interest. +Impacts on performance would have to be considered before making Quantity a first-class citizen. +For now, you can workaround by passing in the `.value` of the variable. + + +%package -n python3-pymap3d +Summary: pure Python (no prereqs) coordinate conversions, following convention of several popular Matlab routines. +Provides: python-pymap3d +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-pymap3d +# Python 3-D coordinate conversions + +[](https://doi.org/10.5281/zenodo.213676) +[](https://doi.org/10.21105/joss.00580) +[](https://codecov.io/gh/geospace-code/pymap3d) + + +[](https://pypi.python.org/pypi/pymap3d) +[](http://pepy.tech/project/pymap3d) + +Pure Python (no prerequistes beyond Python itself) 3-D geographic coordinate conversions and geodesy. +API similar to popular $1000 Matlab Mapping Toolbox routines for Python +PyMap3D is intended for non-interactive use on massively parallel (HPC) and embedded systems. + +[API docs](https://geospace-code.github.io/pymap3d/) + +Thanks to our [contributors](./.github/contributors.md). + +## Similar toolboxes in other code languages + +* [Matlab, GNU Octave](https://github.com/geospace-code/matmap3d) +* [Fortran](https://github.com/geospace-code/maptran3d) +* [Rust](https://github.com/gberrante/map_3d) + +## Prerequisites + +Numpy and AstroPy are optional. +Algorithms from Vallado and Meeus are used if AstroPy is not present. + +## Install + +```sh +python3 -m pip install pymap3d +``` + +or for the latest development code: + +```sh +git clone https://github.com/geospace-code/pymap3d + +pip install -e pymap3d +``` + +One can verify Python functionality after installation by: + +```sh +pytest pymap3d +``` + +## Usage + +Where consistent with the definition of the functions, all arguments may +be arbitrarily shaped (scalar, N-D array). + +```python +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](https://www.python.org/dev/peps/pep-0448/) +[argument unpacking](https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists) +can be used for compact function arguments with scalars or arbitrarily +shaped N-D arrays: + +```python +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)`. + +Example scripts are in the [examples](./Examples) directory. + +Native Python float is typically [64 bit](https://docs.python.org/3/library/stdtypes.html#typesnumeric). +Numpy can select real precision bits: 32, 64, 128, etc. + +### 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 eci2aer aer2eci geodetic2eci eci2geodetic +enu2aer enu2ecef enu2geodetic +geodetic2aer geodetic2ecef geodetic2enu geodetic2ned +ned2aer ned2ecef ned2geodetic +azel2radec radec2azel +lookAtSpheroid +track2 departure meanm +rcurve rsphere +geod2geoc geoc2geod +geodetic2spherical spherical2geodetic +``` + +Vincenty functions "vincenty.vreckon" and "vincenty.vdist" are accessed like: + +```python +import pymap3d.vincenty as pmv + +lat2, lon2 = pmv.vreckon(lat1, lon1, ground_range_m, azimuth_deg) +dist_m, azimuth_deg = pmv.vdist(lat1, lon1, lat2, lon2) +``` + +Additional functions: + +* loxodrome_inverse: rhumb line distance and azimuth between ellipsoid points (lat,lon) akin to Matlab `distance('rh', ...)` and `azimuth('rh', ...)` +* loxodrome_direct +* geodetic latitude transforms to/from: parametric, authalic, isometric, and more in pymap3d.latitude + +Abbreviations: + +* [AER: Azimuth, Elevation, Range](https://en.wikipedia.org/wiki/Spherical_coordinate_system) +* [ECEF: Earth-centered, Earth-fixed](https://en.wikipedia.org/wiki/ECEF) +* [ECI: Earth-centered Inertial using IERS](https://www.iers.org/IERS/EN/Home/home_node.html) via `astropy` +* [ENU: East North Up](https://en.wikipedia.org/wiki/Axes_conventions#Ground_reference_frames:_ENU_and_NED) +* [NED: North East Down](https://en.wikipedia.org/wiki/North_east_down) +* [radec: right ascension, declination](https://en.wikipedia.org/wiki/Right_ascension) + +### Ellipsoid + +Numerous functions in pymap3d use an ellipsoid model. +The default is WGS84 Ellipsoid. +Numerous other ellipsoids are available in pymap3d.Ellipsoid. + +Print available ellipsoid models: + +```python +import pymap3d as pm + +print(pm.Ellipsoid.models) +``` + +Specify GRS80 ellipsoid: + +```python +import pymap3d as pm + +ell = pm.Ellipsoid.from_name('grs80') +``` + +### array vs scalar + +Use of pymap3d on embedded systems or other streaming data applications often deal with scalar position data. +These data are handled efficiently with the Python math stdlib module. +Vector data can be handled via list comprehension. + +Those needing multidimensional data with SIMD and other Numpy and/or PyPy accelerated performance can do so automatically by installing Numpy. +pymap3d seamlessly falls back to Python's math module if Numpy isn't present. +To keep the code clean, only scalar data can be used without Numpy. +As noted above, use list comprehension if you need vector data without Numpy. + +### 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. + +## Notes + +As compared to [PyProj](https://github.com/jswhit/pyproj): + +* PyMap3D does not require anything beyond pure Python for most transforms +* Astronomical conversions are done using (optional) AstroPy for established accuracy +* 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 PyProj ENU requires some [additional effort](https://github.com/jswhit/pyproj/issues/105). +* 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. + +### AstroPy.Units.Quantity + +At this time, +[AstroPy.Units.Quantity](http://docs.astropy.org/en/stable/units/) +is not supported. +Let us know if this is of interest. +Impacts on performance would have to be considered before making Quantity a first-class citizen. +For now, you can workaround by passing in the `.value` of the variable. + + +%package help +Summary: Development documents and examples for pymap3d +Provides: python3-pymap3d-doc +%description help +# Python 3-D coordinate conversions + +[](https://doi.org/10.5281/zenodo.213676) +[](https://doi.org/10.21105/joss.00580) +[](https://codecov.io/gh/geospace-code/pymap3d) + + +[](https://pypi.python.org/pypi/pymap3d) +[](http://pepy.tech/project/pymap3d) + +Pure Python (no prerequistes beyond Python itself) 3-D geographic coordinate conversions and geodesy. +API similar to popular $1000 Matlab Mapping Toolbox routines for Python +PyMap3D is intended for non-interactive use on massively parallel (HPC) and embedded systems. + +[API docs](https://geospace-code.github.io/pymap3d/) + +Thanks to our [contributors](./.github/contributors.md). + +## Similar toolboxes in other code languages + +* [Matlab, GNU Octave](https://github.com/geospace-code/matmap3d) +* [Fortran](https://github.com/geospace-code/maptran3d) +* [Rust](https://github.com/gberrante/map_3d) + +## Prerequisites + +Numpy and AstroPy are optional. +Algorithms from Vallado and Meeus are used if AstroPy is not present. + +## Install + +```sh +python3 -m pip install pymap3d +``` + +or for the latest development code: + +```sh +git clone https://github.com/geospace-code/pymap3d + +pip install -e pymap3d +``` + +One can verify Python functionality after installation by: + +```sh +pytest pymap3d +``` + +## Usage + +Where consistent with the definition of the functions, all arguments may +be arbitrarily shaped (scalar, N-D array). + +```python +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](https://www.python.org/dev/peps/pep-0448/) +[argument unpacking](https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists) +can be used for compact function arguments with scalars or arbitrarily +shaped N-D arrays: + +```python +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)`. + +Example scripts are in the [examples](./Examples) directory. + +Native Python float is typically [64 bit](https://docs.python.org/3/library/stdtypes.html#typesnumeric). +Numpy can select real precision bits: 32, 64, 128, etc. + +### 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 eci2aer aer2eci geodetic2eci eci2geodetic +enu2aer enu2ecef enu2geodetic +geodetic2aer geodetic2ecef geodetic2enu geodetic2ned +ned2aer ned2ecef ned2geodetic +azel2radec radec2azel +lookAtSpheroid +track2 departure meanm +rcurve rsphere +geod2geoc geoc2geod +geodetic2spherical spherical2geodetic +``` + +Vincenty functions "vincenty.vreckon" and "vincenty.vdist" are accessed like: + +```python +import pymap3d.vincenty as pmv + +lat2, lon2 = pmv.vreckon(lat1, lon1, ground_range_m, azimuth_deg) +dist_m, azimuth_deg = pmv.vdist(lat1, lon1, lat2, lon2) +``` + +Additional functions: + +* loxodrome_inverse: rhumb line distance and azimuth between ellipsoid points (lat,lon) akin to Matlab `distance('rh', ...)` and `azimuth('rh', ...)` +* loxodrome_direct +* geodetic latitude transforms to/from: parametric, authalic, isometric, and more in pymap3d.latitude + +Abbreviations: + +* [AER: Azimuth, Elevation, Range](https://en.wikipedia.org/wiki/Spherical_coordinate_system) +* [ECEF: Earth-centered, Earth-fixed](https://en.wikipedia.org/wiki/ECEF) +* [ECI: Earth-centered Inertial using IERS](https://www.iers.org/IERS/EN/Home/home_node.html) via `astropy` +* [ENU: East North Up](https://en.wikipedia.org/wiki/Axes_conventions#Ground_reference_frames:_ENU_and_NED) +* [NED: North East Down](https://en.wikipedia.org/wiki/North_east_down) +* [radec: right ascension, declination](https://en.wikipedia.org/wiki/Right_ascension) + +### Ellipsoid + +Numerous functions in pymap3d use an ellipsoid model. +The default is WGS84 Ellipsoid. +Numerous other ellipsoids are available in pymap3d.Ellipsoid. + +Print available ellipsoid models: + +```python +import pymap3d as pm + +print(pm.Ellipsoid.models) +``` + +Specify GRS80 ellipsoid: + +```python +import pymap3d as pm + +ell = pm.Ellipsoid.from_name('grs80') +``` + +### array vs scalar + +Use of pymap3d on embedded systems or other streaming data applications often deal with scalar position data. +These data are handled efficiently with the Python math stdlib module. +Vector data can be handled via list comprehension. + +Those needing multidimensional data with SIMD and other Numpy and/or PyPy accelerated performance can do so automatically by installing Numpy. +pymap3d seamlessly falls back to Python's math module if Numpy isn't present. +To keep the code clean, only scalar data can be used without Numpy. +As noted above, use list comprehension if you need vector data without Numpy. + +### 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. + +## Notes + +As compared to [PyProj](https://github.com/jswhit/pyproj): + +* PyMap3D does not require anything beyond pure Python for most transforms +* Astronomical conversions are done using (optional) AstroPy for established accuracy +* 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 PyProj ENU requires some [additional effort](https://github.com/jswhit/pyproj/issues/105). +* 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. + +### AstroPy.Units.Quantity + +At this time, +[AstroPy.Units.Quantity](http://docs.astropy.org/en/stable/units/) +is not supported. +Let us know if this is of interest. +Impacts on performance would have to be considered before making Quantity a first-class citizen. +For now, you can workaround by passing in the `.value` of the variable. + + +%prep +%autosetup -n pymap3d-3.0.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-pymap3d -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon Apr 10 2023 Python_Bot <Python_Bot@openeuler.org> - 3.0.1-1 +- Package Spec generated @@ -0,0 +1 @@ +b9d1cd496de9f487b38c816547b8ee2c pymap3d-3.0.1.tar.gz |
