
simplify-geojson-visvalingam
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.
Install
npm i --save simplify-geojson-visvalingam
Parameters
-
geojson
GeoJSON object to be simplified, should extends GeoJsonObject in TypeScript
-
options
Object Optional parameters (optional, default {}
), should be of type SimplifyOptions in TypeScript
options.tolerance
number simplification tolerance, the minimum Cartesian area of a triangle formed by a point and its two neighbors to preserve that point (optional, default 0
)
options.fraction
number the fraction of all points to be removed (optional, default 0
)
options.mutate
boolean allows GeoJSON input to be mutated (optional, default true
)
tolerance
and fraction
can be used together to make the simplification satisfy both options, but if neither is provided, the geojson
will remain unsimplified
Features and limitations
- 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
Usage
JS
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)
TS
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)