summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-04-10 23:37:25 +0000
committerCoprDistGit <infra@openeuler.org>2023-04-10 23:37:25 +0000
commitf3cf78f1e734dd12a51f4ee84b83c29663d278fd (patch)
tree1bbd0a7d64a19070b07539da406a641c6dc4e646
parent656e9497008a437b4e41f21bb1f39afc5490be47 (diff)
automatic import of python-pymap3d
-rw-r--r--.gitignore1
-rw-r--r--python-pymap3d.spec641
-rw-r--r--sources1
3 files changed, 643 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..5b6acc7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
+
+[![image](https://zenodo.org/badge/DOI/10.5281/zenodo.213676.svg)](https://doi.org/10.5281/zenodo.213676)
+[![image](http://joss.theoj.org/papers/10.21105/joss.00580/status.svg)](https://doi.org/10.21105/joss.00580)
+[![codecov](https://codecov.io/gh/geospace-code/pymap3d/branch/main/graph/badge.svg?token=DFWBW6TKNr)](https://codecov.io/gh/geospace-code/pymap3d)
+![Actions Status](https://github.com/geospace-code/pymap3d/workflows/ci/badge.svg)
+![Actions Status](https://github.com/geospace-code/pymap3d/workflows/ci_stdlib_only/badge.svg)
+[![image](https://img.shields.io/pypi/pyversions/pymap3d.svg)](https://pypi.python.org/pypi/pymap3d)
+[![PyPi Download stats](http://pepy.tech/badge/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
+
+[![image](https://zenodo.org/badge/DOI/10.5281/zenodo.213676.svg)](https://doi.org/10.5281/zenodo.213676)
+[![image](http://joss.theoj.org/papers/10.21105/joss.00580/status.svg)](https://doi.org/10.21105/joss.00580)
+[![codecov](https://codecov.io/gh/geospace-code/pymap3d/branch/main/graph/badge.svg?token=DFWBW6TKNr)](https://codecov.io/gh/geospace-code/pymap3d)
+![Actions Status](https://github.com/geospace-code/pymap3d/workflows/ci/badge.svg)
+![Actions Status](https://github.com/geospace-code/pymap3d/workflows/ci_stdlib_only/badge.svg)
+[![image](https://img.shields.io/pypi/pyversions/pymap3d.svg)](https://pypi.python.org/pypi/pymap3d)
+[![PyPi Download stats](http://pepy.tech/badge/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
+
+[![image](https://zenodo.org/badge/DOI/10.5281/zenodo.213676.svg)](https://doi.org/10.5281/zenodo.213676)
+[![image](http://joss.theoj.org/papers/10.21105/joss.00580/status.svg)](https://doi.org/10.21105/joss.00580)
+[![codecov](https://codecov.io/gh/geospace-code/pymap3d/branch/main/graph/badge.svg?token=DFWBW6TKNr)](https://codecov.io/gh/geospace-code/pymap3d)
+![Actions Status](https://github.com/geospace-code/pymap3d/workflows/ci/badge.svg)
+![Actions Status](https://github.com/geospace-code/pymap3d/workflows/ci_stdlib_only/badge.svg)
+[![image](https://img.shields.io/pypi/pyversions/pymap3d.svg)](https://pypi.python.org/pypi/pymap3d)
+[![PyPi Download stats](http://pepy.tech/badge/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
diff --git a/sources b/sources
new file mode 100644
index 0000000..08bc6df
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+b9d1cd496de9f487b38c816547b8ee2c pymap3d-3.0.1.tar.gz