| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var __defProp = Object.defineProperty;
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
- // index.ts
- var _GeojsonEquality = class _GeojsonEquality {
- constructor(opts) {
- this.direction = false;
- this.compareProperties = true;
- var _a, _b, _c;
- this.precision = 10 ** -((_a = opts == null ? void 0 : opts.precision) != null ? _a : 17);
- this.direction = (_b = opts == null ? void 0 : opts.direction) != null ? _b : false;
- this.compareProperties = (_c = opts == null ? void 0 : opts.compareProperties) != null ? _c : true;
- }
- compare(g1, g2) {
- if (g1.type !== g2.type) {
- return false;
- }
- if (!sameLength(g1, g2)) {
- return false;
- }
- switch (g1.type) {
- case "Point":
- return this.compareCoord(g1.coordinates, g2.coordinates);
- case "LineString":
- return this.compareLine(g1.coordinates, g2.coordinates);
- case "Polygon":
- return this.comparePolygon(g1, g2);
- case "GeometryCollection":
- return this.compareGeometryCollection(g1, g2);
- case "Feature":
- return this.compareFeature(g1, g2);
- case "FeatureCollection":
- return this.compareFeatureCollection(g1, g2);
- default:
- if (g1.type.startsWith("Multi")) {
- const g1s = explode(g1);
- const g2s = explode(
- g2
- );
- return g1s.every(
- (g1part) => g2s.some((g2part) => this.compare(g1part, g2part))
- );
- }
- }
- return false;
- }
- compareCoord(c1, c2) {
- return c1.length === c2.length && c1.every((c, i) => Math.abs(c - c2[i]) < this.precision);
- }
- compareLine(path1, path2, ind = 0, isPoly = false) {
- if (!sameLength(path1, path2)) {
- return false;
- }
- const p1 = path1;
- let p2 = path2;
- if (isPoly && !this.compareCoord(p1[0], p2[0])) {
- const startIndex = this.fixStartIndex(p2, p1);
- if (!startIndex) {
- return false;
- } else {
- p2 = startIndex;
- }
- }
- const sameDirection = this.compareCoord(p1[ind], p2[ind]);
- if (this.direction || sameDirection) {
- return this.comparePath(p1, p2);
- } else {
- if (this.compareCoord(p1[ind], p2[p2.length - (1 + ind)])) {
- return this.comparePath(p1.slice().reverse(), p2);
- }
- return false;
- }
- }
- fixStartIndex(sourcePath, targetPath) {
- let correctPath, ind = -1;
- for (let i = 0; i < sourcePath.length; i++) {
- if (this.compareCoord(sourcePath[i], targetPath[0])) {
- ind = i;
- break;
- }
- }
- if (ind >= 0) {
- correctPath = [].concat(
- sourcePath.slice(ind, sourcePath.length),
- sourcePath.slice(1, ind + 1)
- );
- }
- return correctPath;
- }
- comparePath(p1, p2) {
- return p1.every((c, i) => this.compareCoord(c, p2[i]));
- }
- comparePolygon(g1, g2) {
- if (this.compareLine(g1.coordinates[0], g2.coordinates[0], 1, true)) {
- const holes1 = g1.coordinates.slice(1, g1.coordinates.length);
- const holes2 = g2.coordinates.slice(1, g2.coordinates.length);
- return holes1.every(
- (h1) => holes2.some((h2) => this.compareLine(h1, h2, 1, true))
- );
- }
- return false;
- }
- compareGeometryCollection(g1, g2) {
- return sameLength(g1.geometries, g2.geometries) && this.compareBBox(g1, g2) && g1.geometries.every((g, i) => this.compare(g, g2.geometries[i]));
- }
- compareFeature(g1, g2) {
- return g1.id === g2.id && (this.compareProperties ? equal(g1.properties, g2.properties) : true) && this.compareBBox(g1, g2) && this.compare(g1.geometry, g2.geometry);
- }
- compareFeatureCollection(g1, g2) {
- return sameLength(g1.features, g2.features) && this.compareBBox(g1, g2) && g1.features.every((f, i) => this.compare(f, g2.features[i]));
- }
- compareBBox(g1, g2) {
- return Boolean(!g1.bbox && !g2.bbox) || (g1.bbox && g2.bbox ? this.compareCoord(g1.bbox, g2.bbox) : false);
- }
- };
- __name(_GeojsonEquality, "GeojsonEquality");
- var GeojsonEquality = _GeojsonEquality;
- function sameLength(g1, g2) {
- return g1.coordinates ? g1.coordinates.length === g2.coordinates.length : g1.length === g2.length;
- }
- __name(sameLength, "sameLength");
- function explode(g) {
- return g.coordinates.map((part) => ({
- type: g.type.replace("Multi", ""),
- coordinates: part
- }));
- }
- __name(explode, "explode");
- function geojsonEquality(g1, g2, opts) {
- const eq = new GeojsonEquality(opts);
- return eq.compare(g1, g2);
- }
- __name(geojsonEquality, "geojsonEquality");
- function equal(object1, object2) {
- if (object1 === null && object2 === null) {
- return true;
- }
- if (object1 === null || object2 === null) {
- return false;
- }
- const objKeys1 = Object.keys(object1);
- const objKeys2 = Object.keys(object2);
- if (objKeys1.length !== objKeys2.length) return false;
- for (var key of objKeys1) {
- const value1 = object1[key];
- const value2 = object2[key];
- const isObjects = isObject(value1) && isObject(value2);
- if (isObjects && !equal(value1, value2) || !isObjects && value1 !== value2) {
- return false;
- }
- }
- return true;
- }
- __name(equal, "equal");
- var isObject = /* @__PURE__ */ __name((object) => {
- return object != null && typeof object === "object";
- }, "isObject");
- var geojson_equality_ts_default = GeojsonEquality;
- exports.GeojsonEquality = GeojsonEquality; exports.default = geojson_equality_ts_default; exports.geojsonEquality = geojsonEquality;
- //# sourceMappingURL=index.cjs.map
|