Skip to main content

GeoJSON network simplification using raster image skeletonization and Voronoi polygons

Project description

parenx

Simplify (or "pare") a GeoJSON network ("nx") using raster image skeletonization an Voronoi polygons

Provides functions that use image skeletonization or Voronoi polygons to simplify geographic networks composed of linestrings. The outputs are geographic layers representing simplified or 'primal' representations of the network. Primal networks only contains straight line segments

Sample datasets include:

Installation

Install the package into an activated python virtual environment with the following command:

pip install parenx

Install the latest development version from GitHub with the following command:

pip install git+https://github.com/anisotropi4/parenx.git

This places the skeletonization.py and voronoi.py scripts into the executable search path.

Test to see if the package is installed with the following command:

python -c "import parenx; print(parenx.__version__)"

Examples

A bash helper script run.sh and example data is available under the sitepackages/parenx project directory under venv. The exact path varies with module and python version

Example data

# Download the data if not already present
if [ ! -f ./data/rnet_princes_street.geojson ]; then
    wget https://raw.githubusercontent.com/anisotropi4/parenx/main/data/rnet_princes_street.geojson
    # Create data folder if not already present
    if [ ! -d ./data ]; then
        mkdir ./data
    fi
    mv rnet_princes_street.geojson ./data
fi

Skeletonization

The following creates a simplified network by applying skeletonization to a buffered raster array in output.gpkg

skeletonize.py ./data/rnet_princes_street.geojson rnet_princes_street_skeletonized.gpkg
tile_skeletonize.py ./data/rnet_princes_street.geojson rnet_princes_street_skeletonized_tile.gpkg

Voronoi

The following creates a simplified network by creating set of Voronoi polygons from points on the buffer in output.gpkg

voronoi.py ./data/rnet_princes_street.geojson rnet_princes_street_voronoi.gpkg

Simple operation

The run.sh script sets a python virtual environment and executes the script against a data file in the data directory

$ ./run.sh

The run.sh script optionally takes a filename and file-extension. To simplify a file, say somewhere.geojson and output to GeoPKG files sk-simple.gpkg and vr-simple.gpkg

$ ./run.sh somewhere.geojon simple

Locating the run.sh script

To copy the run.sh script into your local directory the following could help

$ find . -name run.sh -exec cp {} . \;

Using the parenx helper script

A dash helper script parenx is also available under the sitepackages/parenx project directory under venv. The exact path varies with module and python version

Locating the parenx script

To copy the parenx script into your local directory the following could help

$ find . -name parenx -type f -exec cp {} . \;

Simplification using different algorithms

The parenx helper script allows the algorithm to be selected as a command line parameter for the three supported algorithms:

./parenx skeletonize ./data/rnet_princes_street.geojson rnet_princes_street_skeltonize.gpkg
./parenx tile_skeletonize ./data/rnet_princes_street.geojson rnet_princes_street_tile.gpkg
./parenx voronoi ./data/rnet_princes_street.geojson rnet_princes_street_voronoi.gpkg

Application Programming Interface (API) Example

The skeletonize_frame, voronoi_frame, primal_frame and tile_skeletonize_frame functions are exposed via a simple API.

#!/usr/bin/env python3

import geopandas as gp
from parenx import skeletonize_frame, voronoi_frame, skeletonize_tiles, get_primal

CRS = "EPSG:27700"
filepath = "data/rnet_princes_street.geojson"
frame = gp.read_file(filepath).to_crs(CRS)

parameter = {"simplify": 0.0, "buffer": 8.0, "scale": 1.0, "knot": False, "segment": False}
r = skeletonize_frame(frame["geometry"], parameter)

parameter = {"simplify": 0.0, "scale": 5.0, "buffer": 8.0, "tolerance": 1.0}
r = voronoi_frame(frame["geometry"], parameter)

primal = get_primal(r)

Notes

Both are the skeletonization and Voronoi approach are generic approaches, with the following known issues:

  • This does not maintain a link between attributes and the simplified network
  • This does not identify a subset of edges that need simplification
  • The lines are a bit wobbly
  • It is quite slow

Project details


Download files

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

Source Distribution

parenx-0.7.4.tar.gz (180.8 kB view details)

Uploaded Source

Built Distribution

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

parenx-0.7.4-py3-none-any.whl (190.5 kB view details)

Uploaded Python 3

File details

Details for the file parenx-0.7.4.tar.gz.

File metadata

  • Download URL: parenx-0.7.4.tar.gz
  • Upload date:
  • Size: 180.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for parenx-0.7.4.tar.gz
Algorithm Hash digest
SHA256 f05a67ebb822e19515f691fa3e7863d178bf772425dc2b40e878b5dc4e588221
MD5 d7f840e786cb6bfc5effa0c545f43cae
BLAKE2b-256 a795e841e905f7b8b9f29c39abe400dcabd4301fa2e19014510cf8cf05710267

See more details on using hashes here.

Provenance

The following attestation bundles were made for parenx-0.7.4.tar.gz:

Publisher: release.yml on anisotropi4/parenx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file parenx-0.7.4-py3-none-any.whl.

File metadata

  • Download URL: parenx-0.7.4-py3-none-any.whl
  • Upload date:
  • Size: 190.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for parenx-0.7.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c60c9e5bc540b3df08a6367256d7ddc1d519b7e8982fe97307d8dff552b1d9e3
MD5 890d987c3617c5b3db33931c2900ba76
BLAKE2b-256 f051f972582354b0f977c6a076d959a479a0371593789e75a0cb41b4664c5e91

See more details on using hashes here.

Provenance

The following attestation bundles were made for parenx-0.7.4-py3-none-any.whl:

Publisher: release.yml on anisotropi4/parenx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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