A Python library for geodetic computations
Project description
Introduction
PyGeodetics is a Python library for performing geodetic computations like geodetic inverse and direct problems, conversions between different reference systems like ECEF to ENU, ECEF to geographic etc.
Features
- Convert geodetic coordinates (latitude, longitude, height) to ECEF (Earth-Centered, Earth-Fixed)
- Convert ECEF to geodetic coordinates
- Transform ECEF to local ENU (East-North-Up) and NED (North-East-Down) systems
- Solve geodetic inverse and direct problems
- Distance between two points along the ellipsoid
- Compute radius of curvature and mean radius of the reference ellipsoid
- Support for different reference ellipsoids
Installation
pip install pygeodetics
TOC Code examples
- Geodetic to ECEF
- ECEF to Geodetic
- ECEF to ENU
- ECEF to NED
- Geodetic Inverse Problem on the GRS80 ellipsoid
- Geodetic Direct Problem on the GRS80 ellipsoid
- Radius of Curvature for a given Azimuth using Euler's equation.
- Calculate the mean Radius of the International1924 Ellipsoid
- Calculate the distance between two points on the ellipsoid (Vincenty formula)
- Calculate the meridional radius of curvature (M) at a given latitude
- Calculate the normal radius of curvature (N) at a given latitude.
Usage Examples
Geodetic to ECEF
from pygeodetics import Geodetic
# Initialize Geodetic class with WGS84 ellipsoid
geod = Geodetic()
lat = 59.907072474276958 # Latitude in degrees
lon = 10.754482924017791 # Longitude in degrees
h = 63.8281 # Height in meters
X, Y, Z = geod.geod2ecef(lat, lon, h)
print(f"Geodetic to ECEF:\nX: {X:.4f} m\nY: {Y:.4f} m\nZ: {Z:.4f} m")
ECEF to Geodetic
from pygeodetics import Geodetic
X, Y, Z = 3149785.9652, 598260.8822, 5495348.4927
geod = Geodetic()
lat, lon, h = geod.ecef2geod(X, Y, Z, angle_unit='deg')
print(f"ECEF to Geodetic:\nLatitude: {lat:.6f}°\nLongitude: {lon:.6f}°\nHeight: {h:.3f} m")
ECEF to ENU
from pygeodetics import Geodetic
X, Y, Z = 3149785.9652, 598260.8822, 5495348.4927
lat0, lon0, h0 = 58.907072, 9.75448, 63.8281
e, n, u = Geodetic().ecef2enu(X, Y, Z, lat0, lon0, h0, radians=False)
print(f"ECEF to ENU:\nEast: {e:.6f} m\nNorth: {n:.6f} m\nUp: {u:.6f} m")
ECEF to NED
from pygeodetics import Geodetic
X, Y, Z = 3149785.9652, 598260.8822, 5495348.4927
lat0, lon0, h0 = 58.907072, 9.75448, 63.8281
n, e, d = Geodetic().ecef2ned(X, Y, Z, lat0, lon0, h0)
print(f"ECEF to NED:\nNorth: {n:.6f} m\nEast: {e:.6f} m\nDown: {d:.6f} m")
Geodetic Inverse Problem on the GRS80 ellipsoid
from pygeodetics import Geodetic
from pygeodetics.Ellipsoid import GRS80
geod = Geodetic(GRS80())
lat1, lon1 = 52.2296756, 21.0122287
lat2, lon2 = 41.8919300, 12.5113300
az1, az2, distance = geod.inverse_problem(lat1, lon1, lat2, lon2, quadrant_correction=False)
print(f"Geodetic Inverse Problem:\nForward Azimuth: {az1:.6f}°\nReverse Azimuth: {az2:.6f}°\nDistance: {distance:.3f} m")
Geodetic Direct Problem on the GRS80 ellipsoid
from pygeodetics import Geodetic
from pygeodetics.Ellipsoid import GRS80
geod = Geodetic(GRS80())
az1 = -147.4628043168
d = 1316208.08334
lat2, lon2, az2 = geod.direct_problem(lat1, lon1, az1, d, quadrant_correction=True)
print(f"Geodetic Direct Problem:\nDestination Latitude: {lat2:.6f}°\nDestination Longitude: {lon2:.6f}°\nFinal Azimuth: {az2:.6f}°")
Radius of Curvature for a given Azimuth using Euler's equation.
from pygeodetics import Geodetic
lat = 45
azimuth = 30
radius = Geodetic().radius_of_curvature(lat, azimuth, radians=False)
print(f"Radius of Curvature:\n{radius:.3f} meters")
Calculate the mean Radius of the International1924 Ellipsoid
from pygeodetics import Geodetic
from pygeodetics.Ellipsoid import International1924
geod = Geodetic(International1924())
mean_radius = geod.get_mean_radius()
print(f"Mean Radius of the Ellipsoid:\n{mean_radius:.3f} meters")
Calculate the distance between two points on the ellipsoid (Vincenty formula)
from pygeodetics import Geodetic
# Define the coordinates of the first point
lat1 = 52.2296756
lon1 = 21.0122287
# Define the coordinates of the second point
lat2 = 41.8919300
lon2 = 12.5113300
distances = Geodetic().distance_between_two_points(lon1, lat1, lon2, lat2, radians=False)
print(f"Distances between the two points: {distances}")
Calculate the meridional radius of curvature (M) at a given latitude
from pygeodetics import Geodetic
# Compute the mean radius of the ellipsoid at a given latitude
lat = 61.456121547 # Latitude in degrees
mradius = Geodetic().mrad(lat)
print(f"Mean Radius of the Ellipsoid at Latitude {lat}°: {mradius:.3f} meters")
Calculate the normal radius of curvature (N) at a given latitude.
from pygeodetics import Geodetic
# Compute the normal radius of the ellipsoid at a given latitude
lat = 61.456121547 # Latitude in degrees
mradius = Geodetic().nrad(lat)
print(f"Normal Radius of the Ellipsoid at Latitude {lat}°:\n{mradius:.3f} meters")
License
This project is licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pygeodetics-0.1.0.tar.gz.
File metadata
- Download URL: pygeodetics-0.1.0.tar.gz
- Upload date:
- Size: 155.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ee305792808e89172b7dc7dac6701ed76ed0d44ce299e057a9a6c7035924315
|
|
| MD5 |
a37f88929f5c0547997f8c3a0f88a9ed
|
|
| BLAKE2b-256 |
f4027794bdd9a672f07a57dd4b18fc2a1af67a35cd865a51c5d1a6819f35ac7a
|
File details
Details for the file pygeodetics-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pygeodetics-0.1.0-py3-none-any.whl
- Upload date:
- Size: 44.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a40dde3a99c8918d52d5919fbf33e25507391ba322b734039a04e21231dcd871
|
|
| MD5 |
b74effed705f8c572f72d94c9ef11849
|
|
| BLAKE2b-256 |
84e6350d6a9dd715de5fbe3f5c78c028c56f0f2819497820cf2f8b203ee950b7
|