#polyline #geometry #graphics #simplify #simplify-js

simplify-polyline

Simplify polylines using Douglas-Peucker and radial distance algorithms. Port of the simplify-js library.

6 releases (breaking)

0.5.0 Oct 15, 2023
0.4.0 Oct 27, 2022
0.3.0 Oct 25, 2022
0.2.1 Oct 20, 2022
0.1.0 Oct 6, 2022

#1299 in Math

MIT license

190KB
526 lines

simplify-polyline

crates.io latest version crates.io total downloads docs.rs status

A Rust port of the Javascript simplify-js library.

Examples

use simplify_polyline::*;

fn main() {
    let points = [
        Point { vec: [0.0, 0.0] }, Point { vec: [1.0, 1.0] },
        Point { vec: [2.0, 2.0] }, Point { vec: [3.0, 3.0] },
        Point { vec: [4.0, 4.0] }
    ];
    // alternatively, use the point! macro
    let points = [
        point!(0.0, 0.0), point!(1.0, 1.0), point!(2.0, 2.0),
        point!(3.0, 3.0), point!(4.0, 4.0)
    ];
    // alternatively, use the points! macro
    let points = points![(0.0, 0.0), (1.0, 1.0), (2.0, 2.0), (3.0, 3.0), (4.0, 4.0)];

    // low-quality simplification (fast)
    let new_points = simplify(&points, 1.0, false);
    // low-quality simplification (slower)
    let new_points = simplify(&points, 1.0, true);
}

Features

  • serde, optional, defaults to off. Allows serializing/deserializing points.
    • Note, this only works for some dimensions, and some formats. Read the docs for more info.

Performance

Measurements taken with an AMD Ryzen 7 5800x, in Pop!_OS 22.04.

Test Case simplify-polyline simplify-js
1118 Points, Low Quality, Tolerance 1 16.584 μs 52.907 μs
1118 Points, High Quality, Tolerance 1 26.989 μs 85.653 μs
1118 Points, Low Quality, Tolerance 5 3.987 μs 12.840 μs
1118 Points, High Quality, Tolerance 5 19.497 μs 57.901 μs
73752 Points, Low Quality, Tolerance 1 82.251 μs 273.075 μs
73752 Points, High Quality, Tolerance 1 1933.700 μs 5376.344 μs
73752 Points, Low Quality, Tolerance 5 54.150 μs 181.554 μs
73752 Points, High Quality, Tolerance 5 1458.900 μs 3921.569 μs

Contributing

Tests

$ cargo test --all-features

or

$ cargo make test

Benchmarks

$ cargo bench --all-features

or

$ cargo make bench

Dependencies