@kalisio/common-geospatial 0.9.0 → 0.10.0
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 +9 -3
- package/dist/foundation/index.cjs +2 -0
- package/dist/foundation/index.cjs.map +1 -0
- package/dist/foundation/index.mjs +77 -0
- package/dist/foundation/index.mjs.map +1 -0
- package/dist/geojson-CJ6QZ9pN.js +647 -0
- package/dist/geojson-CJ6QZ9pN.js.map +1 -0
- package/dist/geojson-QgqoCFjn.cjs +2 -0
- package/dist/geojson-QgqoCFjn.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +99 -1919
- package/dist/index.mjs.map +1 -1
- package/dist/io/index.cjs +11 -0
- package/dist/io/index.cjs.map +1 -0
- package/dist/io/index.mjs +539 -0
- package/dist/io/index.mjs.map +1 -0
- package/dist/line-CcfAx7LP.js +16 -0
- package/dist/line-CcfAx7LP.js.map +1 -0
- package/dist/line-Doxbvzns.cjs +2 -0
- package/dist/line-Doxbvzns.cjs.map +1 -0
- package/dist/operators/index.cjs +2 -0
- package/dist/operators/index.cjs.map +1 -0
- package/dist/operators/index.mjs +28 -0
- package/dist/operators/index.mjs.map +1 -0
- package/dist/ring-Cks2pGr8.js +1334 -0
- package/dist/ring-Cks2pGr8.js.map +1 -0
- package/dist/ring-CnFBeolv.cjs +2 -0
- package/dist/ring-CnFBeolv.cjs.map +1 -0
- package/dist/truncate-Cb17e4VI.cjs +2 -0
- package/dist/truncate-Cb17e4VI.cjs.map +1 -0
- package/dist/truncate-Cs8jmwOi.js +139 -0
- package/dist/truncate-Cs8jmwOi.js.map +1 -0
- package/package.json +22 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring-CnFBeolv.cjs","sources":["../../common-core/dist/optional-C8lnNAGJ.js","../src/foundation/axes.js","../src/foundation/localization.js","../src/foundation/directions.js","../src/foundation/coordinate-formats/dd.js","../src/foundation/coordinate-formats/ddm.js","../src/foundation/coordinate-formats/ddm-aero.js","../src/foundation/coordinate-formats/dms.js","../src/foundation/coordinate-formats/converter.js","../src/foundation/coordinate-formats/index.js","../src/foundation/coordinate.js","../../common-core/dist/object-YU9rgFz5.js","../../common-core/dist/math-B5MPVgyl.js","../src/foundation/nvector.js","../src/foundation/projections.js","../src/foundation/position.js","../src/foundation/bbox.js","../src/foundation/positions.js","../src/foundation/ring.js"],"sourcesContent":["const c = typeof process > \"u\" || process.env?.NODE_ENV !== \"production\";\nclass m extends Error {\n constructor(n) {\n super(n), this.name = \"AssertionError\";\n }\n}\nfunction p(e, n, r) {\n if (!n(e)) throw new m(r);\n}\nconst a = {\n that(e, n, r) {\n c && p(e, n, r);\n },\n all(e) {\n if (c)\n for (const { value: n, validator: r, message: i } of e)\n p(n, r, i);\n },\n any(e) {\n if (!c || e.length === 0) return;\n if (!e.some(({ value: r, validator: i }) => i(r)))\n throw new m(e.map(({ message: r }) => r).join(\" or \"));\n }\n}, t = {\n defined(e) {\n return e != null;\n },\n nil(e) {\n return !t.defined(e);\n },\n plainObject(e) {\n return t.defined(e) && typeof e == \"object\" && !Array.isArray(e) && e.constructor === Object;\n },\n emptyObject(e) {\n return t.plainObject(e) && Object.keys(e).length === 0;\n },\n nonEmptyObject(e) {\n return t.plainObject(e) && Object.keys(e).length > 0;\n },\n boolean(e) {\n return typeof e == \"boolean\";\n },\n booleanTrue(e) {\n return e === !0;\n },\n booleanFalse(e) {\n return e === !1;\n },\n string(e) {\n return typeof e == \"string\";\n },\n emptyString(e) {\n return t.string(e) && e.trim().length === 0;\n },\n nonEmptyString(e) {\n return t.string(e) && e.trim().length > 0;\n },\n char(e) {\n return t.string(e) && /^.$/u.test(e);\n },\n hex(e) {\n return t.nonEmptyString(e) && e.length % 2 === 0 && /^[0-9a-fA-F]*$/.test(e);\n },\n dataUri(e) {\n return t.string(e) ? e.startsWith(\"data:\") && e.includes(\";base64,\") : !1;\n },\n url(e) {\n if (typeof e != \"string\") return !1;\n const r = /^([a-z][a-z0-9+.-]*:\\/\\/)([^/?#]+)(\\/[^?#]*)?(\\?[^#]*)?(#.*)?$/i.exec(e);\n if (!r?.[2].includes(\",\")) return URL.canParse(e);\n const [, i, s, g = \"\", o = \"\", b = \"\"] = r;\n return s.split(\",\").every((u, h) => (u = u.trim(), !u || h > 0 && u.includes(\"@\") ? !1 : URL.canParse(`${i}${u}${g}${o}${b}`)));\n },\n email(e) {\n if (!t.string(e)) return !1;\n const n = /^[-!#$%&'*+/0-9=?A-Z^_a-z`{|}~](\\.?[-!#$%&'*+/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-?\\.?[a-zA-Z0-9])*\\.[a-zA-Z](-?[a-zA-Z0-9])+$/, [r, i] = e.split(\"@\");\n return !r || !i || r.length > 64 || i.length > 255 || i.split(\".\").some((s) => s.length > 63) ? !1 : n.test(e);\n },\n regularExpression(e) {\n return t.defined(e) && e instanceof RegExp;\n },\n number(e) {\n return typeof e == \"number\" && !isNaN(e) && isFinite(e);\n },\n positive(e) {\n return t.number(e) && e > 0;\n },\n nonPositive(e) {\n return t.number(e) && e <= 0;\n },\n negative(e) {\n return t.number(e) && e < 0;\n },\n nonNegative(e) {\n return t.number(e) && e >= 0;\n },\n inRange(e, n, r) {\n return a.that(r, (i) => i >= n, \"max must be greater than or equal to min\"), t.number(e) && e >= n && e <= r;\n },\n inRangeExclusive(e, n, r) {\n return a.that(r, (i) => i > n, \"max must be greater than min\"), t.number(e) && e > n && e < r;\n },\n inRangeExclusiveMin(e, n, r) {\n return a.that(r, (i) => i > n, \"max must be greater than min\"), t.number(e) && e > n && e <= r;\n },\n inRangeExclusiveMax(e, n, r) {\n return a.that(r, (i) => i >= n, \"max must be greater than or equal to min\"), t.number(e) && e >= n && e < r;\n },\n integer(e) {\n return t.number(e) && Number.isInteger(e);\n },\n positiveInteger(e) {\n return t.integer(e) && t.positive(e);\n },\n nonPositiveInteger(e) {\n return t.integer(e) && t.nonPositive(e);\n },\n negativeInteger(e) {\n return t.integer(e) && t.negative(e);\n },\n nonNegativeInteger(e) {\n return t.integer(e) && t.nonNegative(e);\n },\n array(e) {\n return Array.isArray(e);\n },\n emptyArray(e) {\n return t.array(e) && e.length === 0;\n },\n nonEmptyArray(e) {\n return t.array(e) && e.length > 0;\n },\n arrayOfLength(e, n) {\n return a.that(n, t.nonNegativeInteger, \"length must be a non negative integer\"), t.array(e) && e.length === n;\n },\n arrayOfLengthAtLeast(e, n) {\n return a.that(n, t.nonNegativeInteger, \"minLength must be a non negative integer\"), t.array(e) && e.length >= n;\n },\n arrayOfLengthAtMost(e, n) {\n return a.that(n, t.nonNegativeInteger, \"maxLength must be a non negative integer\"), t.array(e) && e.length <= n;\n },\n arrayOfLengthBetween(e, n, r) {\n return a.all([\n { value: n, validator: t.nonNegativeInteger, message: \"minLength must be a non negative integer\" },\n { value: r, validator: t.nonNegativeInteger, message: \"maxLength must be a non negative integer\" },\n { value: n, validator: (i) => i <= r, message: \"minLength must be less than or equal to maxLength\" }\n ]), t.array(e) && e.length >= n && e.length <= r;\n },\n map(e) {\n return t.defined(e) && e instanceof Map;\n },\n emptyMap(e) {\n return t.map(e) && e.size === 0;\n },\n nonEmptyMap(e) {\n return t.map(e) && e.size > 0;\n },\n set(e) {\n return t.defined(e) && e instanceof Set;\n },\n emptySet(e) {\n return t.set(e) && e.size === 0;\n },\n nonEmptySet(e) {\n return t.set(e) && e.size > 0;\n },\n function(e) {\n return typeof e == \"function\";\n },\n oneOf(e, n) {\n return a.that(n, t.nonEmptyArray, \"allowed values must be a non empty array\"), n.includes(e);\n },\n empty(e) {\n return t.nil(e) ? !0 : t.string(e) ? t.emptyString(e) : t.array(e) ? t.emptyArray(e) : t.plainObject(e) ? t.emptyObject(e) : t.map(e) ? t.emptyMap(e) : t.set(e) ? t.emptySet(e) : !1;\n }\n}, f = {\n key(e, n) {\n return a.all([\n { value: e, validator: t.plainObject, message: \"obj must be an object\" },\n { value: n, validator: t.nonEmptyString, message: \"key must be a non empty string\" }\n ]), Object.hasOwn(e, n);\n },\n keys(e, n) {\n return a.all([\n { value: e, validator: t.plainObject, message: \"obj must be an object\" },\n { value: n, validator: (r) => t.array(r) && r.length > 0 && r.every(t.nonEmptyString), message: \"keys must be an array of non empty strings\" }\n ]), n.every((r) => f.key(e, r));\n },\n keyWithValue(e, n) {\n return f.key(e, n) && t.defined(e[n]);\n },\n path(e, n) {\n a.all([\n { value: e, validator: t.plainObject, message: \"obj must be an object\" },\n { value: n, validator: t.nonEmptyString, message: \"path must be a non empty string\" }\n ]);\n let r = e;\n for (const i of n.split(\".\")) {\n if (!r || !t.plainObject(r) || !(i in r)) return !1;\n r = r[i];\n }\n return !0;\n }\n};\nfunction y(e, n, r = \"\") {\n return Object.entries(n).every(([i, s]) => {\n const g = r ? `${r}.${i}` : i;\n if (!f.key(e, i))\n return s._optional === !0;\n const o = e[i];\n if (t.plainObject(s))\n return t.plainObject(o) && y(o, s, g);\n if (typeof s == \"function\")\n return s(o);\n throw new m(`Invalid validator for key \"${g}\"`);\n });\n}\nconst d = {\n schema(e, n) {\n return a.all([\n { value: e, validator: t.plainObject, message: \"obj must be an object\" },\n { value: n, validator: t.plainObject, message: \"schema must be an object\" }\n ]), y(e, n);\n }\n};\nfunction O(e) {\n a.that(e, t.function, \"validator must be a function\");\n function n(r) {\n return t.nil(r) ? !0 : e(r);\n }\n return n._optional = !0, n;\n}\nexport {\n m as A,\n a,\n d as c,\n f as h,\n t as i,\n O as o\n};\n//# sourceMappingURL=optional-C8lnNAGJ.js.map\n","import { assert, is } from '@kalisio/common-core/predicates'\n\nexport const AXES = {\n LATITUDE: 'LAT',\n LONGITUDE: 'LON',\n ALTITUDE: 'ALT'\n}\n\nexport function isValidAxis (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return Object.values(AXES).includes(axis)\n}\n\nexport function isLatitude (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return axis === AXES.LATITUDE\n}\n\nexport function isLongitude (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return axis === AXES.LONGITUDE\n}\n\nexport function isAltitude (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return axis === AXES.ALTITUDE\n}\n","import { assert, is, has, conform } from '@kalisio/common-core/predicates'\nimport fr from './i18n/fr.json'\nimport en from './i18n/en.json'\n\nconst MESSAGES_SCHEMA = {\n DIRECTIONS: {\n NORTH: { label: is.string, symbol: is.char },\n SOUTH: { label: is.string, symbol: is.char },\n EAST: { label: is.string, symbol: is.char },\n WEST: { label: is.string, symbol: is.char }\n }\n}\n\nconst MESSAGES = {\n en,\n fr\n}\n\nlet CURRENT_LOCALE = 'en'\nconst FALLBACK_LOCALE = 'en'\n\nexport function listLocales () {\n return Object.keys(MESSAGES)\n}\n\nexport function setLocale (code) {\n assert.all([\n { value: code, validator: is.string, message: 'code must be a string' },\n { value: code, validator: (v) => has.key(MESSAGES, v), message: 'code is unknown' }\n ])\n CURRENT_LOCALE = code\n}\n\nexport function getLocale () {\n return CURRENT_LOCALE\n}\n\nexport function getActiveLocales () {\n return CURRENT_LOCALE === FALLBACK_LOCALE\n ? [CURRENT_LOCALE]\n : [CURRENT_LOCALE, FALLBACK_LOCALE]\n}\n\nexport function registerMessages (code, messages) {\n assert.all([\n { value: code, validator: is.string, message: 'code must be a string' },\n { value: code, validator: (v) => !has.key(MESSAGES, v), message: 'messages already registered' },\n { value: messages, validator: is.plainObject, message: 'messages must be an object' },\n { value: messages, validator: (v) => conform.schema(v, MESSAGES_SCHEMA), message: 'messages do not conform to schema' }\n ])\n MESSAGES[code] = messages\n}\n\nexport function getMessages (code) {\n assert.all([\n { value: code, validator: is.string, message: 'code must be a string' },\n { value: code, validator: (v) => has.key(MESSAGES, v), message: 'code is unknown' }\n ])\n return MESSAGES[code]\n}\n","import { assert, is } from '@kalisio/common-core/predicates'\nimport { getLocale, getActiveLocales, getMessages } from './localization.js'\nimport { AXES, isLatitude, isLongitude, isValidAxis } from './axes.js'\n\nfunction getLocalizedDirections () {\n return getMessages(getLocale()).DIRECTIONS\n}\n\nfunction collectLocalizedSymbols (keys) {\n const symbols = new Set()\n for (const code of getActiveLocales()) {\n const { DIRECTIONS } = getMessages(code)\n for (const key of keys) symbols.add(DIRECTIONS[key].symbol)\n }\n return [...symbols]\n}\n\n// A direction matches a type if it equals its label or its symbol, in any of\n// the active locales (current + fallback), case-insensitively.\nfunction isValidDirectionOf (type, dir) {\n const value = dir.toUpperCase()\n return getActiveLocales().some((code) => {\n const { label, symbol } = getMessages(code).DIRECTIONS[type]\n return value === label.toUpperCase() || value === symbol.toUpperCase()\n })\n}\n\nexport function getDirections (axis = null) {\n const directions = getLocalizedDirections()\n if (is.defined(axis)) {\n assert.that(axis, isValidAxis, 'axis must be a valid axis')\n if (isLatitude(axis)) return [directions.SOUTH, directions.NORTH]\n if (isLongitude(axis)) return [directions.EAST, directions.WEST]\n return []\n }\n return [directions.SOUTH, directions.NORTH, directions.EAST, directions.WEST]\n}\n\nexport function getDirectionSymbols (axis = null) {\n if (is.defined(axis)) {\n assert.that(axis, isValidAxis, 'axis must be a valid axis')\n if (isLatitude(axis)) return collectLocalizedSymbols(['NORTH', 'SOUTH'])\n if (isLongitude(axis)) return collectLocalizedSymbols(['EAST', 'WEST'])\n return []\n }\n return collectLocalizedSymbols(['NORTH', 'SOUTH', 'EAST', 'WEST'])\n}\n\nexport function getNorth () { return getLocalizedDirections().NORTH }\nexport function getSouth () { return getLocalizedDirections().SOUTH }\nexport function getEast () { return getLocalizedDirections().EAST }\nexport function getWest () { return getLocalizedDirections().WEST }\n\nexport function isValidDirection (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isNorth(dir) || isSouth(dir) || isEast(dir) || isWest(dir)\n}\n\nexport function isNorth (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isValidDirectionOf('NORTH', dir)\n}\n\nexport function isSouth (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isValidDirectionOf('SOUTH', dir)\n}\n\nexport function isEast (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isValidDirectionOf('EAST', dir)\n}\n\nexport function isWest (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isValidDirectionOf('WEST', dir)\n}\n\nexport function getDirectionAxis (dir) {\n assert.that(dir, isValidDirection, 'dir must be a direction')\n if (isWest(dir) || isEast(dir)) return AXES.LONGITUDE\n return AXES.LATITUDE\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core/predicates'\nimport { isValidDirection, getDirectionSymbols } from '../directions.js'\n\nconst SCHEMA = {\n degrees: is.number,\n direction: optional(isValidDirection)\n}\n\nconst REGEX_SIGNED = /^(-?\\d{1,3}(?:\\.\\d+)?)°?$/\n\nfunction dirRegex () {\n return new RegExp(`^(\\\\d{1,3}(?:\\\\.\\\\d+)?)°?([${getDirectionSymbols()}])$`, 'i')\n}\n\nexport function DD (dd) {\n let _degrees = null\n let _direction = null\n\n if (is.plainObject(dd) && conform.schema(dd, SCHEMA)) {\n if (is.defined(dd.direction)) {\n if (dd.degrees >= 0) {\n _degrees = dd.degrees\n _direction = dd.direction\n }\n } else {\n _degrees = dd.degrees\n }\n } else if (is.string(dd)) {\n const pattern = dd.replace(/\\s+/g, '')\n const match = pattern.match(REGEX_SIGNED) ?? pattern.match(dirRegex())\n if (match) {\n _degrees = parseFloat(match[1])\n _direction = match[2] ?? null\n }\n }\n\n return {\n get degrees () { return _degrees },\n get direction () { return _direction },\n get format () { return 'DD' },\n\n isValid () {\n return is.number(_degrees)\n },\n\n toString (decimalPlaces) {\n assert.that(decimalPlaces, is.positiveInteger, 'decimalPlaces must be a positive integer')\n if (!this.isValid()) return ''\n let str = `${_degrees.toFixed(decimalPlaces)}°`\n if (_direction) str += ` ${_direction}`\n return str\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees, direction: _direction })\n }\n }\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core/predicates'\nimport { isValidDirection, getDirectionSymbols } from '../directions.js'\nimport { DD } from './dd.js'\n\nconst SCHEMA = {\n degrees: is.integer,\n minutes: (v) => is.inRangeExclusiveMax(v, 0, 60),\n direction: optional(isValidDirection)\n}\n\nconst REGEX_SIGNED = /^(-?\\d{1,3})°(\\d{1,2}(?:\\.\\d+)?)'?$/\n\nfunction dirRegex () {\n return new RegExp(`^(\\\\d{1,3})°(\\\\d{1,2}(?:\\\\.\\\\d+)?)'?([${getDirectionSymbols().join('')}])$`, 'i')\n}\n\nexport function DDM (ddm) {\n let _degrees = null\n let _minutes = null\n let _direction = null\n\n if (is.plainObject(ddm) && conform.schema(ddm, SCHEMA)) {\n if (is.defined(ddm.direction)) {\n if (ddm.degrees >= 0) {\n _degrees = ddm.degrees\n _minutes = ddm.minutes\n _direction = ddm.direction\n }\n } else {\n _degrees = ddm.degrees\n _minutes = ddm.minutes\n }\n } else if (is.string(ddm)) {\n const pattern = ddm.replace(/\\s+/g, '')\n const match = pattern.match(REGEX_SIGNED) ?? pattern.match(dirRegex())\n if (match) {\n _degrees = parseFloat(match[1])\n _minutes = parseFloat(match[2])\n _direction = match[3] ?? null\n }\n }\n\n return {\n get degrees () { return _degrees },\n get minutes () { return _minutes },\n get direction () { return _direction },\n get format () { return 'DDM' },\n\n isValid () {\n return is.integer(_degrees) && is.inRangeExclusiveMax(_minutes, 0, 60)\n },\n\n toString (decimalPlaces) {\n assert.that(decimalPlaces, is.positiveInteger, 'decimalPlaces must be a positive integer')\n if (!this.isValid()) return ''\n let str = `${_degrees}° ${_minutes.toFixed(decimalPlaces)}'`\n if (_direction) str += ` ${_direction}`\n return str\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees + _minutes / 60, direction: _direction })\n }\n }\n}\n","import { is, conform } from '@kalisio/common-core/predicates'\nimport { AXES } from '../axes.js'\nimport { isValidDirection, isEast, isWest, getDirectionSymbols } from '../directions.js'\nimport { DD } from './dd.js'\n\nconst SCHEMA = {\n degrees: is.nonNegativeInteger,\n minutes: (v) => is.inRangeExclusiveMax(v, 0, 60),\n direction: isValidDirection\n}\n\nfunction latRegex () {\n return new RegExp(`^(\\\\d{2})(\\\\d{3})([${getDirectionSymbols(AXES.LATITUDE).join('')}])$`, 'i')\n}\n\nfunction lonRegex () {\n return new RegExp(`^(\\\\d{3})(\\\\d{3})([${getDirectionSymbols(AXES.LONGITUDE).join('')}])$`, 'i')\n}\n\nexport function DDMAero (ddm) {\n let _degrees = null\n let _minutes = null\n let _direction = null\n\n if (is.plainObject(ddm) && conform.schema(ddm, SCHEMA)) {\n _degrees = ddm.degrees\n _minutes = ddm.minutes\n _direction = ddm.direction\n } else if (is.string(ddm)) {\n const pattern = ddm.trim()\n const match = pattern.match(latRegex()) ?? pattern.match(lonRegex())\n if (match) {\n _degrees = parseFloat(match[1])\n _minutes = parseFloat(match[2]) / 10\n _direction = match[3]\n }\n }\n\n return {\n get degrees () { return _degrees },\n get minutes () { return _minutes },\n get direction () { return _direction },\n get format () { return 'DDM_AERO' },\n\n isValid () {\n return is.nonNegativeInteger(_degrees) &&\n is.inRangeExclusiveMax(_minutes, 0, 60) &&\n isValidDirection(_direction)\n },\n\n toString () {\n if (!this.isValid()) return ''\n const isLon = isEast(_direction) || isWest(_direction)\n const deg = String(_degrees).padStart(isLon ? 3 : 2, '0')\n const min = Math.floor(_minutes * 10).toString().padStart(3, '0')\n return `${deg}${min}${_direction}`\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees + _minutes / 60, direction: _direction })\n }\n }\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core/predicates'\nimport { isValidDirection, getDirectionSymbols } from '../directions.js'\nimport { DD } from './dd.js'\n\nconst SCHEMA = {\n degrees: is.integer,\n minutes: (v) => is.integer(v) && is.inRange(v, 0, 59),\n seconds: (v) => is.inRangeExclusiveMax(v, 0, 60),\n direction: optional(isValidDirection)\n}\n\nconst REGEX_SIGNED = /^(-?\\d{1,3})°(\\d{1,2})'(\\d{1,2}(?:\\.\\d+)?)\"?$/\n\nfunction dirRegex () {\n return new RegExp(`^(\\\\d{1,3})°(\\\\d{1,2})'(\\\\d{1,2}(?:\\\\.\\\\d+)?)\"?([${getDirectionSymbols().join('')}])$`, 'i')\n}\n\nexport function DMS (dms) {\n let _degrees = null\n let _minutes = null\n let _seconds = null\n let _direction = null\n\n if (is.plainObject(dms) && conform.schema(dms, SCHEMA)) {\n if (is.defined(dms.direction)) {\n if (dms.degrees >= 0) {\n _degrees = dms.degrees\n _minutes = dms.minutes\n _seconds = dms.seconds\n _direction = dms.direction\n }\n } else {\n _degrees = dms.degrees\n _minutes = dms.minutes\n _seconds = dms.seconds\n }\n } else if (is.string(dms)) {\n const pattern = dms.replace(/\\s+/g, '')\n const match = pattern.match(REGEX_SIGNED) ?? pattern.match(dirRegex())\n if (match) {\n _degrees = parseFloat(match[1])\n _minutes = parseFloat(match[2])\n _seconds = parseFloat(match[3])\n _direction = match[4] ?? null\n }\n }\n\n return {\n get degrees () { return _degrees },\n get minutes () { return _minutes },\n get seconds () { return _seconds },\n get direction () { return _direction },\n get format () { return 'DMS' },\n\n isValid () {\n return is.integer(_degrees) &&\n is.integer(_minutes) && is.inRange(_minutes, 0, 59) &&\n is.inRangeExclusiveMax(_seconds, 0, 60)\n },\n\n toString (decimalPlaces) {\n assert.that(decimalPlaces, is.positiveInteger, 'decimalPlaces must be a positive integer')\n if (!this.isValid()) return ''\n let str = `${_degrees}° ${_minutes}' ${_seconds.toFixed(decimalPlaces)}\"`\n if (_direction) str += ` ${_direction}`\n return str\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees + _minutes / 60 + _seconds / 3600, direction: _direction })\n }\n }\n}\n","import { assert } from '@kalisio/common-core/predicates'\nimport { DDM } from './ddm.js'\nimport { DDMAero } from './ddm-aero.js'\nimport { DMS } from './dms.js'\n\nfunction decimalToDDM (dd) {\n const degrees = Math.floor(dd.degrees)\n const minutes = (dd.degrees - degrees) * 60\n return { degrees, minutes, direction: dd.direction }\n}\n\nfunction decimalToDMS (dd) {\n const degrees = Math.floor(dd.degrees)\n const minutesDecimal = (dd.degrees - degrees) * 60\n const minutes = Math.floor(minutesDecimal)\n const seconds = (minutesDecimal - minutes) * 60\n return { degrees, minutes, seconds, direction: dd.direction }\n}\n\nexport const converter = {\n DD: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n return dd\n },\n\n DDM: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n const { degrees, minutes, direction } = decimalToDDM(dd)\n return DDM(direction ? { degrees, minutes, direction } : { degrees, minutes })\n },\n\n DMS: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n const { degrees, minutes, seconds, direction } = decimalToDMS(dd)\n return DMS(direction ? { degrees, minutes, seconds, direction } : { degrees, minutes, seconds })\n },\n\n DDM_AERO: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n const { degrees, minutes, direction } = decimalToDDM(dd)\n return DDMAero({ degrees, minutes, direction })\n }\n}\n","import { DD } from './dd.js'\nimport { DDM } from './ddm.js'\nimport { DDMAero } from './ddm-aero.js'\nimport { DMS } from './dms.js'\nexport * from './converter.js'\n\nexport const COORDINATE_FORMATS = {\n DD: 'DD',\n DDM: 'DDM',\n DDM_AERO: 'DDM_AERO',\n DMS: 'DMS'\n}\n\nexport const COORDINATE_MODELS = {\n DD,\n DDM,\n DDM_AERO: DDMAero,\n DMS\n}\n","import { assert, is, has } from '@kalisio/common-core/predicates'\nimport { AXES, isLatitude, isLongitude } from './axes.js'\nimport { isValidDirection, getDirectionAxis } from './directions.js'\nimport { COORDINATE_FORMATS, COORDINATE_MODELS, converter } from './coordinate-formats/index.js'\nexport { COORDINATE_FORMATS, COORDINATE_MODELS } from './coordinate-formats/index.js'\n\nexport const DEFAULT_COORDINATE_PRECISION = 7\nexport const MAX_COORDINATE_PRECISION = 8\nexport const COORDINATE_TRUNCATION_FACTORS = Array.from({ length: MAX_COORDINATE_PRECISION + 1 }, (_, i) => 10 ** i)\n\nexport function guessCoordinateAxis (coord, dir) {\n assert.that(coord, is.number, 'coord must be a number')\n if (is.defined(dir)) {\n assert.that(dir, isValidDirection, 'dir must be a direction')\n return getDirectionAxis(dir)\n }\n if (Math.abs(coord) > 90) return AXES.LONGITUDE\n return undefined\n}\n\nexport function getCoordinatePrecision (coord) {\n assert.that(coord, is.number, 'coord must be a number')\n const str = coord.toExponential()\n const [base, exp] = str.split('e').map(Number)\n const decimalsInBase = (base.toString().split('.')[1] || '').length\n return Math.max(0, decimalsInBase - exp)\n}\n\nexport function truncateCoordinate (coord, precision = DEFAULT_COORDINATE_PRECISION) {\n assert.all([\n {\n value: coord,\n validator: is.number,\n message: 'coord must be a number'\n },\n {\n value: precision,\n validator: (v) => is.inRange(v, 0, MAX_COORDINATE_PRECISION),\n message: `precision must be in range [0, ${MAX_COORDINATE_PRECISION}]`\n }\n ])\n const factor = COORDINATE_TRUNCATION_FACTORS[precision]\n return Math.round(coord * factor) / factor\n}\n\nexport function normalizeCoordinate (coord, axis) {\n assert.all([\n { value: coord, validator: is.number, message: 'coord must be a number' },\n { value: axis, validator: (v) => isLongitude(v) || isLatitude(v), message: 'axis must be either a longitude or latitude' }\n ])\n if (isLatitude(axis)) {\n return Math.max(-90, Math.min(90, coord))\n }\n let lon = ((coord + 180) % 360 + 360) % 360 - 180\n if (lon === -180) lon = 180\n if (Object.is(lon, -0)) lon = 0\n return lon\n}\n\nexport function convertCoordinate (from, to) {\n assert.all([\n { value: from, validator: (v) => is.defined(v) && v.isValid(), message: 'from must be a valid coordinate' },\n { value: to, validator: (v) => has.key(converter, v), message: `unknown format: ${to}` }\n ])\n const dd = from.format === COORDINATE_FORMATS.DD ? from : from.toDecimal()\n if (!dd.isValid()) return null\n if (to === COORDINATE_FORMATS.DD) {\n return dd\n }\n return converter[to](dd)\n}\n\nexport function parseCoordinate (pattern) {\n assert.that(pattern, is.nonEmptyString, 'pattern must be a non empty string')\n for (const format of Object.keys(COORDINATE_FORMATS)) {\n const coord = COORDINATE_MODELS[format](pattern)\n if (coord.isValid()) return coord\n }\n return null\n}\n","import { o as u, a as i, i as r, c as d } from \"./optional-C8lnNAGJ.js\";\nconst h = {\n browser: typeof window < \"u\" && typeof window.document < \"u\",\n node: typeof process < \"u\" && process.versions?.node != null,\n worker: typeof WorkerGlobalScope < \"u\" && self instanceof WorkerGlobalScope,\n serviceWorker: typeof ServiceWorkerGlobalScope < \"u\" && self instanceof ServiceWorkerGlobalScope,\n test: typeof process < \"u\" && process.env.NODE_ENV === \"test\",\n dev: typeof process < \"u\" && process.env.NODE_ENV === \"development\",\n prod: typeof process < \"u\" && process.env.NODE_ENV === \"production\"\n}, b = {\n ignoreSpaces: u(r.boolean),\n ignoreDiacritics: u(r.boolean),\n ignoreCase: u(r.boolean),\n locale: u(r.string)\n}, v = {\n ...b\n};\nfunction g(e, t, a) {\n return c.words(e).map((n, s) => t(c.normalize(n, { ignoreDiacritics: !0 }), s)).join(a);\n}\nconst c = {\n DIACRITICS: {\n a: \"aáàäâã\",\n e: \"eéëèê\",\n i: \"iíïìî\",\n o: \"oóöòõô\",\n u: \"uüúùû\",\n c: \"cç\"\n },\n normalize(e, t = {}) {\n i.all([\n { value: e, validator: r.string, message: \"str must be a string\" },\n { value: t, validator: (m) => d.schema(m, b) }\n ]);\n const {\n ignoreSpaces: a = !1,\n ignoreDiacritics: n = !1,\n ignoreCase: s = !1,\n locale: o = void 0\n // 'fr-FR'\n } = t;\n let l = e;\n return a && (l = l.replace(/\\s+/g, \" \").trim()), n && (l = l.normalize(\"NFKD\").replace(new RegExp(\"\\\\p{M}\", \"gu\"), \"\")), s && (l = l.toLocaleLowerCase(o)), l;\n },\n compare(e, t, a = {}) {\n i.all([\n { value: e, validator: r.string, message: \"str1 must be a string\" },\n { value: t, validator: r.string, message: \"str2 must be a string\" },\n { value: a, validator: (l) => d.schema(l, v) }\n ]);\n const n = { ignoreDiacritics: !0, ignoreCase: !0, ...a }, s = c.normalize(e, n), o = c.normalize(t, n);\n return s.localeCompare(o, a.locale);\n },\n makeDiacriticPattern(e, t = {}) {\n i.that(e, r.string, \"pattern must be a string\");\n const { reverse: a = !1 } = t ?? {};\n let n = \"\";\n for (const s of e) {\n const o = s.toLowerCase();\n let l = null;\n for (const m of Object.values(this.DIACRITICS))\n if (a && m.includes(o) || !a && m.startsWith(o)) {\n l = m;\n break;\n }\n l ? n += `[${l}]` : n += s;\n }\n return n;\n },\n initials(e, t = {}) {\n i.that(e, r.string, \"str must be a string\");\n const { max: a = void 0 } = t, n = e.trim().split(/[\\s-]+/).filter(Boolean).map((s) => s[0].toUpperCase());\n return (a ? n.slice(0, a) : n).join(\"\");\n },\n words(e) {\n return i.that(e, r.string, \"str must be a string\"), e.match(new RegExp(\"\\\\p{Lu}+(?=\\\\p{Lu}\\\\p{Ll})|\\\\p{Lu}?\\\\p{Ll}+|\\\\p{Lu}+|\\\\p{Nd}+\", \"gu\")) ?? [];\n },\n slugify(e, t = \"-\") {\n return i.all([\n { value: e, validator: r.string, message: \"str must be a string\" },\n { value: t, validator: r.char, message: \"separator must be a char\" }\n ]), c.normalize(e.trim(), { ignoreDiacritics: !0 }).toLowerCase().replace(/[^a-z0-9]+/gi, t).replace(new RegExp(`^${t}|${t}$`, \"g\"), \"\");\n },\n capitalize(e) {\n return i.that(e, r.string, \"str must be a string\"), e.charAt(0).toUpperCase() + e.slice(1).toLowerCase();\n },\n camelCase(e) {\n return i.that(e, r.string, \"str must be a string\"), g(e, (t, a) => a === 0 ? t.toLowerCase() : c.capitalize(t), \"\");\n },\n pascalCase(e) {\n return i.that(e, r.string, \"str must be a string\"), g(e, (t) => c.capitalize(t), \"\");\n },\n kebabCase(e) {\n return i.that(e, r.string, \"str must be a string\"), g(e, (t) => t.toLowerCase(), \"-\");\n },\n snakeCase(e) {\n return i.that(e, r.string, \"str must be a string\"), g(e, (t) => t.toLowerCase(), \"_\");\n },\n constantCase(e) {\n return i.that(e, r.string, \"str must be a string\"), g(e, (t) => t.toUpperCase(), \"_\");\n },\n dotCase(e) {\n return i.that(e, r.string, \"str must be a string\"), g(e, (t) => t.toLowerCase(), \".\");\n },\n titleCase(e) {\n return i.that(e, r.string, \"str must be a string\"), c.words(e).map((t) => c.capitalize(t)).join(\" \");\n }\n}, f = {\n ignoreSpaces: u(r.boolean),\n ignoreDiacritics: u(r.boolean),\n ignoreCase: u(r.boolean),\n locale: u(r.string)\n}, C = {\n ...f,\n ignoredKeys: u(r.array)\n};\nfunction p(e, t = {}) {\n if (!r.defined(e)) return e;\n const a = t?.ignoredKeys ?? [], n = { ignoreDiacritics: !1, ignoreCase: !1, locale: t.locale };\n return r.array(e) ? e.map((s) => p(s, t)).sort(\n (s, o) => c.compare(JSON.stringify(s), JSON.stringify(o), n)\n ) : r.plainObject(e) ? Object.fromEntries(\n Object.entries(e).filter(([s]) => !a.includes(s)).sort(([s], [o]) => c.compare(s, o, n)).map(([s, o]) => [\n s,\n p(o, t)\n ])\n ) : r.string(e) ? c.normalize(e, t) : e;\n}\nconst y = {\n clone(e) {\n return i.that(e, r.defined, \"obj must be defined\"), structuredClone(e);\n },\n normalize(e, t = {}) {\n return i.all([\n { value: e, validator: (a) => r.array(a) || r.plainObject(a), message: \"obj must be an array or a plain object\" },\n { value: t, validator: (a) => d.schema(a, C) }\n ]), p(e, t);\n },\n reorder(e, t, a = {}) {\n i.all([\n { value: e, validator: r.plainObject, message: \"obj must be a plain object\" },\n { value: t, validator: r.string, message: \"property must be a string\" },\n { value: a, validator: (s) => d.schema(s, f) }\n ]);\n const n = (s, o) => c.compare(s[t], o[t], a);\n return Object.fromEntries(\n Object.entries(e).sort(([, s], [, o]) => n(s, o))\n );\n },\n lookup(e, t) {\n return i.all([\n { value: e, validator: r.defined, message: \"obj must be defined\" },\n { value: t, validator: r.nonEmptyString, message: \"path must be a non empty string\" }\n ]), t.split(\".\").reduce((a, n) => a?.[n], e);\n },\n dotify(e) {\n i.that(e, r.plainObject, \"obj must be a plain object\");\n const t = {};\n function a(n, s) {\n for (const [o, l] of Object.entries(n)) {\n const m = s ? `${s}.${o}` : o;\n r.nonEmptyObject(l) ? a(l, m) : t[m] = l;\n }\n }\n return a(e), t;\n },\n sort(e, t, a = {}) {\n return i.all([\n { value: e, validator: r.array, message: \"arr must be an array\" },\n { value: t, validator: r.string, message: \"property must be a string\" },\n { value: a, validator: (n) => d.schema(n, f) }\n ]), [...e].sort((n, s) => c.compare(n[t], s[t], a));\n }\n};\nexport {\n h as e,\n y as o,\n c as s\n};\n//# sourceMappingURL=object-YU9rgFz5.js.map\n","import { a as n, i as t } from \"./optional-C8lnNAGJ.js\";\nconst b = {\n clamp(e, a, r) {\n return n.all([\n { value: e, validator: t.number, message: \"value must be a number\" },\n { value: a, validator: t.number, message: \"min must be a number\" },\n { value: r, validator: t.number, message: \"max must be a number\" }\n ]), Math.min(Math.max(e, a), r);\n },\n round(e, a = 2) {\n n.all([\n { value: e, validator: t.number, message: \"value must be a number\" },\n { value: a, validator: t.nonNegativeInteger, message: \"precision must be a non-negative integer\" }\n ]);\n const r = 10 ** a;\n return Math.round(e * r) / r;\n },\n sign(e, a = 0) {\n return n.all([\n { value: e, validator: t.number, message: \"value must be a number\" },\n { value: a, validator: t.nonNegative, message: \"epsilon must be a non-negative number\" }\n ]), e > a ? 1 : e < -a ? -1 : 0;\n },\n percentage(e, a) {\n return n.all([\n { value: e, validator: t.number, message: \"value must be a number\" },\n { value: a, validator: t.number, message: \"total must be a number\" }\n ]), b.round(e / a * 100, 2);\n },\n exponential(e, a = 2) {\n if (n.all([\n { value: e, validator: t.number, message: \"value must be a number\" },\n { value: a, validator: t.nonNegativeInteger, message: \"decimals must be a non-negative integer\" }\n ]), e === 0) return `0.${\"0\".repeat(a)}e+0`;\n const r = Math.floor(Math.log10(Math.abs(e)));\n return `${(e / Math.pow(10, r)).toFixed(a)}e${r >= 0 ? \"+\" : \"\"}${r}`;\n },\n linear(e, a = 0, r = 1) {\n return n.all([\n { value: e, validator: (u) => t.inRange(u, 0, 1), message: \"t must be in range [0, 1]\" },\n { value: a, validator: t.number, message: \"initial must be a number\" },\n { value: r, validator: t.number, message: \"final must be a number\" }\n ]), a + e * (r - a);\n },\n to: {\n radians(e) {\n return n.that(e, t.number, \"degrees must be a number\"), e * Math.PI / 180;\n },\n degrees(e) {\n return n.that(e, t.number, \"radians must be a number\"), e * 180 / Math.PI;\n }\n },\n pow: {\n square(e) {\n return n.that(e, t.number, \"value must be a number\"), e * e;\n },\n cube(e) {\n return n.that(e, t.number, \"value must be a number\"), b.pow.square(e) * e;\n }\n },\n ease: {\n in(e, a = 0.5) {\n return n.all([\n { value: e, validator: (r) => t.inRange(r, 0, 1), message: \"t must be in range [0, 1]\" },\n { value: a, validator: t.number, message: \"linearity must be a number\" }\n ]), Math.pow(e, 1 / a);\n },\n out(e, a = 0.5) {\n return n.all([\n { value: e, validator: (r) => t.inRange(r, 0, 1), message: \"t must be in range [0, 1]\" },\n { value: a, validator: t.number, message: \"linearity must be a number\" }\n ]), 1 - Math.pow(1 - e, 1 / a);\n },\n cubicBezier(e, a = 0.42, r = 0, u = 0.58, s = 1) {\n n.that(e, (l) => t.inRange(l, 0, 1), \"t must be in range [0, 1]\");\n const m = 1 - e, o = e * e, i = m * m;\n return i * m * r + 3 * i * e * a + 3 * m * o * u + o * e * s;\n }\n },\n stats: {\n sum(e) {\n return n.that(e, t.array, \"values must be an array\"), e.reduce((a, r) => a + r, 0);\n },\n average(e) {\n return n.that(e, t.nonEmptyArray, \"values must be a non-empty array\"), b.stats.sum(e) / e.length;\n },\n median(e) {\n n.that(e, t.nonEmptyArray, \"values must be a non-empty array\");\n const a = [...e].sort((u, s) => u - s), r = Math.floor(a.length / 2);\n return a.length % 2 === 0 ? b.linear(0.5, a[r - 1], a[r]) : a[r];\n }\n }\n};\nexport {\n b as m\n};\n//# sourceMappingURL=math-B5MPVgyl.js.map\n","import { math } from '@kalisio/common-core/utilities'\n\nconst DEG_TO_RAD = math.to.radians(1)\n\nconst ANGULAR_TOLERANCE = 1e-12\n\nexport function positionToNVector (position) {\n const lon = position[0] * DEG_TO_RAD\n const lat = position[1] * DEG_TO_RAD\n const cosLat = Math.cos(lat)\n return [cosLat * Math.cos(lon), cosLat * Math.sin(lon), Math.sin(lat)]\n}\n\nexport function nVectorToPosition (vector) {\n const lon = Math.atan2(vector[1], vector[0])\n const lat = Math.asin(vector[2])\n return [lon / DEG_TO_RAD, lat / DEG_TO_RAD]\n}\n\nexport function dotNVectors (v1, v2) {\n return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]\n}\n\nexport function crossNVectors (v1, v2) {\n return [\n v1[1] * v2[2] - v1[2] * v2[1],\n v1[2] * v2[0] - v1[0] * v2[2],\n v1[0] * v2[1] - v1[1] * v2[0]\n ]\n}\n\nexport function addNVectors (v1, v2) {\n return [v1[0] + v2[0], v1[1] + v2[1], v1[2] + v2[2]]\n}\n\nexport function scaleNVector (vector, scalar) {\n return [vector[0] * scalar, vector[1] * scalar, vector[2] * scalar]\n}\n\nexport function getNVectorNorm (vector) {\n return Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1] + vector[2] * vector[2])\n}\n\nexport function normalizeNVector (vector) {\n const norm = getNVectorNorm(vector)\n return [vector[0] / norm, vector[1] / norm, vector[2] / norm]\n}\n\nexport function angleBetweenNVectors (v1, v2) {\n return Math.atan2(getNVectorNorm(crossNVectors(v1, v2)), dotNVectors(v1, v2))\n}\n\n// Unit vector pointing north in the tangent plane at origin (origin x east).\nexport function northNVector (origin) {\n return crossNVectors(origin, eastNVector(origin))\n}\n\n// Unit vector pointing east in the tangent plane at origin.\nexport function eastNVector (origin) {\n const pole = [0, 0, 1]\n return normalizeNVector(crossNVectors(pole, origin))\n}\n\nexport function southNVector (origin) {\n return scaleNVector(northNVector(origin), -1)\n}\n\nexport function westNVector (origin) {\n return scaleNVector(eastNVector(origin), -1)\n}\n\nexport function bearingNVector (origin, bearing) {\n const north = northNVector(origin)\n const east = eastNVector(origin)\n return addNVectors(\n scaleNVector(north, Math.cos(bearing)),\n scaleNVector(east, Math.sin(bearing))\n )\n}\n\nexport function destinationNVector (origin, bearing, angularDistance) {\n const direction = bearingNVector(origin, bearing)\n return addNVectors(\n scaleNVector(origin, Math.cos(angularDistance)),\n scaleNVector(direction, Math.sin(angularDistance))\n )\n}\n\nexport function crossNVectorArcs (v1, v2, v3, v4, tolerance = ANGULAR_TOLERANCE) {\n const n12 = crossNVectors(v1, v2)\n const n34 = crossNVectors(v3, v4)\n const length12 = getNVectorNorm(n12)\n const length34 = getNVectorNorm(n34)\n if (length12 <= tolerance || length34 <= tolerance) return false\n const s123 = math.sign(dotNVectors(n12, v3) / length12, tolerance)\n const s124 = math.sign(dotNVectors(n12, v4) / length12, tolerance)\n if (s123 * s124 !== -1) return false\n const s341 = math.sign(dotNVectors(n34, v1) / length34, tolerance)\n const s342 = math.sign(dotNVectors(n34, v2) / length34, tolerance)\n return s341 * s342 === -1\n}\n","import proj4 from 'proj4'\nimport { assert, is } from '@kalisio/common-core/predicates'\n\nexport const WGS84 = 'WGS84'\n\nconst WGS84_DEFINITION = '+proj=longlat +datum=WGS84 +no_defs'\n\nconst DEFAULT_PROJECTIONS = {\n WGS84: WGS84_DEFINITION,\n 'CRS:84': WGS84_DEFINITION,\n CRS84: WGS84_DEFINITION,\n 'urn:ogc:def:crs:OGC:1.3:CRS84': WGS84_DEFINITION,\n 'urn:ogc:def:crs:OGC:2:84': WGS84_DEFINITION,\n 'urn:ogc:def:crs:EPSG::4326': WGS84_DEFINITION,\n 'EPSG:2154': '+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m +no_defs'\n}\n\nfor (const [name, definition] of Object.entries(DEFAULT_PROJECTIONS)) {\n if (!proj4.defs(name)) proj4.defs(name, definition)\n}\n\nconst EPSG_URN_REGEXP = /^urn:ogc:def:crs:EPSG::(\\d+)$/i\n\nexport function normalizeCrsName (name) {\n assert.that(name, is.nonEmptyString, 'name must be a non empty string')\n const match = name.match(EPSG_URN_REGEXP)\n return match ? `EPSG:${match[1]}` : name\n}\n\nexport function denormalizeCrsName (name) {\n assert.that(name, is.nonEmptyString, 'name must be a non empty string')\n const match = name.match(/^EPSG:(\\d+)$/i)\n return match ? `urn:ogc:def:crs:EPSG::${match[1]}` : name\n}\n\nexport function listProjections () {\n return Object.keys(proj4.defs)\n}\n\nexport function defineProjection (name, definition) {\n assert.all([\n {\n value: name,\n validator: is.nonEmptyString,\n message: 'name must be a non empty string'\n },\n {\n value: definition,\n validator: v => is.nonEmptyString(v) || is.nonEmptyObject(v),\n message: 'definition must be a non empty string or a non empty object'\n }\n ])\n proj4.defs(name, definition)\n}\n\nexport function hasProjection (name) {\n assert.that(name, is.nonEmptyString, 'name must be a non empty string')\n return is.defined(proj4.defs(name))\n}\n\nexport function getProjection (name) {\n assert.that(name, is.nonEmptyString, 'name must be a non empty string')\n return proj4.defs(name)\n}\n\nexport function isWGS84Projection (name) {\n assert.that(name, is.nonEmptyString, 'name must be a non empty string')\n const definition = proj4.defs(name)\n if (!definition) return false\n const wgs84 = proj4.defs('EPSG:4326')\n return definition.projName === wgs84.projName &&\n definition.datumCode === wgs84.datumCode\n}\n","import proj4 from 'proj4'\nimport { assert, is, conform, optional } from '@kalisio/common-core/predicates'\nimport { math } from '@kalisio/common-core/utilities'\nimport { AXES } from './axes.js'\nimport { isWest, isSouth } from './directions.js'\nimport {\n DEFAULT_COORDINATE_PRECISION,\n MAX_COORDINATE_PRECISION,\n guessCoordinateAxis,\n parseCoordinate,\n truncateCoordinate\n} from './coordinate.js'\nimport {\n positionToNVector,\n nVectorToPosition,\n angleBetweenNVectors,\n destinationNVector\n} from './nvector.js'\nimport { hasProjection } from './projections.js'\n\nexport const IS_SAME_POSITION_OPTIONS_SCHEMA = {\n precision: optional(is.number),\n consider3D: optional(is.boolean)\n}\n\nexport const EARTH_RADIUS = 6371008.8\n\nexport function parsePosition (pattern) {\n assert.that(pattern, (v) => is.nonEmptyString(v), 'pattern must be a non-empty string')\n const parts = pattern.split(/[,;|]/)\n if (parts.length !== 2) return null\n const [first, second] = parts.map(parseCoordinate)\n if (!first || !second) return null\n const firstDD = first.toDecimal()\n const secondDD = second.toDecimal()\n const firstAxis = guessCoordinateAxis(firstDD.degrees, firstDD.direction)\n const secondAxis = guessCoordinateAxis(secondDD.degrees, secondDD.direction)\n // Apply signedDegrees based on direction\n const signedDegrees = (dd) => {\n const { degrees, direction } = dd\n if (!direction) return degrees\n return (isWest(direction) || isSouth(direction)) ? -degrees : degrees\n }\n if (firstAxis === AXES.LONGITUDE && secondAxis === AXES.LATITUDE) return [signedDegrees(firstDD), signedDegrees(secondDD)]\n if (secondAxis === AXES.LONGITUDE && firstAxis === AXES.LATITUDE) return [signedDegrees(secondDD), signedDegrees(firstDD)]\n if (firstAxis === AXES.LONGITUDE && !secondAxis) return [signedDegrees(firstDD), signedDegrees(secondDD)]\n if (firstAxis === AXES.LATITUDE && !secondAxis) return [signedDegrees(secondDD), signedDegrees(firstDD)]\n if (secondAxis === AXES.LONGITUDE && !firstAxis) return [signedDegrees(secondDD), signedDegrees(firstDD)]\n if (secondAxis === AXES.LATITUDE && !firstAxis) return [signedDegrees(firstDD), signedDegrees(secondDD)]\n if (!firstAxis && !secondAxis) {\n return [\n [signedDegrees(firstDD), signedDegrees(secondDD)],\n [signedDegrees(secondDD), signedDegrees(firstDD)]\n ]\n }\n return null\n}\n\nexport function isValidPosition (coordinates) {\n if (!is.arrayOfLengthBetween(coordinates, 2, 3)) return false\n return coordinates.every(is.number)\n}\n\nexport function is3DPosition (position) {\n assert.that(position, isValidPosition, 'position must be a valid position')\n return is.arrayOfLength(position, 3)\n}\n\nexport function isSamePosition (position1, position2, options = {}) {\n assert.all([\n {\n value: position1,\n validator: isValidPosition,\n message: 'position1 must be a valid position'\n },\n {\n value: position2,\n validator: isValidPosition,\n message: 'position2 must be a valid position'\n },\n {\n value: options,\n validator: (v) => conform.schema(v, IS_SAME_POSITION_OPTIONS_SCHEMA),\n message: 'options must be a valid options object'\n }\n ])\n const { precision = DEFAULT_COORDINATE_PRECISION, consider3D = false } = options\n const length = consider3D ? Math.max(position1.length, position2.length) : 2\n return Array.from({ length }, (_, i) =>\n (position1[i] ?? 0).toFixed(precision) === (position2[i] ?? 0).toFixed(precision)\n ).every(Boolean)\n}\n\nexport function truncatePosition (position, precision = DEFAULT_COORDINATE_PRECISION) {\n assert.all([\n {\n value: position,\n validator: isValidPosition,\n message: 'position must be a position'\n },\n {\n value: precision,\n validator: (v) => is.inRange(v, 0, MAX_COORDINATE_PRECISION),\n message: `precision must be in range [0, ${MAX_COORDINATE_PRECISION}]`\n }\n ])\n for (let i = 0; i < position.length; i++) {\n position[i] = truncateCoordinate(position[i], precision)\n }\n return position\n}\n\nexport function reprojectPosition (position, source, target) {\n assert.all([\n {\n value: position,\n validator: isValidPosition,\n message: 'position must be a valid position'\n },\n {\n value: source,\n validator: hasProjection,\n message: `unknown source projection: ${source}`\n },\n {\n value: target,\n validator: hasProjection,\n message: `unknown target projection: ${target}`\n }\n ])\n return proj4(source, target, position)\n}\n\nexport function destinationFromPosition (position, bearing, distance) {\n assert.all([\n { value: position, validator: isValidPosition, message: 'position must be a valid position' },\n { value: bearing, validator: is.number, message: 'bearing must be a number' },\n { value: distance, validator: is.number, message: 'distance must be a number' }\n ])\n const destination = destinationNVector(\n positionToNVector(position),\n math.to.radians(bearing),\n distance / EARTH_RADIUS\n )\n return nVectorToPosition(destination)\n}\n\nexport function distanceBetweenPositions (position1, position2) {\n assert.all([\n { value: position1, validator: isValidPosition, message: 'position1 must be a valid position' },\n { value: position2, validator: isValidPosition, message: 'position2 must be a valid position' }\n ])\n return angleBetweenNVectors(positionToNVector(position1), positionToNVector(position2)) * EARTH_RADIUS\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core/predicates'\nimport {\n DEFAULT_COORDINATE_PRECISION,\n MAX_COORDINATE_PRECISION,\n truncateCoordinate\n} from './coordinate.js'\nimport { isValidPosition, is3DPosition } from './position.js'\n\nexport function isValidBBox (bbox) {\n if (!is.arrayOfLength(bbox, 4) && !is.arrayOfLength(bbox, 6)) return false\n const is2D = bbox.length === 4\n const min = is2D ? [bbox[0], bbox[1]] : [bbox[0], bbox[1], bbox[2]]\n const max = is2D ? [bbox[2], bbox[3]] : [bbox[3], bbox[4], bbox[5]]\n if (!isValidPosition(min)) return false\n if (!isValidPosition(max)) return false\n const [, south] = min\n const [, north] = max\n if (south > north) return false\n if (!is2D && bbox[2] > bbox[5]) return false\n return true\n}\n\nexport function is3DBBox (bbox) {\n assert.that(bbox, isValidBBox, 'bbox must be a valid bounding-box')\n return is.arrayOfLength(bbox, 6)\n}\n\nexport function mergeBBox (bbox1, bbox2) {\n assert.all([\n { value: bbox1, validator: isValidBBox, message: 'bbox1 must be a valid bounding-box' },\n { value: bbox2, validator: isValidBBox, message: 'bbox2 must be a valid bounding-box' }\n ])\n if (is3DBBox(bbox1) && is3DBBox(bbox2)) {\n return [\n Math.min(bbox1[0], bbox2[0]),\n Math.min(bbox1[1], bbox2[1]),\n Math.min(bbox1[2], bbox2[2]),\n Math.max(bbox1[3], bbox2[3]),\n Math.max(bbox1[4], bbox2[4]),\n Math.max(bbox1[5], bbox2[5])\n ]\n }\n return [\n Math.min(bbox1[0], bbox2[0]),\n Math.min(bbox1[1], bbox2[1]),\n Math.max(bbox1[2], bbox2[2]),\n Math.max(bbox1[3], bbox2[3])\n ]\n}\n\nconst COMPUTE_BBOX_OPTIONS_SCHEMA = {\n ignore3D: optional(is.boolean)\n}\n\nexport function computeBBox (positions, options = {}) {\n assert.all([\n {\n value: positions,\n validator: is.nonEmptyArray,\n message: 'positions must be a non-empty array'\n },\n {\n value: positions,\n validator: (v) => v.every(isValidPosition),\n message: 'positions must be an array of valid positions'\n },\n {\n value: options,\n validator: (v) => conform.schema(v, COMPUTE_BBOX_OPTIONS_SCHEMA),\n message: 'options must be a valid options object'\n }\n ])\n const { ignore3D = false } = options\n const has3D = !ignore3D && positions.some(is3DPosition)\n if (has3D) {\n return positions.reduce((acc, pos) => [\n Math.min(acc[0], pos[0]),\n Math.min(acc[1], pos[1]),\n Math.min(acc[2], pos[2] ?? 0),\n Math.max(acc[3], pos[0]),\n Math.max(acc[4], pos[1]),\n Math.max(acc[5], pos[2] ?? 0)\n ], [Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity])\n }\n return positions.reduce((acc, pos) => [\n Math.min(acc[0], pos[0]),\n Math.min(acc[1], pos[1]),\n Math.max(acc[2], pos[0]),\n Math.max(acc[3], pos[1])\n ], [Infinity, Infinity, -Infinity, -Infinity])\n}\n\nexport function truncateBBox (bbox, precision = DEFAULT_COORDINATE_PRECISION) {\n assert.all([\n {\n value: bbox,\n validator: isValidBBox,\n message: 'bbox must be a valid bounding box'\n },\n {\n value: precision,\n validator: (v) => is.inRange(v, 0, MAX_COORDINATE_PRECISION),\n message: `precision must be in range [0, ${MAX_COORDINATE_PRECISION}]`\n }\n ])\n for (let i = 0; i < bbox.length; i++) {\n bbox[i] = truncateCoordinate(bbox[i], precision)\n }\n return bbox\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core/predicates'\nimport { DEFAULT_COORDINATE_PRECISION } from './coordinate.js'\nimport {\n isValidPosition,\n isSamePosition,\n IS_SAME_POSITION_OPTIONS_SCHEMA,\n truncatePosition,\n reprojectPosition\n} from './position.js'\n\nexport const TRUNCATE_POSITIONS_OPTIONS_SCHEMA = {\n ...IS_SAME_POSITION_OPTIONS_SCHEMA,\n deduplicate: optional(is.boolean)\n}\n\nexport function isValidPositions (positions) {\n return is.array(positions) && positions.every(isValidPosition)\n}\n\nexport function deduplicatePositions (positions, options = {}) {\n assert.that(options, (v) => conform.schema(v, IS_SAME_POSITION_OPTIONS_SCHEMA), 'options must be a valid options object')\n const { precision = DEFAULT_COORDINATE_PRECISION, consider3D = false } = options\n const result = []\n for (const position of positions) {\n const previous = result[result.length - 1]\n if (!previous || !isSamePosition(position, previous, { precision, consider3D })) {\n result.push(position)\n }\n }\n return result\n}\n\nexport function truncatePositions (positions, options = {}) {\n assert.all([\n {\n value: positions,\n validator: is.array,\n message: 'positions must be an array'\n },\n {\n value: options,\n validator: (v) => conform.schema(v, TRUNCATE_POSITIONS_OPTIONS_SCHEMA),\n message: 'options must be a valid options object'\n }\n ])\n const { precision = DEFAULT_COORDINATE_PRECISION, deduplicate = false, consider3D = false } = options\n const truncated = positions.map((position) => truncatePosition(position, precision))\n return deduplicate ? deduplicatePositions(truncated, { precision, consider3D }) : truncated\n}\n\nexport function reprojectPositions (positions, source, target) {\n assert.that(positions, is.array, 'positions must be an array')\n return positions.map((position) => reprojectPosition(position, source, target))\n}\n","import { assert, is, conform } from '@kalisio/common-core/predicates'\nimport { math } from '@kalisio/common-core/utilities'\nimport { isSamePosition, IS_SAME_POSITION_OPTIONS_SCHEMA } from './position.js'\nimport { isValidPositions, truncatePositions } from './positions.js'\nimport { positionToNVector, crossNVectorArcs } from './nvector.js'\n\nexport function isValidRing (ring, options = {}) {\n if (!is.arrayOfLengthAtLeast(ring, 4)) return false\n if (!isValidPositions(ring)) return false\n return isClosedRing(ring, options)\n}\n\nexport function isClosedRing (ring, options = {}) {\n assert.that(options, (v) => conform.schema(v, IS_SAME_POSITION_OPTIONS_SCHEMA), 'options must be a valid options object')\n if (!is.arrayOfLengthAtLeast(ring, 1)) return false\n const first = ring[0]\n const last = ring[ring.length - 1]\n return isSamePosition(first, last, options)\n}\n\nexport function closeRing (ring, options = {}) {\n if (!is.nonEmptyArray(ring) || isClosedRing(ring, options)) return ring\n return [...ring, [...ring[0]]]\n}\n\nexport function truncateRing (ring, options = {}) {\n const truncated = truncatePositions(ring, { deduplicate: true, ...options })\n return closeRing(truncated, options)\n}\n\nexport function sphericalRingArea (ring) {\n assert.that(ring, isValidRing, 'ring must be a valid closed ring of at least 4 positions')\n let sum = 0\n for (let i = 0; i < ring.length - 1; i++) {\n const [lon1, lat1] = ring[i]\n const [lon2, lat2] = ring[i + 1]\n sum += math.to.radians(lon2 - lon1) * (2 + Math.sin(math.to.radians(lat1)) + Math.sin(math.to.radians(lat2)))\n }\n return -sum / 2\n}\n\nexport function isClockwiseRing (ring) {\n return sphericalRingArea(ring) < 0\n}\n\nexport function ringsIntersect (ring1, ring2) {\n assert.all([\n { value: ring1, validator: isValidRing, message: 'ring1 must be a valid closed ring' },\n { value: ring2, validator: isValidRing, message: 'ring2 must be a valid closed ring' }\n ])\n const points1 = ring1.map(positionToNVector)\n const points2 = ring2.map(positionToNVector)\n for (let i = 0; i < points1.length - 1; i++) {\n for (let j = 0; j < points2.length - 1; j++) {\n if (crossNVectorArcs(points1[i], points1[i + 1], points2[j], points2[j + 1])) {\n return true\n }\n }\n }\n return false\n}\n\nexport function ringSelfIntersections (ring) {\n assert.that(ring, isValidRing, 'ring must be a valid closed ring')\n const points = ring.map(positionToNVector)\n const pairs = []\n const edgeCount = points.length - 1\n for (let i = 0; i < edgeCount; i++) {\n for (let j = i + 1; j < edgeCount; j++) {\n // Skip adjacent edges: they share a vertex by construction, including the\n // wrap-around pair (first edge, last edge) meeting at the closing vertex.\n // Any other shared vertex (a duplicate position) is handled by\n // crossNVectorArcs, whose angular tolerance absorbs the floating-point\n // noise at a coincident vertex -- no explicit shared-position guard needed.\n if (j === i + 1) continue\n if (i === 0 && j === edgeCount - 1) continue\n if (crossNVectorArcs(points[i], points[i + 1], points[j], points[j + 1])) {\n pairs.push([i, j])\n }\n }\n }\n return pairs\n}\n"],"names":["c","m","n","p","r","a","i","t","s","g","o","b","u","h","f","y","O","AXES","isValidAxis","axis","assert","is","isLatitude","isLongitude","isAltitude","MESSAGES_SCHEMA","MESSAGES","en","fr","CURRENT_LOCALE","FALLBACK_LOCALE","listLocales","setLocale","code","v","has","getLocale","getActiveLocales","registerMessages","messages","conform","getMessages","getLocalizedDirections","collectLocalizedSymbols","keys","symbols","DIRECTIONS","key","isValidDirectionOf","type","dir","value","label","symbol","getDirections","directions","getDirectionSymbols","getNorth","getSouth","getEast","getWest","isValidDirection","isNorth","isSouth","isEast","isWest","getDirectionAxis","SCHEMA","optional","REGEX_SIGNED","dirRegex","DD","dd","_degrees","_direction","pattern","match","decimalPlaces","str","DDM","ddm","_minutes","latRegex","lonRegex","DDMAero","isLon","deg","min","DMS","dms","_seconds","decimalToDDM","degrees","minutes","decimalToDMS","minutesDecimal","seconds","converter","direction","COORDINATE_FORMATS","COORDINATE_MODELS","DEFAULT_COORDINATE_PRECISION","MAX_COORDINATE_PRECISION","COORDINATE_TRUNCATION_FACTORS","_","guessCoordinateAxis","coord","getCoordinatePrecision","base","exp","decimalsInBase","truncateCoordinate","precision","factor","normalizeCoordinate","lon","convertCoordinate","from","to","parseCoordinate","format","l","C","DEG_TO_RAD","math","ANGULAR_TOLERANCE","positionToNVector","position","lat","cosLat","nVectorToPosition","vector","dotNVectors","v1","v2","crossNVectors","addNVectors","scaleNVector","scalar","getNVectorNorm","normalizeNVector","norm","angleBetweenNVectors","northNVector","origin","eastNVector","bearingNVector","bearing","north","east","destinationNVector","angularDistance","crossNVectorArcs","v3","v4","tolerance","n12","n34","length12","length34","s123","s124","s341","s342","WGS84","WGS84_DEFINITION","DEFAULT_PROJECTIONS","name","definition","proj4","EPSG_URN_REGEXP","normalizeCrsName","denormalizeCrsName","listProjections","defineProjection","hasProjection","getProjection","isWGS84Projection","wgs84","IS_SAME_POSITION_OPTIONS_SCHEMA","EARTH_RADIUS","parsePosition","parts","first","second","firstDD","secondDD","firstAxis","secondAxis","signedDegrees","isValidPosition","coordinates","is3DPosition","isSamePosition","position1","position2","options","consider3D","length","truncatePosition","reprojectPosition","source","target","destinationFromPosition","distance","destination","distanceBetweenPositions","isValidBBox","bbox","is2D","max","south","is3DBBox","mergeBBox","bbox1","bbox2","COMPUTE_BBOX_OPTIONS_SCHEMA","computeBBox","positions","ignore3D","acc","pos","truncateBBox","TRUNCATE_POSITIONS_OPTIONS_SCHEMA","isValidPositions","deduplicatePositions","result","previous","truncatePositions","deduplicate","truncated","reprojectPositions","isValidRing","ring","isClosedRing","last","closeRing","truncateRing","sphericalRingArea","sum","lon1","lat1","lon2","lat2","isClockwiseRing","ringsIntersect","ring1","ring2","points1","points2","j","ringSelfIntersections","points","pairs","edgeCount"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const P=require("@turf/convex"),Y=require("@turf/meta"),u=require("@turf/helpers"),o=require("./ring-CnFBeolv.cjs"),r=require("./geojson-QgqoCFjn.cjs");function R(e){if(e.length===0)return null;if(e.length===1)return{type:"Point",coordinates:e[0]};if(e.length===2)return{type:"LineString",coordinates:[e[0],e[1]]};const t=P.convex(u.featureCollection(e.map(n=>u.feature({type:"Point",coordinates:n}))));return t?t.geometry:{type:"LineString",coordinates:[e[0],e[e.length-1]]}}function T(e){if(o.a.that(e,r.isLikeGeoJson,"geoJson must be a GeoJson object"),e.type===r.FEATURE_TYPES.FEATURE)return e.geometry?T(e.geometry):null;const t=Y.coordAll(e).map(n=>[n[0],n[1]]);return R(t)}function s(e,t){return o.a.that(e,r.isLikeGeoJson,"geoJson must be a GeoJson object"),o.y.lookup(e,t)}function f(e){return s(e,"bbox")}function G(e){const t=s(e,"crs");if(!o.t.defined(t))return o.WGS84;const n=t.properties?.name;return o.t.nonEmptyString(n)?o.normalizeCrsName(n):n}function b(e){const t=e.match(/^EPSG:(\d+)$/i);return t?`urn:ogc:def:crs:EPSG::${t[1]}`:e}function E(e,t,n){switch(e.type){case r.GEOMETRY_TYPES.POINT:e.coordinates=o.reprojectPosition(e.coordinates,t,n);break;case r.GEOMETRY_TYPES.MULTI_POINT:case r.GEOMETRY_TYPES.LINESTRING:e.coordinates=o.reprojectPositions(e.coordinates,t,n);break;case r.GEOMETRY_TYPES.MULTI_LINESTRING:case r.GEOMETRY_TYPES.POLYGON:e.coordinates=e.coordinates.map(c=>o.reprojectPositions(c,t,n));break;case r.GEOMETRY_TYPES.MULTI_POLYGON:e.coordinates=e.coordinates.map(c=>c.map(a=>o.reprojectPositions(a,t,n)));break;case r.GEOMETRY_TYPES.GEOMETRY_COLLECTION:for(const c of e.geometries)E(c,t,n);break}return delete e.bbox,delete e.crs,e}function l(e,t,n){if(e.type===r.FEATURE_TYPES.FEATURE)e.geometry&&E(e.geometry,t,n);else for(const c of e.features)l(c,t,n);return delete e.bbox,delete e.crs,e}function S(e,t){o.a.that(e,r.isLikeGeoJson,"geoJson must be a GeoJson object");const n=G(e);return o.a.all([{value:n,validator:o.hasProjection,message:`unknown source projection: ${n}`},{value:t,validator:o.hasProjection,message:`unknown target projection: ${t}`}]),o.t.oneOf(e.type,Object.values(r.GEOMETRY_TYPES))?E(e,n,t):l(e,n,t),o.isWGS84Projection(t)?delete e.crs:e.crs={type:"name",properties:{name:b(t)}},e}function i(e,t,n){switch(e.type){case r.GEOMETRY_TYPES.POINT:o.truncatePosition(e.coordinates,t);break;case r.GEOMETRY_TYPES.MULTI_POINT:case r.GEOMETRY_TYPES.LINESTRING:o.truncatePositions(e.coordinates,{precision:t});break;case r.GEOMETRY_TYPES.MULTI_LINESTRING:for(const c of e.coordinates)o.truncatePositions(c,{precision:t});break;case r.GEOMETRY_TYPES.POLYGON:e.coordinates=e.coordinates.map(c=>o.truncateRing(c,{precision:t,consider3D:n}));break;case r.GEOMETRY_TYPES.MULTI_POLYGON:e.coordinates=e.coordinates.map(c=>c.map(a=>o.truncateRing(a,{precision:t,consider3D:n})));break;case r.GEOMETRY_TYPES.GEOMETRY_COLLECTION:for(const c of e.geometries)i(c,t,n);break}return e.bbox&&o.truncateBBox(e.bbox,t),e}function O(e,t,n){if(e.type===r.FEATURE_TYPES.FEATURE)e.geometry&&i(e.geometry,t,n);else for(const c of e.features)O(c,t,n);return e.bbox&&o.truncateBBox(e.bbox,t),e}function d(e,t={}){const{precision:n=o.DEFAULT_COORDINATE_PRECISION,consider3D:c=!1}=t;return o.a.all([{value:e,validator:r.isLikeGeoJson,message:"geoJson must be a valid GeoJson"},{value:n,validator:a=>o.t.inRange(a,0,o.MAX_COORDINATE_PRECISION),message:`precision must be in range [0, ${o.MAX_COORDINATE_PRECISION}]`}]),o.t.oneOf(e.type,Object.values(r.GEOMETRY_TYPES))?i(e,n,c):O(e,n,c)}exports.computeGeoJsonConvexHull=T;exports.extractGeoJsonBBox=f;exports.extractGeoJsonCRS=G;exports.extractGeoJsonNode=s;exports.reprojectGeoJson=S;exports.truncateGeoJson=d;
|
|
2
|
+
//# sourceMappingURL=truncate-Cb17e4VI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncate-Cb17e4VI.cjs","sources":["../src/operators/compute/convex-hull.js","../src/operators/extract/node.js","../src/operators/extract/bbox.js","../src/operators/extract/crs.js","../src/operators/reproject.js","../src/operators/truncate.js"],"sourcesContent":["import { convex } from '@turf/convex'\nimport { coordAll } from '@turf/meta'\nimport { featureCollection, feature } from '@turf/helpers'\nimport { assert } from '@kalisio/common-core/predicates'\nimport { FEATURE_TYPES, isLikeGeoJson } from '../is-like.js'\n\nfunction computeConvexHullFromPositions (positions) {\n if (positions.length === 0) return null\n if (positions.length === 1) return { type: 'Point', coordinates: positions[0] }\n if (positions.length === 2) return { type: 'LineString', coordinates: [positions[0], positions[1]] }\n const result = convex(featureCollection(positions.map(p => feature({ type: 'Point', coordinates: p }))))\n if (!result) return { type: 'LineString', coordinates: [positions[0], positions[positions.length - 1]] }\n return result.geometry\n}\n\nexport function computeGeoJsonConvexHull (geoJson) {\n assert.that(geoJson, isLikeGeoJson, 'geoJson must be a GeoJson object')\n if (geoJson.type === FEATURE_TYPES.FEATURE) {\n if (!geoJson.geometry) return null\n return computeGeoJsonConvexHull(geoJson.geometry)\n }\n const positions = coordAll(geoJson).map(p => [p[0], p[1]])\n return computeConvexHullFromPositions(positions)\n}\n","import { assert } from '@kalisio/common-core/predicates'\nimport { object } from '@kalisio/common-core/utilities'\nimport { isLikeGeoJson } from '../is-like.js'\n\nexport function extractGeoJsonNode (geoJson, path) {\n assert.that(geoJson, isLikeGeoJson, 'geoJson must be a GeoJson object')\n return object.lookup(geoJson, path)\n}\n","import { extractGeoJsonNode } from './node.js'\n\nexport function extractGeoJsonBBox (geoJson) {\n return extractGeoJsonNode(geoJson, 'bbox')\n}\n","import { is } from '@kalisio/common-core/predicates'\nimport { WGS84, normalizeCrsName } from '../../foundation/index.js'\nimport { extractGeoJsonNode } from './node.js'\n\nexport function extractGeoJsonCRS (geoJson) {\n const crs = extractGeoJsonNode(geoJson, 'crs')\n if (!is.defined(crs)) return WGS84\n const name = crs.properties?.name\n return is.nonEmptyString(name) ? normalizeCrsName(name) : name\n}\n","import { assert, is } from '@kalisio/common-core/predicates'\nimport {\n hasProjection,\n isWGS84Projection,\n reprojectPosition,\n reprojectPositions\n} from '../foundation/index.js'\nimport {\n FEATURE_TYPES,\n GEOMETRY_TYPES,\n isLikeGeoJson\n} from './is-like.js'\nimport { extractGeoJsonCRS } from './extract/index.js'\n\nfunction crsToUrn (crs) {\n const epsg = crs.match(/^EPSG:(\\d+)$/i)\n return epsg ? `urn:ogc:def:crs:EPSG::${epsg[1]}` : crs\n}\n\nfunction reprojectGeometry (geometry, source, target) {\n switch (geometry.type) {\n case GEOMETRY_TYPES.POINT:\n geometry.coordinates = reprojectPosition(geometry.coordinates, source, target)\n break\n case GEOMETRY_TYPES.MULTI_POINT:\n case GEOMETRY_TYPES.LINESTRING:\n geometry.coordinates = reprojectPositions(geometry.coordinates, source, target)\n break\n case GEOMETRY_TYPES.MULTI_LINESTRING:\n case GEOMETRY_TYPES.POLYGON:\n geometry.coordinates = geometry.coordinates.map(\n positions => reprojectPositions(positions, source, target)\n )\n break\n case GEOMETRY_TYPES.MULTI_POLYGON:\n geometry.coordinates = geometry.coordinates.map(\n polygon => polygon.map(\n ring => reprojectPositions(ring, source, target)\n )\n )\n break\n case GEOMETRY_TYPES.GEOMETRY_COLLECTION:\n for (const g of geometry.geometries) {\n reprojectGeometry(g, source, target)\n }\n break\n }\n delete geometry.bbox\n delete geometry.crs\n return geometry\n}\n\nfunction reprojectFeature (feature, source, target) {\n if (feature.type === FEATURE_TYPES.FEATURE) {\n if (feature.geometry) reprojectGeometry(feature.geometry, source, target)\n } else {\n for (const f of feature.features) {\n reprojectFeature(f, source, target)\n }\n }\n delete feature.bbox\n delete feature.crs\n return feature\n}\n\nexport function reprojectGeoJson (geoJson, target) {\n assert.that(geoJson, isLikeGeoJson, 'geoJson must be a GeoJson object')\n const source = extractGeoJsonCRS(geoJson)\n assert.all([\n { value: source, validator: hasProjection, message: `unknown source projection: ${source}` },\n { value: target, validator: hasProjection, message: `unknown target projection: ${target}` }\n ])\n if (is.oneOf(geoJson.type, Object.values(GEOMETRY_TYPES))) {\n reprojectGeometry(geoJson, source, target)\n } else {\n reprojectFeature(geoJson, source, target)\n }\n if (isWGS84Projection(target)) {\n delete geoJson.crs\n } else {\n geoJson.crs = {\n type: 'name',\n properties: { name: crsToUrn(target) }\n }\n }\n return geoJson\n}\n","import { assert, is } from '@kalisio/common-core/predicates'\nimport {\n DEFAULT_COORDINATE_PRECISION,\n MAX_COORDINATE_PRECISION,\n truncateBBox,\n truncatePosition,\n truncatePositions,\n truncateRing\n} from '../foundation/index.js'\nimport {\n FEATURE_TYPES,\n GEOMETRY_TYPES,\n isLikeGeoJson\n} from './is-like.js'\n\nfunction truncateGeometry (geometry, precision, consider3D) {\n switch (geometry.type) {\n case GEOMETRY_TYPES.POINT:\n truncatePosition(geometry.coordinates, precision)\n break\n case GEOMETRY_TYPES.MULTI_POINT:\n case GEOMETRY_TYPES.LINESTRING:\n truncatePositions(geometry.coordinates, { precision })\n break\n case GEOMETRY_TYPES.MULTI_LINESTRING:\n for (const line of geometry.coordinates) truncatePositions(line, { precision })\n break\n case GEOMETRY_TYPES.POLYGON:\n geometry.coordinates = geometry.coordinates.map((ring) => truncateRing(ring, { precision, consider3D }))\n break\n case GEOMETRY_TYPES.MULTI_POLYGON:\n geometry.coordinates = geometry.coordinates.map((polygon) =>\n polygon.map((ring) => truncateRing(ring, { precision, consider3D }))\n )\n break\n case GEOMETRY_TYPES.GEOMETRY_COLLECTION:\n for (const g of geometry.geometries) truncateGeometry(g, precision, consider3D)\n break\n }\n if (geometry.bbox) truncateBBox(geometry.bbox, precision)\n return geometry\n}\n\nfunction truncateFeature (feature, precision, consider3D) {\n if (feature.type === FEATURE_TYPES.FEATURE) {\n if (feature.geometry) truncateGeometry(feature.geometry, precision, consider3D)\n } else {\n for (const f of feature.features) truncateFeature(f, precision, consider3D)\n }\n if (feature.bbox) truncateBBox(feature.bbox, precision)\n return feature\n}\n\nexport function truncateGeoJson (geoJson, options = {}) {\n const { precision = DEFAULT_COORDINATE_PRECISION, consider3D = false } = options\n assert.all([\n {\n value: geoJson,\n validator: isLikeGeoJson,\n message: 'geoJson must be a valid GeoJson'\n },\n {\n value: precision,\n validator: (v) => is.inRange(v, 0, MAX_COORDINATE_PRECISION),\n message: `precision must be in range [0, ${MAX_COORDINATE_PRECISION}]`\n }\n ])\n if (is.oneOf(geoJson.type, Object.values(GEOMETRY_TYPES))) return truncateGeometry(geoJson, precision, consider3D)\n return truncateFeature(geoJson, precision, consider3D)\n}\n"],"names":["computeConvexHullFromPositions","positions","result","convex","featureCollection","p","feature","computeGeoJsonConvexHull","geoJson","assert","isLikeGeoJson","FEATURE_TYPES","coordAll","extractGeoJsonNode","path","object","extractGeoJsonBBox","extractGeoJsonCRS","crs","is","WGS84","name","normalizeCrsName","crsToUrn","epsg","reprojectGeometry","geometry","source","target","GEOMETRY_TYPES","reprojectPosition","reprojectPositions","polygon","ring","g","reprojectFeature","f","reprojectGeoJson","hasProjection","isWGS84Projection","truncateGeometry","precision","consider3D","truncatePosition","truncatePositions","line","truncateRing","truncateBBox","truncateFeature","truncateGeoJson","options","DEFAULT_COORDINATE_PRECISION","v","MAX_COORDINATE_PRECISION"],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { convex as N } from "@turf/convex";
|
|
2
|
+
import { coordAll as P } from "@turf/meta";
|
|
3
|
+
import { featureCollection as L, feature as R } from "@turf/helpers";
|
|
4
|
+
import { ah as s, ai as x, ag as c, W as S, a1 as k, x as d, X as j, a6 as u, a5 as v, D as _, M as E, af as G, ae as O, ad as h, ab as T } from "./ring-Cks2pGr8.js";
|
|
5
|
+
import { h as i, F as l, G as o } from "./geojson-CJ6QZ9pN.js";
|
|
6
|
+
function C(e) {
|
|
7
|
+
if (e.length === 0) return null;
|
|
8
|
+
if (e.length === 1) return { type: "Point", coordinates: e[0] };
|
|
9
|
+
if (e.length === 2) return { type: "LineString", coordinates: [e[0], e[1]] };
|
|
10
|
+
const a = N(L(e.map((t) => R({ type: "Point", coordinates: t }))));
|
|
11
|
+
return a ? a.geometry : { type: "LineString", coordinates: [e[0], e[e.length - 1]] };
|
|
12
|
+
}
|
|
13
|
+
function U(e) {
|
|
14
|
+
if (s.that(e, i, "geoJson must be a GeoJson object"), e.type === l.FEATURE)
|
|
15
|
+
return e.geometry ? U(e.geometry) : null;
|
|
16
|
+
const a = P(e).map((t) => [t[0], t[1]]);
|
|
17
|
+
return C(a);
|
|
18
|
+
}
|
|
19
|
+
function p(e, a) {
|
|
20
|
+
return s.that(e, i, "geoJson must be a GeoJson object"), x.lookup(e, a);
|
|
21
|
+
}
|
|
22
|
+
function W(e) {
|
|
23
|
+
return p(e, "bbox");
|
|
24
|
+
}
|
|
25
|
+
function M(e) {
|
|
26
|
+
const a = p(e, "crs");
|
|
27
|
+
if (!c.defined(a)) return S;
|
|
28
|
+
const t = a.properties?.name;
|
|
29
|
+
return c.nonEmptyString(t) ? k(t) : t;
|
|
30
|
+
}
|
|
31
|
+
function A(e) {
|
|
32
|
+
const a = e.match(/^EPSG:(\d+)$/i);
|
|
33
|
+
return a ? `urn:ogc:def:crs:EPSG::${a[1]}` : e;
|
|
34
|
+
}
|
|
35
|
+
function f(e, a, t) {
|
|
36
|
+
switch (e.type) {
|
|
37
|
+
case o.POINT:
|
|
38
|
+
e.coordinates = v(e.coordinates, a, t);
|
|
39
|
+
break;
|
|
40
|
+
case o.MULTI_POINT:
|
|
41
|
+
case o.LINESTRING:
|
|
42
|
+
e.coordinates = u(e.coordinates, a, t);
|
|
43
|
+
break;
|
|
44
|
+
case o.MULTI_LINESTRING:
|
|
45
|
+
case o.POLYGON:
|
|
46
|
+
e.coordinates = e.coordinates.map(
|
|
47
|
+
(n) => u(n, a, t)
|
|
48
|
+
);
|
|
49
|
+
break;
|
|
50
|
+
case o.MULTI_POLYGON:
|
|
51
|
+
e.coordinates = e.coordinates.map(
|
|
52
|
+
(n) => n.map(
|
|
53
|
+
(r) => u(r, a, t)
|
|
54
|
+
)
|
|
55
|
+
);
|
|
56
|
+
break;
|
|
57
|
+
case o.GEOMETRY_COLLECTION:
|
|
58
|
+
for (const n of e.geometries)
|
|
59
|
+
f(n, a, t);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
return delete e.bbox, delete e.crs, e;
|
|
63
|
+
}
|
|
64
|
+
function m(e, a, t) {
|
|
65
|
+
if (e.type === l.FEATURE)
|
|
66
|
+
e.geometry && f(e.geometry, a, t);
|
|
67
|
+
else
|
|
68
|
+
for (const n of e.features)
|
|
69
|
+
m(n, a, t);
|
|
70
|
+
return delete e.bbox, delete e.crs, e;
|
|
71
|
+
}
|
|
72
|
+
function D(e, a) {
|
|
73
|
+
s.that(e, i, "geoJson must be a GeoJson object");
|
|
74
|
+
const t = M(e);
|
|
75
|
+
return s.all([
|
|
76
|
+
{ value: t, validator: d, message: `unknown source projection: ${t}` },
|
|
77
|
+
{ value: a, validator: d, message: `unknown target projection: ${a}` }
|
|
78
|
+
]), c.oneOf(e.type, Object.values(o)) ? f(e, t, a) : m(e, t, a), j(a) ? delete e.crs : e.crs = {
|
|
79
|
+
type: "name",
|
|
80
|
+
properties: { name: A(a) }
|
|
81
|
+
}, e;
|
|
82
|
+
}
|
|
83
|
+
function b(e, a, t) {
|
|
84
|
+
switch (e.type) {
|
|
85
|
+
case o.POINT:
|
|
86
|
+
h(e.coordinates, a);
|
|
87
|
+
break;
|
|
88
|
+
case o.MULTI_POINT:
|
|
89
|
+
case o.LINESTRING:
|
|
90
|
+
O(e.coordinates, { precision: a });
|
|
91
|
+
break;
|
|
92
|
+
case o.MULTI_LINESTRING:
|
|
93
|
+
for (const n of e.coordinates) O(n, { precision: a });
|
|
94
|
+
break;
|
|
95
|
+
case o.POLYGON:
|
|
96
|
+
e.coordinates = e.coordinates.map((n) => G(n, { precision: a, consider3D: t }));
|
|
97
|
+
break;
|
|
98
|
+
case o.MULTI_POLYGON:
|
|
99
|
+
e.coordinates = e.coordinates.map(
|
|
100
|
+
(n) => n.map((r) => G(r, { precision: a, consider3D: t }))
|
|
101
|
+
);
|
|
102
|
+
break;
|
|
103
|
+
case o.GEOMETRY_COLLECTION:
|
|
104
|
+
for (const n of e.geometries) b(n, a, t);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
return e.bbox && T(e.bbox, a), e;
|
|
108
|
+
}
|
|
109
|
+
function I(e, a, t) {
|
|
110
|
+
if (e.type === l.FEATURE)
|
|
111
|
+
e.geometry && b(e.geometry, a, t);
|
|
112
|
+
else
|
|
113
|
+
for (const n of e.features) I(n, a, t);
|
|
114
|
+
return e.bbox && T(e.bbox, a), e;
|
|
115
|
+
}
|
|
116
|
+
function H(e, a = {}) {
|
|
117
|
+
const { precision: t = _, consider3D: n = !1 } = a;
|
|
118
|
+
return s.all([
|
|
119
|
+
{
|
|
120
|
+
value: e,
|
|
121
|
+
validator: i,
|
|
122
|
+
message: "geoJson must be a valid GeoJson"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
value: t,
|
|
126
|
+
validator: (r) => c.inRange(r, 0, E),
|
|
127
|
+
message: `precision must be in range [0, ${E}]`
|
|
128
|
+
}
|
|
129
|
+
]), c.oneOf(e.type, Object.values(o)) ? b(e, t, n) : I(e, t, n);
|
|
130
|
+
}
|
|
131
|
+
export {
|
|
132
|
+
M as a,
|
|
133
|
+
p as b,
|
|
134
|
+
U as c,
|
|
135
|
+
W as e,
|
|
136
|
+
D as r,
|
|
137
|
+
H as t
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=truncate-Cs8jmwOi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncate-Cs8jmwOi.js","sources":["../src/operators/compute/convex-hull.js","../src/operators/extract/node.js","../src/operators/extract/bbox.js","../src/operators/extract/crs.js","../src/operators/reproject.js","../src/operators/truncate.js"],"sourcesContent":["import { convex } from '@turf/convex'\nimport { coordAll } from '@turf/meta'\nimport { featureCollection, feature } from '@turf/helpers'\nimport { assert } from '@kalisio/common-core/predicates'\nimport { FEATURE_TYPES, isLikeGeoJson } from '../is-like.js'\n\nfunction computeConvexHullFromPositions (positions) {\n if (positions.length === 0) return null\n if (positions.length === 1) return { type: 'Point', coordinates: positions[0] }\n if (positions.length === 2) return { type: 'LineString', coordinates: [positions[0], positions[1]] }\n const result = convex(featureCollection(positions.map(p => feature({ type: 'Point', coordinates: p }))))\n if (!result) return { type: 'LineString', coordinates: [positions[0], positions[positions.length - 1]] }\n return result.geometry\n}\n\nexport function computeGeoJsonConvexHull (geoJson) {\n assert.that(geoJson, isLikeGeoJson, 'geoJson must be a GeoJson object')\n if (geoJson.type === FEATURE_TYPES.FEATURE) {\n if (!geoJson.geometry) return null\n return computeGeoJsonConvexHull(geoJson.geometry)\n }\n const positions = coordAll(geoJson).map(p => [p[0], p[1]])\n return computeConvexHullFromPositions(positions)\n}\n","import { assert } from '@kalisio/common-core/predicates'\nimport { object } from '@kalisio/common-core/utilities'\nimport { isLikeGeoJson } from '../is-like.js'\n\nexport function extractGeoJsonNode (geoJson, path) {\n assert.that(geoJson, isLikeGeoJson, 'geoJson must be a GeoJson object')\n return object.lookup(geoJson, path)\n}\n","import { extractGeoJsonNode } from './node.js'\n\nexport function extractGeoJsonBBox (geoJson) {\n return extractGeoJsonNode(geoJson, 'bbox')\n}\n","import { is } from '@kalisio/common-core/predicates'\nimport { WGS84, normalizeCrsName } from '../../foundation/index.js'\nimport { extractGeoJsonNode } from './node.js'\n\nexport function extractGeoJsonCRS (geoJson) {\n const crs = extractGeoJsonNode(geoJson, 'crs')\n if (!is.defined(crs)) return WGS84\n const name = crs.properties?.name\n return is.nonEmptyString(name) ? normalizeCrsName(name) : name\n}\n","import { assert, is } from '@kalisio/common-core/predicates'\nimport {\n hasProjection,\n isWGS84Projection,\n reprojectPosition,\n reprojectPositions\n} from '../foundation/index.js'\nimport {\n FEATURE_TYPES,\n GEOMETRY_TYPES,\n isLikeGeoJson\n} from './is-like.js'\nimport { extractGeoJsonCRS } from './extract/index.js'\n\nfunction crsToUrn (crs) {\n const epsg = crs.match(/^EPSG:(\\d+)$/i)\n return epsg ? `urn:ogc:def:crs:EPSG::${epsg[1]}` : crs\n}\n\nfunction reprojectGeometry (geometry, source, target) {\n switch (geometry.type) {\n case GEOMETRY_TYPES.POINT:\n geometry.coordinates = reprojectPosition(geometry.coordinates, source, target)\n break\n case GEOMETRY_TYPES.MULTI_POINT:\n case GEOMETRY_TYPES.LINESTRING:\n geometry.coordinates = reprojectPositions(geometry.coordinates, source, target)\n break\n case GEOMETRY_TYPES.MULTI_LINESTRING:\n case GEOMETRY_TYPES.POLYGON:\n geometry.coordinates = geometry.coordinates.map(\n positions => reprojectPositions(positions, source, target)\n )\n break\n case GEOMETRY_TYPES.MULTI_POLYGON:\n geometry.coordinates = geometry.coordinates.map(\n polygon => polygon.map(\n ring => reprojectPositions(ring, source, target)\n )\n )\n break\n case GEOMETRY_TYPES.GEOMETRY_COLLECTION:\n for (const g of geometry.geometries) {\n reprojectGeometry(g, source, target)\n }\n break\n }\n delete geometry.bbox\n delete geometry.crs\n return geometry\n}\n\nfunction reprojectFeature (feature, source, target) {\n if (feature.type === FEATURE_TYPES.FEATURE) {\n if (feature.geometry) reprojectGeometry(feature.geometry, source, target)\n } else {\n for (const f of feature.features) {\n reprojectFeature(f, source, target)\n }\n }\n delete feature.bbox\n delete feature.crs\n return feature\n}\n\nexport function reprojectGeoJson (geoJson, target) {\n assert.that(geoJson, isLikeGeoJson, 'geoJson must be a GeoJson object')\n const source = extractGeoJsonCRS(geoJson)\n assert.all([\n { value: source, validator: hasProjection, message: `unknown source projection: ${source}` },\n { value: target, validator: hasProjection, message: `unknown target projection: ${target}` }\n ])\n if (is.oneOf(geoJson.type, Object.values(GEOMETRY_TYPES))) {\n reprojectGeometry(geoJson, source, target)\n } else {\n reprojectFeature(geoJson, source, target)\n }\n if (isWGS84Projection(target)) {\n delete geoJson.crs\n } else {\n geoJson.crs = {\n type: 'name',\n properties: { name: crsToUrn(target) }\n }\n }\n return geoJson\n}\n","import { assert, is } from '@kalisio/common-core/predicates'\nimport {\n DEFAULT_COORDINATE_PRECISION,\n MAX_COORDINATE_PRECISION,\n truncateBBox,\n truncatePosition,\n truncatePositions,\n truncateRing\n} from '../foundation/index.js'\nimport {\n FEATURE_TYPES,\n GEOMETRY_TYPES,\n isLikeGeoJson\n} from './is-like.js'\n\nfunction truncateGeometry (geometry, precision, consider3D) {\n switch (geometry.type) {\n case GEOMETRY_TYPES.POINT:\n truncatePosition(geometry.coordinates, precision)\n break\n case GEOMETRY_TYPES.MULTI_POINT:\n case GEOMETRY_TYPES.LINESTRING:\n truncatePositions(geometry.coordinates, { precision })\n break\n case GEOMETRY_TYPES.MULTI_LINESTRING:\n for (const line of geometry.coordinates) truncatePositions(line, { precision })\n break\n case GEOMETRY_TYPES.POLYGON:\n geometry.coordinates = geometry.coordinates.map((ring) => truncateRing(ring, { precision, consider3D }))\n break\n case GEOMETRY_TYPES.MULTI_POLYGON:\n geometry.coordinates = geometry.coordinates.map((polygon) =>\n polygon.map((ring) => truncateRing(ring, { precision, consider3D }))\n )\n break\n case GEOMETRY_TYPES.GEOMETRY_COLLECTION:\n for (const g of geometry.geometries) truncateGeometry(g, precision, consider3D)\n break\n }\n if (geometry.bbox) truncateBBox(geometry.bbox, precision)\n return geometry\n}\n\nfunction truncateFeature (feature, precision, consider3D) {\n if (feature.type === FEATURE_TYPES.FEATURE) {\n if (feature.geometry) truncateGeometry(feature.geometry, precision, consider3D)\n } else {\n for (const f of feature.features) truncateFeature(f, precision, consider3D)\n }\n if (feature.bbox) truncateBBox(feature.bbox, precision)\n return feature\n}\n\nexport function truncateGeoJson (geoJson, options = {}) {\n const { precision = DEFAULT_COORDINATE_PRECISION, consider3D = false } = options\n assert.all([\n {\n value: geoJson,\n validator: isLikeGeoJson,\n message: 'geoJson must be a valid GeoJson'\n },\n {\n value: precision,\n validator: (v) => is.inRange(v, 0, MAX_COORDINATE_PRECISION),\n message: `precision must be in range [0, ${MAX_COORDINATE_PRECISION}]`\n }\n ])\n if (is.oneOf(geoJson.type, Object.values(GEOMETRY_TYPES))) return truncateGeometry(geoJson, precision, consider3D)\n return truncateFeature(geoJson, precision, consider3D)\n}\n"],"names":["computeConvexHullFromPositions","positions","result","convex","featureCollection","p","feature","computeGeoJsonConvexHull","geoJson","assert","isLikeGeoJson","FEATURE_TYPES","coordAll","extractGeoJsonNode","path","object","extractGeoJsonBBox","extractGeoJsonCRS","crs","is","WGS84","name","normalizeCrsName","crsToUrn","epsg","reprojectGeometry","geometry","source","target","GEOMETRY_TYPES","reprojectPosition","reprojectPositions","polygon","ring","g","reprojectFeature","f","reprojectGeoJson","hasProjection","isWGS84Projection","truncateGeometry","precision","consider3D","truncatePosition","truncatePositions","line","truncateRing","truncateBBox","truncateFeature","truncateGeoJson","options","DEFAULT_COORDINATE_PRECISION","v","MAX_COORDINATE_PRECISION"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kalisio/common-geospatial",
|
|
3
3
|
"description": "Geospatial utilities for the Kalisio ekosystem",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.10.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
7
7
|
"exports": {
|
|
8
8
|
".": {
|
|
9
9
|
"import": "./dist/index.mjs",
|
|
10
10
|
"require": "./dist/index.cjs"
|
|
11
|
+
},
|
|
12
|
+
"./foundation": {
|
|
13
|
+
"import": "./dist/foundation/index.mjs",
|
|
14
|
+
"require": "./dist/foundation/index.cjs"
|
|
15
|
+
},
|
|
16
|
+
"./operators": {
|
|
17
|
+
"import": "./dist/operators/index.mjs",
|
|
18
|
+
"require": "./dist/operators/index.cjs"
|
|
19
|
+
},
|
|
20
|
+
"./io": {
|
|
21
|
+
"import": "./dist/io/index.mjs",
|
|
22
|
+
"require": "./dist/io/index.cjs"
|
|
11
23
|
}
|
|
12
24
|
},
|
|
13
25
|
"files": [
|
|
@@ -43,16 +55,23 @@
|
|
|
43
55
|
},
|
|
44
56
|
"homepage": "https://github.com/kalisio/common-ekosystem/tree/master/packages/common-geospatial",
|
|
45
57
|
"peerDependencies": {
|
|
46
|
-
"@
|
|
58
|
+
"@tmcw/togeojson": "~7.1.2",
|
|
47
59
|
"@turf/buffer": "~7.3.5",
|
|
48
60
|
"@turf/convex": "~7.3.5",
|
|
49
61
|
"@turf/helpers": "~7.3.5",
|
|
50
62
|
"@turf/meta": "~7.3.5",
|
|
63
|
+
"@xmldom/xmldom": "~0.9.11",
|
|
51
64
|
"heap-js": "~2.7.1",
|
|
52
65
|
"proj4": "~2.20.4",
|
|
53
|
-
"@kalisio/common-core": "0.
|
|
66
|
+
"@kalisio/common-core": "0.10.0"
|
|
67
|
+
},
|
|
68
|
+
"peerDependenciesMeta": {
|
|
69
|
+
"@tmcw/togeojson": {
|
|
70
|
+
"optional": true
|
|
71
|
+
}
|
|
54
72
|
},
|
|
55
73
|
"devDependencies": {
|
|
74
|
+
"@tmcw/togeojson": "~7.1.2",
|
|
56
75
|
"chroma-js": "~3.2.0",
|
|
57
76
|
"mongodb": "~6.20.0"
|
|
58
77
|
},
|