Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

pyLynceus

Open-source photogrammetry and LiDAR processing.

PyPI License: MIT Python


pyLynceus is named for the lookout of the Argonauts, whose sight was so sharp he could see through the earth itself — which is more or less what a good LiDAR pipeline does through canopy. The project aims to be a practical, production-minded toolkit for people who process aerial mapping data for a living: point cloud I/O and filtering, georeferencing and datum work, terrain products, and (on the roadmap) structure-from-motion.

Why another geospatial library?

Existing open tools are excellent at what they do (PDAL for pipelines, OpenDroneMap for end-to-end SfM, laspy for I/O). pyLynceus sits in the gap between them: a Python-native, importable library for the workflows a working photogrammetrist actually runs — classification filtering, spatial deduplication of obstacle datasets, control point residual reporting, CRS/datum transforms, and quick DEM gridding — without leaving a script or notebook.

Install

pip install pylynceus            # core: numpy, laspy, pyproj
pip install "pylynceus[all]"     # + rasterio, opencv, scipy, matplotlib

Quickstart

from pylynceus.io.las import read_las, write_las
from pylynceus.cloud.filters import by_class, dedup_xy, GROUND
from pylynceus.georef.transform import reproject
from pylynceus.terrain.grid import grid_dem

# Read a LAZ tile
cloud = read_las("tile.laz")
print(cloud)                     # PointCloud(4,213,880 points, crs=2240, ...)

# Ground points only, deduplicated within 1 cm in XY
ground = dedup_xy(by_class(cloud, GROUND), tolerance=0.01)

# Reproject and grid a 1-unit DEM
ground = reproject(ground, dst_epsg=6447)
dem, origin = grid_dem(ground, cell_size=1.0)

write_las(ground, "ground.laz")

Or from the command line:

lynceus info tile.laz

Module map

Module Purpose Status
pylynceus.io LAS/LAZ read/write, file summaries working
pylynceus.cloud PointCloud model, class filters, XY dedup working
pylynceus.georef CRS reprojection, control residual stats working
pylynceus.terrain Binned DEM gridding (min/mean/max) working
pylynceus.sfm Camera models, matching, bundle adjustment roadmap

Roadmap

  • Vertical datum transforms (ellipsoid ↔ orthometric via geoid grids)
  • TIN and IDW DEM interpolation; contour extraction
  • Tiled/streaming processing for datasets larger than memory
  • Feature extraction & matching (SfM pipeline, sfm extra)
  • Obstacle analysis helpers (surface penetration against OIS-style surfaces)
  • QGIS plugin wrapper

Development

git clone https://github.com/pyLynceus/pylynceus
cd pylynceus
pip install -e ".[dev]"
pytest
ruff check src tests

Contributions welcome — this project is young and the API is still settling. Open an issue before large PRs.

License

MIT. See LICENSE.

Download files

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

Source Distribution

pylynceus-0.1.0.dev0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

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

pylynceus-0.1.0.dev0-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

File details

Details for the file pylynceus-0.1.0.dev0.tar.gz.

File metadata

  • Download URL: pylynceus-0.1.0.dev0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for pylynceus-0.1.0.dev0.tar.gz
Algorithm Hash digest
SHA256 3249fe4ce222872894ac52d80bd809318e578416ff9b18f34278057958219b19
MD5 675db2762abdf0914a5ccc45ff33788c
BLAKE2b-256 97223a5a80ed3bd78d75f0bc2f41e355ced0ca46580f7211b790a5ae67f41c1f

See more details on using hashes here.

File details

Details for the file pylynceus-0.1.0.dev0-py3-none-any.whl.

File metadata

  • Download URL: pylynceus-0.1.0.dev0-py3-none-any.whl
  • Upload date:
  • Size: 11.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for pylynceus-0.1.0.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 098bae7803cdf5c2b99b57d404bf26db02afde74864b8bf69f2d86235d8e6deb
MD5 e06c2e184319319d0433431b4750f923
BLAKE2b-256 bac1fb2c9f0640beb104eaf0b8a20d868c222d4950266f310f670340c6ca7f56

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 Sentry Error logging StatusPage Status page