Takes a GeoJSON object and returns a simplified version. Uses the Visvalingam–Wyatt algorithm with additional logic for stable simplification and preservation of common boundaries.
npm i --save simplify-geojson-visvalingam
-
geojson
GeoJSON object to be simplified, should extends GeoJsonObject in TypeScript -
options
Object Optional parameters (optional, default{}
), should be of type SimplifyOptions in TypeScriptoptions.tolerance
number simplification tolerance, the minimum Cartesian area of a triangle formed by a point and its two neighbors to preserve that point (optional, default0
)options.fraction
number the fraction of all points to be removed (optional, default0
)options.mutate
boolean allows GeoJSON input to be mutated (optional, defaulttrue
)
tolerance
andfraction
can be used together to make the simplification satisfy both options, but if neither is provided, thegeojson
will remain unsimplified
- Provides stable simplification and a better level of visual detail than the Ramer–Douglas–Peucker algorithm
- Will remove common points of different geometries simultaneously to preserve common boundaries
- Will leave valid empty
Feature
objects even if all their geometry will be removed, the GeoJSON structure will remain intact - The start and end point of the
LineString
objects will never be removed
import simplify from 'simplify-geojson-visvalingam'
// CommonJS
// const simplify = require('simplify-geojson-visvalingam').default
const geojson = {
"type": "Polygon",
"coordinates": [
[
[-70.603637, -33.399918],
[-70.614624, -33.395332],
[-70.639343, -33.392466],
[-70.659942, -33.394759],
[-70.683975, -33.404504],
[-70.697021, -33.419406],
[-70.701141, -33.434306],
[-70.700454, -33.446339],
[-70.694274, -33.458369],
[-70.682601, -33.465816],
[-70.668869, -33.472117],
[-70.646209, -33.473835],
[-70.624923, -33.472117],
[-70.609817, -33.468107],
[-70.595397, -33.458369],
[-70.587158, -33.442901],
[-70.587158, -33.426283],
[-70.590591, -33.414248],
[-70.594711, -33.406224],
[-70.603637, -33.399918]
]
]
}
const options = {
tolerance: 0.00008, // remove all points that form a triangle with a smaller Cartesian area
}
const result = simplify(geojson, options)
import { type Polygon } from 'geojson'
import simplify, { type SimplifyOptions } from 'simplify-geojson-visvalingam'
const geojson: Polygon = {
"type": "Polygon",
"coordinates": [
[
[-70.603637, -33.399918],
[-70.614624, -33.395332],
[-70.639343, -33.392466],
[-70.659942, -33.394759],
[-70.683975, -33.404504],
[-70.697021, -33.419406],
[-70.701141, -33.434306],
[-70.700454, -33.446339],
[-70.694274, -33.458369],
[-70.682601, -33.465816],
[-70.668869, -33.472117],
[-70.646209, -33.473835],
[-70.624923, -33.472117],
[-70.609817, -33.468107],
[-70.595397, -33.458369],
[-70.587158, -33.442901],
[-70.587158, -33.426283],
[-70.590591, -33.414248],
[-70.594711, -33.406224],
[-70.603637, -33.399918]
]
]
}
const options: SimplifyOptions = {
fraction: 0.5, // remove 50% of all points
}
const result = simplify(geojson, options)