Home

Awesome

Documentation Status Build License PyPI version DOI Poster Conda Forge version

snkit - a spatial networks toolkit

/ˈsnɪkɪt/ – sounds like snicket (noun, Northern English) A narrow passage between houses; an alleyway.

Why use snkit?

snkit helps tidy spatial network data.

Say you have some edges and nodes (lines and points, connections and vertices). None of them are quite connected, and there's no explicit data to define which node is at the end of which edge, or which edges are connected.

For example:

Unconnected network

snkit has methods to:

Spatial network

The output of a snkit data cleaning process might look something like this:

Connected network

Nodes

geometryidother attributes...
POINT (0.03 0.04)node_0...
POINT (0.03 0.03)node_1...
POINT (0.02 0.03)node_2...

Edges

geometryidfrom_idto_idother attributes...
LINESTRING (0.04 -0.04...edge_0node_10node_22...
LINESTRING (0.01 -0.03...edge_1node_22node_21...
LINESTRING (0.02 -0.02...edge_2node_21node_25...

Getting started

Install system libraries (only tested on Ubuntu):

sudo apt-get install -y libgeos-dev gdal-bin

Or use conda to install major dependencies:

conda install geopandas shapely

Install or upgrade snkit using pip:

pip install --upgrade snkit

See the demo notebook for a small demonstration.

Development

Clone this repository:

git clone git@github.com:tomalrussell/snkit.git

Maybe set up a virtualenv or conda environment, as you wish. Then install snkit in editable mode, with development packages:

pip install -e .[dev]

Run the tests:

python -m pytest tests/

Development checks

Configure the pre-commit checks:

pre-commit install

There are several tools and helpers set up to run automatically, on git commit and in GitHub Actions continuous integration steps. Each of these can be run locally too.

Run the tests using pytest:

python -m pytest

Run formatting using black:

black .

Run linting using ruff:

ruff check .

Run type-checking using mypy:

mypy --strict .

Testimonials 💯 👍 😊

With five lines of snkit I replaced four or five hundred lines of custom code!

A. Contented Customer (@czor847)

Related projects

Acknowledgements

MIT License

Copyright (c) 2018 Tom Russell and snkit contributors

Initial snkit development was at the Environmental Change Institute, University of Oxford within the EPSRC sponsored MISTRAL programme, as part of the Infrastructure Transition Research Consortium.