This release is a pre-release and may not be stable for production use.
Open-source photogrammetry and LiDAR processing.
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,
sfmextra) - 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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3249fe4ce222872894ac52d80bd809318e578416ff9b18f34278057958219b19
|
|
| MD5 |
675db2762abdf0914a5ccc45ff33788c
|
|
| BLAKE2b-256 |
97223a5a80ed3bd78d75f0bc2f41e355ced0ca46580f7211b790a5ae67f41c1f
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
098bae7803cdf5c2b99b57d404bf26db02afde74864b8bf69f2d86235d8e6deb
|
|
| MD5 |
e06c2e184319319d0433431b4750f923
|
|
| BLAKE2b-256 |
bac1fb2c9f0640beb104eaf0b8a20d868c222d4950266f310f670340c6ca7f56
|