@kalisio/common-geospatial 0.8.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 -1056
- 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 +25 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring-Cks2pGr8.js","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("proj4"),Y=typeof process>"u"||process.env?.NODE_ENV!=="production";class te extends Error{constructor(t){super(t),this.name="AssertionError"}}function le(e,t,n){if(!t(e))throw new te(n)}const o={that(e,t,n){Y&&le(e,t,n)},all(e){if(Y)for(const{value:t,validator:n,message:a}of e)le(t,n,a)},any(e){if(!(!Y||e.length===0)&&!e.some(({value:t,validator:n})=>n(t)))throw new te(e.map(({message:t})=>t).join(" or "))}},r={defined(e){return e!=null},nil(e){return!r.defined(e)},plainObject(e){return r.defined(e)&&typeof e=="object"&&!Array.isArray(e)&&e.constructor===Object},emptyObject(e){return r.plainObject(e)&&Object.keys(e).length===0},nonEmptyObject(e){return r.plainObject(e)&&Object.keys(e).length>0},boolean(e){return typeof e=="boolean"},booleanTrue(e){return e===!0},booleanFalse(e){return e===!1},string(e){return typeof e=="string"},emptyString(e){return r.string(e)&&e.trim().length===0},nonEmptyString(e){return r.string(e)&&e.trim().length>0},char(e){return r.string(e)&&/^.$/u.test(e)},hex(e){return r.nonEmptyString(e)&&e.length%2===0&&/^[0-9a-fA-F]*$/.test(e)},dataUri(e){return r.string(e)?e.startsWith("data:")&&e.includes(";base64,"):!1},url(e){if(typeof e!="string")return!1;const t=/^([a-z][a-z0-9+.-]*:\/\/)([^/?#]+)(\/[^?#]*)?(\?[^#]*)?(#.*)?$/i.exec(e);if(!t?.[2].includes(","))return URL.canParse(e);const[,n,a,i="",s="",u=""]=t;return a.split(",").every((l,c)=>(l=l.trim(),!l||c>0&&l.includes("@")?!1:URL.canParse(`${n}${l}${i}${s}${u}`)))},email(e){if(!r.string(e))return!1;const t=/^[-!#$%&'*+/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])+$/,[n,a]=e.split("@");return!n||!a||n.length>64||a.length>255||a.split(".").some(i=>i.length>63)?!1:t.test(e)},regularExpression(e){return r.defined(e)&&e instanceof RegExp},number(e){return typeof e=="number"&&!isNaN(e)&&isFinite(e)},positive(e){return r.number(e)&&e>0},nonPositive(e){return r.number(e)&&e<=0},negative(e){return r.number(e)&&e<0},nonNegative(e){return r.number(e)&&e>=0},inRange(e,t,n){return o.that(n,a=>a>=t,"max must be greater than or equal to min"),r.number(e)&&e>=t&&e<=n},inRangeExclusive(e,t,n){return o.that(n,a=>a>t,"max must be greater than min"),r.number(e)&&e>t&&e<n},inRangeExclusiveMin(e,t,n){return o.that(n,a=>a>t,"max must be greater than min"),r.number(e)&&e>t&&e<=n},inRangeExclusiveMax(e,t,n){return o.that(n,a=>a>=t,"max must be greater than or equal to min"),r.number(e)&&e>=t&&e<n},integer(e){return r.number(e)&&Number.isInteger(e)},positiveInteger(e){return r.integer(e)&&r.positive(e)},nonPositiveInteger(e){return r.integer(e)&&r.nonPositive(e)},negativeInteger(e){return r.integer(e)&&r.negative(e)},nonNegativeInteger(e){return r.integer(e)&&r.nonNegative(e)},array(e){return Array.isArray(e)},emptyArray(e){return r.array(e)&&e.length===0},nonEmptyArray(e){return r.array(e)&&e.length>0},arrayOfLength(e,t){return o.that(t,r.nonNegativeInteger,"length must be a non negative integer"),r.array(e)&&e.length===t},arrayOfLengthAtLeast(e,t){return o.that(t,r.nonNegativeInteger,"minLength must be a non negative integer"),r.array(e)&&e.length>=t},arrayOfLengthAtMost(e,t){return o.that(t,r.nonNegativeInteger,"maxLength must be a non negative integer"),r.array(e)&&e.length<=t},arrayOfLengthBetween(e,t,n){return o.all([{value:t,validator:r.nonNegativeInteger,message:"minLength must be a non negative integer"},{value:n,validator:r.nonNegativeInteger,message:"maxLength must be a non negative integer"},{value:t,validator:a=>a<=n,message:"minLength must be less than or equal to maxLength"}]),r.array(e)&&e.length>=t&&e.length<=n},map(e){return r.defined(e)&&e instanceof Map},emptyMap(e){return r.map(e)&&e.size===0},nonEmptyMap(e){return r.map(e)&&e.size>0},set(e){return r.defined(e)&&e instanceof Set},emptySet(e){return r.set(e)&&e.size===0},nonEmptySet(e){return r.set(e)&&e.size>0},function(e){return typeof e=="function"},oneOf(e,t){return o.that(t,r.nonEmptyArray,"allowed values must be a non empty array"),t.includes(e)},empty(e){return r.nil(e)?!0:r.string(e)?r.emptyString(e):r.array(e)?r.emptyArray(e):r.plainObject(e)?r.emptyObject(e):r.map(e)?r.emptyMap(e):r.set(e)?r.emptySet(e):!1}},h={key(e,t){return o.all([{value:e,validator:r.plainObject,message:"obj must be an object"},{value:t,validator:r.nonEmptyString,message:"key must be a non empty string"}]),Object.hasOwn(e,t)},keys(e,t){return o.all([{value:e,validator:r.plainObject,message:"obj must be an object"},{value:t,validator:n=>r.array(n)&&n.length>0&&n.every(r.nonEmptyString),message:"keys must be an array of non empty strings"}]),t.every(n=>h.key(e,n))},keyWithValue(e,t){return h.key(e,t)&&r.defined(e[t])},path(e,t){o.all([{value:e,validator:r.plainObject,message:"obj must be an object"},{value:t,validator:r.nonEmptyString,message:"path must be a non empty string"}]);let n=e;for(const a of t.split(".")){if(!n||!r.plainObject(n)||!(a in n))return!1;n=n[a]}return!0}};function de(e,t,n=""){return Object.entries(t).every(([a,i])=>{const s=n?`${n}.${a}`:a;if(!h.key(e,a))return i._optional===!0;const u=e[a];if(r.plainObject(i))return r.plainObject(u)&&de(u,i,s);if(typeof i=="function")return i(u);throw new te(`Invalid validator for key "${s}"`)})}const d={schema(e,t){return o.all([{value:e,validator:r.plainObject,message:"obj must be an object"},{value:t,validator:r.plainObject,message:"schema must be an object"}]),de(e,t)}};function g(e){o.that(e,r.function,"validator must be a function");function t(n){return r.nil(n)?!0:e(n)}return t._optional=!0,t}const m={LATITUDE:"LAT",LONGITUDE:"LON",ALTITUDE:"ALT"};function ne(e){return o.that(e,r.string,"axis must be a string"),Object.values(m).includes(e)}function M(e){return o.that(e,r.string,"axis must be a string"),e===m.LATITUDE}function z(e){return o.that(e,r.string,"axis must be a string"),e===m.LONGITUDE}function xe(e){return o.that(e,r.string,"axis must be a string"),e===m.ALTITUDE}const Be={NORTH:{label:"Nord",symbol:"N"},SOUTH:{label:"Sud",symbol:"S"},EAST:{label:"Est",symbol:"E"},WEST:{label:"Ouest",symbol:"O"}},we={INVALID_CONTENT:"Le contenu est invalide",EMPTY_OBJECT:"L'objet est vide",UNKNOWN_TYPE:"Le type de l'objet est inconnu",MISSING_GEOMETRY:"La géométrie est manquante",INVALID_FEATURES_ARRAY:"Le tableau de features est invalide",INVALID_GEOMETRY:"La géométrie est invalide",INVALID_GEOMETRY_TYPE:"Le type de géométrie est invalide",INVALID_COORDINATES_LENGTH:"Le nombre de coordonnées est invalide",INVALID_MULTI_LINESTRING_COORDINATES:"Les coordonnées du MultiLineString sont invalides",INVALID_POLYGON_COORDINATES:"Les coordonnées du Polygon sont invalides",INVALID_MULTIPOLYGON_COORDINATES:"Les coordonnées du MultiPolygon sont invalides",INVALID_GEOMETRYCOLLECTION_GEOMETRIES:"Les géométries de la GeometryCollection sont invalides",RING_NOT_CLOSED:"L'anneau n'est pas fermé",INVALID_WINDING_ORDER:"L'ordre d'orientation de l'anneau est invalide",SELF_INTERSECTION:"Une auto-intersection a été détectée",HOLE_INTERSECTS_SHELL:"Un trou intersecte le contour extérieur",ANTIMERIDIAN_CROSSING:"La géométrie traverse l'antiméridien",DUPLICATE_POSITION:"Une position consécutive est dupliquée",INVALID_POSITION_LENGTH:"Le nombre de coordonnées de la position est invalide",INVALID_POSITION_COORDINATES:"Les coordonnées de la position sont invalides",INVALID_LONGITUDE_RANGE:"La longitude est hors limites",INVALID_LATITUDE_RANGE:"La latitude est hors limites",INVALID_ALTITUDE:"L'altitude est invalide",EXCESSIVE_LONGITUDE_PRECISION:"La précision de la longitude est excessive",EXCESSIVE_LATITUDE_PRECISION:"La précision de la latitude est excessive",INVALID_BBOX_LENGTH:"Le nombre de coordonnées de la boîte englobante est invalide",INVALID_BBOX_LATITUDE_ORDER:"L'ordre des latitudes de la boîte englobante est invalide",INVALID_BBOX_LONGITUDE_ORDER:"L'ordre des longitudes de la boîte englobante est invalide",INVALID_BBOX_ALTITUDE_ORDER:"L'ordre des altitudes de la boîte englobante est invalide",BBOX_ANTIMERIDIAN_CROSSING:"La boîte englobante traverse l'antiméridien",INVALID_CRS_OBJECT:"L'objet CRS est invalide",INVALID_CRS_NAME:"Le nom du CRS est invalide",INVALID_CRS_LINK:"Le lien du CRS est invalide",INVALID_CRS_TYPE:"Le type de CRS est invalide",UNSUPPORTED_CRS:"Le CRS n'est pas pris en charge",UNSUPPORTED_LINK_CRS:"Le lien CRS n'est pas pris en charge",UNSUPPORTED_NESTED_CRS:"Le CRS imbriqué n'est pas pris en charge"},$e={DIRECTIONS:Be,VALIDATION:we},ke={NORTH:{label:"North",symbol:"N"},SOUTH:{label:"South",symbol:"S"},EAST:{label:"East",symbol:"E"},WEST:{label:"West",symbol:"W"}},He={INVALID_CONTENT:"Contant is invalid",EMPTY_OBJECT:"Object is empty",UNKNOWN_TYPE:"Unknown object type",MISSING_GEOMETRY:"Geometry is missing",INVALID_FEATURES_ARRAY:"Features array is invalid",INVALID_GEOMETRY:"Geometry is invalid",INVALID_GEOMETRY_TYPE:"Geometry type is invalid",INVALID_COORDINATES_LENGTH:"Coordinates length is invalid",INVALID_MULTI_LINESTRING_COORDINATES:"MultiLineString coordinates are invalid",INVALID_POLYGON_COORDINATES:"Polygon coordinates are invalid",INVALID_MULTIPOLYGON_COORDINATES:"MultiPolygon coordinates are invalid",INVALID_GEOMETRYCOLLECTION_GEOMETRIES:"GeometryCollection geometries are invalid",RING_NOT_CLOSED:"Ring is not closed",INVALID_WINDING_ORDER:"Ring winding order is invalid",SELF_INTERSECTION:"Self-intersection detected",HOLE_INTERSECTS_SHELL:"A hole intersects the exterior ring",ANTIMERIDIAN_CROSSING:"Geometry crosses the antimeridian",DUPLICATE_POSITION:"Consecutive position is duplicated",INVALID_POSITION_LENGTH:"Position length is invalid",INVALID_POSITION_COORDINATES:"Position coordinates are invalid",INVALID_LONGITUDE_RANGE:"Longitude is out of range",INVALID_LATITUDE_RANGE:"Latitude is out of range",INVALID_ALTITUDE:"Altitude is invalid",EXCESSIVE_LONGITUDE_PRECISION:"Longitude precision is excessive",EXCESSIVE_LATITUDE_PRECISION:"Latitude precision is excessive",INVALID_BBOX_LENGTH:"Bounding box length is invalid",INVALID_BBOX_LATITUDE_ORDER:"Bounding box latitude order is invalid",INVALID_BBOX_LONGITUDE_ORDER:"Bounding box longitude order is invalid",INVALID_BBOX_ALTITUDE_ORDER:"Bounding box altitude order is invalid",BBOX_ANTIMERIDIAN_CROSSING:"Bounding box crosses the antimeridian",INVALID_CRS_OBJECT:"CRS object is invalid",INVALID_CRS_NAME:"CRS name is invalid",INVALID_CRS_LINK:"CRS link is invalid",INVALID_CRS_TYPE:"CRS type is invalid",UNSUPPORTED_CRS:"CRS is not supported",UNSUPPORTED_LINK_CRS:"CRS link is not supported",UNSUPPORTED_NESTED_CRS:"Nested CRS is not supported"},fe={DIRECTIONS:ke,VALIDATION:He},ze={DIRECTIONS:{NORTH:{label:r.string,symbol:r.char},SOUTH:{label:r.string,symbol:r.char},EAST:{label:r.string,symbol:r.char},WEST:{label:r.string,symbol:r.char}}},D={en:fe,fr:$e};let C="en";const ce="en";function We(){return Object.keys(D)}function Fe(e){o.all([{value:e,validator:r.string,message:"code must be a string"},{value:e,validator:t=>h.key(D,t),message:"code is unknown"}]),C=e}function Ee(){return C}function re(){return C===ce?[C]:[C,ce]}function Xe(e,t){o.all([{value:e,validator:r.string,message:"code must be a string"},{value:e,validator:n=>!h.key(D,n),message:"messages already registered"},{value:t,validator:r.plainObject,message:"messages must be an object"},{value:t,validator:n=>d.schema(n,ze),message:"messages do not conform to schema"}]),D[e]=t}function W(e){return o.all([{value:e,validator:r.string,message:"code must be a string"},{value:e,validator:t=>h.key(D,t),message:"code is unknown"}]),D[e]}function U(){return W(Ee()).DIRECTIONS}function q(e){const t=new Set;for(const n of re()){const{DIRECTIONS:a}=W(n);for(const i of e)t.add(a[i].symbol)}return[...t]}function F(e,t){const n=t.toUpperCase();return re().some(a=>{const{label:i,symbol:s}=W(a).DIRECTIONS[e];return n===i.toUpperCase()||n===s.toUpperCase()})}function Ye(e=null){const t=U();return r.defined(e)?(o.that(e,ne,"axis must be a valid axis"),M(e)?[t.SOUTH,t.NORTH]:z(e)?[t.EAST,t.WEST]:[]):[t.SOUTH,t.NORTH,t.EAST,t.WEST]}function L(e=null){return r.defined(e)?(o.that(e,ne,"axis must be a valid axis"),M(e)?q(["NORTH","SOUTH"]):z(e)?q(["EAST","WEST"]):[]):q(["NORTH","SOUTH","EAST","WEST"])}function qe(){return U().NORTH}function Ke(){return U().SOUTH}function Je(){return U().EAST}function Ze(){return U().WEST}function b(e){return o.that(e,r.string,"dir must be a string"),Ie(e)||ae(e)||X(e)||G(e)}function Ie(e){return o.that(e,r.string,"dir must be a string"),F("NORTH",e)}function ae(e){return o.that(e,r.string,"dir must be a string"),F("SOUTH",e)}function X(e){return o.that(e,r.string,"dir must be a string"),F("EAST",e)}function G(e){return o.that(e,r.string,"dir must be a string"),F("WEST",e)}function pe(e){return o.that(e,b,"dir must be a direction"),G(e)||X(e)?m.LONGITUDE:m.LATITUDE}const Qe={degrees:r.number,direction:g(b)},et=/^(-?\d{1,3}(?:\.\d+)?)°?$/;function tt(){return new RegExp(`^(\\d{1,3}(?:\\.\\d+)?)°?([${L()}])$`,"i")}function x(e){let t=null,n=null;if(r.plainObject(e)&&d.schema(e,Qe))r.defined(e.direction)?e.degrees>=0&&(t=e.degrees,n=e.direction):t=e.degrees;else if(r.string(e)){const a=e.replace(/\s+/g,""),i=a.match(et)??a.match(tt());i&&(t=parseFloat(i[1]),n=i[2]??null)}return{get degrees(){return t},get direction(){return n},get format(){return"DD"},isValid(){return r.number(t)},toString(a){if(o.that(a,r.positiveInteger,"decimalPlaces must be a positive integer"),!this.isValid())return"";let i=`${t.toFixed(a)}°`;return n&&(i+=` ${n}`),i},toDecimal(){return this.isValid()?x({degrees:t,direction:n}):null}}}const nt={degrees:r.integer,minutes:e=>r.inRangeExclusiveMax(e,0,60),direction:g(b)},rt=/^(-?\d{1,3})°(\d{1,2}(?:\.\d+)?)'?$/;function at(){return new RegExp(`^(\\d{1,3})°(\\d{1,2}(?:\\.\\d+)?)'?([${L().join("")}])$`,"i")}function ve(e){let t=null,n=null,a=null;if(r.plainObject(e)&&d.schema(e,nt))r.defined(e.direction)?e.degrees>=0&&(t=e.degrees,n=e.minutes,a=e.direction):(t=e.degrees,n=e.minutes);else if(r.string(e)){const i=e.replace(/\s+/g,""),s=i.match(rt)??i.match(at());s&&(t=parseFloat(s[1]),n=parseFloat(s[2]),a=s[3]??null)}return{get degrees(){return t},get minutes(){return n},get direction(){return a},get format(){return"DDM"},isValid(){return r.integer(t)&&r.inRangeExclusiveMax(n,0,60)},toString(i){if(o.that(i,r.positiveInteger,"decimalPlaces must be a positive integer"),!this.isValid())return"";let s=`${t}° ${n.toFixed(i)}'`;return a&&(s+=` ${a}`),s},toDecimal(){return this.isValid()?x({degrees:t+n/60,direction:a}):null}}}const it={degrees:r.nonNegativeInteger,minutes:e=>r.inRangeExclusiveMax(e,0,60),direction:b};function st(){return new RegExp(`^(\\d{2})(\\d{3})([${L(m.LATITUDE).join("")}])$`,"i")}function ot(){return new RegExp(`^(\\d{3})(\\d{3})([${L(m.LONGITUDE).join("")}])$`,"i")}function be(e){let t=null,n=null,a=null;if(r.plainObject(e)&&d.schema(e,it))t=e.degrees,n=e.minutes,a=e.direction;else if(r.string(e)){const i=e.trim(),s=i.match(st())??i.match(ot());s&&(t=parseFloat(s[1]),n=parseFloat(s[2])/10,a=s[3])}return{get degrees(){return t},get minutes(){return n},get direction(){return a},get format(){return"DDM_AERO"},isValid(){return r.nonNegativeInteger(t)&&r.inRangeExclusiveMax(n,0,60)&&b(a)},toString(){if(!this.isValid())return"";const i=X(a)||G(a),s=String(t).padStart(i?3:2,"0"),u=Math.floor(n*10).toString().padStart(3,"0");return`${s}${u}${a}`},toDecimal(){return this.isValid()?x({degrees:t+n/60,direction:a}):null}}}const ut={degrees:r.integer,minutes:e=>r.integer(e)&&r.inRange(e,0,59),seconds:e=>r.inRangeExclusiveMax(e,0,60),direction:g(b)},lt=/^(-?\d{1,3})°(\d{1,2})'(\d{1,2}(?:\.\d+)?)"?$/;function ct(){return new RegExp(`^(\\d{1,3})°(\\d{1,2})'(\\d{1,2}(?:\\.\\d+)?)"?([${L().join("")}])$`,"i")}function he(e){let t=null,n=null,a=null,i=null;if(r.plainObject(e)&&d.schema(e,ut))r.defined(e.direction)?e.degrees>=0&&(t=e.degrees,n=e.minutes,a=e.seconds,i=e.direction):(t=e.degrees,n=e.minutes,a=e.seconds);else if(r.string(e)){const s=e.replace(/\s+/g,""),u=s.match(lt)??s.match(ct());u&&(t=parseFloat(u[1]),n=parseFloat(u[2]),a=parseFloat(u[3]),i=u[4]??null)}return{get degrees(){return t},get minutes(){return n},get seconds(){return a},get direction(){return i},get format(){return"DMS"},isValid(){return r.integer(t)&&r.integer(n)&&r.inRange(n,0,59)&&r.inRangeExclusiveMax(a,0,60)},toString(s){if(o.that(s,r.positiveInteger,"decimalPlaces must be a positive integer"),!this.isValid())return"";let u=`${t}° ${n}' ${a.toFixed(s)}"`;return i&&(u+=` ${i}`),u},toDecimal(){return this.isValid()?x({degrees:t+n/60+a/3600,direction:i}):null}}}function me(e){const t=Math.floor(e.degrees),n=(e.degrees-t)*60;return{degrees:t,minutes:n,direction:e.direction}}function mt(e){const t=Math.floor(e.degrees),n=(e.degrees-t)*60,a=Math.floor(n),i=(n-a)*60;return{degrees:t,minutes:a,seconds:i,direction:e.direction}}const ge={DD:e=>(o.that(e,t=>t.isValid(),"dd must be a valid coordinate"),e),DDM:e=>{o.that(e,i=>i.isValid(),"dd must be a valid coordinate");const{degrees:t,minutes:n,direction:a}=me(e);return ve(a?{degrees:t,minutes:n,direction:a}:{degrees:t,minutes:n})},DMS:e=>{o.that(e,s=>s.isValid(),"dd must be a valid coordinate");const{degrees:t,minutes:n,seconds:a,direction:i}=mt(e);return he(i?{degrees:t,minutes:n,seconds:a,direction:i}:{degrees:t,minutes:n,seconds:a})},DDM_AERO:e=>{o.that(e,i=>i.isValid(),"dd must be a valid coordinate");const{degrees:t,minutes:n,direction:a}=me(e);return be({degrees:t,minutes:n,direction:a})}},w={DD:"DD",DDM:"DDM",DDM_AERO:"DDM_AERO",DMS:"DMS"},Oe={DD:x,DDM:ve,DDM_AERO:be,DMS:he},O=7,v=8,Ne=Array.from({length:v+1},(e,t)=>10**t);function K(e,t){if(o.that(e,r.number,"coord must be a number"),r.defined(t))return o.that(t,b,"dir must be a direction"),pe(t);if(Math.abs(e)>90)return m.LONGITUDE}function gt(e){o.that(e,r.number,"coord must be a number");const t=e.toExponential(),[n,a]=t.split("e").map(Number),i=(n.toString().split(".")[1]||"").length;return Math.max(0,i-a)}function ie(e,t=O){o.all([{value:e,validator:r.number,message:"coord must be a number"},{value:t,validator:a=>r.inRange(a,0,v),message:`precision must be in range [0, ${v}]`}]);const n=Ne[t];return Math.round(e*n)/n}function dt(e,t){if(o.all([{value:e,validator:r.number,message:"coord must be a number"},{value:t,validator:a=>z(a)||M(a),message:"axis must be either a longitude or latitude"}]),M(t))return Math.max(-90,Math.min(90,e));let n=((e+180)%360+360)%360-180;return n===-180&&(n=180),Object.is(n,-0)&&(n=0),n}function ft(e,t){o.all([{value:e,validator:a=>r.defined(a)&&a.isValid(),message:"from must be a valid coordinate"},{value:t,validator:a=>h.key(ge,a),message:`unknown format: ${t}`}]);const n=e.format===w.DD?e:e.toDecimal();return n.isValid()?t===w.DD?n:ge[t](n):null}function Se(e){o.that(e,r.nonEmptyString,"pattern must be a non empty string");for(const t of Object.keys(w)){const n=Oe[t](e);if(n.isValid())return n}return null}const Et={node:typeof process<"u"&&process.versions?.node!=null,worker:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,serviceWorker:typeof ServiceWorkerGlobalScope<"u"&&self instanceof ServiceWorkerGlobalScope,test:typeof process<"u"&&process.env.NODE_ENV==="test",dev:typeof process<"u"&&process.env.NODE_ENV==="development",prod:typeof process<"u"&&process.env.NODE_ENV==="production"},De={ignoreSpaces:g(r.boolean),ignoreDiacritics:g(r.boolean),ignoreCase:g(r.boolean),locale:g(r.string)},It={...De};function N(e,t,n){return f.words(e).map((a,i)=>t(f.normalize(a,{ignoreDiacritics:!0}),i)).join(n)}const f={DIACRITICS:{a:"aáàäâã",e:"eéëèê",i:"iíïìî",o:"oóöòõô",u:"uüúùû",c:"cç"},normalize(e,t={}){o.all([{value:e,validator:r.string,message:"str must be a string"},{value:t,validator:l=>d.schema(l,De)}]);const{ignoreSpaces:n=!1,ignoreDiacritics:a=!1,ignoreCase:i=!1,locale:s=void 0}=t;let u=e;return n&&(u=u.replace(/\s+/g," ").trim()),a&&(u=u.normalize("NFKD").replace(new RegExp("\\p{M}","gu"),"")),i&&(u=u.toLocaleLowerCase(s)),u},compare(e,t,n={}){o.all([{value:e,validator:r.string,message:"str1 must be a string"},{value:t,validator:r.string,message:"str2 must be a string"},{value:n,validator:u=>d.schema(u,It)}]);const a={ignoreDiacritics:!0,ignoreCase:!0,...n},i=f.normalize(e,a),s=f.normalize(t,a);return i.localeCompare(s,n.locale)},makeDiacriticPattern(e,t={}){o.that(e,r.string,"pattern must be a string");const{reverse:n=!1}=t??{};let a="";for(const i of e){const s=i.toLowerCase();let u=null;for(const l of Object.values(this.DIACRITICS))if(n&&l.includes(s)||!n&&l.startsWith(s)){u=l;break}u?a+=`[${u}]`:a+=i}return a},initials(e,t={}){o.that(e,r.string,"str must be a string");const{max:n=void 0}=t,a=e.trim().split(/[\s-]+/).filter(Boolean).map(i=>i[0].toUpperCase());return(n?a.slice(0,n):a).join("")},words(e){return o.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"))??[]},slugify(e,t="-"){return o.all([{value:e,validator:r.string,message:"str must be a string"},{value:t,validator:r.char,message:"separator must be a char"}]),f.normalize(e.trim(),{ignoreDiacritics:!0}).toLowerCase().replace(/[^a-z0-9]+/gi,t).replace(new RegExp(`^${t}|${t}$`,"g"),"")},capitalize(e){return o.that(e,r.string,"str must be a string"),e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()},camelCase(e){return o.that(e,r.string,"str must be a string"),N(e,(t,n)=>n===0?t.toLowerCase():f.capitalize(t),"")},pascalCase(e){return o.that(e,r.string,"str must be a string"),N(e,t=>f.capitalize(t),"")},kebabCase(e){return o.that(e,r.string,"str must be a string"),N(e,t=>t.toLowerCase(),"-")},snakeCase(e){return o.that(e,r.string,"str must be a string"),N(e,t=>t.toLowerCase(),"_")},constantCase(e){return o.that(e,r.string,"str must be a string"),N(e,t=>t.toUpperCase(),"_")},dotCase(e){return o.that(e,r.string,"str must be a string"),N(e,t=>t.toLowerCase(),".")},titleCase(e){return o.that(e,r.string,"str must be a string"),f.words(e).map(t=>f.capitalize(t)).join(" ")}},J={ignoreSpaces:g(r.boolean),ignoreDiacritics:g(r.boolean),ignoreCase:g(r.boolean),locale:g(r.string)},pt={...J,ignoredKeys:g(r.array)};function Z(e,t={}){if(!r.defined(e))return e;const n=t?.ignoredKeys??[],a={ignoreDiacritics:!1,ignoreCase:!1,locale:t.locale};return r.array(e)?e.map(i=>Z(i,t)).sort((i,s)=>f.compare(JSON.stringify(i),JSON.stringify(s),a)):r.plainObject(e)?Object.fromEntries(Object.entries(e).filter(([i])=>!n.includes(i)).sort(([i],[s])=>f.compare(i,s,a)).map(([i,s])=>[i,Z(s,t)])):r.string(e)?f.normalize(e,t):e}const vt={clone(e){return o.that(e,r.defined,"obj must be defined"),structuredClone(e)},normalize(e,t={}){return o.all([{value:e,validator:n=>r.array(n)||r.plainObject(n),message:"obj must be an array or a plain object"},{value:t,validator:n=>d.schema(n,pt)}]),Z(e,t)},reorder(e,t,n={}){o.all([{value:e,validator:r.plainObject,message:"obj must be a plain object"},{value:t,validator:r.string,message:"property must be a string"},{value:n,validator:i=>d.schema(i,J)}]);const a=(i,s)=>f.compare(i[t],s[t],n);return Object.fromEntries(Object.entries(e).sort(([,i],[,s])=>a(i,s)))},lookup(e,t){return o.all([{value:e,validator:r.defined,message:"obj must be defined"},{value:t,validator:r.nonEmptyString,message:"path must be a non empty string"}]),t.split(".").reduce((n,a)=>n?.[a],e)},dotify(e){o.that(e,r.plainObject,"obj must be a plain object");const t={};function n(a,i){for(const[s,u]of Object.entries(a)){const l=i?`${i}.${s}`:s;r.nonEmptyObject(u)?n(u,l):t[l]=u}}return n(e),t},sort(e,t,n={}){return o.all([{value:e,validator:r.array,message:"arr must be an array"},{value:t,validator:r.string,message:"property must be a string"},{value:n,validator:a=>d.schema(a,J)}]),[...e].sort((a,i)=>f.compare(a[t],i[t],n))}},E={clamp(e,t,n){return o.all([{value:e,validator:r.number,message:"value must be a number"},{value:t,validator:r.number,message:"min must be a number"},{value:n,validator:r.number,message:"max must be a number"}]),Math.min(Math.max(e,t),n)},round(e,t=2){o.all([{value:e,validator:r.number,message:"value must be a number"},{value:t,validator:r.nonNegativeInteger,message:"precision must be a non-negative integer"}]);const n=10**t;return Math.round(e*n)/n},sign(e,t=0){return o.all([{value:e,validator:r.number,message:"value must be a number"},{value:t,validator:r.nonNegative,message:"epsilon must be a non-negative number"}]),e>t?1:e<-t?-1:0},percentage(e,t){return o.all([{value:e,validator:r.number,message:"value must be a number"},{value:t,validator:r.number,message:"total must be a number"}]),E.round(e/t*100,2)},exponential(e,t=2){if(o.all([{value:e,validator:r.number,message:"value must be a number"},{value:t,validator:r.nonNegativeInteger,message:"decimals must be a non-negative integer"}]),e===0)return`0.${"0".repeat(t)}e+0`;const n=Math.floor(Math.log10(Math.abs(e)));return`${(e/Math.pow(10,n)).toFixed(t)}e${n>=0?"+":""}${n}`},linear(e,t=0,n=1){return o.all([{value:e,validator:a=>r.inRange(a,0,1),message:"t must be in range [0, 1]"},{value:t,validator:r.number,message:"initial must be a number"},{value:n,validator:r.number,message:"final must be a number"}]),t+e*(n-t)},to:{radians(e){return o.that(e,r.number,"degrees must be a number"),e*Math.PI/180},degrees(e){return o.that(e,r.number,"radians must be a number"),e*180/Math.PI}},pow:{square(e){return o.that(e,r.number,"value must be a number"),e*e},cube(e){return o.that(e,r.number,"value must be a number"),E.pow.square(e)*e}},ease:{in(e,t=.5){return o.all([{value:e,validator:n=>r.inRange(n,0,1),message:"t must be in range [0, 1]"},{value:t,validator:r.number,message:"linearity must be a number"}]),Math.pow(e,1/t)},out(e,t=.5){return o.all([{value:e,validator:n=>r.inRange(n,0,1),message:"t must be in range [0, 1]"},{value:t,validator:r.number,message:"linearity must be a number"}]),1-Math.pow(1-e,1/t)},cubicBezier(e,t=.42,n=0,a=.58,i=1){o.that(e,c=>r.inRange(c,0,1),"t must be in range [0, 1]");const s=1-e,u=e*e,l=s*s;return l*s*n+3*l*e*t+3*s*u*a+u*e*i}},stats:{sum(e){return o.that(e,r.array,"values must be an array"),e.reduce((t,n)=>t+n,0)},average(e){return o.that(e,r.nonEmptyArray,"values must be a non-empty array"),E.stats.sum(e)/e.length},median(e){o.that(e,r.nonEmptyArray,"values must be a non-empty array");const t=[...e].sort((a,i)=>a-i),n=Math.floor(t.length/2);return t.length%2===0?E.linear(.5,t[n-1],t[n]):t[n]}}},$=E.to.radians(1),bt=1e-12;function T(e){const t=e[0]*$,n=e[1]*$,a=Math.cos(n);return[a*Math.cos(t),a*Math.sin(t),Math.sin(n)]}function ht(e){const t=Math.atan2(e[1],e[0]),n=Math.asin(e[2]);return[t/$,n/$]}function y(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function P(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Te(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function k(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function H(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function Ot(e){const t=H(e);return[e[0]/t,e[1]/t,e[2]/t]}function Nt(e,t){return Math.atan2(H(P(e,t)),y(e,t))}function St(e){return P(e,Le(e))}function Le(e){return Ot(P([0,0,1],e))}function Dt(e,t){const n=St(e),a=Le(e);return Te(k(n,Math.cos(t)),k(a,Math.sin(t)))}function Tt(e,t,n){const a=Dt(e,t);return Te(k(e,Math.cos(n)),k(a,Math.sin(n)))}function _e(e,t,n,a,i=bt){const s=P(e,t),u=P(n,a),l=H(s),c=H(u);if(l<=i||c<=i)return!1;const _=E.sign(y(s,n)/l,i),A=E.sign(y(s,a)/l,i);if(_*A!==-1)return!1;const R=E.sign(y(u,e)/c,i),Ge=E.sign(y(u,t)/c,i);return R*Ge===-1}const Lt="WGS84",S="+proj=longlat +datum=WGS84 +no_defs",_t={WGS84:S,"CRS:84":S,CRS84:S,"urn:ogc:def:crs:OGC:1.3:CRS84":S,"urn:ogc:def:crs:OGC:2:84":S,"urn:ogc:def:crs:EPSG::4326":S,"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"};for(const[e,t]of Object.entries(_t))p.defs(e)||p.defs(e,t);const At=/^urn:ogc:def:crs:EPSG::(\d+)$/i;function Rt(e){o.that(e,r.nonEmptyString,"name must be a non empty string");const t=e.match(At);return t?`EPSG:${t[1]}`:e}function yt(e){o.that(e,r.nonEmptyString,"name must be a non empty string");const t=e.match(/^EPSG:(\d+)$/i);return t?`urn:ogc:def:crs:EPSG::${t[1]}`:e}function Ct(){return Object.keys(p.defs)}function Mt(e,t){o.all([{value:e,validator:r.nonEmptyString,message:"name must be a non empty string"},{value:t,validator:n=>r.nonEmptyString(n)||r.nonEmptyObject(n),message:"definition must be a non empty string or a non empty object"}]),p.defs(e,t)}function Q(e){return o.that(e,r.nonEmptyString,"name must be a non empty string"),r.defined(p.defs(e))}function Pt(e){return o.that(e,r.nonEmptyString,"name must be a non empty string"),p.defs(e)}function jt(e){o.that(e,r.nonEmptyString,"name must be a non empty string");const t=p.defs(e);if(!t)return!1;const n=p.defs("EPSG:4326");return t.projName===n.projName&&t.datumCode===n.datumCode}const B={precision:g(r.number),consider3D:g(r.boolean)},se=63710088e-1;function Vt(e){o.that(e,_=>r.nonEmptyString(_),"pattern must be a non-empty string");const t=e.split(/[,;|]/);if(t.length!==2)return null;const[n,a]=t.map(Se);if(!n||!a)return null;const i=n.toDecimal(),s=a.toDecimal(),u=K(i.degrees,i.direction),l=K(s.degrees,s.direction),c=_=>{const{degrees:A,direction:R}=_;return R&&(G(R)||ae(R))?-A:A};return u===m.LONGITUDE&&l===m.LATITUDE?[c(i),c(s)]:l===m.LONGITUDE&&u===m.LATITUDE?[c(s),c(i)]:u===m.LONGITUDE&&!l?[c(i),c(s)]:u===m.LATITUDE&&!l?[c(s),c(i)]:l===m.LONGITUDE&&!u?[c(s),c(i)]:l===m.LATITUDE&&!u?[c(i),c(s)]:!u&&!l?[[c(i),c(s)],[c(s),c(i)]]:null}function I(e){return r.arrayOfLengthBetween(e,2,3)?e.every(r.number):!1}function Ae(e){return o.that(e,I,"position must be a valid position"),r.arrayOfLength(e,3)}function oe(e,t,n={}){o.all([{value:e,validator:I,message:"position1 must be a valid position"},{value:t,validator:I,message:"position2 must be a valid position"},{value:n,validator:u=>d.schema(u,B),message:"options must be a valid options object"}]);const{precision:a=O,consider3D:i=!1}=n,s=i?Math.max(e.length,t.length):2;return Array.from({length:s},(u,l)=>(e[l]??0).toFixed(a)===(t[l]??0).toFixed(a)).every(Boolean)}function Re(e,t=O){o.all([{value:e,validator:I,message:"position must be a position"},{value:t,validator:n=>r.inRange(n,0,v),message:`precision must be in range [0, ${v}]`}]);for(let n=0;n<e.length;n++)e[n]=ie(e[n],t);return e}function ye(e,t,n){return o.all([{value:e,validator:I,message:"position must be a valid position"},{value:t,validator:Q,message:`unknown source projection: ${t}`},{value:n,validator:Q,message:`unknown target projection: ${n}`}]),p(t,n,e)}function Ut(e,t,n){o.all([{value:e,validator:I,message:"position must be a valid position"},{value:t,validator:r.number,message:"bearing must be a number"},{value:n,validator:r.number,message:"distance must be a number"}]);const a=Tt(T(e),E.to.radians(t),n/se);return ht(a)}function Gt(e,t){return o.all([{value:e,validator:I,message:"position1 must be a valid position"},{value:t,validator:I,message:"position2 must be a valid position"}]),Nt(T(e),T(t))*se}function j(e){if(!r.arrayOfLength(e,4)&&!r.arrayOfLength(e,6))return!1;const t=e.length===4,n=t?[e[0],e[1]]:[e[0],e[1],e[2]],a=t?[e[2],e[3]]:[e[3],e[4],e[5]];if(!I(n)||!I(a))return!1;const[,i]=n,[,s]=a;return!(i>s||!t&&e[2]>e[5])}function ee(e){return o.that(e,j,"bbox must be a valid bounding-box"),r.arrayOfLength(e,6)}function xt(e,t){return o.all([{value:e,validator:j,message:"bbox1 must be a valid bounding-box"},{value:t,validator:j,message:"bbox2 must be a valid bounding-box"}]),ee(e)&&ee(t)?[Math.min(e[0],t[0]),Math.min(e[1],t[1]),Math.min(e[2],t[2]),Math.max(e[3],t[3]),Math.max(e[4],t[4]),Math.max(e[5],t[5])]:[Math.min(e[0],t[0]),Math.min(e[1],t[1]),Math.max(e[2],t[2]),Math.max(e[3],t[3])]}const Bt={ignore3D:g(r.boolean)};function wt(e,t={}){o.all([{value:e,validator:r.nonEmptyArray,message:"positions must be a non-empty array"},{value:e,validator:i=>i.every(I),message:"positions must be an array of valid positions"},{value:t,validator:i=>d.schema(i,Bt),message:"options must be a valid options object"}]);const{ignore3D:n=!1}=t;return!n&&e.some(Ae)?e.reduce((i,s)=>[Math.min(i[0],s[0]),Math.min(i[1],s[1]),Math.min(i[2],s[2]??0),Math.max(i[3],s[0]),Math.max(i[4],s[1]),Math.max(i[5],s[2]??0)],[1/0,1/0,1/0,-1/0,-1/0,-1/0]):e.reduce((i,s)=>[Math.min(i[0],s[0]),Math.min(i[1],s[1]),Math.max(i[2],s[0]),Math.max(i[3],s[1])],[1/0,1/0,-1/0,-1/0])}function $t(e,t=O){o.all([{value:e,validator:j,message:"bbox must be a valid bounding box"},{value:t,validator:n=>r.inRange(n,0,v),message:`precision must be in range [0, ${v}]`}]);for(let n=0;n<e.length;n++)e[n]=ie(e[n],t);return e}const Ce={...B,deduplicate:g(r.boolean)};function Me(e){return r.array(e)&&e.every(I)}function Pe(e,t={}){o.that(t,s=>d.schema(s,B),"options must be a valid options object");const{precision:n=O,consider3D:a=!1}=t,i=[];for(const s of e){const u=i[i.length-1];(!u||!oe(s,u,{precision:n,consider3D:a}))&&i.push(s)}return i}function je(e,t={}){o.all([{value:e,validator:r.array,message:"positions must be an array"},{value:t,validator:u=>d.schema(u,Ce),message:"options must be a valid options object"}]);const{precision:n=O,deduplicate:a=!1,consider3D:i=!1}=t,s=e.map(u=>Re(u,n));return a?Pe(s,{precision:n,consider3D:i}):s}function kt(e,t,n){return o.that(e,r.array,"positions must be an array"),e.map(a=>ye(a,t,n))}function V(e,t={}){return!r.arrayOfLengthAtLeast(e,4)||!Me(e)?!1:ue(e,t)}function ue(e,t={}){if(o.that(t,i=>d.schema(i,B),"options must be a valid options object"),!r.arrayOfLengthAtLeast(e,1))return!1;const n=e[0],a=e[e.length-1];return oe(n,a,t)}function Ve(e,t={}){return!r.nonEmptyArray(e)||ue(e,t)?e:[...e,[...e[0]]]}function Ht(e,t={}){const n=je(e,{deduplicate:!0,...t});return Ve(n,t)}function Ue(e){o.that(e,V,"ring must be a valid closed ring of at least 4 positions");let t=0;for(let n=0;n<e.length-1;n++){const[a,i]=e[n],[s,u]=e[n+1];t+=E.to.radians(s-a)*(2+Math.sin(E.to.radians(i))+Math.sin(E.to.radians(u)))}return-t/2}function zt(e){return Ue(e)<0}function Wt(e,t){o.all([{value:e,validator:V,message:"ring1 must be a valid closed ring"},{value:t,validator:V,message:"ring2 must be a valid closed ring"}]);const n=e.map(T),a=t.map(T);for(let i=0;i<n.length-1;i++)for(let s=0;s<a.length-1;s++)if(_e(n[i],n[i+1],a[s],a[s+1]))return!0;return!1}function Ft(e){o.that(e,V,"ring must be a valid closed ring");const t=e.map(T),n=[],a=t.length-1;for(let i=0;i<a;i++)for(let s=i+1;s<a;s++)s!==i+1&&(i===0&&s===a-1||_e(t[i],t[i+1],t[s],t[s+1])&&n.push([i,s]));return n}exports.AXES=m;exports.COORDINATE_FORMATS=w;exports.COORDINATE_MODELS=Oe;exports.COORDINATE_TRUNCATION_FACTORS=Ne;exports.DEFAULT_COORDINATE_PRECISION=O;exports.EARTH_RADIUS=se;exports.IS_SAME_POSITION_OPTIONS_SCHEMA=B;exports.MAX_COORDINATE_PRECISION=v;exports.O=g;exports.TRUNCATE_POSITIONS_OPTIONS_SCHEMA=Ce;exports.WGS84=Lt;exports.a=o;exports.closeRing=Ve;exports.computeBBox=wt;exports.convertCoordinate=ft;exports.d=d;exports.deduplicatePositions=Pe;exports.defineProjection=Mt;exports.denormalizeCrsName=yt;exports.destinationFromPosition=Ut;exports.distanceBetweenPositions=Gt;exports.en=fe;exports.getActiveLocales=re;exports.getCoordinatePrecision=gt;exports.getDirectionAxis=pe;exports.getDirectionSymbols=L;exports.getDirections=Ye;exports.getEast=Je;exports.getLocale=Ee;exports.getMessages=W;exports.getNorth=qe;exports.getProjection=Pt;exports.getSouth=Ke;exports.getWest=Ze;exports.guessCoordinateAxis=K;exports.h=Et;exports.hasProjection=Q;exports.is3DBBox=ee;exports.is3DPosition=Ae;exports.isAltitude=xe;exports.isClockwiseRing=zt;exports.isClosedRing=ue;exports.isEast=X;exports.isLatitude=M;exports.isLongitude=z;exports.isNorth=Ie;exports.isSamePosition=oe;exports.isSouth=ae;exports.isValidAxis=ne;exports.isValidBBox=j;exports.isValidDirection=b;exports.isValidPosition=I;exports.isValidPositions=Me;exports.isValidRing=V;exports.isWGS84Projection=jt;exports.isWest=G;exports.listLocales=We;exports.listProjections=Ct;exports.mergeBBox=xt;exports.normalizeCoordinate=dt;exports.normalizeCrsName=Rt;exports.parseCoordinate=Se;exports.parsePosition=Vt;exports.registerMessages=Xe;exports.reprojectPosition=ye;exports.reprojectPositions=kt;exports.ringSelfIntersections=Ft;exports.ringsIntersect=Wt;exports.setLocale=Fe;exports.sphericalRingArea=Ue;exports.t=r;exports.truncateBBox=$t;exports.truncateCoordinate=ie;exports.truncatePosition=Re;exports.truncatePositions=je;exports.truncateRing=Ht;exports.y=vt;
|
|
2
|
+
//# sourceMappingURL=ring-CnFBeolv.cjs.map
|