simplify v2.0.0 Simplify
Implementation of the Ramer–Douglas–Peucker algorithm for reducing the number of points used to represent a curve.
The Simplify
module contains a function simplify
that accepts a List of
coordinates, each coordinate being a tuple {x, y}
, and a tolerance. The
function reduces the number of points by removing points that are less than
the tolerance away from the simplified curve.
points = [{0, 0}, {0.05, 0.05}, {-0.05, 0.5}, {0, 1}, {0.05, 1.1}, {1, 1}, {0.5, 0.5}, {0, 0.0001}]
Simplify.simplify(points, 0.1) # => [{0, 0}, {0.05, 1.1}, {1, 1}, {0, 0.0001}]
The method will also take a Geo.LineString
struct as created by the conversion
functions in the Geo project (https://github.com/bryanjos/geo). This allows
for easy import of GeoJSON or WKT/WKB formats. This version of the function
returns a Geo.LineString
of the simplified curve.
"{"type":"LineString":"coordinates":[[0,0],[0.05,0.05],[-0.05,0.5],[0,1],[0.05,1.1],[1,1],[0.5,0.5],[0,0.0001]]"
|> Jason.decode!
|> Geo.JSON.decode
|> Simplify.simplify(0.1)
|> Geo.JSON.encode
|> Jason.encode! # => "{"coordinates":[[0,0],[0.05,1.1],[1,1],[0,0.0001]],"type":"LineString"}"
Link to this section Summary
Link to this section Types
Link to this type
point()
Link to this section Functions
Link to this function
simplify(coordinates, tolerance)
simplify(coordinates, tolerance)
simplify([point()], number()) :: [point()]
simplify(Geo.LineString.t(), number()) :: Geo.LineString.t()
simplify([point()], number()) :: [point()]
simplify(Geo.LineString.t(), number()) :: Geo.LineString.t()