simplify-geojson-visvalingam
v1.3.4
Published
GeoJSON simplification library using the Visvalingam algorithm for efficient point reduction and geometry preservation.
Maintainers
Readme
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-visvalingamParameters
geojsonGeoJSON object to be simplified, should extends GeoJsonObject in TypeScriptoptionsObject Optional parameters (optional, default{}), should be of type SimplifyOptions in TypeScriptoptions.tolerancenumber simplification tolerance, the minimum Cartesian area of a triangle formed by a point and its two neighbors to preserve that point (optional, default0)options.fractionnumber the fraction of all points to be removed (optional, default0)options.mutateboolean allows GeoJSON input to be mutated (optional, defaulttrue)
toleranceandfractioncan be used together to make the simplification satisfy both options, but if neither is provided, thegeojsonwill 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
Featureobjects even if all their geometry will be removed, the GeoJSON structure will remain intact - The start and end point of the
LineStringobjects 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)