simplify-geojson-visvalingam 1.0.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +9 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -12
- package/index.js +0 -4
package/README.md
CHANGED
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var m=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var g=(e,i)=>{for(var r in i)m(e,r,{get:i[r],enumerable:!0})},w=(e,i,r,n)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of M(i))!N.call(e,t)&&t!==r&&m(e,t,{get:()=>i[t],enumerable:!(n=C(i,t))||n.enumerable});return e};var E=e=>w(m({},"__esModule",{value:!0}),e);var $={};g($,{default:()=>R});module.exports=E($);function F(e){return e!=null&&Number.isFinite(e)&&e>0}function u(e){return typeof e=="object"&&e!==null}function d(e){return u(e)&&e?.type==="Feature"}function y(e){return u(e)&&e?.type==="FeatureCollection"}function h(e){return u(e)&&e?.type==="LineString"}function P(e){return u(e)&&e?.type==="MultiLineString"}function x(e){return u(e)&&e?.type==="Polygon"}function I(e){return u(e)&&e?.type==="MultiPolygon"}function p(e){return u(e)&&e?.type==="GeometryCollection"}function R(e,i={}){if(!u(e))throw new TypeError(`Expected provided GeoJSON to be an object, but received ${e===null?"null":typeof e}.`);let r;if(i.tolerance!==void 0&&!F(i.tolerance))throw new Error(`Expected provided tolerance to be a finite positive number, but received ${i.tolerance}.`);if(i.tolerance===void 0)return e;r=i.tolerance;let n=!0;i.mutate!==void 0&&(n=i.mutate),n||(e=structuredClone(e));let t={coordinates:[],coordinatesIndexes:[],nextIndexes:[],prevIndexes:[]};c(e,t);let l=new Array(t.coordinatesIndexes.length).fill(!1);return T(t,r,l),f(e,t,l,0),e}function T(e,i,r){let n=e.coordinatesIndexes.length-1,t=0,l=1,o,v,G,a,s,b;for(;t<=n;){if(!r[t]&&e.prevIndexes[t]!==-1&&e.nextIndexes[t]!==-1&&([o,a]=e.coordinates[t][e.coordinatesIndexes[t]],[v,s]=e.coordinates[t][e.coordinatesIndexes[e.prevIndexes[t]]],[G,b]=e.coordinates[t][e.coordinatesIndexes[e.nextIndexes[t]]],Math.abs(o*(s-b)+v*(b-a)+G*(a-s))/2<i)){r[t]=!0,e.prevIndexes[e.nextIndexes[t]]=e.prevIndexes[t],e.nextIndexes[e.prevIndexes[t]]=e.nextIndexes[t],t=e.prevIndexes[t];continue}t=l++}}function f(e,i,r,n){if(y(e))for(let t=0;t<e.features.length;t++)n=f(e.features[t],i,r,n);else if(d(e))n=f(e.geometry,i,r,n);else if(p(e))for(let t=0;t<e.geometries.length;t++)n=f(e.geometries[t],i,r,n);else if(h(e))n=O(e.coordinates,r,n);else if(P(e))for(let t=0;t<e.coordinates.length;t++)n=O(e.coordinates[t],r,n);else if(x(e)){let t=!1;[n,t]=J(e.coordinates,r,n),t&&e.coordinates.splice(0)}else if(I(e)){let t=0;for(let l=!1,o=0;o<e.coordinates.length;o++)[n,l]=J(e.coordinates[o],r,n),l?t++:t&&(e.coordinates[o-t]=e.coordinates[o]);t&&e.coordinates.splice(e.coordinates.length-t)}return n}function O(e,i,r){let n=0;for(let t=0;t<e.length;t++)i[r]?n++:n&&(e[t-n]=e[t]),r++;return n&&e.splice(e.length-n),r}function J(e,i,r){let n=0;for(let t=!1,l=0;l<e.length;l++)if([r,t]=_(e[l],i,r),t){if(l===0){for(l=1;l<e.length;l++)e[l].length&&(r+=e[l].length-1);return[r,!0]}n++}else n&&(e[l-n]=e[l]);return n&&e.splice(e.length-n),[r,!1]}function _(e,i,r){let n=0;for(let t=0;t<e.length-1;t++)i[r]?n++:n&&(e[t-n]=e[t]),r++;if(n){if(e.length-1-n<3)return[r,!0];e.splice(e.length-1-n,n+1,e[0])}return[r,!1]}function c(e,i){if(y(e))for(let r=0;r<e.features.length;r++)c(e.features[r],i);else if(d(e))c(e.geometry,i);else if(p(e))for(let r=0;r<e.geometries.length;r++)c(e.geometries[r],i);else if(h(e))S(e.coordinates,i);else if(P(e))for(let r=0;r<e.coordinates.length;r++)S(e.coordinates[r],i);else if(x(e))for(let r=0;r<e.coordinates.length;r++)L(e.coordinates[r],i);else if(I(e))for(let r,n=0;n<e.coordinates.length;n++)for(r=0;r<e.coordinates[n].length;r++)L(e.coordinates[n][r],i)}function S(e,i){for(let r=i.coordinatesIndexes.length,n=e.length,t=0;t<n;t++)i.coordinates.push(e),i.coordinatesIndexes.push(t),i.prevIndexes.push(t===0?-1:r+t-1),i.nextIndexes.push(t===n-1?-1:r+t+1)}function L(e,i){for(let r=i.coordinatesIndexes.length,n=e.length-1,t=0;t<n;t++)i.coordinates.push(e),i.coordinatesIndexes.push(t),i.prevIndexes.push(t===0?r+n-1:r+t-1),i.nextIndexes.push(t===n-1?r:r+t+1)}
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/typeGuards.ts"],"sourcesContent":["import { GeoJsonObject, Position } from 'geojson'\nimport {\n isObject,\n FinitePositiveNumber,\n isFinitePositiveNumber,\n isFeature,\n isFeatureCollection,\n isLineString,\n isMultiLineString,\n isPolygon,\n isMultiPolygon,\n isGeometryCollection,\n} from '@lib/typeGuards'\n\nexport type SimplifyOptions = {\n tolerance?: number\n mutate?: boolean\n}\n\ntype Positions = {\n coordinates: Position[][]\n coordinatesIndexes: number[]\n nextIndexes: number[]\n prevIndexes: number[]\n}\n\nexport default function (geojson: GeoJsonObject, options: SimplifyOptions = {}): GeoJsonObject {\n // validate input data\n if (!isObject(geojson)) {\n throw new TypeError(\n `Expected provided GeoJSON to be an object, but received ${geojson === null ? 'null' : typeof geojson}.`,\n )\n }\n\n // validate options\n let tolerance: FinitePositiveNumber\n if (options.tolerance !== undefined && !isFinitePositiveNumber(options.tolerance)) {\n throw new Error(`Expected provided tolerance to be a finite positive number, but received ${options.tolerance}.`)\n } else {\n // exit if no simplification options provided\n if (options.tolerance === undefined) return geojson\n tolerance = options.tolerance\n }\n let mutate = true\n if (options.mutate !== undefined) mutate = options.mutate\n\n if (!mutate) {\n geojson = structuredClone(geojson)\n }\n\n const positions: Positions = {\n coordinates: [],\n coordinatesIndexes: [],\n nextIndexes: [],\n prevIndexes: [],\n }\n\n collectPositions(geojson, positions)\n const isDeleted: boolean[] = new Array(positions.coordinatesIndexes.length).fill(false)\n deletePositionsByTolerance(positions, tolerance, isDeleted)\n updatePositions(geojson, positions, isDeleted, 0)\n\n return geojson\n}\n\nfunction deletePositionsByTolerance(positions: Positions, tolerance: FinitePositiveNumber, isDeleted: boolean[]): void {\n const n = positions.coordinatesIndexes.length - 1\n let l = 0\n let r = 1\n let x1: number, x2: number, x3: number, y1: number, y2: number, y3: number\n while (l <= n) {\n if (!isDeleted[l] && positions.prevIndexes[l] !== -1 && positions.nextIndexes[l] !== -1) {\n // check if we need to delete current position\n ;[x1, y1] = positions.coordinates[l][positions.coordinatesIndexes[l]]\n ;[x2, y2] = positions.coordinates[l][positions.coordinatesIndexes[positions.prevIndexes[l]]]\n ;[x3, y3] = positions.coordinates[l][positions.coordinatesIndexes[positions.nextIndexes[l]]]\n if (Math.abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2 < tolerance) {\n isDeleted[l] = true\n // update positions linked list\n positions.prevIndexes[positions.nextIndexes[l]] = positions.prevIndexes[l]\n positions.nextIndexes[positions.prevIndexes[l]] = positions.nextIndexes[l]\n // jump to previous position to recheck updated triangle\n l = positions.prevIndexes[l]\n continue\n }\n }\n l = r++\n }\n}\n\nfunction updatePositions(geojson: GeoJsonObject, positions: Positions, isDeleted: boolean[], index: number): number {\n if (isFeatureCollection(geojson)) {\n for (let i = 0; i < geojson.features.length; i++) {\n index = updatePositions(geojson.features[i], positions, isDeleted, index)\n }\n } else if (isFeature(geojson)) {\n index = updatePositions(geojson.geometry, positions, isDeleted, index)\n } else if (isGeometryCollection(geojson)) {\n for (let i = 0; i < geojson.geometries.length; i++) {\n index = updatePositions(geojson.geometries[i], positions, isDeleted, index)\n }\n } else if (isLineString(geojson)) {\n index = updateLinePositions(geojson.coordinates, isDeleted, index)\n } else if (isMultiLineString(geojson)) {\n for (let i = 0; i < geojson.coordinates.length; i++) {\n index = updateLinePositions(geojson.coordinates[i], isDeleted, index)\n }\n } else if (isPolygon(geojson)) {\n let remove = false\n ;[index, remove] = updateRingsPositions(geojson.coordinates, isDeleted, index)\n if (remove) geojson.coordinates.splice(0)\n } else if (isMultiPolygon(geojson)) {\n let offset = 0\n for (let remove = false, i = 0; i < geojson.coordinates.length; i++) {\n ;[index, remove] = updateRingsPositions(geojson.coordinates[i], isDeleted, index)\n if (remove) {\n offset++\n } else if (offset) {\n geojson.coordinates[i - offset] = geojson.coordinates[i]\n }\n }\n if (offset) geojson.coordinates.splice(geojson.coordinates.length - offset)\n }\n return index\n}\n\nfunction updateLinePositions(coordinates: Position[], isDeleted: boolean[], index: number): number {\n let offset = 0\n for (let i = 0; i < coordinates.length; i++) {\n if (isDeleted[index]) {\n offset++\n } else if (offset) {\n coordinates[i - offset] = coordinates[i]\n }\n index++\n }\n if (offset) coordinates.splice(coordinates.length - offset)\n return index\n}\n\nfunction updateRingsPositions(coordinates: Position[][], isDeleted: boolean[], index: number): [number, boolean] {\n let offset = 0\n for (let remove = false, i = 0; i < coordinates.length; i++) {\n ;[index, remove] = updateRingPositions(coordinates[i], isDeleted, index)\n if (remove) {\n // skip interior rings if exterior ring is removed\n if (i === 0) {\n for (i = 1; i < coordinates.length; i++) {\n if (coordinates[i].length) index += coordinates[i].length - 1\n }\n // avoid alternating coordinates array if exterior ring is removed\n return [index, true]\n }\n offset++\n } else if (offset) {\n coordinates[i - offset] = coordinates[i]\n }\n }\n if (offset) coordinates.splice(coordinates.length - offset)\n return [index, false]\n}\n\nfunction updateRingPositions(coordinates: Position[], isDeleted: boolean[], index: number): [number, boolean] {\n let offset = 0\n for (let i = 0; i < coordinates.length - 1; i++) {\n if (isDeleted[index]) {\n offset++\n } else if (offset) {\n coordinates[i - offset] = coordinates[i]\n }\n index++\n }\n if (offset) {\n if (coordinates.length - 1 - offset < 3) {\n // avoid alternating coordinates array if ring is removed\n return [index, true]\n }\n coordinates.splice(coordinates.length - 1 - offset, offset + 1, coordinates[0])\n }\n return [index, false]\n}\n\nfunction collectPositions(geojson: GeoJsonObject, positions: Positions): void {\n if (isFeatureCollection(geojson)) {\n for (let i = 0; i < geojson.features.length; i++) {\n collectPositions(geojson.features[i], positions)\n }\n } else if (isFeature(geojson)) {\n collectPositions(geojson.geometry, positions)\n } else if (isGeometryCollection(geojson)) {\n for (let i = 0; i < geojson.geometries.length; i++) {\n collectPositions(geojson.geometries[i], positions)\n }\n } else if (isLineString(geojson)) {\n collectLinePositions(geojson.coordinates, positions)\n } else if (isMultiLineString(geojson)) {\n for (let i = 0; i < geojson.coordinates.length; i++) {\n collectLinePositions(geojson.coordinates[i], positions)\n }\n } else if (isPolygon(geojson)) {\n for (let i = 0; i < geojson.coordinates.length; i++) {\n collectRingPositions(geojson.coordinates[i], positions)\n }\n } else if (isMultiPolygon(geojson)) {\n for (let j, i = 0; i < geojson.coordinates.length; i++) {\n for (j = 0; j < geojson.coordinates[i].length; j++) {\n collectRingPositions(geojson.coordinates[i][j], positions)\n }\n }\n }\n}\n\nfunction collectLinePositions(coordinates: Position[], positions: Positions) {\n for (let p = positions.coordinatesIndexes.length, n = coordinates.length, i = 0; i < n; i++) {\n positions.coordinates.push(coordinates)\n positions.coordinatesIndexes.push(i)\n positions.prevIndexes.push(i === 0 ? -1 : p + i - 1)\n positions.nextIndexes.push(i === n - 1 ? -1 : p + i + 1)\n }\n}\n\nfunction collectRingPositions(coordinates: Position[], positions: Positions) {\n for (let p = positions.coordinatesIndexes.length, n = coordinates.length - 1, i = 0; i < n; i++) {\n positions.coordinates.push(coordinates)\n positions.coordinatesIndexes.push(i)\n positions.prevIndexes.push(i === 0 ? p + n - 1 : p + i - 1)\n positions.nextIndexes.push(i === n - 1 ? p : p + i + 1)\n }\n}\n","import {\n GeoJsonObject,\n Feature,\n FeatureCollection,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon,\n GeometryCollection,\n} from 'geojson'\n\nexport type FinitePositiveNumber = number & { readonly __type: unique symbol }\n\nexport function isFinitePositiveNumber(value: number): value is FinitePositiveNumber {\n return value != null && Number.isFinite(value) && value > 0\n}\n\nexport function isObject(value: object): value is object {\n return typeof value === 'object' && value !== null\n}\n\nexport function isFeature(value: GeoJsonObject): value is Feature {\n return isObject(value) && value?.type === 'Feature'\n}\n\nexport function isFeatureCollection(value: GeoJsonObject): value is FeatureCollection {\n return isObject(value) && value?.type === 'FeatureCollection'\n}\n\nexport function isLineString(value: GeoJsonObject): value is LineString {\n return isObject(value) && value?.type === 'LineString'\n}\n\nexport function isMultiLineString(value: GeoJsonObject): value is MultiLineString {\n return isObject(value) && value?.type === 'MultiLineString'\n}\n\nexport function isPolygon(value: GeoJsonObject): value is Polygon {\n return isObject(value) && value?.type === 'Polygon'\n}\n\nexport function isMultiPolygon(value: GeoJsonObject): value is MultiPolygon {\n return isObject(value) && value?.type === 'MultiPolygon'\n}\n\nexport function isGeometryCollection(value: GeoJsonObject): value is GeometryCollection {\n return isObject(value) && value?.type === 'GeometryCollection'\n}\n"],"mappings":"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","names":["index_exports","__export","index_default","__toCommonJS","isFinitePositiveNumber","value","isObject","isFeature","isFeatureCollection","isLineString","isMultiLineString","isPolygon","isMultiPolygon","isGeometryCollection","index_default","geojson","options","isObject","tolerance","isFinitePositiveNumber","mutate","positions","collectPositions","isDeleted","deletePositionsByTolerance","updatePositions","l","r","x1","x2","x3","y1","y2","y3","index","isFeatureCollection","i","isFeature","isGeometryCollection","isLineString","updateLinePositions","isMultiLineString","isPolygon","remove","updateRingsPositions","isMultiPolygon","offset","coordinates","updateRingPositions","collectLinePositions","collectRingPositions","j","p"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { GeoJsonObject } from 'geojson';
|
|
2
|
+
|
|
3
|
+
type SimplifyOptions = {
|
|
4
|
+
tolerance?: number;
|
|
5
|
+
mutate?: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare function export_default(geojson: GeoJsonObject, options?: SimplifyOptions): GeoJsonObject;
|
|
8
|
+
|
|
9
|
+
export { type SimplifyOptions, export_default as default };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { GeoJsonObject } from 'geojson';
|
|
2
|
+
|
|
3
|
+
type SimplifyOptions = {
|
|
4
|
+
tolerance?: number;
|
|
5
|
+
mutate?: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare function export_default(geojson: GeoJsonObject, options?: SimplifyOptions): GeoJsonObject;
|
|
8
|
+
|
|
9
|
+
export { type SimplifyOptions, export_default as default };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function G(e){return e!=null&&Number.isFinite(e)&&e>0}function u(e){return typeof e=="object"&&e!==null}function m(e){return u(e)&&e?.type==="Feature"}function d(e){return u(e)&&e?.type==="FeatureCollection"}function y(e){return u(e)&&e?.type==="LineString"}function h(e){return u(e)&&e?.type==="MultiLineString"}function P(e){return u(e)&&e?.type==="Polygon"}function x(e){return u(e)&&e?.type==="MultiPolygon"}function I(e){return u(e)&&e?.type==="GeometryCollection"}function w(e,i={}){if(!u(e))throw new TypeError(`Expected provided GeoJSON to be an object, but received ${e===null?"null":typeof e}.`);let r;if(i.tolerance!==void 0&&!G(i.tolerance))throw new Error(`Expected provided tolerance to be a finite positive number, but received ${i.tolerance}.`);if(i.tolerance===void 0)return e;r=i.tolerance;let n=!0;i.mutate!==void 0&&(n=i.mutate),n||(e=structuredClone(e));let t={coordinates:[],coordinatesIndexes:[],nextIndexes:[],prevIndexes:[]};c(e,t);let l=new Array(t.coordinatesIndexes.length).fill(!1);return L(t,r,l),f(e,t,l,0),e}function L(e,i,r){let n=e.coordinatesIndexes.length-1,t=0,l=1,o,p,v,a,s,b;for(;t<=n;){if(!r[t]&&e.prevIndexes[t]!==-1&&e.nextIndexes[t]!==-1&&([o,a]=e.coordinates[t][e.coordinatesIndexes[t]],[p,s]=e.coordinates[t][e.coordinatesIndexes[e.prevIndexes[t]]],[v,b]=e.coordinates[t][e.coordinatesIndexes[e.nextIndexes[t]]],Math.abs(o*(s-b)+p*(b-a)+v*(a-s))/2<i)){r[t]=!0,e.prevIndexes[e.nextIndexes[t]]=e.prevIndexes[t],e.nextIndexes[e.prevIndexes[t]]=e.nextIndexes[t],t=e.prevIndexes[t];continue}t=l++}}function f(e,i,r,n){if(d(e))for(let t=0;t<e.features.length;t++)n=f(e.features[t],i,r,n);else if(m(e))n=f(e.geometry,i,r,n);else if(I(e))for(let t=0;t<e.geometries.length;t++)n=f(e.geometries[t],i,r,n);else if(y(e))n=F(e.coordinates,r,n);else if(h(e))for(let t=0;t<e.coordinates.length;t++)n=F(e.coordinates[t],r,n);else if(P(e)){let t=!1;[n,t]=O(e.coordinates,r,n),t&&e.coordinates.splice(0)}else if(x(e)){let t=0;for(let l=!1,o=0;o<e.coordinates.length;o++)[n,l]=O(e.coordinates[o],r,n),l?t++:t&&(e.coordinates[o-t]=e.coordinates[o]);t&&e.coordinates.splice(e.coordinates.length-t)}return n}function F(e,i,r){let n=0;for(let t=0;t<e.length;t++)i[r]?n++:n&&(e[t-n]=e[t]),r++;return n&&e.splice(e.length-n),r}function O(e,i,r){let n=0;for(let t=!1,l=0;l<e.length;l++)if([r,t]=C(e[l],i,r),t){if(l===0){for(l=1;l<e.length;l++)e[l].length&&(r+=e[l].length-1);return[r,!0]}n++}else n&&(e[l-n]=e[l]);return n&&e.splice(e.length-n),[r,!1]}function C(e,i,r){let n=0;for(let t=0;t<e.length-1;t++)i[r]?n++:n&&(e[t-n]=e[t]),r++;if(n){if(e.length-1-n<3)return[r,!0];e.splice(e.length-1-n,n+1,e[0])}return[r,!1]}function c(e,i){if(d(e))for(let r=0;r<e.features.length;r++)c(e.features[r],i);else if(m(e))c(e.geometry,i);else if(I(e))for(let r=0;r<e.geometries.length;r++)c(e.geometries[r],i);else if(y(e))J(e.coordinates,i);else if(h(e))for(let r=0;r<e.coordinates.length;r++)J(e.coordinates[r],i);else if(P(e))for(let r=0;r<e.coordinates.length;r++)S(e.coordinates[r],i);else if(x(e))for(let r,n=0;n<e.coordinates.length;n++)for(r=0;r<e.coordinates[n].length;r++)S(e.coordinates[n][r],i)}function J(e,i){for(let r=i.coordinatesIndexes.length,n=e.length,t=0;t<n;t++)i.coordinates.push(e),i.coordinatesIndexes.push(t),i.prevIndexes.push(t===0?-1:r+t-1),i.nextIndexes.push(t===n-1?-1:r+t+1)}function S(e,i){for(let r=i.coordinatesIndexes.length,n=e.length-1,t=0;t<n;t++)i.coordinates.push(e),i.coordinatesIndexes.push(t),i.prevIndexes.push(t===0?r+n-1:r+t-1),i.nextIndexes.push(t===n-1?r:r+t+1)}export{w as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/typeGuards.ts","../src/index.ts"],"sourcesContent":["import {\n GeoJsonObject,\n Feature,\n FeatureCollection,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon,\n GeometryCollection,\n} from 'geojson'\n\nexport type FinitePositiveNumber = number & { readonly __type: unique symbol }\n\nexport function isFinitePositiveNumber(value: number): value is FinitePositiveNumber {\n return value != null && Number.isFinite(value) && value > 0\n}\n\nexport function isObject(value: object): value is object {\n return typeof value === 'object' && value !== null\n}\n\nexport function isFeature(value: GeoJsonObject): value is Feature {\n return isObject(value) && value?.type === 'Feature'\n}\n\nexport function isFeatureCollection(value: GeoJsonObject): value is FeatureCollection {\n return isObject(value) && value?.type === 'FeatureCollection'\n}\n\nexport function isLineString(value: GeoJsonObject): value is LineString {\n return isObject(value) && value?.type === 'LineString'\n}\n\nexport function isMultiLineString(value: GeoJsonObject): value is MultiLineString {\n return isObject(value) && value?.type === 'MultiLineString'\n}\n\nexport function isPolygon(value: GeoJsonObject): value is Polygon {\n return isObject(value) && value?.type === 'Polygon'\n}\n\nexport function isMultiPolygon(value: GeoJsonObject): value is MultiPolygon {\n return isObject(value) && value?.type === 'MultiPolygon'\n}\n\nexport function isGeometryCollection(value: GeoJsonObject): value is GeometryCollection {\n return isObject(value) && value?.type === 'GeometryCollection'\n}\n","import { GeoJsonObject, Position } from 'geojson'\nimport {\n isObject,\n FinitePositiveNumber,\n isFinitePositiveNumber,\n isFeature,\n isFeatureCollection,\n isLineString,\n isMultiLineString,\n isPolygon,\n isMultiPolygon,\n isGeometryCollection,\n} from '@lib/typeGuards'\n\nexport type SimplifyOptions = {\n tolerance?: number\n mutate?: boolean\n}\n\ntype Positions = {\n coordinates: Position[][]\n coordinatesIndexes: number[]\n nextIndexes: number[]\n prevIndexes: number[]\n}\n\nexport default function (geojson: GeoJsonObject, options: SimplifyOptions = {}): GeoJsonObject {\n // validate input data\n if (!isObject(geojson)) {\n throw new TypeError(\n `Expected provided GeoJSON to be an object, but received ${geojson === null ? 'null' : typeof geojson}.`,\n )\n }\n\n // validate options\n let tolerance: FinitePositiveNumber\n if (options.tolerance !== undefined && !isFinitePositiveNumber(options.tolerance)) {\n throw new Error(`Expected provided tolerance to be a finite positive number, but received ${options.tolerance}.`)\n } else {\n // exit if no simplification options provided\n if (options.tolerance === undefined) return geojson\n tolerance = options.tolerance\n }\n let mutate = true\n if (options.mutate !== undefined) mutate = options.mutate\n\n if (!mutate) {\n geojson = structuredClone(geojson)\n }\n\n const positions: Positions = {\n coordinates: [],\n coordinatesIndexes: [],\n nextIndexes: [],\n prevIndexes: [],\n }\n\n collectPositions(geojson, positions)\n const isDeleted: boolean[] = new Array(positions.coordinatesIndexes.length).fill(false)\n deletePositionsByTolerance(positions, tolerance, isDeleted)\n updatePositions(geojson, positions, isDeleted, 0)\n\n return geojson\n}\n\nfunction deletePositionsByTolerance(positions: Positions, tolerance: FinitePositiveNumber, isDeleted: boolean[]): void {\n const n = positions.coordinatesIndexes.length - 1\n let l = 0\n let r = 1\n let x1: number, x2: number, x3: number, y1: number, y2: number, y3: number\n while (l <= n) {\n if (!isDeleted[l] && positions.prevIndexes[l] !== -1 && positions.nextIndexes[l] !== -1) {\n // check if we need to delete current position\n ;[x1, y1] = positions.coordinates[l][positions.coordinatesIndexes[l]]\n ;[x2, y2] = positions.coordinates[l][positions.coordinatesIndexes[positions.prevIndexes[l]]]\n ;[x3, y3] = positions.coordinates[l][positions.coordinatesIndexes[positions.nextIndexes[l]]]\n if (Math.abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2 < tolerance) {\n isDeleted[l] = true\n // update positions linked list\n positions.prevIndexes[positions.nextIndexes[l]] = positions.prevIndexes[l]\n positions.nextIndexes[positions.prevIndexes[l]] = positions.nextIndexes[l]\n // jump to previous position to recheck updated triangle\n l = positions.prevIndexes[l]\n continue\n }\n }\n l = r++\n }\n}\n\nfunction updatePositions(geojson: GeoJsonObject, positions: Positions, isDeleted: boolean[], index: number): number {\n if (isFeatureCollection(geojson)) {\n for (let i = 0; i < geojson.features.length; i++) {\n index = updatePositions(geojson.features[i], positions, isDeleted, index)\n }\n } else if (isFeature(geojson)) {\n index = updatePositions(geojson.geometry, positions, isDeleted, index)\n } else if (isGeometryCollection(geojson)) {\n for (let i = 0; i < geojson.geometries.length; i++) {\n index = updatePositions(geojson.geometries[i], positions, isDeleted, index)\n }\n } else if (isLineString(geojson)) {\n index = updateLinePositions(geojson.coordinates, isDeleted, index)\n } else if (isMultiLineString(geojson)) {\n for (let i = 0; i < geojson.coordinates.length; i++) {\n index = updateLinePositions(geojson.coordinates[i], isDeleted, index)\n }\n } else if (isPolygon(geojson)) {\n let remove = false\n ;[index, remove] = updateRingsPositions(geojson.coordinates, isDeleted, index)\n if (remove) geojson.coordinates.splice(0)\n } else if (isMultiPolygon(geojson)) {\n let offset = 0\n for (let remove = false, i = 0; i < geojson.coordinates.length; i++) {\n ;[index, remove] = updateRingsPositions(geojson.coordinates[i], isDeleted, index)\n if (remove) {\n offset++\n } else if (offset) {\n geojson.coordinates[i - offset] = geojson.coordinates[i]\n }\n }\n if (offset) geojson.coordinates.splice(geojson.coordinates.length - offset)\n }\n return index\n}\n\nfunction updateLinePositions(coordinates: Position[], isDeleted: boolean[], index: number): number {\n let offset = 0\n for (let i = 0; i < coordinates.length; i++) {\n if (isDeleted[index]) {\n offset++\n } else if (offset) {\n coordinates[i - offset] = coordinates[i]\n }\n index++\n }\n if (offset) coordinates.splice(coordinates.length - offset)\n return index\n}\n\nfunction updateRingsPositions(coordinates: Position[][], isDeleted: boolean[], index: number): [number, boolean] {\n let offset = 0\n for (let remove = false, i = 0; i < coordinates.length; i++) {\n ;[index, remove] = updateRingPositions(coordinates[i], isDeleted, index)\n if (remove) {\n // skip interior rings if exterior ring is removed\n if (i === 0) {\n for (i = 1; i < coordinates.length; i++) {\n if (coordinates[i].length) index += coordinates[i].length - 1\n }\n // avoid alternating coordinates array if exterior ring is removed\n return [index, true]\n }\n offset++\n } else if (offset) {\n coordinates[i - offset] = coordinates[i]\n }\n }\n if (offset) coordinates.splice(coordinates.length - offset)\n return [index, false]\n}\n\nfunction updateRingPositions(coordinates: Position[], isDeleted: boolean[], index: number): [number, boolean] {\n let offset = 0\n for (let i = 0; i < coordinates.length - 1; i++) {\n if (isDeleted[index]) {\n offset++\n } else if (offset) {\n coordinates[i - offset] = coordinates[i]\n }\n index++\n }\n if (offset) {\n if (coordinates.length - 1 - offset < 3) {\n // avoid alternating coordinates array if ring is removed\n return [index, true]\n }\n coordinates.splice(coordinates.length - 1 - offset, offset + 1, coordinates[0])\n }\n return [index, false]\n}\n\nfunction collectPositions(geojson: GeoJsonObject, positions: Positions): void {\n if (isFeatureCollection(geojson)) {\n for (let i = 0; i < geojson.features.length; i++) {\n collectPositions(geojson.features[i], positions)\n }\n } else if (isFeature(geojson)) {\n collectPositions(geojson.geometry, positions)\n } else if (isGeometryCollection(geojson)) {\n for (let i = 0; i < geojson.geometries.length; i++) {\n collectPositions(geojson.geometries[i], positions)\n }\n } else if (isLineString(geojson)) {\n collectLinePositions(geojson.coordinates, positions)\n } else if (isMultiLineString(geojson)) {\n for (let i = 0; i < geojson.coordinates.length; i++) {\n collectLinePositions(geojson.coordinates[i], positions)\n }\n } else if (isPolygon(geojson)) {\n for (let i = 0; i < geojson.coordinates.length; i++) {\n collectRingPositions(geojson.coordinates[i], positions)\n }\n } else if (isMultiPolygon(geojson)) {\n for (let j, i = 0; i < geojson.coordinates.length; i++) {\n for (j = 0; j < geojson.coordinates[i].length; j++) {\n collectRingPositions(geojson.coordinates[i][j], positions)\n }\n }\n }\n}\n\nfunction collectLinePositions(coordinates: Position[], positions: Positions) {\n for (let p = positions.coordinatesIndexes.length, n = coordinates.length, i = 0; i < n; i++) {\n positions.coordinates.push(coordinates)\n positions.coordinatesIndexes.push(i)\n positions.prevIndexes.push(i === 0 ? -1 : p + i - 1)\n positions.nextIndexes.push(i === n - 1 ? -1 : p + i + 1)\n }\n}\n\nfunction collectRingPositions(coordinates: Position[], positions: Positions) {\n for (let p = positions.coordinatesIndexes.length, n = coordinates.length - 1, i = 0; i < n; i++) {\n positions.coordinates.push(coordinates)\n positions.coordinatesIndexes.push(i)\n positions.prevIndexes.push(i === 0 ? p + n - 1 : p + i - 1)\n positions.nextIndexes.push(i === n - 1 ? p : p + i + 1)\n }\n}\n"],"mappings":"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","names":["isFinitePositiveNumber","value","isObject","isFeature","isFeatureCollection","isLineString","isMultiLineString","isPolygon","isMultiPolygon","isGeometryCollection","index_default","geojson","options","isObject","tolerance","isFinitePositiveNumber","mutate","positions","collectPositions","isDeleted","deletePositionsByTolerance","updatePositions","l","r","x1","x2","x3","y1","y2","y3","index","isFeatureCollection","i","isFeature","isGeometryCollection","isLineString","updateLinePositions","isMultiLineString","isPolygon","remove","updateRingsPositions","isMultiPolygon","offset","coordinates","updateRingPositions","collectLinePositions","collectRingPositions","j","p"]}
|
package/package.json
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "simplify-geojson-visvalingam",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "GeoJSON simplification library using the Visvalingam algorithm for efficient point reduction and geometry preservation.",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
-
},
|
|
9
|
-
"repository": {
|
|
10
|
-
"type": "git",
|
|
11
|
-
"url": "git+https://github.com/iamaleko/simplify-geojson-visvalingam.git"
|
|
12
|
-
},
|
|
5
|
+
"author": "Alexander Kolobov",
|
|
6
|
+
"license": "MIT",
|
|
13
7
|
"keywords": [
|
|
14
8
|
"geojson",
|
|
15
9
|
"simplification",
|
|
@@ -22,10 +16,48 @@
|
|
|
22
16
|
"geo",
|
|
23
17
|
"map"
|
|
24
18
|
],
|
|
25
|
-
"author": "Alexander Kolobov",
|
|
26
|
-
"license": "MIT",
|
|
27
19
|
"bugs": {
|
|
28
20
|
"url": "https://github.com/iamaleko/simplify-geojson-visvalingam/issues"
|
|
29
21
|
},
|
|
30
|
-
"homepage": "https://github.com/iamaleko/simplify-geojson-visvalingam#readme"
|
|
22
|
+
"homepage": "https://github.com/iamaleko/simplify-geojson-visvalingam#readme",
|
|
23
|
+
"type": "module",
|
|
24
|
+
"main": "dist/index.js",
|
|
25
|
+
"module": "dist/index.mjs",
|
|
26
|
+
"types": "dist/index.d.ts",
|
|
27
|
+
"exports": {
|
|
28
|
+
".": {
|
|
29
|
+
"import": "./dist/index.mjs",
|
|
30
|
+
"require": "./dist/index.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist"
|
|
35
|
+
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"watch": "tsup --watch",
|
|
38
|
+
"test": "mocha",
|
|
39
|
+
"lint": "eslint . --max-warnings=0",
|
|
40
|
+
"lint:fix": "eslint . --fix",
|
|
41
|
+
"format": "prettier '**/*.{ts,js,json}' --ignore-path .prettierignore --write",
|
|
42
|
+
"build": "npm run lint && npm run test && tsup",
|
|
43
|
+
"playground": "npx tsx watch playground/index.ts"
|
|
44
|
+
},
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "git+https://github.com/iamaleko/simplify-geojson-visvalingam.git"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/assert": "^1.5.11",
|
|
51
|
+
"@types/geojson": "^7946.0.16",
|
|
52
|
+
"@types/mocha": "^10.0.10",
|
|
53
|
+
"eslint": "^9.25.0",
|
|
54
|
+
"eslint-config-prettier": "^10.1.2",
|
|
55
|
+
"eslint-plugin-prettier": "^5.2.6",
|
|
56
|
+
"mocha": "^11.1.0",
|
|
57
|
+
"prettier": "3.5.3",
|
|
58
|
+
"tsup": "^8.4.0",
|
|
59
|
+
"tsx": "^4.19.3",
|
|
60
|
+
"typescript": "^5.8.3",
|
|
61
|
+
"typescript-eslint": "^8.30.1"
|
|
62
|
+
}
|
|
31
63
|
}
|
package/index.js
DELETED