The Pure Rust GDAL gets serious about computational geometry — and drops its last ML C++ dependency.
Today we released OxiGDAL 0.1.4 — a substantial feature release that deepens the geometry algorithm layer, adds SIMD resampling kernels, completes the COPC point-cloud reader, and migrates ONNX inference from the C++-backed ort to the Pure Rust OxiONNX runtime.
No C. No C++. No Fortran. No PROJ/GEOS — and now, no C++ ONNX Runtime either. Everything still compiles to a single static binary or a sub-1 MB WASM bundle and runs everywhere.
Why OxiGDAL 0.1.4 is a game changer
Heavy geospatial geometry has long meant linking GEOS, and on-device ML inference has meant linking a C++ ONNX runtime. This release replaces both with Pure Rust. The workspace stands at 76 crates (~580K Rust SLoC) with 15 format drivers and 12,064 passing tests (45 skipped, 0 failures).
Two themes define 0.1.4:
- Algorithmic depth. General polygon-polygon clipping, geodesically accurate area, the full DE-9IM predicate matrix, and contour extraction — the operations that previously forced a GEOS dependency.
- Pure Rust ML. Cloud detection, super-resolution, and ONNX model loading now route through OxiONNX, eliminating the C++ ONNX Runtime entirely.
Technical Deep Dive: the two waves of 0.1.4
-
Wave 1 — algorithms depth (
oxigdal-algorithms) Weiler–Atherton polygon clipping handles general polygon-polygon clipping with hole support. Karney’s geodesic area formula delivers sub-meter accuracy on the WGS84 ellipsoid. The DE-9IM (Dimensionally Extended 9-Intersection Model) brings the complete topological predicate matrix, and marching squares extracts raster isolines for contour generation. -
Wave 1 — Pure Rust ML migration (
oxigdal-ml) All ONNX inference moves fromorttooxionnx, aligning the ML stack with the COOLJAPAN Pure Rust Policy. The error taxonomy andOnnxModelAPI were refined for the new runtime; cloud detection and super-resolution models load and run with no C++ dependency. -
Wave 2 — spatial indexing & SIMD (
oxigdal-index,oxigdal-algorithms,oxigdal-noalloc) The R-tree gains node deletion with rebalancing, STR (Sort-Tile-Recursive) bulk loading for O(n log n) construction, k-nearest-neighbor search via a priority queue, and serialization/deserialization. New AVX2 and NEON intrinsics accelerate bilinear and bicubic resampling with runtime CPU-feature detection. Raster polygonization extracts vector polygons from labeled regions with hole detection, and topology-preserving simplification (Visvalingam–Whyatt and Douglas–Peucker variants) keeps shared boundaries intact across adjacent polygons. Theoxigdal-noalloccrate adds zero-allocation, const-generic geometry types (FixedLineString<N>,FixedRing<N>,BBox3D, aMercatorhelper, and geohash neighbour enumeration). -
Wave 2 — point clouds & tiles (
oxigdal-copc,oxigdal-pmtiles,oxigdal-gpkg) A complete COPC (Cloud Optimized Point Cloud) reader traverses the EPT hierarchy with octree spatial queries and HTTP range support. The PMTiles reader pipeline is now end-to-end, with OxiARC decompression (gzip/brotli/zstd), FNV-1a content dedup on reads, and root + leaf directory navigation. GeoPackage adds a B-tree index for attribute queries plus Well-Known Binary 3D parsing (PointZ, LineStringZ, PolygonZ, …).
Getting Started
cargo add oxigdal
The unified opener now reaches point clouds and tile archives alongside rasters and vectors:
use oxigdal::Dataset;
fn main() -> oxigdal::Result<()> {
let dataset = Dataset::open("world.tif")?;
println!("Format : {}", dataset.format());
println!("Size : {}x{}", dataset.width(), dataset.height());
println!("CRS : {}", dataset.crs().name());
Ok(())
}
Enable the new drivers and algorithm depth as you need them — for example features = ["copc"] for point clouds or ["index"] for the enhanced R-tree.
What’s New in 0.1.4
- Weiler–Atherton clipping — general polygon-polygon clipping with hole support (
oxigdal-algorithms). - Karney geodesic area — sub-meter accuracy on the WGS84 ellipsoid.
- DE-9IM predicates — the full dimensionally-extended 9-intersection topology model.
- Marching-squares contours — raster isoline extraction.
- ort → OxiONNX — Pure Rust ONNX inference; no C++ ONNX Runtime in the ML stack.
- R-tree enhancements (
oxigdal-index) — node deletion + rebalancing, STR bulk loading, kNN search, serialization. - SIMD resampling — AVX2/NEON bilinear and bicubic kernels with runtime feature detection.
- Raster polygonization and topology-preserving simplification (Visvalingam–Whyatt, Douglas–Peucker).
- NoAlloc geometry types (
oxigdal-noalloc) —FixedLineString<N>,FixedRing<N>,BBox3D,Mercator, geohash neighbours. - COPC reader (
oxigdal-copc) — EPT hierarchy, octree queries, HTTP range support. - PMTiles reader completion — full retrieval with OxiARC decompression and content dedup.
- GeoPackage B-tree + 3D WKB (
oxigdal-gpkg). - pyo3 0.24 → 0.28 migration (
oxigdal-python) —Bound<'py, T>lifetimes,IntoPyObject, updated GIL APIs.
Tips
- Reach for DE-9IM when
intersectsisn’t enough. The full 9-intersection matrix distinguishes touches, crosses, overlaps, and contains precisely — handy for topology-sensitive joins and validation. - Bulk-load big indexes. When you have all your geometries up front, STR bulk loading builds the R-tree in O(n log n) and yields a tighter tree than incremental insertion — then
kNNqueries pay off. - Stream COPC over HTTP. The COPC reader issues range requests against the EPT octree, so you can query a region of a remote point cloud without downloading the whole file.
- Go allocation-free on hot paths. For per-feature inner loops or embedded targets, the
oxigdal-noallocconst-generic types (FixedLineString<N>,BBox3D) avoid heap traffic entirely. - Your ML pipeline is now Pure Rust. After the OxiONNX migration, ONNX models run with no C++ runtime — one less native dependency to cross-compile or vendor.
This is the foundation
OxiGDAL is the geospatial layer of the COOLJAPAN Pure Rust ecosystem, and 0.1.4 tightens that integration: ML inference now rides on OxiONNX, compression and tile decoding go through OxiArc (oxiarc-zstd, oxiarc-brotli, …), binary serialization uses OxiCode, numerics build on SciRS2-Core, and S3-compatible storage flows through RS3GW. With the ort dependency gone, the default build is C/C++-free end to end — including the machine-learning path.
Repository: https://github.com/cool-japan/oxigdal
Star the repo if you want GEOS-grade geometry and on-device ML without a single C++ library.
Pure Rust cloud-native geospatial is here — fast, safe, and sovereign.
— KitaSan at COOLJAPAN OÜ April 19, 2026