Skip to main content

Fast linestring simplification using RDP or Visvalingam-Whyatt and a Rust binary

Reason this release was yanked:

Bug on Windows and macOS

Project description

Build Status Coverage Status DownloadsDOI

Simplification

Simplify a LineString using the Ramer–Douglas–Peucker or Visvalingam-Whyatt algorithms

Line

Installation

pip install simplification
Please use a recent (>= 8.1.2) version of pip.

Supported Python Versions (Linux x86_64, macOS x86_64 + aarch64, Windows amd64)

  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10
  • Python 3.11

Supported Platforms

  • Linux (manylinux-compatible) x86_64 and aarch64
  • macOS Darwin x86_64 and arm64
  • Windows 64-bit

Usage

from simplification.cutil import (
    simplify_coords,
    simplify_coords_idx,
    simplify_coords_vw,
    simplify_coords_vw_idx,
    simplify_coords_vwp,
)

# Using Ramer–Douglas–Peucker
coords = [
    [0.0, 0.0],
    [5.0, 4.0],
    [11.0, 5.5],
    [17.3, 3.2],
    [27.8, 0.1]
]

# For RDP, Try an epsilon of 1.0 to start with. Other sensible values include 0.01, 0.001
simplified = simplify_coords(coords, 1.0)

# simplified is [[0.0, 0.0], [5.0, 4.0], [11.0, 5.5], [27.8, 0.1]]

# Using Visvalingam-Whyatt
# You can also pass numpy arrays, in which case you'll get numpy arrays back
import numpy as np
coords_vw = np.array([
    [5.0, 2.0],
    [3.0, 8.0],
    [6.0, 20.0],
    [7.0, 25.0],
    [10.0, 10.0]
])
simplified_vw = simplify_coords_vw(coords_vw, 30.0)

# simplified_vw is [[5.0, 2.0], [7.0, 25.0], [10.0, 10.0]]

Passing empty and/or 1-element lists will return them unaltered.

But I only want the simplified Indices

simplification now has:

  • cutil.simplify_coords_idx
  • cutil.simplify_coords_vw_idx

The values returned by these functions are the retained indices. In order to use them as e.g. a masked array in Numpy, something like the following will work:

import numpy as np
from simplification.cutil import simplify_coords_idx

# assume an array of coordinates: orig
simplified = simplify_coords_idx(orig, 1.0)
# build new geometry using only retained coordinates
orig_simplified = orig[simplified]

But I need to ensure that the resulting geometries are valid

You can use the topology-preserving variant of VW for this: simplify_coords_vwp. It's slower, but has a far greater likelihood of producing a valid geometry.

But I Want to Simplify Polylines

No problem; Decode them to LineStrings first.

# pip install pypolyline before you do this
from pypolyline.cutil import decode_polyline
# an iterable of Google-encoded Polylines, so precision is 5. For OSRM &c., it's 6
decoded = (decode_polyline(line, 5) for line in polylines)
simplified = [simplify_coords(line, 1.0) for line in decoded]

How it Works

FFI and a Rust binary

Is It Fast

I should think so.

What does that mean

Using numpy arrays for input and output, the library can be reasonably expected to process around 2500 1000-point LineStrings per second on a Core i7 or equivalent, for a 98%+ reduction in size.
A larger LineString, containing 200k+ points can be reduced to around 3k points (98.5%+) in around 50ms using RDP.

This is based on a test harness available here.

Disclaimer

All benchmarks are subjective, and pathological input will greatly increase processing time. Error-checking is non-existent at this point.

License

MIT

Citing Simplification

If Simplification has been significant in your research, and you would like to acknowledge the project in your academic publication, we suggest citing it as follows (example in APA style, 7th edition):

Hügel, S. (2021). Simplification (Version X.Y.Z) [Computer software]. https://doi.org/10.5281/zenodo.5774852

In Bibtex format:

@software{Hugel_Simplification_2021,
author = {Hügel, Stephan},
doi = {10.5281/zenodo.5774852},
license = {MIT},
month = {12},
title = {{Simplification}},
url = {https://github.com/urschrei/simplification},
version = {X.Y.Z},
year = {2021}
}

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

simplification-0.6.4-cp311-cp311-win_amd64.whl (292.0 kB view details)

Uploaded CPython 3.11Windows x86-64

simplification-0.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (738.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

simplification-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (722.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

simplification-0.6.4-cp311-cp311-macosx_11_0_arm64.whl (345.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

simplification-0.6.4-cp311-cp311-macosx_10_9_x86_64.whl (366.9 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

simplification-0.6.4-cp310-cp310-win_amd64.whl (293.3 kB view details)

Uploaded CPython 3.10Windows x86-64

simplification-0.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (727.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

simplification-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (708.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

simplification-0.6.4-cp310-cp310-macosx_11_0_arm64.whl (348.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

simplification-0.6.4-cp310-cp310-macosx_10_9_x86_64.whl (369.1 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

simplification-0.6.4-cp39-cp39-win_amd64.whl (294.4 kB view details)

Uploaded CPython 3.9Windows x86-64

simplification-0.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (733.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

simplification-0.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (716.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

simplification-0.6.4-cp39-cp39-macosx_11_0_arm64.whl (348.0 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

simplification-0.6.4-cp39-cp39-macosx_10_9_x86_64.whl (369.1 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

simplification-0.6.4-cp38-cp38-win_amd64.whl (294.5 kB view details)

Uploaded CPython 3.8Windows x86-64

simplification-0.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (736.1 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

simplification-0.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (719.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

simplification-0.6.4-cp38-cp38-macosx_11_0_arm64.whl (346.1 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

simplification-0.6.4-cp38-cp38-macosx_10_9_x86_64.whl (367.2 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

simplification-0.6.4-cp37-cp37m-win_amd64.whl (293.7 kB view details)

Uploaded CPython 3.7mWindows x86-64

simplification-0.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (701.0 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

simplification-0.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (686.1 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

simplification-0.6.4-cp37-cp37m-macosx_10_9_x86_64.whl (367.4 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

File details

Details for the file simplification-0.6.4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 32b118cd5042589ba0c3281540a7fa7f28cbdb9f7ee36cd5ee91dd5973c53f5f
MD5 005a841f55854e3c48e50e7f9efa8376
BLAKE2b-256 60ec8e9dca2aa6ee1c7af693bb71d2d9099b506e16d3d62d948b0fcfb00ee8e6

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 626ec57e1275d691c869147da56101d70263205d4b5511434956388942b78180
MD5 ad0d4fca9ccdc5f147bc4d0c290d4518
BLAKE2b-256 23ee48bd9d93add8ffe572e12fd050accaa80208863032bcc6ee655c0b4b9149

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4831a0b35cb3bd8665568f5c4bb38a2c18aec46d8c1c1bb8c2ebb91e8fa345f9
MD5 498c8899644215def26994f2fc646d5a
BLAKE2b-256 97edc2ce3a2bdbc0b22ddcdb0d72eac6e02b015e357498f15aafc146714cd075

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a5e13c222c5f4dceeead004f57b2474ae76f99cb0e061d0c0a393c8e02f3c934
MD5 a3ba8b9238cfa93c2b66a9bdfb0bc5f0
BLAKE2b-256 fa80ad555fbf36f5efbbbb536dc39240499cc8e71c1de671c27fe4d9eb031a45

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c59793f23fc07450b2ecdba8532e227d223ae5834d34747f63759bb65f712ab6
MD5 efa5b063121627350b061304d0a0b8ad
BLAKE2b-256 5be107b67ad43df42cae7208c67316a9cd7ca8f2cf323902e2e6e72ae498767a

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e9dd10dc84c323a7a1eaabbd8b49ecb08330fbd9bc01499ce5c737495fa94c80
MD5 8081975258442fb88a860beb10f176d1
BLAKE2b-256 f0006d4c28065e5b771705ebf76489038433c2e7be71223288801e24963c7996

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5cc762d7fcc5004832c7d899bd898c49e350150a1b5074f3538a49c53c0e85e8
MD5 a3c7f5eebecc6b4afcfd3768898136dd
BLAKE2b-256 f549488b9336929b98de53510209f7f49a5e767a23035d699d66329ede04571a

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 571cbfba6f4fbb3b190cdd8df4902bb23b0b41360d36412fe1a029b593afe842
MD5 e03efb198adbca6719258ca6378657a4
BLAKE2b-256 de3af9e2189ec18ca1f581e9c6379490982e54a37372559ed41618499706c96c

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 34f76ce469d4da6a57508a5fe5cec32131d5d9165424d5777c0586d63d9ccb56
MD5 31c3aeb3fc1c1f555243d728f89334ca
BLAKE2b-256 73ca4486e088be034621be7b6be7376f19e9a58e1583adbc1d550f220801fc23

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3628f6209c5bf3dda9520db50cbf12b4a8c0f5e4407f485bdfe2c66c4715fe83
MD5 3c27512a5bcd142d812ef0b93141b702
BLAKE2b-256 b58feecc03a901198198bf6c0016c0d23436fb41ffab64a6c37ebf0142d1a9a2

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 7659bb791f4a71046d3f2ac0bbda97d4a8489b840f89acfa8a5c8b571a13db9b
MD5 9a6f54740d0cc318308084094769ccb8
BLAKE2b-256 965262a04e508d04885e798c2ea3812629fe6f047a53099d0527317e5bd49a4d

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a9ff483e6afe6bb287fd5af45e391b3073fcee9adb47becaf9f10d611a01cb58
MD5 14db3aba4fb2f4eaa9ddb9667545a66a
BLAKE2b-256 e9a3a864d3ffff70969ce372b12a54d8735b13a6c97125769438ab67dbd16af7

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cce18e1298b5e3f4276ac6dfdcae7a185f97330f4f5435b7a9712bda073a3e16
MD5 5ed2e454c78fec37f20f0931509edaf5
BLAKE2b-256 9ce71b04a9a140df480aca613553f12618c1b7b5bf7362cc090e0af9b9d67da2

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 361707cb36ccc2fea72681e656143be96cb9d1006027f3c7a977b02686345106
MD5 d7ec23c5bdd40dad74bf9dd0deb7eb5c
BLAKE2b-256 5d32f6770ece1de2e59175eb3b4951129c801b6f5f56ba6172cea719ad66f5c5

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5539dc14d69c1555023d4254f7f866cae0726887fa0c38f12338b222f7ce177a
MD5 1f4d3719daad5c9fbcc901bb87b189cb
BLAKE2b-256 0b2200e42c371b20b4589bbacad459fcb670ac0bdbc65c11dae3c859282c2851

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 133af65e04b3e45fb0614c9244351ea06f3b69cc75471ddf95772f5b55b2eed7
MD5 e2b644d39a1dda992c437ad34e5d8c21
BLAKE2b-256 7ecccf795c96765497467c82549f614fac220c65091638447934c439254b5a65

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1e1aff5851d6daad334fd3fa000da389e1b556737a9be480de224a4fdc126097
MD5 86091a61a5330a845bf72b0c9d9bd0f2
BLAKE2b-256 161546659f620f6cbdc1f98ce202ab2aff74b78d3cffe66d2bce79c89030b541

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8d1e18c661736da3c8a6945b62b60376955e89db34934145f11dba9296244fe0
MD5 671ac64aa141df0019ece3335fb2cb1f
BLAKE2b-256 bbcea0300e0c247abf2fa5cc53a28a583ccdda9d475e4d57fa0047fde030fb31

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 211f9d3934a43893a4e498144e6a4e8bf493cb76e971de52d95f668bbd1e7afa
MD5 eaa28548a6e5a27ca572aac53c07b3df
BLAKE2b-256 593be4a76e48c15dc972f8f9b8587cfb66992b8308f6fdd9a23399f0775cd019

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 be1c699219346a1794fc8bef8befa24ba8752fd5576d62056269a09eaccda863
MD5 c67f04251674c4cd83db48f875a5dc62
BLAKE2b-256 e7b580cc4b6f839d01cd3451eaab0e40aea932816f14771fa1fe9479faaf59d2

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 26f69fe7044b140cbdc77c95c350ab665503ff4fe482784364609adde2b8acdb
MD5 f0ea9fb16ab0dd90f40ed33d634be064
BLAKE2b-256 3c51a665974456f6fdb0aa53cc443424dabb1cd2618ebed60703920924b3e746

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de62e12e0894ad22a1c8377b8ff3d24ffcb9d37098d3711f51f27bdd18ca1ec0
MD5 18dc95afd92c916b8175a543b325ebfb
BLAKE2b-256 7187d7c26e08f96a8d2541f7b7037680668be78e49ad17a8dfcac908709e3fb6

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5163bf321feae386ce7289170bfe8e025e5bad24cb7b01480045c71bf51ca252
MD5 498bbf17f8d98ff9031730241b753a08
BLAKE2b-256 fad45113fd83c8e0591d17b51de05fcfa6f925e8791e2c41039e79f07cc3b0bd

See more details on using hashes here.

File details

Details for the file simplification-0.6.4-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.6.4-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9dbfe5134742405a9d844d46ca4983f8e749b632ddca5793aa985c4236ee072b
MD5 08f9775d83176f2847c47ce7f36a1609
BLAKE2b-256 cdc40a011463e35d499606db6f21b28f77a4dac655ce9f01b618473d4af52055

See more details on using hashes here.

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