Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
pure Python (no prereqs) coordinate conversions, following convention of several popular Matlab routines.
Pure Python (no prerequistes beyond Python itself) 3-D geographic coordinate conversions and geodesy. Function syntax is roughly similar to Matlab Mapping Toolbox. PyMap3D is intended for non-interactive use on massively parallel (HPC) and embedded systems.
Thanks to our contributors.
Numpy and AstroPy are optional. Algorithms from Vallado and Meeus are used if AstroPy is not present.
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)
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
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')
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.
The tests in files tests/test_matlab*.py selected by
pytest -k matlab
# run from pymap3d/ top-level directory
use Matlab Engine for Python to compare Python PyMap3D output with Matlab output using Matlab functions.
As compared to PyProj:
At this time,
AstroPy.Units.Quantity
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.
FAQs
pure Python (no prereqs) coordinate conversions, following convention of several popular Matlab routines.
We found that pymap3d demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.