surtgis
High-performance geospatial analysis library for Python, powered by Rust.
SurtGIS provides 40+ terrain, hydrology, and imagery algorithms with native performance through PyO3 bindings.
Installation
pip install surtgis
Quick Start
import numpy as np
import surtgis
# Create a sample DEM (100x100 grid)
dem = np.random.rand(100, 100) * 100 # Elevation in meters
cell_size = 30.0 # 30m resolution
# Compute terrain derivatives
slope = surtgis.slope(dem, cell_size)
aspect = surtgis.aspect_degrees(dem, cell_size)
hillshade = surtgis.hillshade_compute(dem, cell_size, azimuth=315.0, altitude=45.0)
# Curvature analysis
profile_curv = surtgis.curvature_compute(dem, cell_size, ctype="profile")
plan_curv = surtgis.curvature_compute(dem, cell_size, ctype="plan")
# Advanced Florinsky curvatures (14 types available)
mean_h = surtgis.advanced_curvature(dem, cell_size, ctype="mean_h")
gaussian_k = surtgis.advanced_curvature(dem, cell_size, ctype="gaussian_k")
# Hydrology
twi = surtgis.twi_compute(dem, cell_size) # Topographic Wetness Index
hand = surtgis.hand_compute(dem, cell_size) # Height Above Nearest Drainage
print(f"Slope range: {slope.min():.1f} - {slope.max():.1f}")
print(f"TWI range: {twi.min():.2f} - {twi.max():.2f}")
Available Functions
Terrain Analysis (21 functions)
| Function | Description |
|---|---|
slope(dem, cell_size) |
Slope in degrees or percent |
aspect_degrees(dem, cell_size) |
Aspect in degrees (0-360) |
hillshade_compute(dem, cell_size, azimuth, altitude) |
Analytical hillshade |
multidirectional_hillshade(dem, cell_size) |
Multi-azimuth hillshade |
curvature_compute(dem, cell_size, ctype) |
Profile, plan, or general curvature |
advanced_curvature(dem, cell_size, ctype) |
14 Florinsky curvatures |
tpi_compute(dem, cell_size, radius) |
Topographic Position Index |
tri_compute(dem, cell_size) |
Terrain Ruggedness Index |
dev_compute(dem, cell_size, radius) |
Deviation from Mean Elevation |
vrm_compute(dem, cell_size, radius) |
Vector Ruggedness Measure |
geomorphons_compute(dem, cell_size, flatness, radius) |
Landform classification |
mrvbf_compute(dem, cell_size) |
Multi-resolution Valley Bottom Flatness |
northness_compute(dem, cell_size) |
Cosine of aspect |
eastness_compute(dem, cell_size) |
Sine of aspect |
shape_index_compute(dem, cell_size) |
Shape index |
curvedness_compute(dem, cell_size) |
Curvedness |
sky_view_factor_compute(dem, cell_size) |
Sky View Factor |
viewshed_compute(dem, cell_size, observer_row, observer_col) |
Line-of-sight visibility |
openness_positive(dem, cell_size) |
Positive openness |
openness_negative(dem, cell_size) |
Negative openness |
uncertainty_slope(dem, cell_size, dem_rmse) |
Slope uncertainty from DEM error |
Hydrology (9 functions)
| Function | Description |
|---|---|
fill_depressions(dem, cell_size) |
Planchon-Darboux sink filling |
priority_flood_fill(dem, cell_size) |
Priority-Flood (Barnes 2014) |
breach_fill(dem, cell_size) |
Breach depressions (Lindsay 2016) |
flow_direction_d8(dem, cell_size) |
D8 flow direction |
flow_accumulation_d8(fdir, cell_size) |
D8 flow accumulation |
flow_accumulation_mfd_compute(dem, cell_size) |
Multi-flow direction accumulation |
twi_compute(dem, cell_size) |
Topographic Wetness Index |
hand_compute(dem, cell_size) |
Height Above Nearest Drainage |
stream_network_compute(dem, cell_size, threshold) |
Stream network extraction |
Imagery (4 functions)
| Function | Description |
|---|---|
ndvi_compute(nir, red) |
Normalized Difference Vegetation Index |
ndwi_compute(green, nir) |
Normalized Difference Water Index |
savi_compute(nir, red, l_factor) |
Soil-Adjusted Vegetation Index |
normalized_diff(a, b) |
Generic normalized difference |
Morphology (4 functions)
| Function | Description |
|---|---|
morph_erode(data, radius) |
Morphological erosion |
morph_dilate(data, radius) |
Morphological dilation |
morph_opening(data, radius) |
Morphological opening |
morph_closing(data, radius) |
Morphological closing |
Statistics (3 functions)
| Function | Description |
|---|---|
focal_mean(data, radius) |
Focal mean |
focal_std(data, radius) |
Focal standard deviation |
focal_range(data, radius) |
Focal range (max - min) |
Advanced Curvature Types
The advanced_curvature function supports 14 curvature types from Florinsky (2025):
mean_h- Mean curvature Hgaussian_k- Gaussian curvature Kunsphericity_m- Unsphericity Mdifference_e- Difference curvature Eminimal_kmin- Minimal principal curvaturemaximal_kmax- Maximal principal curvaturehorizontal_kh- Horizontal (plan) curvaturevertical_kv- Vertical (profile) curvaturehorizontal_excess_khe- Horizontal excess curvaturevertical_excess_kve- Vertical excess curvatureaccumulation_ka- Accumulation curvaturering_kr- Ring curvaturerotor- Rotor (flow-line torsion)laplacian- Laplacian
Performance
SurtGIS is 5-10x faster than pure Python implementations thanks to Rust's zero-cost abstractions and automatic parallelization via Rayon.
License
MIT OR Apache-2.0
Release files for surtgis 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| surtgis-1.3.0.tar.gz | 909.0 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| surtgis-1.3.0-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| surtgis-1.3.0-cp39-abi3-musllinux_1_2_x86_64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ x86-64 | Details |
| surtgis-1.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| surtgis-1.3.0-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| surtgis-1.3.0-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 16.8 MB
Release files / surtgis-1.3.0.tar.gz
| Download URL | surtgis-1.3.0.tar.gz |
|---|---|
| Size | 909.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2588e841ab474e99cd6edaa2052a46c880527c343648b9aa075aa465a15571ef
|
|
BLAKE2b-256 checksum How to use checksums |
cf36c9c09de3cba0d885290479b3ba1abc3c3c76f88eda2d158eb08aef32441d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency logRelease files / surtgis-1.3.0-cp39-abi3-win_amd64.whl
| Download URL | surtgis-1.3.0-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
558c29a02aac27a1ff5d8f95a4c05d3ef37f8fadc3acfef7f451926a01dda1d8
|
|
BLAKE2b-256 checksum How to use checksums |
0f06c77d8b09b1e7422d7d8a8860ce2be1b11f431adcf2c1141b93963ab2d1eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency logRelease files / surtgis-1.3.0-cp39-abi3-musllinux_1_2_x86_64.whl
| Download URL | surtgis-1.3.0-cp39-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b6f3564285af863b4f6b98f5f22c1bc85bbb64623d41c6784cfd5ad1743add29
|
|
BLAKE2b-256 checksum How to use checksums |
b12371b2812ad4dd505fa8781fafa53ca2e4a0fcb5c0b594044f0685e54a1fc3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency logRelease files / surtgis-1.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | surtgis-1.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
f11e6b555f802554c6d59062f6f954d30e944d82c3d34be6168ff75f2eed8cca
|
|
BLAKE2b-256 checksum How to use checksums |
4cc8053511d9f443f1be277a1cfea609fce134b7d446ce01da3d81eca11b6585
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency logRelease files / surtgis-1.3.0-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | surtgis-1.3.0-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
85ee0bdf0fd0594157b321e37359002b3ffb28a777e8412b1eaf56879413874c
|
|
BLAKE2b-256 checksum How to use checksums |
df2fef8251cac1d9512a6e164b4e1fee275e642180fdf51077659f2b891e13a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency logRelease files / surtgis-1.3.0-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | surtgis-1.3.0-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
2c29b2ee288d479159b787e86da08e79f1335d3d9a079720374badca7c0513dc
|
|
BLAKE2b-256 checksum How to use checksums |
a8d676f543892505b7a8a861690ee79c87ed53d359fa746bc33221f3f376875c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency log