Skip to main content

GEOAI_3D

CI License: MIT Python

Geospatial-first AI workflows for 3D data. Lidar point clouds, photogrammetry, and Gaussian splatting, with coordinate reference systems, vertical datums, and accuracy reporting treated as first-class concerns rather than afterthoughts.

Status: pre-alpha (v0.1.0). The out-of-core georeferenced foundation is here: read and write LAS/LAZ, Parquet, and XYZ with coordinate-system and vertical-datum handling, geometric feature descriptors, and a streaming engine that computed features on a 722,964,406-point LiDAR tile — which would need ~21.5 GB to hold in memory — within 8.9 GB of peak memory on 4 CPU cores, bit-for-bit identical to the whole-cloud result. APIs may still change before 1.0. See the roadmap below and CONTRIBUTING.md if you want to be involved early.

Why this exists

Working with 3D geospatial data today means assembling a pipeline by hand from low-level libraries — PDAL or laspy for IO, Open3D for structures, COLMAP for Structure-from-Motion, gsplat for splatting — each excellent, none aware of the others, and none aware that your data has a coordinate system.

Three problems recur, and none of them are solved by any existing package:

Scale. A 200-million-point survey does not fit in memory. Chunked processing is straightforward until you need a geometric feature computed near a tile boundary to match the value it would have had on the unchunked cloud. GEOAI_3D treats that seam contract as a tested guarantee, not an implementation detail.

Vertical datums. Most 3D tooling reduces "CRS handling" to horizontal reprojection. Mixing GNSS ellipsoidal heights with an orthometric product silently introduces errors of tens of metres. GEOAI_3D refuses to guess: geoid separation is handled explicitly, and data without a declared vertical datum raises rather than defaults.

Accuracy. Geomatics is the discipline that quantifies uncertainty; most 3D AI tooling treats a coordinate as a fact. Per-point uncertainty, registration covariance, and propagation into derived products are intended to be properties of the data, not a separate analysis.

Design commitments

These are constraints on the project, not aspirations:

  • Base install works on a CPU-only machine with no compiler. Anything requiring CUDA or a build toolchain lives in an optional extra, and CI verifies the bare install in a bare container.
  • Cross-platform. Linux, macOS, and Windows are tested on every commit, across Python 3.10 to 3.13. Colab-friendly throughout.
  • Spatial reference is never optional. Any function returning spatial data returns it with a CRS attached. Missing georeferencing is an error naming the parameter that would fix it, never a silent default.
  • Build on the ecosystem, own the middle. PDAL, laspy, Open3D, COLMAP, and gsplat are dependencies, not things to reimplement. What GEOAI_3D provides is the out-of-core execution model, the datum and CRS layer, uncertainty propagation, and provenance that sit between them.
  • Everything is provenanced. Outputs record what produced them, from which input, with which parameters and versions.

Installation

pip install geoai3d

Requires Python 3.10 or newer. The base install is CPU-only and needs no compiler.

Optional extras:

pip install "geoai3d[laz]"        # read/write compressed LAZ (lazrs backend)
pip install "geoai3d[viz]"        # interactive 3D viewer for Jupyter/Colab (plotly)
pip install "geoai3d[laz,viz]"    # both

From source, for development:

git clone https://github.com/agelamin17/geoai3d.git
cd geoai3d
pip install -e ".[dev,laz,viz]"

Roadmap

Development is staged. Each stage ships something installable and useful on its own.

Stage Focus Deliverable Status
0 Project skeleton, CI, open development from day one v0.0.1 ✅ Shipped
1 Out-of-core IO, spatial indexing, CRS and vertical datums, multi-scale geometric features, provenance v0.1.0 on PyPI ✅ Shipped
2 Frugal segmentation, classical classification, GIS vector export v0.3.0 on PyPI and conda-forge ⏭ Next
3 QGIS plugin, tutorial notebooks, tree segmentation, change detection Plugin in the QGIS repository Planned
4 Consolidation and documentation Peer-reviewed software paper Planned
5 Supervised segmentation and detection, pretrained geospatial models v1.0.0 and model zoo Planned
6 Metric georeferenced Gaussian splatting validated against survey control Methods paper Planned
7 Annotation and labelling workflows To be determined Planned

Non-goals

Stating these early, because scope creep is the main risk to a project like this:

  • Not competing with gsplat on rasterisation performance. GEOAI_3D wraps it and adds georeferencing.
  • Not a desktop GUI application. Reach for non-coders comes via the QGIS plugin.
  • Not an autonomous-driving toolkit. Aerial, terrestrial, and survey geometry are the target; automotive benchmarks and detectors are explicitly out of scope.
  • Not a hosted service.

Contributing

Early contributors are genuinely welcome, particularly anyone with survey control data, benchmark scenes, or a workflow they would like to see supported. See CONTRIBUTING.md and SUPPORT.md.

Citing

A software paper is planned. Until then, cite the repository via CITATION.cff.

License

MIT. See LICENSE.

Code from proprietary or copyleft-incompatible sources is not accepted. See CONTRIBUTING.md for the specific traps.

Download files

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

Source Distribution

geoai3d-0.2.0.tar.gz (102.7 kB view details)

Uploaded Source

Built Distribution

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

geoai3d-0.2.0-py3-none-any.whl (76.3 kB view details)

Uploaded Python 3

File details

Details for the file geoai3d-0.2.0.tar.gz.

File metadata

  • Download URL: geoai3d-0.2.0.tar.gz
  • Upload date:
  • Size: 102.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.13

File hashes

Hashes for geoai3d-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e127cbd746b970b4a986cfc502ddbf6c0c73efc381c97c3ae558e21108b3d509
MD5 e7cb071b7e07024ac2b098e325a9c749
BLAKE2b-256 d631c8188d71858cc4b0bd57c06f0fc6006b209bb15caadc625c86f288849c33

See more details on using hashes here.

File details

Details for the file geoai3d-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: geoai3d-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 76.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.13

File hashes

Hashes for geoai3d-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 793b6bf751faee028153d84fb8db5b046f442142fe879bd242cde066ea7ce8bb
MD5 7a16376e82730fa3aa87ec5afe2f8623
BLAKE2b-256 dd6c4aa471603db3196fd99c7e08423d0eb3b6511ba8303756df8a3ce578141f

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 files

0.1.0

2 files

0.0.1

2 files

Supported by

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