SurtGIS
High-performance geospatial analysis in Rust. A single CLI binary and a set of Rust crates that compute 127 terrain, hydrology, imagery, morphology, interpolation, and classification algorithms — with native GeoTIFF I/O, streaming for rasters larger than RAM, native CRS reprojection, and an end-to-end STAC composite pipeline for Planetary Computer and Earth Search. 56 of the 127 algorithms also compile to WebAssembly and run in any modern browser without a server, including the complete Florinsky 14-curvature morphometric system.
This book is the user guide. For the auto-generated API reference (for embedding SurtGIS as a library in Rust code), see docs.rs/surtgis-core.
What this book is for
If you’re looking for:
- “Does this fit my workflow?” → start with Installation then the First terrain analysis tutorial. 30 minutes and you’ll know.
- “How do I do X?” → How-to guides are task-focused and short. Pick the one that matches your problem.
- “What flags does
surtgis terrain slopetake?” → CLI reference. - “Why does SurtGIS do it this way?” → Explanation covers architecture, memory model, and side-by-side comparisons with GDAL, GRASS, and WhiteboxTools.
The four sections don’t overlap by design. Tutorials teach. How-to guides solve. Reference is authoritative. Explanation reasons. This is the Diátaxis framework.
Design principles
-
Native I/O, no GDAL required. GeoTIFF read/write including predictor 1/2/3, DEFLATE, GDAL_NODATA, and Cloud Optimized (COG) over HTTP range requests. GDAL is available as an optional feature.
-
Streaming over in-memory when data grows. Algorithms that fit the strip-processing pattern (Horn slope, Gaussian smoothing, flow direction, fill-sinks, and about ten more) run with bounded RAM regardless of raster size. Detection is automatic; a
--streamingflag forces the path when you want to be sure. -
One binary per platform. The CLI is statically-linked where possible. The default feature set for the precompiled binary covers STAC + COG + climate data (Zarr) + UTM reprojection. System-library dependencies (libnetcdf, HDF5) are opt-in via
--all-featureswhen building from source. -
Validated against the canonical alternatives. Slope, aspect, hillshade, flow accumulation, and watershed outputs agree with GDAL 3.11, GRASS 8.3, and WhiteboxTools within documented tolerances. The cross-validation numbers live in the paper (Environmental Modelling & Software, under review).
-
Honest about tradeoffs. SurtGIS is not faster than everything at everything — see When to use SurtGIS vs alternatives for where the Rust reimplementation wins (I/O pipelines, parallel terrain factors, streaming) and where you’re better off reaching for GDAL or GRASS.
Current status
As of v0.8.1, SurtGIS has been used end-to-end on a 15-watershed Chilean
landslide-susceptibility pipeline (Sentinel-2 composites, 41 M-cell areas,
60 labelled wells). The accompanying paper is in major-revision at
Environmental Modelling & Software. Recent releases focused on:
v0.7.5 fixed a critical decoder bug for Planetary Computer COGs with
BitsPerSample=15 packed encoding; v0.7.4 added the native reproject
command, removing the last dependency on gdalwarp; v0.8.x roughly
doubled the WebAssembly surface, from 33 to 56 algorithms.
No external users are known yet — feedback from people outside the original developer/postdoc loop is exactly what would take this from “works for one expert” to “works for a community”. If that’s you, please open an issue or try the live demo — it runs the 56 WebAssembly algorithms client-side, so your DEM never leaves your machine.