pymap3d的GitHub地址:https://github.com/geospace-code/pymap3d
一、pymap3d安装
1.1 Prerequisites
Python>=3.7。
Numpy和AstroPy是可选的;如果AstroPy不存在,则使用Vallado和Meeus的算法。
1.2 Install 安装
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
二、使用
2.1 Usage
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.
2.2 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:
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', ...)
andazimuth('rh', ...)
- loxodrome_direct
- geodetic latitude transforms to/from: parametric, authalic, isometric, and more in pymap3d.latitude
Abbreviations:
- AER: Azimuth, Elevation, Range
- ECEF: Earth-centered, Earth-fixed
- ECI: Earth-centered Inertial using IERS via
astropy
- ENU: East North Up
- NED: North East Down
- radec: right ascension, declination
三、相关名词与python库
3.1 相关名词
- 地心地固坐标系(Earth-Centered, Earth-Fixed,ECEF),简称地心坐标系。
- 地理坐标系统(Geographic Coordinate System,GCS),坐标系是地心坐标系,用经纬度表示球面上的点。
- 世界大地测量系统(World Geodetic System, WGS),比如WGS84,是一种地理坐标系统,用于全球定位系统(GPS)。
- 投影坐标系统(Projection Coordinate System,PCS),在二维平面上用米表示位置。
- 通用横轴墨卡托投影(Universal Transverse Mercator,UTM),是一种投影方法。
3.2 相关python库PyProj
与PyProj相比:
- pymap3d不需要纯python之外的任何东西——基本函数甚至不需要numpy。
- PyMap3D API与Matlab Mapping Toolbox类似,而PyProj的接口则非常独特
- pymap3d本质上处理本地坐标系,如enu, 而pyproj enu需要一些additional effort。
- pyproj面向行星表面上的点,而pymap3d处理行星表面上或上面的点同样出色,对于机载车辆和遥感尤其重要。