Skip to main content

Python geodetic coordinate conversions written in rust

Project description

rustmap3d

License Python PyPI crates.io Ruff

Simple, fast, and ergonomic geodetic coordinate conversions


Installation

# add to an existing project
uv add rustmap3d
# pip install it directly
uv pip install rustmap3d

# pip install without uv
pip install rustmap3d

Examples

Low-level transforms api similar to pymap3d and matlab

import rustmap3d


# wgs84 geodetic conversions
lla = rustmap3d.ecef2lla(x, y, z)
ecef = rustmap3d.lla2ecef(lat, lon, alt)
...

# local conversions
ecef_uvw = rustmap3d.enu2ecef_uvw(e, n, u, lat_ref, lon_ref)
ecef = rustmap3d.enu2ecef(e, n, u, lat_ref, lon_ref)
ecef_uvw = rustmap3d.ned2ecef_uvw(n, e, d, lat_ref, lon_ref)
ecef = rustmap3d.ned2ecef(n, e, d, lat_ref, lon_ref)
# enu, ned, aer
...  

# local rotations
enu_quat = rustmap3d.enu2ecef_quat(lat, lon)
enu_dcm = rustmap3d.enu2ecef_dcm(lat, lon) 
# enu, ned

# Conversions
dd = rustmap3d.dms2dd("25:22:44.738N")  #> 25.37909389
dms = rustmap3d.dd2dms(25.37909389, is_lat=true) #> "25:22:44.738N"
lat, lon = rustmap3d.ll2dms(25.37909389, -138.7895679)  #> "25:22:44.738N", "138:47:22.444W"
...  

# distance functions
lat, lon = rustmap3d.vincenty_direct(lat_deg, lon_deg, range_m, bearing_deg)
range_m, bearing_ab, bearing_ba = rustmap3d.vincenty_inverse(lat_a, lon_a, lat_b, lon_b)

High-level GeoObject API

import math
import pydantic
import rustmap3d

# Construct a GeoPosition from either global or local coordinates
reference = rustmap3d.GeoPosition.from_lla((0.0, 0.0, 0.0))
rustmap3d.GeoPosition.from_enu(rustmap3d.DVec3(100.0, 0.0, 0.0), reference)
rustmap3d.GeoPosition.from_ned(rustmap3d.DVec3(100.0, 0.0, 0.0), reference)
# all reference locations accept LLA tuples or GeoPositions for reference locations
pos = rustmap3d.GeoPosition.from_aer(rustmap3d.DVec3(90.0, 0.0, 100.0), (0.0, 0.0, 0.0))

# Conversions
reference.aer_to(pos)
reference.ned_to(pos)
reference.enu_to(pos)

# Operations
vec = pos - reference  # > GeoVector
new_pos = reference + vec  # > GeoPosition

vel = rustmap3d.GeoVelocity.from_dir_speed(rustmap3d.DVec3(1.0, 0.0, 0.0), 100.0)
dt = 1.0
pos = reference + vel * dt  # > GeoPosition

rotation = rustmap3d.GeoOrientation.from_ecef_euler(rustmap3d.DVec3(0.0, math.pi, 0.0))
vec = rustmap3d.GeoVector.from_ecef(rustmap3d.DVec3(100.0, 0, 0.0), reference)
vec = rotation * vec

# Orientations
rot = rustmap3d.GeoOrientation.from_axis_angle(rustmap3d.DVec3(0.0, 0.0, 1), math.pi)
rot.x_axis()
rot.y_axis()
rot.z_axis()


# There is also native pydantic integration for geo objects
class MyModel(pydantic.BaseModel):
    pos: rustmap3d.GeoPosition


model = MyModel(pos=rustmap3d.GeoPosition.from_lla((0.0, 0.0, 0.0)))
dumped = model.model_dump(mode="json")
print(dumped)  # > { "pos": { "ecef": [6378137.0, 0., 0.] } }

validated = MyModel.model_validate(dumped)

Comparison with similar packages

  • 🚀🚀 Blazingly fast - written in rust (see benchmarks)
  • Zero dependencies
  • Dead simple api modeled after pymap3d and matlab
  • Exposes rotations (both quaternions and 3x3 matrices)

Benchmarks

Compared to pymap3d

Note: This is comparing calls with python scalars. Vectorized batched conversions will be implemented in the future

  • ~50x faster for lla2ecef
  • ~400x faster for ecef2lla

# Run benchmarks
uv run pytest --benchmark-histogram="./docs/benchmarks" bench/

Build From Source

Uses standard maturin build process

uv run maturin build -r   # build a whl
uv run maturin dev -r     # build a dev package similar to -e

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rustmap3d-0.5.0-cp314-cp314t-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.14tWindows x86-64

rustmap3d-0.5.0-cp314-cp314t-manylinux_2_31_x86_64.whl (552.3 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.31+ x86-64

rustmap3d-0.5.0-cp314-cp314t-manylinux_2_31_aarch64.whl (514.5 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.31+ ARM64

rustmap3d-0.5.0-cp314-cp314t-macosx_11_0_arm64.whl (496.7 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

rustmap3d-0.5.0-cp314-cp314-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.14Windows x86-64

rustmap3d-0.5.0-cp314-cp314-manylinux_2_31_x86_64.whl (551.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.31+ x86-64

rustmap3d-0.5.0-cp314-cp314-manylinux_2_31_aarch64.whl (515.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.31+ ARM64

rustmap3d-0.5.0-cp314-cp314-macosx_11_0_arm64.whl (494.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

rustmap3d-0.5.0-cp313-cp313-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.13Windows x86-64

rustmap3d-0.5.0-cp313-cp313-manylinux_2_31_x86_64.whl (552.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.31+ x86-64

rustmap3d-0.5.0-cp313-cp313-manylinux_2_31_aarch64.whl (517.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.31+ ARM64

rustmap3d-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (496.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rustmap3d-0.5.0-cp312-cp312-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.12Windows x86-64

rustmap3d-0.5.0-cp312-cp312-manylinux_2_31_x86_64.whl (553.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.31+ x86-64

rustmap3d-0.5.0-cp312-cp312-manylinux_2_31_aarch64.whl (517.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.31+ ARM64

rustmap3d-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (496.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rustmap3d-0.5.0-cp311-cp311-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.11Windows x86-64

rustmap3d-0.5.0-cp311-cp311-manylinux_2_31_x86_64.whl (553.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ x86-64

rustmap3d-0.5.0-cp311-cp311-manylinux_2_31_aarch64.whl (519.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ ARM64

rustmap3d-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (498.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file rustmap3d-0.5.0-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 4ab4ac9a416b836a5cc06ef10575e746e5e9794c795f5105e0e5b6600efc9143
MD5 504dbecb5bb74a2c378017cd2580872d
BLAKE2b-256 3f19ef84186cd9ab9bd87fbc93d1bdc40231c7c4294a6fdc7e5c5ee898f832a4

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp314-cp314t-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp314-cp314t-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 8b19f9d4065939a3c6aeef7fa33d0cbcc82355c851ae224d95949f3f451993f5
MD5 f24b264b9c8824561b9839c59bd4ec3c
BLAKE2b-256 386635300b2c258ba4a09a6da6679a44fd39773f8dd3013fa0e98775c23f00a5

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp314-cp314t-manylinux_2_31_aarch64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp314-cp314t-manylinux_2_31_aarch64.whl
Algorithm Hash digest
SHA256 6f4420bac35b9dc4e5cdf0fd81c759a32b0a8cb67f89f0344475042961ffd217
MD5 9a5a38c448f61ad6e590e63419b7fb9f
BLAKE2b-256 3248f594b4adeb55b1b92de80e9fdeef94ef33782db24beb63fb8a15de1de95b

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ce85e42b76097ab9b5989921dd09b9ed4b70cb3f47c03a7aa55d52de5357597c
MD5 0a6682c405d9da1d4cbe5134bd20e423
BLAKE2b-256 703587cb03de70afcb381c43647cd91213ad1c5b5744dec52db662951ecad3be

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1355e6aa9751684916c917538fdd035f5532ef94427e201f8a0752ca30067034
MD5 85688b1a163d0edaf2694ce7dfea7974
BLAKE2b-256 497ef3f4263c0d56feff7b2a0f7ac9aa85de9981629f7efdc847f906df95ed9c

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp314-cp314-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp314-cp314-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 c16f172953841e522535f8f17302326bd9130299ebdf3c57780de2bc69b43065
MD5 28c38065200e30926f8430efc0e9a575
BLAKE2b-256 ee83b8501162ad950036e14bc8755366e7813e50ee938d8bcc144d5ba6102b4b

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp314-cp314-manylinux_2_31_aarch64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp314-cp314-manylinux_2_31_aarch64.whl
Algorithm Hash digest
SHA256 95aea1d55c5b8e91fc4f354b4d79a23fda3f87a8ad78de344f9d449c86f0f29c
MD5 059df677bb53f1247c7f91e3a7523406
BLAKE2b-256 063226bfea5e1f7789cb65f291f81e0d18220645df52612f5ad0f7e351f8073e

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e2bd3ad8361cea54dce21a50c22a044264eaf50ed752b4f2726ccf06d843f53e
MD5 efe11382fee51736f92b625a9c67157c
BLAKE2b-256 60f801b52dab1fcfd70ce901aee5099ef3c1aa11f7112f83839fdd6e80306f15

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b34c63e69ee6d890616a7f3ead79a3932d51bb2ee8b988bc1a8f864051cd39a6
MD5 c43d2332c9437e1be5d21789672dc534
BLAKE2b-256 ca08d68577582769ab002e7f474d9ea52195b054cacfa8e6a2bc24ad2bd1fe0e

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp313-cp313-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp313-cp313-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 9cbc6d9df67146c693961cf9db3f101bb161afda512502a9f8ac31fc859bd8d3
MD5 cd13813dc2afb226ff17f09c157330f9
BLAKE2b-256 f19ca17b68d171b367dc8df9fef8d84076a031a2ba905924b7b7209a24d7888b

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp313-cp313-manylinux_2_31_aarch64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp313-cp313-manylinux_2_31_aarch64.whl
Algorithm Hash digest
SHA256 d11712147ac853775fe33472fc9f95cfe3b64fabb18666bd293de61c74e33a53
MD5 e16d03645a21644f3b60105c29c8fa75
BLAKE2b-256 e0dd72a814d270626e98348009591872e5191d3f906c83890429fb0aefdc45bd

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2a1d0840d9ece8fb3ed3485fb1f1e5ac0177e04ab42167b5a6932c99551c0835
MD5 8b9c90a695313f3b874ecee1e750121b
BLAKE2b-256 07fe866aa8c13d0c572ef2650b9a4ad8b818458525ea34b76f7619e706a36a50

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 dcbb2edf1c9832c387c037f2570f67197563c1216066e69dcdad2ea0d670902c
MD5 7051dc0078cfceb40b037db736699cec
BLAKE2b-256 c2970821951b666cfff2a9903c070f659fa65f9c3f09c2b74adb3ba53590b3be

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp312-cp312-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp312-cp312-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 97bb5e305e7325f246c55c54371f3546f87f744c754e8a9bf2e21513f3e5cd8e
MD5 b46c5bc43861085a5717585dbdf97d0c
BLAKE2b-256 9259e3b375f66719867573e1eeebb1894d96ed879c56b14784c675f8447becbe

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp312-cp312-manylinux_2_31_aarch64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp312-cp312-manylinux_2_31_aarch64.whl
Algorithm Hash digest
SHA256 3dd83957cecac1ca8bbb86e175d0f306cf2efb728c74d5a8b4f2e25aeb58277e
MD5 13f9c14a3e6c8549d58bfd013df2d4f2
BLAKE2b-256 b00da18c75f7f7f295f8493f383d90f3a5ed3bddbe43edcb0e07ad79c72805ce

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 128a9d45164056a1353603feb0eb126998ac6b6032803c27c48cdff6a14452fb
MD5 20b504c43f9adddc1626e74f21e1be20
BLAKE2b-256 91a411004f8628a5a3b16501a7c0c0a575095559ee6cb5666bbb006fe3c75ace

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a83bbd827741b757b4366c3863bccb1b9d21567005af51c1fad09a04f52e51e5
MD5 51bfbd2196151e626aee9304f36d7b01
BLAKE2b-256 cc4176a86d882ce0679b563be7ce9e54848e16370562dd5ae8f9791f41d69304

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp311-cp311-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 58855285dc6938f36124a11a827f213a89f424bb6d049db3cfc437171aaea9ad
MD5 ca3ddd74724f9eb3fe1a5e4b7d4394a4
BLAKE2b-256 6948e6d57d1f77e4b90d03da3e5f1a7f05c3258905f61dc2cd214cd0b30945f9

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp311-cp311-manylinux_2_31_aarch64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp311-cp311-manylinux_2_31_aarch64.whl
Algorithm Hash digest
SHA256 c52e194512cf7acb895df31abb81c262c90c596d7ae36b7332538c7719c0e1af
MD5 8e72d8bdcef5836fdc243dabb00c4429
BLAKE2b-256 9591b3ef4c19b45dac5b1c741b6d310e0d897a6a8ecde4c06a9bbe072ab1abdc

See more details on using hashes here.

File details

Details for the file rustmap3d-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmap3d-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9c43d81d94bc8832678bf617d4d5723b2bc63f610bd10507cfe4b879f0d7965
MD5 aea12afc91e5f0fd61809f13ad3de663
BLAKE2b-256 54593bf9d30f8992db1d8da23d3b0dea2520ac0370b6baff9f8f1114c00d29a9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page