一个python库函数,包含了地理坐标系、坐标系、ECEF、BLH、ECI,ENU等坐标系,简单易用
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
Python 提供了第三方库 pyproj 可以方便地进行坐标转换。下面主要介绍安装及使用方法:
Python>=3.7。
Numpy和AstroPy是可选的;如果AstroPy不存在,则使用Vallado和Meeus的算法。
python3 -m pip install pymap3d
or for the latest development code:
git clone https://github.com/geospace-code/pymap3d
pip install -e pymap3d
One can verify Python functionality after installation by:
pytest pymap3d
Where consistent with the definition of the functions, all arguments may
be arbitrarily shaped (scalar, N-D array).
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)
import pymap3d as pm
lat0, lon0, alt0 = 4029.25745, 11146.61129, 1165.2
lat, lon, alt = 4028.25746, 11147.61125, 1165.1
e, n, u = pm.geodetic2enu(lat, lon, alt, lat0, lon0, alt0)
print(e, n, u)
Python argument unpacking can be used for compact function arguments with scalars or arbitrarily shaped N-D arrays:
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 directory.Native Python float is typically 64 bit.Numpy can select real precision bits: 32, 64, 128, etc.
包含了大部分坐标系转换的函数
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:
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:
distance('rh', ...)
and azimuth('rh', ...)
Abbreviations:
astropy
默认为WGS84,包含了多种其它的。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:
import pymap3d as pm
print(pm.Ellipsoid.models)
Specify GRS80 ellipsoid:
import pymap3d as pm
ell = pm.Ellipsoid.from_name('grs80')
Command line convenience functions provided include:
python -m pymap3d.vdist
python -m pymap3d.vreckon
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.