isard 0.8.0 → 1.1.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.
Files changed (180) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/{basemaps.d.ts → basemap/basemaps.d.ts} +4 -4
  3. package/dist/{basemaps.js → basemap/basemaps.js} +3 -15
  4. package/dist/basemap/basemaps.js.map +1 -0
  5. package/dist/{grid.d.ts → basemap/grid.d.ts} +1 -1
  6. package/dist/{grid.js → basemap/grid.js} +2 -2
  7. package/dist/basemap/grid.js.map +1 -0
  8. package/dist/basemap/mvt.js.map +1 -0
  9. package/dist/{pmtiles.d.ts → basemap/pmtiles.d.ts} +6 -0
  10. package/dist/{pmtiles.js → basemap/pmtiles.js} +2 -2
  11. package/dist/basemap/pmtiles.js.map +1 -0
  12. package/dist/{resample.d.ts → basemap/resample.d.ts} +9 -0
  13. package/dist/{resample.js → basemap/resample.js} +2 -2
  14. package/dist/basemap/resample.js.map +1 -0
  15. package/dist/{terrain.js → basemap/terrain.js} +1 -1
  16. package/dist/basemap/terrain.js.map +1 -0
  17. package/dist/{vectorstyle.js → basemap/vectorstyle.js} +1 -1
  18. package/dist/basemap/vectorstyle.js.map +1 -0
  19. package/dist/{vectortiles.d.ts → basemap/vectortiles.d.ts} +9 -9
  20. package/dist/{vectortiles.js → basemap/vectortiles.js} +19 -8
  21. package/dist/basemap/vectortiles.js.map +1 -0
  22. package/dist/{wmts.js → basemap/wmts.js} +3 -3
  23. package/dist/basemap/wmts.js.map +1 -0
  24. package/dist/basemap.worker.js +2 -2
  25. package/dist/basemap.worker.js.map +10 -10
  26. package/dist/bind/layers.d.ts +37 -0
  27. package/dist/bind/layers.js +130 -0
  28. package/dist/bind/layers.js.map +1 -0
  29. package/dist/{crs.d.ts → data/crs.d.ts} +1 -1
  30. package/dist/data/crs.js.map +1 -0
  31. package/dist/{gpx.d.ts → data/gpx.d.ts} +1 -1
  32. package/dist/data/gpx.js.map +1 -0
  33. package/dist/{kml.d.ts → data/kml.d.ts} +1 -1
  34. package/dist/data/kml.js.map +1 -0
  35. package/dist/{topojson.d.ts → data/topojson.d.ts} +1 -1
  36. package/dist/data/topojson.js.map +1 -0
  37. package/dist/data/xml.js.map +1 -0
  38. package/dist/decoder.worker.js +1 -1
  39. package/dist/decoder.worker.js.map +4 -4
  40. package/dist/{decoders.d.ts → engine/decoders.d.ts} +1 -1
  41. package/dist/engine/decoders.js.map +1 -0
  42. package/dist/{loader.d.ts → engine/loader.d.ts} +1 -1
  43. package/dist/{loader.js → engine/loader.js} +4 -0
  44. package/dist/engine/loader.js.map +1 -0
  45. package/dist/{protocol.d.ts → engine/protocol.d.ts} +1 -1
  46. package/dist/engine/protocol.js +3 -0
  47. package/dist/engine/protocol.js.map +1 -0
  48. package/dist/engine/requests.js.map +1 -0
  49. package/dist/engine-loader.d.ts +16 -5
  50. package/dist/engine-loader.js +39 -8
  51. package/dist/engine-loader.js.map +1 -1
  52. package/dist/formats.d.ts +3 -3
  53. package/dist/formats.js +3 -3
  54. package/dist/formats.js.map +1 -1
  55. package/dist/geoplateforme.d.ts +53 -3
  56. package/dist/geoplateforme.js +35 -1
  57. package/dist/geoplateforme.js.map +1 -1
  58. package/dist/index.d.ts +32 -32
  59. package/dist/index.js +19 -19
  60. package/dist/index.js.map +1 -1
  61. package/dist/isard_bg.wasm +0 -0
  62. package/dist/isard_core_bg.wasm +0 -0
  63. package/dist/layers/extrusions.js.map +1 -0
  64. package/dist/{features.js → layers/features.js} +3 -3
  65. package/dist/layers/features.js.map +1 -0
  66. package/dist/{glyphs.d.ts → layers/glyphs.d.ts} +3 -3
  67. package/dist/{glyphs.js → layers/glyphs.js} +11 -1
  68. package/dist/layers/glyphs.js.map +1 -0
  69. package/dist/{icons.d.ts → layers/icons.d.ts} +2 -2
  70. package/dist/{icons.js → layers/icons.js} +8 -1
  71. package/dist/layers/icons.js.map +1 -0
  72. package/dist/{layers.d.ts → layers/layers.d.ts} +11 -5
  73. package/dist/{layers.js → layers/layers.js} +17 -6
  74. package/dist/layers/layers.js.map +1 -0
  75. package/dist/{panoramas.d.ts → layers/panoramas.d.ts} +1 -1
  76. package/dist/{panoramas.js → layers/panoramas.js} +2 -2
  77. package/dist/layers/panoramas.js.map +1 -0
  78. package/dist/{pointclouds.d.ts → layers/pointclouds.d.ts} +2 -2
  79. package/dist/{pointclouds.js → layers/pointclouds.js} +1 -1
  80. package/dist/layers/pointclouds.js.map +1 -0
  81. package/dist/{symbols.d.ts → layers/symbols.d.ts} +2 -2
  82. package/dist/{symbols.js → layers/symbols.js} +1 -1
  83. package/dist/layers/symbols.js.map +1 -0
  84. package/dist/map.d.ts +93 -12
  85. package/dist/map.js +119 -28
  86. package/dist/map.js.map +1 -1
  87. package/dist/projections.d.ts +3 -3
  88. package/dist/projections.js +2 -2
  89. package/dist/projections.js.map +1 -1
  90. package/dist/react/index.d.ts +119 -0
  91. package/dist/react/index.js +409 -0
  92. package/dist/react/index.js.map +1 -0
  93. package/dist/settings.d.ts +1 -1
  94. package/dist/settings.js +2 -2
  95. package/dist/settings.js.map +1 -1
  96. package/dist/types.d.ts +16 -12
  97. package/dist/types.js +1 -0
  98. package/dist/types.js.map +1 -1
  99. package/dist/{controls.d.ts → ui/controls.d.ts} +5 -4
  100. package/dist/{controls.js → ui/controls.js} +0 -8
  101. package/dist/ui/controls.js.map +1 -0
  102. package/dist/{interaction.d.ts → ui/interaction.d.ts} +7 -3
  103. package/dist/{interaction.js → ui/interaction.js} +1 -1
  104. package/dist/ui/interaction.js.map +1 -0
  105. package/dist/{overlay.d.ts → ui/overlay.d.ts} +2 -2
  106. package/dist/ui/overlay.js.map +1 -0
  107. package/dist/ui/style.js.map +1 -0
  108. package/dist/{animation.d.ts → util/animation.d.ts} +6 -2
  109. package/dist/util/animation.js.map +1 -0
  110. package/dist/util/color.js.map +1 -0
  111. package/dist/util/geo.js.map +1 -0
  112. package/dist/util/lru.js.map +1 -0
  113. package/dist/{basemap.worker.d.ts → workers/basemap.worker.d.ts} +14 -4
  114. package/dist/workers/basemap.worker.js +647 -0
  115. package/dist/workers/basemap.worker.js.map +1 -0
  116. package/package.json +31 -2
  117. package/vite.d.ts +17 -0
  118. package/vite.js +64 -0
  119. package/dist/animation.js.map +0 -1
  120. package/dist/basemaps.js.map +0 -1
  121. package/dist/color.js.map +0 -1
  122. package/dist/controls.js.map +0 -1
  123. package/dist/crs.js.map +0 -1
  124. package/dist/decoders.js.map +0 -1
  125. package/dist/extrusions.js.map +0 -1
  126. package/dist/features.js.map +0 -1
  127. package/dist/geo.js.map +0 -1
  128. package/dist/glyphs.js.map +0 -1
  129. package/dist/gpx.js.map +0 -1
  130. package/dist/grid.js.map +0 -1
  131. package/dist/icons.js.map +0 -1
  132. package/dist/interaction.js.map +0 -1
  133. package/dist/kml.js.map +0 -1
  134. package/dist/layers.js.map +0 -1
  135. package/dist/loader.js.map +0 -1
  136. package/dist/lru.js.map +0 -1
  137. package/dist/mvt.js.map +0 -1
  138. package/dist/overlay.js.map +0 -1
  139. package/dist/panoramas.js.map +0 -1
  140. package/dist/pmtiles.js.map +0 -1
  141. package/dist/pointclouds.js.map +0 -1
  142. package/dist/protocol.js +0 -2
  143. package/dist/protocol.js.map +0 -1
  144. package/dist/requests.js.map +0 -1
  145. package/dist/resample.js.map +0 -1
  146. package/dist/style.js.map +0 -1
  147. package/dist/symbols.js.map +0 -1
  148. package/dist/terrain.js.map +0 -1
  149. package/dist/topojson.js.map +0 -1
  150. package/dist/vectorstyle.js.map +0 -1
  151. package/dist/vectortiles.js.map +0 -1
  152. package/dist/wmts.js.map +0 -1
  153. package/dist/xml.js.map +0 -1
  154. /package/dist/{mvt.d.ts → basemap/mvt.d.ts} +0 -0
  155. /package/dist/{mvt.js → basemap/mvt.js} +0 -0
  156. /package/dist/{terrain.d.ts → basemap/terrain.d.ts} +0 -0
  157. /package/dist/{vectorstyle.d.ts → basemap/vectorstyle.d.ts} +0 -0
  158. /package/dist/{wmts.d.ts → basemap/wmts.d.ts} +0 -0
  159. /package/dist/{crs.js → data/crs.js} +0 -0
  160. /package/dist/{gpx.js → data/gpx.js} +0 -0
  161. /package/dist/{kml.js → data/kml.js} +0 -0
  162. /package/dist/{topojson.js → data/topojson.js} +0 -0
  163. /package/dist/{xml.d.ts → data/xml.d.ts} +0 -0
  164. /package/dist/{xml.js → data/xml.js} +0 -0
  165. /package/dist/{decoders.js → engine/decoders.js} +0 -0
  166. /package/dist/{requests.d.ts → engine/requests.d.ts} +0 -0
  167. /package/dist/{requests.js → engine/requests.js} +0 -0
  168. /package/dist/{extrusions.d.ts → layers/extrusions.d.ts} +0 -0
  169. /package/dist/{extrusions.js → layers/extrusions.js} +0 -0
  170. /package/dist/{features.d.ts → layers/features.d.ts} +0 -0
  171. /package/dist/{overlay.js → ui/overlay.js} +0 -0
  172. /package/dist/{style.d.ts → ui/style.d.ts} +0 -0
  173. /package/dist/{style.js → ui/style.js} +0 -0
  174. /package/dist/{animation.js → util/animation.js} +0 -0
  175. /package/dist/{color.d.ts → util/color.d.ts} +0 -0
  176. /package/dist/{color.js → util/color.js} +0 -0
  177. /package/dist/{geo.d.ts → util/geo.d.ts} +0 -0
  178. /package/dist/{geo.js → util/geo.js} +0 -0
  179. /package/dist/{lru.d.ts → util/lru.d.ts} +0 -0
  180. /package/dist/{lru.js → util/lru.js} +0 -0
@@ -0,0 +1,37 @@
1
+ /**
2
+ * What a framework's binding (isard/react, isard/vue) does when the description of a layer changes: the least the
3
+ * layer needs (its data, its style, its instances), or a new layer in its place when what changed is set at creation
4
+ * (its URL, its grid, its nodes). Free of any framework.
5
+ */
6
+ import type { Layer } from '../layers/layers.ts';
7
+ import type { LayerSpec } from '../map.ts';
8
+ /** What to do with a layer whose description went from `prev` to `next` */
9
+ export type LayerChange = {
10
+ rebuild: true;
11
+ } | {
12
+ rebuild: false;
13
+ /** The keys changed, with their new values */
14
+ style: Record<string, unknown>;
15
+ own: Record<string, unknown>;
16
+ };
17
+ /**
18
+ * The change from one description to the next, or `undefined` when nothing changed. Values are compared by identity:
19
+ * data, functions and arrays given anew at each render are changes (keep them in a memo)
20
+ */
21
+ export declare function layerChange(prev: LayerSpec, next: LayerSpec): LayerChange | undefined;
22
+ /** Applies a change that keeps the layer (`rebuild: false`) */
23
+ export declare function applyLayerChange(layer: Layer, next: LayerSpec, change: Extract<LayerChange, {
24
+ rebuild: false;
25
+ }>): void;
26
+ /**
27
+ * The layers of a binding in their declared order: `order` (default 0) from the bottom up, layers of the same order by
28
+ * the time they came. A layer added or made anew is moved under the first layer above it
29
+ */
30
+ export declare class LayerOrder {
31
+ private readonly entries;
32
+ private seq;
33
+ /** Places a new layer, or a layer made anew in place of `old` */
34
+ place(layer: Layer, order: number, old?: Layer): void;
35
+ /** Forgets a layer removed */
36
+ remove(layer: Layer): void;
37
+ }
@@ -0,0 +1,130 @@
1
+ /**
2
+ * What a framework's binding (isard/react, isard/vue) does when the description of a layer changes: the least the
3
+ * layer needs (its data, its style, its instances), or a new layer in its place when what changed is set at creation
4
+ * (its URL, its grid, its nodes). Free of any framework.
5
+ */
6
+ /** The keys `setStyle` takes, by layer type; `'all'`: every key but the data (the feature layers) */
7
+ const STYLE_KEYS = {
8
+ lines: 'all',
9
+ circles: 'all',
10
+ fills: 'all',
11
+ symbols: 'all',
12
+ extrusions: 'all',
13
+ raster: new Set(['opacity', 'saturation']),
14
+ network: new Set(['width', 'max', 'contour', 'opacity', 'halo', 'haloOpacity', 'ramp', 'unreachedColor', 'fade']),
15
+ tiles3d: new Set(['maxScreenSpaceError', 'opacity', 'pointSize', 'color']),
16
+ pointcloud: new Set([
17
+ 'colorBy',
18
+ 'pointSize',
19
+ 'maxPointSize',
20
+ 'sizeMode',
21
+ 'shape',
22
+ 'edl',
23
+ 'classifications',
24
+ 'elevationRange',
25
+ 'elevationRamp',
26
+ 'intensityRange',
27
+ 'maxScreenSpaceError',
28
+ 'pointBudget',
29
+ ]),
30
+ models: new Set(),
31
+ ground: new Set(),
32
+ };
33
+ /** Keys a layer takes by a method of its own, by layer type */
34
+ const OWN_SETTERS = {
35
+ lines: new Set(['data']),
36
+ circles: new Set(['data']),
37
+ fills: new Set(['data']),
38
+ symbols: new Set(['data']),
39
+ extrusions: new Set(['data']),
40
+ network: new Set(['costs', 'edgeWidths']),
41
+ models: new Set(['instances', 'altitudeReference']),
42
+ ground: new Set(['uniforms', 'textures']),
43
+ };
44
+ /**
45
+ * The change from one description to the next, or `undefined` when nothing changed. Values are compared by identity:
46
+ * data, functions and arrays given anew at each render are changes (keep them in a memo)
47
+ */
48
+ export function layerChange(prev, next) {
49
+ if (prev.type !== next.type)
50
+ return { rebuild: true };
51
+ const before = prev;
52
+ const after = next;
53
+ const styleKeys = STYLE_KEYS[next.type];
54
+ const own = OWN_SETTERS[next.type];
55
+ const change = { rebuild: false, style: {}, own: {} };
56
+ let changed = false;
57
+ for (const key of new Set([...Object.keys(before), ...Object.keys(after)])) {
58
+ if (key === 'type' || Object.is(before[key], after[key]))
59
+ continue;
60
+ // A style or setting taken away: the layer goes back to its defaults, as made anew
61
+ if (!(key in after))
62
+ return { rebuild: true };
63
+ changed = true;
64
+ if (own?.has(key))
65
+ change.own[key] = after[key];
66
+ else if (key !== 'before' && (styleKeys === 'all' || styleKeys.has(key)))
67
+ change.style[key] = after[key];
68
+ else
69
+ return { rebuild: true };
70
+ }
71
+ return changed ? change : undefined;
72
+ }
73
+ /** Applies a change that keeps the layer (`rebuild: false`) */
74
+ export function applyLayerChange(layer, next, change) {
75
+ const target = layer;
76
+ const spec = next;
77
+ const own = change.own;
78
+ if ('data' in own)
79
+ target.setData?.(own.data);
80
+ if ('costs' in own)
81
+ target.setCosts?.(own.costs);
82
+ if ('edgeWidths' in own)
83
+ target.setEdgeWidths?.(own.edgeWidths);
84
+ if ('instances' in own || 'altitudeReference' in own)
85
+ target.setInstances?.(spec.instances, spec.altitudeReference);
86
+ if ('uniforms' in own) {
87
+ for (const [name, value] of Object.entries((own.uniforms ?? {}))) {
88
+ target.setUniform?.(name, value);
89
+ }
90
+ }
91
+ if ('textures' in own) {
92
+ for (const [name, texture] of Object.entries((own.textures ?? {}))) {
93
+ target.setTexture?.(name, texture);
94
+ }
95
+ }
96
+ if (Object.keys(change.style).length > 0)
97
+ target.setStyle?.(change.style);
98
+ }
99
+ /**
100
+ * The layers of a binding in their declared order: `order` (default 0) from the bottom up, layers of the same order by
101
+ * the time they came. A layer added or made anew is moved under the first layer above it
102
+ */
103
+ export class LayerOrder {
104
+ entries = [];
105
+ seq = 0;
106
+ /** Places a new layer, or a layer made anew in place of `old` */
107
+ place(layer, order, old) {
108
+ const index = old ? this.entries.findIndex((e) => e.layer === old) : -1;
109
+ const entry = index >= 0 ? this.entries[index] : undefined;
110
+ if (entry) {
111
+ entry.layer = layer;
112
+ entry.order = order;
113
+ }
114
+ else {
115
+ this.entries.push({ layer, order, seq: this.seq++ });
116
+ }
117
+ this.entries.sort((a, b) => a.order - b.order || a.seq - b.seq);
118
+ const at = this.entries.findIndex((e) => e.layer === layer);
119
+ const above = this.entries[at + 1]?.layer;
120
+ if (above)
121
+ layer.moveBefore(above);
122
+ }
123
+ /** Forgets a layer removed */
124
+ remove(layer) {
125
+ const index = this.entries.findIndex((e) => e.layer === layer);
126
+ if (index >= 0)
127
+ this.entries.splice(index, 1);
128
+ }
129
+ }
130
+ //# sourceMappingURL=layers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layers.js","sourceRoot":"","sources":["../../src/bind/layers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * What a framework's binding (isard/react, isard/vue) does when the description of a layer changes: the least the\n * layer needs (its data, its style, its instances), or a new layer in its place when what changed is set at creation\n * (its URL, its grid, its nodes). Free of any framework.\n */\n\nimport type { Layer } from '../layers/layers.ts';\nimport type { LayerSpec } from '../map.ts';\n\ntype Spec = LayerSpec & Record<string, unknown>;\n\n/** The keys `setStyle` takes, by layer type; `'all'`: every key but the data (the feature layers) */\nconst STYLE_KEYS: Record<LayerSpec['type'], 'all' | ReadonlySet<string>> = {\n lines: 'all',\n circles: 'all',\n fills: 'all',\n symbols: 'all',\n extrusions: 'all',\n raster: new Set(['opacity', 'saturation']),\n network: new Set(['width', 'max', 'contour', 'opacity', 'halo', 'haloOpacity', 'ramp', 'unreachedColor', 'fade']),\n tiles3d: new Set(['maxScreenSpaceError', 'opacity', 'pointSize', 'color']),\n pointcloud: new Set([\n 'colorBy',\n 'pointSize',\n 'maxPointSize',\n 'sizeMode',\n 'shape',\n 'edl',\n 'classifications',\n 'elevationRange',\n 'elevationRamp',\n 'intensityRange',\n 'maxScreenSpaceError',\n 'pointBudget',\n ]),\n models: new Set(),\n ground: new Set(),\n};\n\n/** Keys a layer takes by a method of its own, by layer type */\nconst OWN_SETTERS: Partial<Record<LayerSpec['type'], ReadonlySet<string>>> = {\n lines: new Set(['data']),\n circles: new Set(['data']),\n fills: new Set(['data']),\n symbols: new Set(['data']),\n extrusions: new Set(['data']),\n network: new Set(['costs', 'edgeWidths']),\n models: new Set(['instances', 'altitudeReference']),\n ground: new Set(['uniforms', 'textures']),\n};\n\n/** What to do with a layer whose description went from `prev` to `next` */\nexport type LayerChange =\n | { rebuild: true }\n | {\n rebuild: false;\n /** The keys changed, with their new values */\n style: Record<string, unknown>;\n own: Record<string, unknown>;\n };\n\n/**\n * The change from one description to the next, or `undefined` when nothing changed. Values are compared by identity:\n * data, functions and arrays given anew at each render are changes (keep them in a memo)\n */\nexport function layerChange(prev: LayerSpec, next: LayerSpec): LayerChange | undefined {\n if (prev.type !== next.type) return { rebuild: true };\n const before = prev as Spec;\n const after = next as Spec;\n const styleKeys = STYLE_KEYS[next.type];\n const own = OWN_SETTERS[next.type];\n const change = { rebuild: false as const, style: {} as Record<string, unknown>, own: {} as Record<string, unknown> };\n let changed = false;\n for (const key of new Set([...Object.keys(before), ...Object.keys(after)])) {\n if (key === 'type' || Object.is(before[key], after[key])) continue;\n // A style or setting taken away: the layer goes back to its defaults, as made anew\n if (!(key in after)) return { rebuild: true };\n changed = true;\n if (own?.has(key)) change.own[key] = after[key];\n else if (key !== 'before' && (styleKeys === 'all' || styleKeys.has(key))) change.style[key] = after[key];\n else return { rebuild: true };\n }\n return changed ? change : undefined;\n}\n\ninterface Settable {\n setStyle?(style: Record<string, unknown>): void;\n setData?(data: unknown): void;\n setCosts?(costs: unknown): void;\n setEdgeWidths?(widths: unknown): void;\n setInstances?(instances: unknown, altitudeReference?: unknown): void;\n setUniform?(name: string, value: unknown): void;\n setTexture?(name: string, texture: unknown): void;\n}\n\n/** Applies a change that keeps the layer (`rebuild: false`) */\nexport function applyLayerChange(\n layer: Layer,\n next: LayerSpec,\n change: Extract<LayerChange, { rebuild: false }>,\n): void {\n const target = layer as unknown as Settable;\n const spec = next as Spec;\n const own = change.own;\n if ('data' in own) target.setData?.(own.data);\n if ('costs' in own) target.setCosts?.(own.costs);\n if ('edgeWidths' in own) target.setEdgeWidths?.(own.edgeWidths);\n if ('instances' in own || 'altitudeReference' in own) target.setInstances?.(spec.instances, spec.altitudeReference);\n if ('uniforms' in own) {\n for (const [name, value] of Object.entries((own.uniforms ?? {}) as Record<string, unknown>)) {\n target.setUniform?.(name, value);\n }\n }\n if ('textures' in own) {\n for (const [name, texture] of Object.entries((own.textures ?? {}) as Record<string, unknown>)) {\n target.setTexture?.(name, texture);\n }\n }\n if (Object.keys(change.style).length > 0) target.setStyle?.(change.style);\n}\n\n/**\n * The layers of a binding in their declared order: `order` (default 0) from the bottom up, layers of the same order by\n * the time they came. A layer added or made anew is moved under the first layer above it\n */\nexport class LayerOrder {\n private readonly entries: { layer: Layer; order: number; seq: number }[] = [];\n private seq = 0;\n\n /** Places a new layer, or a layer made anew in place of `old` */\n place(layer: Layer, order: number, old?: Layer): void {\n const index = old ? this.entries.findIndex((e) => e.layer === old) : -1;\n const entry = index >= 0 ? this.entries[index] : undefined;\n if (entry) {\n entry.layer = layer;\n entry.order = order;\n } else {\n this.entries.push({ layer, order, seq: this.seq++ });\n }\n this.entries.sort((a, b) => a.order - b.order || a.seq - b.seq);\n const at = this.entries.findIndex((e) => e.layer === layer);\n const above = this.entries[at + 1]?.layer;\n if (above) layer.moveBefore(above);\n }\n\n /** Forgets a layer removed */\n remove(layer: Layer): void {\n const index = this.entries.findIndex((e) => e.layer === layer);\n if (index >= 0) this.entries.splice(index, 1);\n }\n}\n"]}
@@ -9,7 +9,7 @@
9
9
  * they differ by less than a metre. Any other CRS is plugged in as an object with `forward` and `inverse`, such as
10
10
  * `proj4('EPSG:27572')`, directly or by name through `registerCrs`.
11
11
  */
12
- import type { FeatureCollection, FeatureData } from './features.ts';
12
+ import type { FeatureCollection, FeatureData } from '../layers/features.ts';
13
13
  /** A CRS: longitudes and latitudes (degrees) to its coordinates (x east, y north), and back. A converter of proj4
14
14
  * (`proj4('EPSG:2154')`) is one */
15
15
  export interface Crs {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crs.js","sourceRoot":"","sources":["../../src/data/crs.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Coordinate reference systems of the data: a CRS turns longitudes and latitudes (degrees) into its coordinates\n * (`forward`) and back (`inverse`). The map stays in Web Mercator (or the globe): data in another CRS is reprojected\n * into it, as rasters (see `TileGrid`) or as GeoJSON (`reproject`).\n *\n * Built in, exact to the millimetre against PROJ: EPSG:4326 (and the geographic ETRS89, RGF93), EPSG:3857, Lambert-93\n * (EPSG:2154), the nine conic zones CC42 to CC50 (EPSG:3942 to 3950), the UTM zones of WGS 84 (EPSG:32601 to 32660\n * north, 32701 to 32760 south) and of ETRS89 (EPSG:25828 to 25838). WGS 84, ETRS89 and RGF93 are taken as one datum:\n * they differ by less than a metre. Any other CRS is plugged in as an object with `forward` and `inverse`, such as\n * `proj4('EPSG:27572')`, directly or by name through `registerCrs`.\n */\nimport type { Feature, FeatureCollection, FeatureData, Geometry, Position } from '../layers/features.ts';\n\n/** A CRS: longitudes and latitudes (degrees) to its coordinates (x east, y north), and back. A converter of proj4\n * (`proj4('EPSG:2154')`) is one */\nexport interface Crs {\n forward(lonLat: [number, number]): readonly number[];\n inverse(xy: [number, number]): readonly number[];\n}\n\n/** A CRS by name (`'EPSG:2154'`, `'urn:ogc:def:crs:EPSG::2154'`, `'CRS:84'`…; built in or registered), or itself */\nexport type CrsLike = string | Crs;\n\n/** An ellipsoid: semi-major axis (metres) and flattening */\ntype Ellipsoid = [a: number, f: number];\nconst GRS80: Ellipsoid = [6378137, 1 / 298.257222101];\nconst WGS84: Ellipsoid = [6378137, 1 / 298.257223563];\n\nconst RAD = Math.PI / 180;\n\n/** Isometric latitude of a latitude (radians) on an ellipsoid of eccentricity `e` */\nconst isometric = (phi: number, e: number) => Math.atanh(Math.sin(phi)) - e * Math.atanh(e * Math.sin(phi));\n\n/** Latitude (radians) of an isometric latitude, by fixed-point iteration (converges by e² at each step) */\nfunction fromIsometric(psi: number, e: number): number {\n let phi = Math.asin(Math.tanh(psi));\n for (let i = 0; i < 20; i += 1) {\n const next = Math.asin(Math.tanh(psi + e * Math.atanh(e * Math.sin(phi))));\n if (Math.abs(next - phi) < 1e-15) return next;\n phi = next;\n }\n return phi;\n}\n\n/** An angle (radians) brought into [-π, π] */\nconst wrap = (angle: number) => angle - 2 * Math.PI * Math.round(angle / (2 * Math.PI));\n\n/**\n * Lambert Conformal Conic with two standard parallels (EPSG method 9802), angles in degrees: the projection of\n * Lambert-93 and of the CC zones, and of many national grids\n */\nexport function lambertConformalConic(p: {\n /** Semi-major axis (metres) and flattening (default GRS80) */\n ellipsoid?: [a: number, f: number];\n lat0: number;\n lon0: number;\n lat1: number;\n lat2: number;\n x0: number;\n y0: number;\n}): Crs {\n const [a, f] = p.ellipsoid ?? GRS80;\n const e = Math.sqrt(f * (2 - f));\n const m = (phi: number) => Math.cos(phi) / Math.sqrt(1 - (e * Math.sin(phi)) ** 2);\n const [phi1, phi2] = [p.lat1 * RAD, p.lat2 * RAD];\n const n =\n phi1 === phi2\n ? Math.sin(phi1)\n : (Math.log(m(phi1)) - Math.log(m(phi2))) / (isometric(phi2, e) - isometric(phi1, e));\n const aF = (a * m(phi1) * Math.exp(n * isometric(phi1, e))) / n;\n const r0 = aF * Math.exp(-n * isometric(p.lat0 * RAD, e));\n const lon0 = p.lon0 * RAD;\n return {\n forward: ([lon, lat]) => {\n const r = aF * Math.exp(-n * isometric(lat * RAD, e));\n const theta = n * wrap(lon * RAD - lon0);\n return [p.x0 + r * Math.sin(theta), p.y0 + r0 - r * Math.cos(theta)];\n },\n inverse: ([x, y]) => {\n const s = Math.sign(n);\n const [dx, dy] = [x - p.x0, r0 - (y - p.y0)];\n const r = s * Math.hypot(dx, dy);\n const theta = Math.atan2(s * dx, s * dy);\n return [(theta / n + lon0) / RAD, fromIsometric(-Math.log(r / aF) / n, e) / RAD];\n },\n };\n}\n\n/**\n * Transverse Mercator (EPSG method 9807) by Krüger's series to the sixth order (Karney, 2011), angles in degrees:\n * exact to the tenth of a millimetre within 4000 km of the central meridian. The projection of the UTM zones\n */\nexport function transverseMercator(p: {\n /** Semi-major axis (metres) and flattening (default GRS80) */\n ellipsoid?: [a: number, f: number];\n lon0: number;\n /** Scale on the central meridian */\n k0: number;\n x0: number;\n y0: number;\n}): Crs {\n const [a, f] = p.ellipsoid ?? GRS80;\n const e = Math.sqrt(f * (2 - f));\n const n = f / (2 - f);\n const [n2, n3, n4, n5, n6] = [n ** 2, n ** 3, n ** 4, n ** 5, n ** 6];\n const kA = (p.k0 * a * (1 + n2 / 4 + n4 / 64 + n6 / 256)) / (1 + n);\n const alpha = [\n n / 2 - (2 * n2) / 3 + (5 * n3) / 16 + (41 * n4) / 180 - (127 * n5) / 288 + (7891 * n6) / 37800,\n (13 * n2) / 48 - (3 * n3) / 5 + (557 * n4) / 1440 + (281 * n5) / 630 - (1983433 * n6) / 1935360,\n (61 * n3) / 240 - (103 * n4) / 140 + (15061 * n5) / 26880 + (167603 * n6) / 181440,\n (49561 * n4) / 161280 - (179 * n5) / 168 + (6601661 * n6) / 7257600,\n (34729 * n5) / 80640 - (3418889 * n6) / 1995840,\n (212378941 * n6) / 319334400,\n ];\n const beta = [\n n / 2 - (2 * n2) / 3 + (37 * n3) / 96 - n4 / 360 - (81 * n5) / 512 + (96199 * n6) / 604800,\n n2 / 48 + n3 / 15 - (437 * n4) / 1440 + (46 * n5) / 105 - (1118711 * n6) / 3870720,\n (17 * n3) / 480 - (37 * n4) / 840 - (209 * n5) / 4480 + (5569 * n6) / 90720,\n (4397 * n4) / 161280 - (11 * n5) / 504 - (830251 * n6) / 7257600,\n (4583 * n5) / 161280 - (108847 * n6) / 3991680,\n (20648693 * n6) / 638668800,\n ];\n /** ξ, η moved by the series of coefficients `c`, added (forward) or subtracted (inverse) */\n const series = (xi: number, eta: number, c: number[], sign: number): [number, number] => {\n let [x, y] = [xi, eta];\n c.forEach((k, j) => {\n const w = 2 * (j + 1);\n x += sign * k * Math.sin(w * xi) * Math.cosh(w * eta);\n y += sign * k * Math.cos(w * xi) * Math.sinh(w * eta);\n });\n return [x, y];\n };\n const lon0 = p.lon0 * RAD;\n return {\n forward: ([lon, lat]) => {\n const lambda = wrap(lon * RAD - lon0);\n // The conformal latitude's tangent\n const t = Math.sinh(isometric(lat * RAD, e));\n const [xi, eta] = series(\n Math.atan2(t, Math.cos(lambda)),\n Math.asinh(Math.sin(lambda) / Math.hypot(t, Math.cos(lambda))),\n alpha,\n 1,\n );\n return [p.x0 + kA * eta, p.y0 + kA * xi];\n },\n inverse: ([x, y]) => {\n const [xi, eta] = series((y - p.y0) / kA, (x - p.x0) / kA, beta, -1);\n const t = Math.sin(xi) / Math.hypot(Math.sinh(eta), Math.cos(xi));\n return [(lon0 + Math.atan2(Math.sinh(eta), Math.cos(xi))) / RAD, fromIsometric(Math.asinh(t), e) / RAD];\n },\n };\n}\n\n/** Longitudes and latitudes themselves */\nconst GEOGRAPHIC: Crs = {\n forward: ([lon, lat]) => [lon, lat],\n inverse: ([x, y]) => [x, y],\n};\n\n/** Web Mercator in metres (EPSG:3857) */\nconst R = 6378137;\nconst WEB_MERCATOR: Crs = {\n forward: ([lon, lat]) => [R * lon * RAD, R * Math.log(Math.tan(Math.PI / 4 + (lat * RAD) / 2))],\n inverse: ([x, y]) => [x / R / RAD, (2 * Math.atan(Math.exp(y / R)) - Math.PI / 2) / RAD],\n};\n\n/** The CRSs registered by the application, by name */\nconst registered = new Map<string, Crs>();\n/** The built-in CRSs made so far, by EPSG code */\nconst made = new Map<number, Crs>();\n\n/**\n * The EPSG code of a CRS name: `EPSG:2154`, `urn:ogc:def:crs:EPSG::2154`, `urn:ogc:def:crs:EPSG:6.3:2154`,\n * `http://www.opengis.net/def/crs/EPSG/0/2154`; `CRS:84`, `OGC:CRS84` and the IGN's `IGNF:WGS84G` are 4326, its\n * `IGNF:LAMB93` 2154, the old names of Web Mercator 3857. Undefined for another name\n */\nexport function epsgCode(name: string): number | undefined {\n const n = name.trim().toUpperCase();\n if (/CRS:?84$/.test(n) || n === 'IGNF:WGS84G') return 4326;\n if (n === 'IGNF:LAMB93') return 2154;\n const code = /EPSG(?::+|\\/)(?:[\\d.]+[:/]+)?(\\d+)$/.exec(n)?.[1];\n if (code === undefined) return undefined;\n const c = Number(code);\n return c === 900913 || c === 3785 || c === 102100 || c === 102113 ? 3857 : c;\n}\n\n/** A built-in CRS by EPSG code; undefined if not built in */\nfunction builtin(code: number): Crs | undefined {\n if (code === 4326 || code === 4258 || code === 4171) return GEOGRAPHIC;\n if (code === 3857) return WEB_MERCATOR;\n if (code === 2154) {\n return lambertConformalConic({ lat0: 46.5, lon0: 3, lat1: 49, lat2: 44, x0: 700000, y0: 6600000 });\n }\n if (code >= 3942 && code <= 3950) {\n const lat0 = code - 3900;\n const y0 = (lat0 - 41) * 1000000 + 200000;\n return lambertConformalConic({ lat0, lon0: 3, lat1: lat0 - 0.75, lat2: lat0 + 0.75, x0: 1700000, y0 });\n }\n const utm = (zone: number, south: boolean, ellipsoid: Ellipsoid) =>\n transverseMercator({ ellipsoid, lon0: zone * 6 - 183, k0: 0.9996, x0: 500000, y0: south ? 10000000 : 0 });\n if (code >= 32601 && code <= 32660) return utm(code - 32600, false, WGS84);\n if (code >= 32701 && code <= 32760) return utm(code - 32700, true, WGS84);\n if (code >= 25828 && code <= 25838) return utm(code - 25800, false, GRS80);\n return undefined;\n}\n\n/** Whether a CRS name is longitudes and latitudes (needs no reprojection) */\nexport function isGeographic(name: string): boolean {\n const code = epsgCode(name);\n return !registered.has(normalize(name)) && code !== undefined && builtin(code) === GEOGRAPHIC;\n}\n\nconst normalize = (name: string) => {\n const code = epsgCode(name);\n return code === undefined ? name.trim().toUpperCase() : `EPSG:${code}`;\n};\n\n/**\n * Names a CRS for every place that takes one (`registerCrs('EPSG:27572', proj4('EPSG:27572'))`): the `crs` of a tile\n * grid, the `crs` member of GeoJSON, `reproject`. A registered name wins over a built-in one\n */\nexport function registerCrs(name: string, crs: Crs): void {\n registered.set(normalize(name), crs);\n}\n\n/** The CRS of a name (registered or built in), or the CRS given; throws for an unknown name */\nexport function getCrs(crs: CrsLike): Crs {\n if (typeof crs !== 'string') return crs;\n const found = registered.get(normalize(crs));\n if (found) return found;\n const code = epsgCode(crs);\n if (code !== undefined) {\n let c = made.get(code);\n if (!c) {\n c = builtin(code);\n if (c) made.set(code, c);\n }\n if (c) return c;\n }\n throw new Error(`isard: unknown CRS ${crs}: registerCrs('${crs}', proj4('${crs}')) names it`);\n}\n\n/** The name in the legacy `crs` member of GeoJSON (`{ type: 'name', properties: { name } }`), if any */\nexport function crsOf(data: unknown): string | undefined {\n const member = (data as { crs?: { properties?: { name?: unknown } } } | null)?.crs;\n const name = member?.properties?.name;\n return typeof name === 'string' ? name : undefined;\n}\n\n/** A geometry with its positions mapped */\nfunction mapGeometry(g: Geometry, f: (p: Position) => Position): Geometry {\n switch (g.type) {\n case 'Point':\n return { type: g.type, coordinates: f(g.coordinates) };\n case 'MultiPoint':\n case 'LineString':\n return { type: g.type, coordinates: g.coordinates.map(f) };\n case 'MultiLineString':\n case 'Polygon':\n return { type: g.type, coordinates: g.coordinates.map((line) => line.map(f)) };\n case 'MultiPolygon':\n return { type: g.type, coordinates: g.coordinates.map((poly) => poly.map((line) => line.map(f))) };\n case 'GeometryCollection':\n return { type: g.type, geometries: g.geometries.map((child) => mapGeometry(child, f)) };\n }\n}\n\n/**\n * GeoJSON in `from` (default: the CRS its `crs` member names) as GeoJSON in longitudes and latitudes, for the feature\n * layers: `map.addFills({ data: reproject(parcels, 'EPSG:2154') })`. The features are copied with new geometries, their\n * properties shared; altitudes are kept. Data without a CRS, or in longitudes and latitudes, comes back as it is.\n * The feature layers do this by themselves for a collection whose `crs` member names its CRS (a WFS's output in\n * EPSG:2154)\n */\nexport function reproject<P>(data: FeatureData<P>, from?: CrsLike): FeatureCollection<P> {\n let features = Array.isArray(data) ? data : [data as Feature<P>];\n if (!Array.isArray(data) && data.type === 'FeatureCollection') features = data.features;\n const source = from ?? crsOf(data);\n if (source === undefined || (typeof source === 'string' && isGeographic(source))) {\n return { type: 'FeatureCollection', features };\n }\n const crs = getCrs(source);\n const f = (p: Position): Position => {\n const [lon, lat] = crs.inverse([p[0], p[1]]);\n return [lon ?? Number.NaN, lat ?? Number.NaN, ...p.slice(2)];\n };\n return {\n type: 'FeatureCollection',\n features: features.map(\n (feature): Feature<P> => ({\n ...feature,\n geometry: feature.geometry && mapGeometry(feature.geometry, f),\n }),\n ),\n };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * GPX to GeoJSON, for the feature layers: `map.addLines({ data: parseGpx(await (await fetch(url)).text()) })`.
3
3
  */
4
- import type { FeatureCollection, Properties } from './features.ts';
4
+ import type { FeatureCollection, Properties } from '../layers/features.ts';
5
5
  /**
6
6
  * The waypoints, routes and tracks of a GPX file as GeoJSON features: a waypoint as a point (its `time` a property),
7
7
  * a route as a line, a track as a line or, of several segments, a multi-line; altitudes (`ele`) as the third
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpx.js","sourceRoot":"","sources":["../../src/data/gpx.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * GPX to GeoJSON, for the feature layers: `map.addLines({ data: parseGpx(await (await fetch(url)).text()) })`.\n */\nimport type { Feature, FeatureCollection, Geometry, Position, Properties } from '../layers/features.ts';\nimport { child, children, childText, parseXml, type XmlElement } from './xml.ts';\n\n/** The fields of a waypoint, route or track kept as properties when present */\nconst FIELDS = ['name', 'cmt', 'desc', 'src', 'sym', 'type', 'number'];\n\nfunction properties(element: XmlElement): Properties {\n const out: Properties = {};\n for (const key of FIELDS) {\n const value = childText(element, key);\n if (value !== undefined) out[key] = key === 'number' ? Number(value) : value;\n }\n const link = child(element, 'link')?.attributes.href;\n if (link !== undefined) out.link = link;\n return out;\n}\n\n/** A point of a GPX file (wpt, rtept, trkpt): its position, its altitude third if any, and its time */\nfunction point(element: XmlElement): { position: Position; time: string | undefined } | undefined {\n const lon = Number(element.attributes.lon);\n const lat = Number(element.attributes.lat);\n if (!Number.isFinite(lon) || !Number.isFinite(lat) || element.attributes.lon === undefined) return undefined;\n const ele = childText(element, 'ele');\n const position: Position = ele !== undefined && Number.isFinite(Number(ele)) ? [lon, lat, Number(ele)] : [lon, lat];\n return { position, time: childText(element, 'time') };\n}\n\n/** The positions of a line of points, and their times when every point has one */\nfunction line(points: XmlElement[]): { coordinates: Position[]; times: string[] | undefined } {\n const read = points.map(point).filter((p) => p !== undefined);\n const times = read.map((p) => p.time);\n return {\n coordinates: read.map((p) => p.position),\n times: read.length > 0 && times.every((t) => t !== undefined) ? (times as string[]) : undefined,\n };\n}\n\n/**\n * The waypoints, routes and tracks of a GPX file as GeoJSON features: a waypoint as a point (its `time` a property),\n * a route as a line, a track as a line or, of several segments, a multi-line; altitudes (`ele`) as the third\n * coordinate; `name`, `desc`, `cmt`, `type`… as properties, and the times of the points as `times` (one list, or one\n * per segment) when they all have one\n */\nexport function parseGpx<P = Properties>(text: string): FeatureCollection<P> {\n const root = parseXml(text);\n const features: Feature<P>[] = [];\n const add = (geometry: Geometry, props: Properties) =>\n features.push({ type: 'Feature', geometry, properties: props as P });\n for (const wpt of children(root, 'wpt')) {\n const p = point(wpt);\n if (!p) continue;\n add({ type: 'Point', coordinates: p.position }, { ...properties(wpt), ...(p.time ? { time: p.time } : {}) });\n }\n for (const rte of children(root, 'rte')) {\n const { coordinates, times } = line(children(rte, 'rtept'));\n if (coordinates.length >= 2)\n add({ type: 'LineString', coordinates }, { ...properties(rte), ...(times ? { times } : {}) });\n }\n for (const trk of children(root, 'trk')) {\n const segments = children(trk, 'trkseg')\n .map((s) => line(children(s, 'trkpt')))\n .filter((s) => s.coordinates.length >= 2);\n const [first] = segments;\n if (!first) continue;\n const props = properties(trk);\n if (segments.length === 1) {\n add(\n { type: 'LineString', coordinates: first.coordinates },\n { ...props, ...(first.times ? { times: first.times } : {}) },\n );\n } else {\n const times = segments.every((s) => s.times) ? { times: segments.map((s) => s.times) } : {};\n add({ type: 'MultiLineString', coordinates: segments.map((s) => s.coordinates) }, { ...props, ...times });\n }\n }\n return { type: 'FeatureCollection', features };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * KML to GeoJSON, for the feature layers: `map.addLines({ data: parseKml(await (await fetch(url)).text()) })`.
3
3
  */
4
- import type { FeatureCollection, Properties } from './features.ts';
4
+ import type { FeatureCollection, Properties } from '../layers/features.ts';
5
5
  /**
6
6
  * The placemarks of a KML document as GeoJSON features: their points, lines (and gx:Track), polygons (with their
7
7
  * holes) and MultiGeometry (a Multi… of one type, else a GeometryCollection); their `name`, `description`, extended
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kml.js","sourceRoot":"","sources":["../../src/data/kml.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAmB,MAAM,UAAU,CAAC;AAE9F,uFAAuF;AACvF,SAAS,SAAS,CAAC,OAA+B;IAChD,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,MAAkB,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4EAA4E;AAC5E,SAAS,UAAU,CAAC,MAAkB;IACpC,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;YACxF,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7F,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACnH,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,wCAAwC;YACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;iBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;iBAClD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAe,CAAC;YAC1E,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjE,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uEAAuE;AACvE,SAAS,KAAK,CAAC,IAAgB;IAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAA+B,CAAC,WAAW,CAAC,EAAE,CAAC;IAC5G,CAAC;IACD,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAiC,CAAC,WAAW,CAAC,EAAE,CAAC;IACnH,CAAC;IACD,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAmC,CAAC,WAAW,CAAC,EAAE,CAAC;IAClH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC1D,CAAC;AAED,0EAA0E;AAC1E,SAAS,KAAK,CAAC,OAA+B;IAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAW,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7G,CAAC;AAED;gCACgC;AAChC,SAAS,eAAe,CAAC,KAA6B;IACpD,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IACvB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,MAAM;QAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,GAAG,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;IAClG,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,IAAI;QAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC;IACjD,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG;QAAE,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,GAAG;QAAE,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI;QAAE,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAiB,IAAY;IACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAChG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC;QACjF,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IACD,6EAA6E;IAC7E,MAAM,MAAM,GAAG,CAAC,GAAuB,EAAE,KAAK,GAAG,CAAC,EAA0B,EAAE;QAC5E,MAAM,EAAE,GAAG,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,IAAI,EAAE,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACpD,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAc,EAAE;QAC5E,MAAM,UAAU,GAAe,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACtE,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;YACjE,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,KAAK,KAAK,SAAS;gBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnD,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,IAAI,KAAK,SAAS;YAAE,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI;gBAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9F,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;YACtD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;gBAClD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI;oBAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChF,CAAC;QACH,CAAC;QACD,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACtC,UAAU,EAAE,UAAe;YAC3B,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;SACpC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC;AACjD,CAAC","sourcesContent":["/**\n * KML to GeoJSON, for the feature layers: `map.addLines({ data: parseKml(await (await fetch(url)).text()) })`.\n */\nimport type { Feature, FeatureCollection, Geometry, Position, Properties } from '../layers/features.ts';\nimport { child, children, childText, descendants, parseXml, type XmlElement } from './xml.ts';\n\n/** Positions of a `coordinates` element: `lon,lat[,alt]` tuples separated by spaces */\nfunction positions(element: XmlElement | undefined): Position[] {\n const out: Position[] = [];\n for (const tuple of (element?.text ?? '').trim().split(/\\s+/)) {\n const values = tuple.split(',').map(Number);\n if (values.length >= 2 && values.every(Number.isFinite)) out.push(values as Position);\n }\n return out;\n}\n\n/** The geometries of an element (a Placemark, a MultiGeometry), in order */\nfunction geometries(parent: XmlElement): Geometry[] {\n const out: Geometry[] = [];\n for (const g of parent.children) {\n if (g.name === 'Point') {\n const [p] = positions(child(g, 'coordinates'));\n if (p) out.push({ type: 'Point', coordinates: p });\n } else if (g.name === 'LineString' || g.name === 'LinearRing') {\n const line = positions(child(g, 'coordinates'));\n if (line.length >= 2) out.push({ type: 'LineString', coordinates: line });\n } else if (g.name === 'Polygon') {\n const ring = (b: XmlElement) => positions(child(child(b, 'LinearRing'), 'coordinates'));\n const outer = child(g, 'outerBoundaryIs');\n const rings = [...(outer ? [ring(outer)] : []), ...children(g, 'innerBoundaryIs').map(ring)];\n if ((rings[0]?.length ?? 0) >= 4) out.push({ type: 'Polygon', coordinates: rings.filter((r) => r.length >= 4) });\n } else if (g.name === 'Track') {\n // gx:Track: its gx:coord, `lon lat alt`\n const line = children(g, 'coord')\n .map((c) => c.text.trim().split(/\\s+/).map(Number))\n .filter((p) => p.length >= 2 && p.every(Number.isFinite)) as Position[];\n if (line.length >= 2) out.push({ type: 'LineString', coordinates: line });\n } else if (g.name === 'MultiGeometry' || g.name === 'MultiTrack') {\n out.push(...geometries(g));\n }\n }\n return out;\n}\n\n/** One geometry of several: a Multi… of one type, else a collection */\nfunction merge(list: Geometry[]): Geometry | null {\n const [first] = list;\n if (!first) return null;\n if (list.length === 1) return first;\n const same = list.every((g) => g.type === first.type);\n if (same && first.type === 'Point') {\n return { type: 'MultiPoint', coordinates: list.map((g) => (g as { coordinates: Position }).coordinates) };\n }\n if (same && first.type === 'LineString') {\n return { type: 'MultiLineString', coordinates: list.map((g) => (g as { coordinates: Position[] }).coordinates) };\n }\n if (same && first.type === 'Polygon') {\n return { type: 'MultiPolygon', coordinates: list.map((g) => (g as { coordinates: Position[][] }).coordinates) };\n }\n return { type: 'GeometryCollection', geometries: list };\n}\n\n/** A KML color (`aabbggrr`, hexadecimal) as a CSS color and an opacity */\nfunction color(element: XmlElement | undefined): [css: string, opacity: number] | undefined {\n const value = childText(element, 'color')?.replace(/^#/, '');\n if (!value || !/^[\\da-f]{8}$/i.test(value)) return undefined;\n const [a, b, g, r] = [0, 2, 4, 6].map((i) => value.slice(i, i + 2));\n return [`#${r}${g}${b}`.toLowerCase(), Math.round((Number.parseInt(a as string, 16) / 255) * 1000) / 1000];\n}\n\n/** The properties of a style (simplestyle's names, as togeojson): stroke, stroke-opacity, stroke-width, fill,\n * fill-opacity, marker-color */\nfunction styleProperties(style: XmlElement | undefined): Properties {\n const out: Properties = {};\n if (!style) return out;\n const line = child(style, 'LineStyle');\n const stroke = color(line);\n if (stroke) [out.stroke, out['stroke-opacity']] = stroke;\n const width = Number(childText(line, 'width'));\n if (childText(line, 'width') !== undefined && Number.isFinite(width)) out['stroke-width'] = width;\n const poly = child(style, 'PolyStyle');\n const fill = color(poly);\n if (fill) [out.fill, out['fill-opacity']] = fill;\n if (childText(poly, 'fill') === '0') out['fill-opacity'] = 0;\n if (childText(poly, 'outline') === '0') out['stroke-opacity'] = 0;\n const icon = color(child(style, 'IconStyle'));\n if (icon) out['marker-color'] = icon[0];\n return out;\n}\n\n/**\n * The placemarks of a KML document as GeoJSON features: their points, lines (and gx:Track), polygons (with their\n * holes) and MultiGeometry (a Multi… of one type, else a GeometryCollection); their `name`, `description`, extended\n * data (`Data`, `SimpleData`) as properties, and the colors of their style (inline, or shared through `styleUrl` and\n * `StyleMap`) as `stroke`, `stroke-opacity`, `stroke-width`, `fill`, `fill-opacity`, `marker-color`. A placemark\n * without geometry has a null one\n */\nexport function parseKml<P = Properties>(text: string): FeatureCollection<P> {\n const root = parseXml(text);\n const styles = new Map<string, XmlElement>();\n for (const s of descendants(root, 'Style')) if (s.attributes.id) styles.set(s.attributes.id, s);\n const maps = new Map<string, string>();\n for (const m of descendants(root, 'StyleMap')) {\n const normal = children(m, 'Pair').find((p) => childText(p, 'key') === 'normal');\n const url = childText(normal, 'styleUrl');\n if (m.attributes.id && url) maps.set(m.attributes.id, url);\n }\n /** The style of a `styleUrl` in this document (`#id`, through a StyleMap) */\n const shared = (url: string | undefined, depth = 0): XmlElement | undefined => {\n const id = url?.slice(url.indexOf('#') + 1);\n if (id === undefined || depth > 4) return undefined;\n return styles.get(id) ?? shared(maps.get(id), depth + 1);\n };\n const features = descendants(root, 'Placemark').map((placemark): Feature<P> => {\n const properties: Properties = { ...styleProperties(shared(childText(placemark, 'styleUrl'))) };\n Object.assign(properties, styleProperties(child(placemark, 'Style')));\n for (const key of ['name', 'description', 'address', 'styleUrl']) {\n const value = childText(placemark, key);\n if (value !== undefined) properties[key] = value;\n }\n const time = childText(child(placemark, 'TimeStamp'), 'when');\n if (time !== undefined) properties.time = time;\n const extended = child(placemark, 'ExtendedData');\n for (const data of children(extended, 'Data')) {\n if (data.attributes.name) properties[data.attributes.name] = childText(data, 'value') ?? '';\n }\n for (const schema of children(extended, 'SchemaData')) {\n for (const data of children(schema, 'SimpleData')) {\n if (data.attributes.name) properties[data.attributes.name] = data.text.trim();\n }\n }\n const id = placemark.attributes.id;\n return {\n type: 'Feature',\n geometry: merge(geometries(placemark)),\n properties: properties as P,\n ...(id === undefined ? {} : { id }),\n };\n });\n return { type: 'FeatureCollection', features };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * TopoJSON to GeoJSON, for the feature layers: `map.addFills({ data: parseTopoJson(topology, 'counties') })`.
3
3
  */
4
- import type { FeatureCollection, Properties } from './features.ts';
4
+ import type { FeatureCollection, Properties } from '../layers/features.ts';
5
5
  /** A TopoJSON geometry object (arcs by index, `~i` for arc i reversed; positions quantized with a transform) */
6
6
  export interface TopoGeometry {
7
7
  type: 'Point' | 'MultiPoint' | 'LineString' | 'MultiLineString' | 'Polygon' | 'MultiPolygon' | 'GeometryCollection' | null;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topojson.js","sourceRoot":"","sources":["../../src/data/topojson.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TopoJSON to GeoJSON, for the feature layers: `map.addFills({ data: parseTopoJson(topology, 'counties') })`.\n */\nimport type { Feature, FeatureCollection, Geometry, Position, Properties } from '../layers/features.ts';\n\n/** A TopoJSON geometry object (arcs by index, `~i` for arc i reversed; positions quantized with a transform) */\nexport interface TopoGeometry {\n type:\n | 'Point'\n | 'MultiPoint'\n | 'LineString'\n | 'MultiLineString'\n | 'Polygon'\n | 'MultiPolygon'\n | 'GeometryCollection'\n | null;\n id?: string | number;\n properties?: Properties;\n coordinates?: number[] | number[][];\n arcs?: number[] | number[][] | number[][][];\n geometries?: TopoGeometry[];\n}\n\n/** A TopoJSON topology */\nexport interface Topology {\n type: 'Topology';\n /** Quantized positions: x × scale + translate (arcs delta-encoded) */\n transform?: { scale: [number, number]; translate: [number, number] };\n arcs: number[][][];\n objects: Record<string, TopoGeometry>;\n}\n\n/**\n * The features of object `name` of a TopoJSON topology (default its first object): a GeometryCollection gives one\n * feature per geometry, another geometry one feature; arcs are stitched and dequantized, ids and properties kept\n */\nexport function parseTopoJson<P = Properties>(topology: Topology, name?: string): FeatureCollection<P> {\n const object = name === undefined ? Object.values(topology.objects)[0] : topology.objects[name];\n if (!object) throw new Error(`isard: no TopoJSON object ${name ?? ''}`);\n const { scale = [1, 1], translate = [0, 0] } = topology.transform ?? {};\n const quantized = topology.transform !== undefined;\n const at = (p: number[]): Position => [p[0] ?? 0, p[1] ?? 0, ...p.slice(2)];\n // The arcs decoded once\n const arcs = topology.arcs.map((arc) => {\n let [x, y] = [0, 0];\n return arc.map((p): Position => {\n if (!quantized) return at(p);\n x += p[0] ?? 0;\n y += p[1] ?? 0;\n return [x * scale[0] + translate[0], y * scale[1] + translate[1], ...p.slice(2)];\n });\n });\n const position = (p: number[]): Position =>\n quantized ? [(p[0] ?? 0) * scale[0] + translate[0], (p[1] ?? 0) * scale[1] + translate[1], ...p.slice(2)] : at(p);\n /** A line from arcs, each after the first without its first point (the last of the one before) */\n const stitch = (indices: number[]): Position[] => {\n const out: Position[] = [];\n for (const i of indices) {\n const arc = arcs[i < 0 ? ~i : i] ?? [];\n const points = i < 0 ? [...arc].reverse() : arc;\n out.push(...(out.length > 0 ? points.slice(1) : points));\n }\n return out;\n };\n const geometry = (g: TopoGeometry): Geometry | null => {\n switch (g.type) {\n case 'Point':\n return { type: 'Point', coordinates: position(g.coordinates as number[]) };\n case 'MultiPoint':\n return { type: 'MultiPoint', coordinates: (g.coordinates as number[][]).map(position) };\n case 'LineString':\n return { type: 'LineString', coordinates: stitch(g.arcs as number[]) };\n case 'MultiLineString':\n return { type: 'MultiLineString', coordinates: (g.arcs as number[][]).map(stitch) };\n case 'Polygon':\n return { type: 'Polygon', coordinates: (g.arcs as number[][]).map(stitch) };\n case 'MultiPolygon':\n return { type: 'MultiPolygon', coordinates: (g.arcs as number[][][]).map((p) => p.map(stitch)) };\n case 'GeometryCollection':\n return {\n type: 'GeometryCollection',\n geometries: (g.geometries ?? []).map(geometry).filter((c) => c !== null),\n };\n default:\n return null;\n }\n };\n const feature = (g: TopoGeometry): Feature<P> => ({\n type: 'Feature',\n geometry: geometry(g),\n properties: (g.properties ?? {}) as P,\n ...(g.id === undefined ? {} : { id: g.id }),\n });\n const features = object.type === 'GeometryCollection' ? (object.geometries ?? []).map(feature) : [feature(object)];\n return { type: 'FeatureCollection', features };\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../../src/data/xml.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * A small XML reader for the formats read here (KML, GPX, WMTS capabilities): elements, their attributes and text,\n * CDATA, comments, entities. The same in the page, in workers and in tests (which have no `DOMParser`), and lenient:\n * a closing tag without its opening one is ignored, an unclosed element ends with its parent. Names are kept without\n * their namespace prefix (`ows:Identifier` is `Identifier`): the formats read here never mix two meanings of a name.\n * No DTD is read (no external entity, no entity expansion).\n */\n\nexport interface XmlElement {\n /** Local name, without its prefix */\n name: string;\n /** Attributes by local name */\n attributes: Record<string, string>;\n children: XmlElement[];\n /** Text directly inside, CDATA included, entities decoded */\n text: string;\n}\n\nconst ENTITIES: Record<string, string> = { lt: '<', gt: '>', amp: '&', quot: '\"', apos: \"'\" };\n\n/** Text with its entities decoded (unknown ones kept as they are) */\nfunction decode(text: string): string {\n if (!text.includes('&')) return text;\n return text.replace(/&(#x[\\da-f]+|#\\d+|\\w+);/gi, (whole, entity: string) => {\n if (entity[0] === '#') {\n const code =\n entity[1] === 'x' || entity[1] === 'X' ? Number.parseInt(entity.slice(2), 16) : Number(entity.slice(1));\n return Number.isFinite(code) && code >= 0 && code <= 0x10ffff ? String.fromCodePoint(code) : whole;\n }\n return ENTITIES[entity] ?? whole;\n });\n}\n\nconst local = (name: string) => name.slice(name.indexOf(':') + 1);\n\n/** A start tag at the reader's position: its name, its attributes (quoted values may hold '>'), whether it closes */\nconst START = /<([^\\s/>]+)((?:\\s+[^\\s=/>]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'))*)\\s*(\\/?)>/y;\n\n/** The document's root element; throws if there is none */\nexport function parseXml(source: string): XmlElement {\n const root: XmlElement = { name: '#document', attributes: {}, children: [], text: '' };\n const stack = [root];\n const top = () => stack[stack.length - 1] as XmlElement;\n let i = 0;\n while (i < source.length) {\n const lt = source.indexOf('<', i);\n const end = lt < 0 ? source.length : lt;\n if (end > i) top().text += decode(source.slice(i, end));\n if (lt < 0) break;\n if (source.startsWith('<!--', lt)) {\n const close = source.indexOf('-->', lt + 4);\n i = close < 0 ? source.length : close + 3;\n } else if (source.startsWith('<![CDATA[', lt)) {\n const close = source.indexOf(']]>', lt + 9);\n top().text += source.slice(lt + 9, close < 0 ? source.length : close);\n i = close < 0 ? source.length : close + 3;\n } else if (source[lt + 1] === '?' || source[lt + 1] === '!') {\n // A declaration, a processing instruction, a DOCTYPE (its internal subset skipped whole)\n const bracket = source.indexOf('[', lt);\n const gt = source.indexOf('>', lt);\n const subset = source[lt + 1] === '!' && bracket >= 0 && bracket < gt ? source.indexOf(']', bracket) : lt;\n const close = source.indexOf('>', subset);\n i = close < 0 ? source.length : close + 1;\n } else if (source[lt + 1] === '/') {\n const gt = source.indexOf('>', lt);\n const name = local(source.slice(lt + 2, gt < 0 ? source.length : gt).trim());\n let at = stack.length - 1;\n while (at > 0 && stack[at]?.name !== name) at -= 1;\n if (at > 0) stack.length = at;\n i = gt < 0 ? source.length : gt + 1;\n } else {\n START.lastIndex = lt;\n const tag = START.exec(source);\n if (!tag) {\n top().text += '<';\n i = lt + 1;\n continue;\n }\n const element: XmlElement = { name: local(tag[1] as string), attributes: {}, children: [], text: '' };\n for (const [, key, double, single] of (tag[2] as string).matchAll(/([^\\s=]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g)) {\n element.attributes[local(key as string)] = decode(double ?? single ?? '');\n }\n top().children.push(element);\n if (!tag[3]) stack.push(element);\n i = START.lastIndex;\n }\n }\n const first = root.children[0];\n if (!first) throw new Error('isard: no XML element');\n return first;\n}\n\n/** The first child element of a name */\nexport function child(element: XmlElement | undefined, name: string): XmlElement | undefined {\n return element?.children.find((c) => c.name === name);\n}\n\n/** The child elements of a name */\nexport function children(element: XmlElement | undefined, name: string): XmlElement[] {\n return element?.children.filter((c) => c.name === name) ?? [];\n}\n\n/** The trimmed text of the first child of a name; undefined without one */\nexport function childText(element: XmlElement | undefined, name: string): string | undefined {\n return child(element, name)?.text.trim();\n}\n\n/** Every element of a name under an element, in document order (not inside a match) */\nexport function descendants(element: XmlElement, name: string, out: XmlElement[] = []): XmlElement[] {\n for (const c of element.children) {\n if (c.name === name) out.push(c);\n else descendants(c, name, out);\n }\n return out;\n}\n"]}
@@ -2,5 +2,5 @@ var Ae={draco:"https://www.gstatic.com/draco/versioned/decoders/1.5.7/",basis:"h
2
2
  return ${e};`)()}async function oe(r,e,t,n){let[_,o]=await Promise.all([Ne(`${r}${e}`,n),fetch(`${r}${t}`).then((i)=>i.arrayBuffer())]);return _({wasmBinary:o})}var pe,ye,he;async function xe(r,e){let t=e.some((o)=>!o.points);if(t)pe??=oe(r.draco,"draco_wasm_wrapper_gltf.js","draco_decoder_gltf.wasm","DracoDecoderModule");if(e.some((o)=>o.points))ye??=oe(r.draco,"draco_wasm_wrapper.js","draco_decoder.wasm","DracoDecoderModule");let[n,_]=await Promise.all([t?pe:void 0,ye]);return e.map((o)=>{let i=o.points?_:n,a=new i.Decoder,f=o.points?new i.PointCloud:new i.Mesh;try{let b=new Int8Array(o.data.buffer,o.data.byteOffset,o.data.byteLength),l=o.points?a.DecodeArrayToPointCloud(b,b.byteLength,f):a.DecodeArrayToMesh(b,b.byteLength,f);if(!l.ok())throw Error(`Draco: ${l.error_msg()}`);let d=(L)=>{let D=a.GetAttributeByUniqueId(f,L),k=f.num_points()*D.num_components(),h=i._malloc(k*4);try{return a.GetAttributeDataArrayForAllPoints(f,D,i.DT_FLOAT32,k*4,h),i.HEAPF32.slice(h/4,h/4+k)}finally{i._free(h)}};if(o.points){let L={mesh:o.mesh,primitive:o.primitive,positions:d(o.position)};if(o.color!==void 0)L.colors=d(o.color);if(o.normal!==void 0)L.normals=d(o.normal);return L}let g=f.num_faces()*3,m=i._malloc(g*4),P;try{a.GetTrianglesUInt32Array(f,g*4,m),P=i.HEAPU32.slice(m/4,m/4+g)}finally{i._free(m)}let E={mesh:o.mesh,primitive:o.primitive,positions:d(o.position),indices:P};if(o.uv!==void 0)E.uvs=d(o.uv);return E}finally{i.destroy(f),i.destroy(a)}})}function Ve(r,e){if(r.astc)return{basis:10,gl:37808};if(r.bptc)return{basis:6,gl:36492};if(r.etc)return e?{basis:1,gl:37496}:{basis:0,gl:37492};if(r.s3tc)return e?{basis:3,gl:33779}:{basis:2,gl:33776};return{basis:13,gl:32856}}async function ve(r,e,t){he??=oe(r.basis,"basis_transcoder.js","basis_transcoder.wasm","BASIS").then((o)=>(o.initializeBasis(),o));let _=new(await he).KTX2File(t);try{if(!_.isValid()||!_.startTranscoding())throw Error("KTX2: invalid file");let{basis:o,gl:i}=Ve(e,_.getHasAlpha()),a=[];for(let f=0;f<_.getLevels();f++){let{origWidth:b,origHeight:l}=_.getImageLevelInfo(f,0,0),d=new Uint8Array(_.getImageTranscodedSizeInBytes(f,0,0,o));if(!_.transcodeImage(d,f,0,0,o,0,-1,-1))throw Error("KTX2: transcoding failed");a.push({width:b,height:l,data:d})}return{format:i,levels:a}}finally{_.close(),_.delete()}}var Se=[];function Fe(r){Se=r}function ce(r,e){let t=String(r),n=Se.filter(([o])=>t.startsWith(o));if(n.length===0)return e??{};let _=new Headers(e?.headers);for(let[,o]of n)for(let[i,a]of Object.entries(o))_.set(i,a);return{...e??{},headers:_}}class se{__destroy_into_raw(){let r=this.__wbg_ptr;return this.__wbg_ptr=0,Te.unregister(this),r}free(){let r=this.__destroy_into_raw();c.__wbg_engine_free(r,0)}addCircles(r,e,t){let n=S(r,c.__wbindgen_malloc),_=s,o=A(e,c.__wbindgen_malloc),i=s,a=c.engine_addCircles(this.__wbg_ptr,n,_,o,i,t);if(a[2])throw y(a[1]);return a[0]>>>0}addCustomLayer(r,e){return c.engine_addCustomLayer(this.__wbg_ptr,r,e)>>>0}addExtrusions(){let r=c.engine_addExtrusions(this.__wbg_ptr);if(r[2])throw y(r[1]);return r[0]>>>0}addFills(r,e,t,n,_){let o=S(r,c.__wbindgen_malloc),i=s,a=A(e,c.__wbindgen_malloc),f=s,b=A(t,c.__wbindgen_malloc),l=s,d=A(n,c.__wbindgen_malloc),g=s,m=c.engine_addFills(this.__wbg_ptr,o,i,a,f,b,l,d,g,_);if(m[2])throw y(m[1]);return m[0]>>>0}addGround(r,e,t,n,_,o,i){let a=F(r,c.__wbindgen_malloc,c.__wbindgen_realloc),f=s,b=c.engine_addGround(this.__wbg_ptr,a,f,e,t,n,_,o,i);if(b[2])throw y(b[1]);return b[0]>>>0}addLines(r,e,t,n){let _=S(r,c.__wbindgen_malloc),o=s,i=A(e,c.__wbindgen_malloc),a=s,f=A(t,c.__wbindgen_malloc),b=s,l=c.engine_addLines(this.__wbg_ptr,_,o,i,a,f,b,n);if(l[2])throw y(l[1]);return l[0]>>>0}addModels(r,e,t){let n=F(r,c.__wbindgen_malloc,c.__wbindgen_realloc),_=s,o=S(e,c.__wbindgen_malloc),i=s,a=c.engine_addModels(this.__wbg_ptr,n,_,o,i,t);if(a[2])throw y(a[1]);return a[0]>>>0}addNetwork(r,e,t,n,_,o){let i=S(r,c.__wbindgen_malloc),a=s,f=A(e,c.__wbindgen_malloc),b=s;var l=u(t)?0:A(t,c.__wbindgen_malloc),d=s,g=u(n)?0:S(n,c.__wbindgen_malloc),m=s,P=u(_)?0:x(_,c.__wbindgen_malloc),E=s;let L=x(o,c.__wbindgen_malloc),D=s,k=c.engine_addNetwork(this.__wbg_ptr,i,a,f,b,l,d,g,m,P,E,L,D);if(k[2])throw y(k[1]);return k[0]>>>0}addPointCloud(r,e){let t=F(r,c.__wbindgen_malloc,c.__wbindgen_realloc),n=s,_=c.engine_addPointCloud(this.__wbg_ptr,t,n,e);if(_[2])throw y(_[1]);return _[0]>>>0}addRaster(r,e,t,n,_,o,i){let a=F(r,c.__wbindgen_malloc,c.__wbindgen_realloc),f=s,b=c.engine_addRaster(this.__wbg_ptr,a,f,e,t,n,_,u(o)?Number.MAX_SAFE_INTEGER:o>>0,u(i)?0:p(i));if(b[2])throw y(b[1]);return b[0]>>>0}addSymbols(){let r=c.engine_addSymbols(this.__wbg_ptr);if(r[2])throw y(r[1]);return r[0]>>>0}addTiles3d(r,e,t){let n=F(r,c.__wbindgen_malloc,c.__wbindgen_realloc),_=s,o=c.engine_addTiles3d(this.__wbg_ptr,n,_,e,u(t)?16777215:t?1:0);if(o[2])throw y(o[1]);return o[0]>>>0}bounds(){let r=c.engine_bounds(this.__wbg_ptr);var e=ue(r[0],r[1]).slice();return c.__wbindgen_free(r[0],r[1]*8,8),e}camera(){return c.engine_camera(this.__wbg_ptr)}clearPanorama(){c.engine_clearPanorama(this.__wbg_ptr)}clearPreload(){c.engine_clearPreload(this.__wbg_ptr)}clearViewshed(){c.engine_clearViewshed(this.__wbg_ptr)}static customMatrix(r,e,t){let n=c.engine_customMatrix(r,e,t),_;if(n[0]!==0)_=T(n[0],n[1]).slice(),c.__wbindgen_free(n[0],n[1]*4,4);return _}elevationAt(r,e){let t=c.engine_elevationAt(this.__wbg_ptr,r,e);return t[0]===0?void 0:t[1]}static geoidHeight(r,e){return c.engine_geoidHeight(r,e)}ground(r,e){return c.engine_ground(this.__wbg_ptr,r,e)}linkExtrusionNetwork(r,e,t){c.engine_linkExtrusionNetwork(this.__wbg_ptr,r,u(e)?Number.MAX_SAFE_INTEGER:e>>>0,t)}localMatrix(r,e,t){let n=c.engine_localMatrix(this.__wbg_ptr,r,e,t);var _=T(n[0],n[1]).slice();return c.__wbindgen_free(n[0],n[1]*4,4),_}moveLayer(r,e){c.engine_moveLayer(this.__wbg_ptr,r,e)}networkStats(r){return c.engine_networkStats(this.__wbg_ptr,r)}constructor(r,e){let t=c.engine_new(r,e);if(t[2])throw y(t[1]);return this.__wbg_ptr=t[0],Te.register(this,this.__wbg_ptr,this),this}pan(r,e,t,n){c.engine_pan(this.__wbg_ptr,r,e,t,n)}pick(r,e,t,n){var _=u(n)?0:A(n,c.__wbindgen_malloc),o=s;return c.engine_pick(this.__wbg_ptr,r,e,!u(t),u(t)?0:t,_,o)}pointCloudInfo(r){return c.engine_pointCloudInfo(this.__wbg_ptr,r)}pointCloudPoint(r,e){return c.engine_pointCloudPoint(this.__wbg_ptr,r,e)}pointCloudStats(r){return c.engine_pointCloudStats(this.__wbg_ptr,r)}pollPick(){return c.engine_pollPick(this.__wbg_ptr)}preload(r,e,t,n,_){c.engine_preload(this.__wbg_ptr,r,e,t,n,_)}project(r,e,t){return c.engine_project(this.__wbg_ptr,r,e,!u(t),u(t)?0:t)}removeExtrusionBatch(r,e){c.engine_removeExtrusionBatch(this.__wbg_ptr,r,e)}removeLayer(r){c.engine_removeLayer(this.__wbg_ptr,r)}render(){return c.engine_render(this.__wbg_ptr)!==0}requestPick(r,e,t,n){var _=u(n)?0:A(n,c.__wbindgen_malloc),o=s;return c.engine_requestPick(this.__wbg_ptr,r,e,!u(t),u(t)?0:t,_,o)!==0}resize(r,e,t){c.engine_resize(this.__wbg_ptr,r,e,t)}rotate(r,e){c.engine_rotate(this.__wbg_ptr,r,e)}setAtmosphere(r){var e=u(r)?0:x(r,c.__wbindgen_malloc),t=s;c.engine_setAtmosphere(this.__wbg_ptr,e,t)}setBackground(r,e,t){c.engine_setBackground(this.__wbg_ptr,r,e,t)}setBody(r,e,t,n,_){var o=u(t)?0:x(t,c.__wbindgen_malloc),i=s;c.engine_setBody(this.__wbg_ptr,r,e,o,i,n,_)}setCamera(r,e,t,n,_){c.engine_setCamera(this.__wbg_ptr,r,e,t,n,_)}setCircleAlignment(r,e){c.engine_setCircleAlignment(this.__wbg_ptr,r,e)}setCircles(r,e,t){let n=S(e,c.__wbindgen_malloc),_=s,o=A(t,c.__wbindgen_malloc),i=s;c.engine_setCircles(this.__wbg_ptr,r,n,_,o,i)}setExtrusionAnchors(r,e,t){let n=x(t,c.__wbindgen_malloc),_=s,o=c.engine_setExtrusionAnchors(this.__wbg_ptr,r,e,n,_);if(o[1])throw y(o[0])}setExtrusionBatch(r,e,t,n,_,o,i){let a=S(t,c.__wbindgen_malloc),f=s,b=A(n,c.__wbindgen_malloc),l=s,d=A(_,c.__wbindgen_malloc),g=s,m=A(o,c.__wbindgen_malloc),P=s,E=c.engine_setExtrusionBatch(this.__wbg_ptr,r,e,a,f,b,l,d,g,m,P,i);if(E[1])throw y(E[0])}setFeatureLayer(r,e,t,n,_){let o=x(e,c.__wbindgen_malloc),i=s;c.engine_setFeatureLayer(this.__wbg_ptr,r,o,i,t,n,_)}setFeatureMask(r,e,t){let n=R(e,c.__wbindgen_malloc),_=s;c.engine_setFeatureMask(this.__wbg_ptr,r,n,_,u(t)?Number.MAX_SAFE_INTEGER:t>>>0)}setFeatureRamp(r,e,t,n){var _=u(e)?0:R(e,c.__wbindgen_malloc),o=s;c.engine_setFeatureRamp(this.__wbg_ptr,r,_,o,t,n)}setFeatureStyle(r,e,t){let n=x(e,c.__wbindgen_malloc),_=s;c.engine_setFeatureStyle(this.__wbg_ptr,r,n,_,u(t)?Number.MAX_SAFE_INTEGER:t>>>0)}setFeatureValues(r,e,t){let n=x(e,c.__wbindgen_malloc),_=s;c.engine_setFeatureValues(this.__wbg_ptr,r,n,_,u(t)?Number.MAX_SAFE_INTEGER:t>>>0)}setFills(r,e,t,n,_){let o=S(e,c.__wbindgen_malloc),i=s,a=A(t,c.__wbindgen_malloc),f=s,b=A(n,c.__wbindgen_malloc),l=s,d=A(_,c.__wbindgen_malloc),g=s;c.engine_setFills(this.__wbg_ptr,r,o,i,a,f,b,l,d,g)}setFirstPerson(r,e,t,n,_,o){c.engine_setFirstPerson(this.__wbg_ptr,r,e,t,n,_,o)}setGlobeColor(r,e,t){c.engine_setGlobeColor(this.__wbg_ptr,r,e,t)}setGlobe(r){c.engine_setGlobe(this.__wbg_ptr,r)}setGlyphAtlas(r,e,t){var n=u(t)?0:R(t,c.__wbindgen_malloc),_=s;let o=c.engine_setGlyphAtlas(this.__wbg_ptr,r,e,n,_);if(o[1])throw y(o[0])}setGlyphPages(r,e,t){let n=c.engine_setGlyphPages(this.__wbg_ptr,r,e,t);if(n[1])throw y(n[0])}setGroundBounds(r,e,t,n,_){c.engine_setGroundBounds(this.__wbg_ptr,r,e,t,n,_)}setGroundTexture(r,e,t,n,_,o,i,a){let f=F(e,c.__wbindgen_malloc,c.__wbindgen_realloc),b=s,l=F(t,c.__wbindgen_malloc,c.__wbindgen_realloc),d=s;var g=u(a)?0:R(a,c.__wbindgen_malloc),m=s;let P=c.engine_setGroundTexture(this.__wbg_ptr,r,f,b,l,d,n,_,o,i,g,m);if(P[1])throw y(P[0])}setGroundUniform(r,e,t){let n=F(e,c.__wbindgen_malloc,c.__wbindgen_realloc),_=s,o=S(t,c.__wbindgen_malloc),i=s,a=c.engine_setGroundUniform(this.__wbg_ptr,r,n,_,o,i);if(a[1])throw y(a[0])}setGroundVisible(r,e){c.engine_setGroundVisible(this.__wbg_ptr,r,e)}setIconAtlas(r,e){let t=c.engine_setIconAtlas(this.__wbg_ptr,r,e);if(t[1])throw y(t[0])}setImmediateLoading(r){c.engine_setImmediateLoading(this.__wbg_ptr,r)}setLineDash(r,e,t){c.engine_setLineDash(this.__wbg_ptr,r,e,t)}setLines(r,e,t,n){let _=S(e,c.__wbindgen_malloc),o=s,i=A(t,c.__wbindgen_malloc),a=s,f=A(n,c.__wbindgen_malloc),b=s,l=c.engine_setLines(this.__wbg_ptr,r,_,o,i,a,f,b);if(l[1])throw y(l[0])}setMaxPitch(r){c.engine_setMaxPitch(this.__wbg_ptr,r)}setModelInstances(r,e,t){let n=S(e,c.__wbindgen_malloc),_=s;c.engine_setModelInstances(this.__wbg_ptr,r,n,_,t)}setNetworkCosts(r,e){var t=u(e)?0:x(e,c.__wbindgen_malloc),n=s;c.engine_setNetworkCosts(this.__wbg_ptr,r,t,n)}setNetworkRamp(r,e){var t=u(e)?0:R(e,c.__wbindgen_malloc),n=s;c.engine_setNetworkRamp(this.__wbg_ptr,r,t,n)}setNetworkScales(r,e){var t=u(e)?0:x(e,c.__wbindgen_malloc),n=s;c.engine_setNetworkScales(this.__wbg_ptr,r,t,n)}setNetworkStyle(r,e){let t=x(e,c.__wbindgen_malloc),n=s;c.engine_setNetworkStyle(this.__wbg_ptr,r,t,n)}setNetworkValues(r,e){let t=x(e,c.__wbindgen_malloc),n=s;c.engine_setNetworkValues(this.__wbg_ptr,r,t,n)}setPanoramaImage(r,e){let t=c.engine_setPanoramaImage(this.__wbg_ptr,r,e);if(t[1])throw y(t[0])}setPanorama(r,e,t,n,_,o,i){let a=S(n,c.__wbindgen_malloc),f=s,b=S(_,c.__wbindgen_malloc),l=s,d=c.engine_setPanorama(this.__wbg_ptr,r,e,t,a,f,b,l,o,i);if(d[1])throw y(d[0])}setPointCloudStyle(r,e,t,n){let _=S(e,c.__wbindgen_malloc),o=s,i=R(t,c.__wbindgen_malloc),a=s,f=R(n,c.__wbindgen_malloc),b=s;c.engine_setPointCloudStyle(this.__wbg_ptr,r,_,o,i,a,f,b)}setRasterStyle(r,e,t){c.engine_setRasterStyle(this.__wbg_ptr,r,e,t)}setRequestHeaders(r,e,t){let n=Pe(r,c.__wbindgen_malloc),_=s,o=A(e,c.__wbindgen_malloc),i=s,a=Pe(t,c.__wbindgen_malloc),f=s;c.engine_setRequestHeaders(this.__wbg_ptr,n,_,o,i,a,f)}setSky(r){c.engine_setSky(this.__wbg_ptr,r)}setSwipe(r,e,t){let n=A(t,c.__wbindgen_malloc),_=s;c.engine_setSwipe(this.__wbg_ptr,r,e,n,_)}setSymbolLayer(r,e,t,n,_,o){let i=x(e,c.__wbindgen_malloc),a=s,f=x(t,c.__wbindgen_malloc),b=s;c.engine_setSymbolLayer(this.__wbg_ptr,r,i,a,f,b,n,_,o)}setSymbols(r,e,t,n,_){let o=S(e,c.__wbindgen_malloc),i=s,a=x(t,c.__wbindgen_malloc),f=s,b=x(n,c.__wbindgen_malloc),l=s,d=x(_,c.__wbindgen_malloc),g=s,m=c.engine_setSymbols(this.__wbg_ptr,r,o,i,a,f,b,l,d,g);if(m[1])throw y(m[0])}setTerrain(r,e,t,n,_){var o=u(r)?0:F(r,c.__wbindgen_malloc,c.__wbindgen_realloc),i=s;let a=c.engine_setTerrain(this.__wbg_ptr,o,i,e,u(t)?16777215:t,u(n)?16777215:n?1:0,u(_)?0:p(_));if(a[1])throw y(a[0])}setTileLoader(r){c.engine_setTileLoader(this.__wbg_ptr,r)}setTiles3dStyle(r,e,t,n,_){let o=x(_,c.__wbindgen_malloc),i=s;c.engine_setTiles3dStyle(this.__wbg_ptr,r,e,t,!u(n),u(n)?0:n,o,i)}setViewshed(r,e,t,n,_){let o=S(r,c.__wbindgen_malloc),i=s,a=x(e,c.__wbindgen_malloc),f=s,b=x(t,c.__wbindgen_malloc),l=s,d=x(_,c.__wbindgen_malloc),g=s,m=c.engine_setViewshed(this.__wbg_ptr,o,i,a,f,b,l,n,d,g);if(m[1])throw y(m[0])}setZoomRange(r,e){c.engine_setZoomRange(this.__wbg_ptr,r,e)}stats(){return c.engine_stats(this.__wbg_ptr)}surfaceAt(r,e){return c.engine_surfaceAt(this.__wbg_ptr,r,e)}surface(r,e){return c.engine_surface(this.__wbg_ptr,r,e)}textureFormats(){return c.engine_textureFormats(this.__wbg_ptr)}tiles3dFeature(r,e){return c.engine_tiles3dFeature(this.__wbg_ptr,r,e)}tiles3dStats(r){return c.engine_tiles3dStats(this.__wbg_ptr,r)}updateGlyphAtlas(r,e,t,n,_){let o=R(_,c.__wbindgen_malloc),i=s;c.engine_updateGlyphAtlas(this.__wbg_ptr,r,e,t,n,o,i)}updateGlyphPage(r,e,t,n,_,o){let i=R(o,c.__wbindgen_malloc),a=s;c.engine_updateGlyphPage(this.__wbg_ptr,r,e,t,n,_,i,a)}updateGroundTexture(r,e,t,n,_,o,i,a){let f=F(e,c.__wbindgen_malloc,c.__wbindgen_realloc),b=s,l=R(a,c.__wbindgen_malloc),d=s,g=c.engine_updateGroundTexture(this.__wbg_ptr,r,f,b,t,n,_,o,i,l,d);if(g[1])throw y(g[0])}updateIconAtlas(r,e,t,n,_){let o=R(_,c.__wbindgen_malloc),i=s;c.engine_updateIconAtlas(this.__wbg_ptr,r,e,t,n,o,i)}wantedTiles(r){let e=c.engine_wantedTiles(this.__wbg_ptr,r);var t=B(e[0],e[1]).slice();return c.__wbindgen_free(e[0],e[1]*4,4),t}zoomAt(r,e,t){c.engine_zoomAt(this.__wbg_ptr,r,e,t)}}if(Symbol.dispose)se.prototype[Symbol.dispose]=se.prototype.free;function De(r,e,t,n){let _=R(r,c.__wbindgen_malloc),o=s,i=S(e,c.__wbindgen_malloc),a=s,f=c.decodeTile(_,o,i,a,t,n);if(f[2])throw y(f[1]);return y(f[0])}function Me(r){let e=R(r,c.__wbindgen_malloc),t=s,n=c.dracoRequests(e,t);if(n[2])throw y(n[1]);return y(n[0])}function He(){return{__proto__:null,"./isard_bg.js":{__proto__:null,__wbg___wbindgen_boolean_get_5b446f51afd21013:function(e){let t=e,n=typeof t==="boolean"?t:void 0;return u(n)?16777215:n?1:0},__wbg___wbindgen_debug_string_4687d8d8c2017d52:function(e,t){let n=fe(t),_=F(n,c.__wbindgen_malloc,c.__wbindgen_realloc),o=s;v().setInt32(e+4,o,!0),v().setInt32(e+0,_,!0)},__wbg___wbindgen_is_falsy_16bd49b68658263e:function(e){return!e},__wbg___wbindgen_is_function_1f9d30630b8b1d3d:function(e){return typeof e==="function"},__wbg___wbindgen_is_null_e343b7d08827ba72:function(e){return e===null},__wbg___wbindgen_is_object_3c45d4f2dde4e749:function(e){let t=e;return typeof t==="object"&&t!==null},__wbg___wbindgen_is_undefined_8865fb403f8fe9d8:function(e){return e===void 0},__wbg___wbindgen_number_get_2e0e7dee9f701a71:function(e,t){let n=t,_=typeof n==="number"?n:void 0;v().setFloat64(e+8,u(_)?0:_,!0),v().setInt32(e+0,!u(_),!0)},__wbg___wbindgen_string_get_0380ccaa2f57f0d9:function(e,t){let n=t,_=typeof n==="string"?n:void 0;var o=u(_)?0:F(_,c.__wbindgen_malloc,c.__wbindgen_realloc),i=s;v().setInt32(e+4,i,!0),v().setInt32(e+0,o,!0)},__wbg___wbindgen_throw_41e9ee4f547fc59a:function(e,t){throw Error(M(e,t))},__wbg__wbg_cb_unref_dcc1a90847f04c41:function(e){e._wbg_cb_unref()},__wbg_abort_f78b99d80248bacb:function(e){e.abort()},__wbg_aborted_5b2b5f06b5e59fde:function(e){return e.aborted},__wbg_activeTexture_11079673eac5c921:function(e,t){e.activeTexture(t>>>0)},__wbg_activeTexture_2fad46c01cafe6b1:function(e,t){e.activeTexture(t>>>0)},__wbg_apply_a910804df6e1e433:function(){return w(function(e,t,n){return e.apply(t,n)},arguments)},__wbg_arrayBuffer_f07be74819944ea2:function(){return w(function(e){return e.arrayBuffer()},arguments)},__wbg_attachShader_8920a5beea54aba7:function(e,t,n){e.attachShader(t,n)},__wbg_attachShader_9567ae57af6746d5:function(e,t,n){e.attachShader(t,n)},__wbg_bindBuffer_0324f62b876c4403:function(e,t,n){e.bindBuffer(t>>>0,n)},__wbg_bindBuffer_2195e89b585ce0c3:function(e,t,n){e.bindBuffer(t>>>0,n)},__wbg_bindFramebuffer_22e4b8e6e6d8d0e8:function(e,t,n){e.bindFramebuffer(t>>>0,n)},__wbg_bindFramebuffer_378eb18ef219d37a:function(e,t,n){e.bindFramebuffer(t>>>0,n)},__wbg_bindRenderbuffer_db090531fb28de34:function(e,t,n){e.bindRenderbuffer(t>>>0,n)},__wbg_bindRenderbuffer_e0c5aeef245a913a:function(e,t,n){e.bindRenderbuffer(t>>>0,n)},__wbg_bindTexture_3cf008f256f3ed99:function(e,t,n){e.bindTexture(t>>>0,n)},__wbg_bindTexture_613a47b8917a0ccd:function(e,t,n){e.bindTexture(t>>>0,n)},__wbg_bindVertexArrayOES_3141815cb8234a6e:function(e,t){e.bindVertexArrayOES(t)},__wbg_bindVertexArray_f58af0a346185ec5:function(e,t){e.bindVertexArray(t)},__wbg_blendEquation_5fb8aee6a55cf900:function(e,t){e.blendEquation(t>>>0)},__wbg_blendEquation_d21914e937b14896:function(e,t){e.blendEquation(t>>>0)},__wbg_blendFuncSeparate_28abe082febb1a26:function(e,t,n,_,o){e.blendFuncSeparate(t>>>0,n>>>0,_>>>0,o>>>0)},__wbg_blendFuncSeparate_2af9d47f7efc0452:function(e,t,n,_,o){e.blendFuncSeparate(t>>>0,n>>>0,_>>>0,o>>>0)},__wbg_blendFunc_491ee1105079ce76:function(e,t,n){e.blendFunc(t>>>0,n>>>0)},__wbg_blendFunc_589e4252bb396484:function(e,t,n){e.blendFunc(t>>>0,n>>>0)},__wbg_blob_232135c7e297b861:function(){return w(function(e){return e.blob()},arguments)},__wbg_bufferData_50f5eb06469330e4:function(e,t,n,_){e.bufferData(t>>>0,n,_>>>0)},__wbg_bufferData_53e0f7a06b58fe81:function(e,t,n,_){e.bufferData(t>>>0,n,_>>>0)},__wbg_bufferData_5fa44d94fe7a3878:function(e,t,n,_){e.bufferData(t>>>0,n,_>>>0)},__wbg_bufferData_bad7ce562b6a9eac:function(e,t,n,_){e.bufferData(t>>>0,n,_>>>0)},__wbg_byteLength_141bda7c7c28aa72:function(e){return e.byteLength},__wbg_byteLength_18a1704c0bf397bb:function(e){return e.byteLength},__wbg_byteLength_27689b065d089962:function(e){return e.byteLength},__wbg_byteLength_9f985b8373f1f3fe:function(e){return e.byteLength},__wbg_call_01721c8c75200a10:function(){return w(function(e,t,n,_,o,i){return e.call(t,n,_,o,i)},arguments)},__wbg_call_187d372bd5fdd4aa:function(){return w(function(e,t,n){return e.call(t,n)},arguments)},__wbg_call_6137034ef55c9d0f:function(){return w(function(e,t){return e.call(t)},arguments)},__wbg_clearColor_3f6aa096dc12e8b7:function(e,t,n,_,o){e.clearColor(t,n,_,o)},__wbg_clearColor_796427e8ac60fe14:function(e,t,n,_,o){e.clearColor(t,n,_,o)},__wbg_clearDepth_4840a5497ae51286:function(e,t){e.clearDepth(t)},__wbg_clearDepth_5a119c24c5d193bc:function(e,t){e.clearDepth(t)},__wbg_clearStencil_1b8b8c727f598eec:function(e,t){e.clearStencil(t)},__wbg_clearStencil_e4383e4a543e7997:function(e,t){e.clearStencil(t)},__wbg_clear_175cf3cb6d98d72b:function(e,t){e.clear(t>>>0)},__wbg_clear_cb96796cc568b7c8:function(e,t){e.clear(t>>>0)},__wbg_close_355afba6ea5ad1ae:function(e){e.close()},__wbg_colorMask_4d6afbbbc3022fbe:function(e,t,n,_,o){e.colorMask(t!==0,n!==0,_!==0,o!==0)},__wbg_colorMask_8c903995f6f873be:function(e,t,n,_,o){e.colorMask(t!==0,n!==0,_!==0,o!==0)},__wbg_compileShader_073a75409aaf96d2:function(e,t){e.compileShader(t)},__wbg_compileShader_c2b53ff3a8851f60:function(e,t){e.compileShader(t)},__wbg_compressedTexImage2D_93d2b30687f2cfad:function(e,t,n,_,o,i,a,f){e.compressedTexImage2D(t>>>0,n,_>>>0,o,i,a,f)},__wbg_createBuffer_d1dd23bf8704564c:function(e){let t=e.createBuffer();return u(t)?0:p(t)},__wbg_createBuffer_ffe613371d42cfd3:function(e){let t=e.createBuffer();return u(t)?0:p(t)},__wbg_createFramebuffer_2c6b5b0f49c88e5d:function(e){let t=e.createFramebuffer();return u(t)?0:p(t)},__wbg_createFramebuffer_d0969af4e9886297:function(e){let t=e.createFramebuffer();return u(t)?0:p(t)},__wbg_createImageBitmap_1b985e01e4c81baa:function(){return w(function(e,t,n){return e.createImageBitmap(t,n)},arguments)},__wbg_createImageBitmap_69996a36c51d409f:function(){return w(function(e,t,n){return e.createImageBitmap(t,n)},arguments)},__wbg_createProgram_cbf448e6f18a9402:function(e){let t=e.createProgram();return u(t)?0:p(t)},__wbg_createProgram_e0c81b0d2b8d0fd0:function(e){let t=e.createProgram();return u(t)?0:p(t)},__wbg_createRenderbuffer_2b17e9fe2e6fb4be:function(e){let t=e.createRenderbuffer();return u(t)?0:p(t)},__wbg_createRenderbuffer_c864095d6ebd60d0:function(e){let t=e.createRenderbuffer();return u(t)?0:p(t)},__wbg_createShader_6c1a2295587878a5:function(e,t){let n=e.createShader(t>>>0);return u(n)?0:p(n)},__wbg_createShader_7c9d99a21ecb08c0:function(e,t){let n=e.createShader(t>>>0);return u(n)?0:p(n)},__wbg_createTexture_01e8e591b64237de:function(e){let t=e.createTexture();return u(t)?0:p(t)},__wbg_createTexture_5f2583508ebe379b:function(e){let t=e.createTexture();return u(t)?0:p(t)},__wbg_createVertexArrayOES_a8dc8498b56df937:function(e){let t=e.createVertexArrayOES();return u(t)?0:p(t)},__wbg_createVertexArray_b223ea69dd08fcab:function(e){let t=e.createVertexArray();return u(t)?0:p(t)},__wbg_cullFace_12123c1c97f1ba2c:function(e,t){e.cullFace(t>>>0)},__wbg_cullFace_1a01f0b6d5aeb687:function(e,t){e.cullFace(t>>>0)},__wbg_deleteBuffer_070e58aaaf2a7a8b:function(e,t){e.deleteBuffer(t)},__wbg_deleteBuffer_7775ee9e248c8468:function(e,t){e.deleteBuffer(t)},__wbg_deleteFramebuffer_3f8ab330098bf8e6:function(e,t){e.deleteFramebuffer(t)},__wbg_deleteFramebuffer_570d3b214a509fa2:function(e,t){e.deleteFramebuffer(t)},__wbg_deleteProgram_822906f0368175d0:function(e,t){e.deleteProgram(t)},__wbg_deleteProgram_b524b30ad176cdb4:function(e,t){e.deleteProgram(t)},__wbg_deleteRenderbuffer_826c9b43b7ea68f5:function(e,t){e.deleteRenderbuffer(t)},__wbg_deleteRenderbuffer_f4e121a3ab21c605:function(e,t){e.deleteRenderbuffer(t)},__wbg_deleteShader_a70f6cc1918d67eb:function(e,t){e.deleteShader(t)},__wbg_deleteShader_da18a294158c2d15:function(e,t){e.deleteShader(t)},__wbg_deleteSync_4f0be28b03f50495:function(e,t){e.deleteSync(t)},__wbg_deleteTexture_78c170241204a466:function(e,t){e.deleteTexture(t)},__wbg_deleteTexture_9f42750adb092e4f:function(e,t){e.deleteTexture(t)},__wbg_deleteVertexArrayOES_e01f31634d466176:function(e,t){e.deleteVertexArrayOES(t)},__wbg_deleteVertexArray_ca9768805d051d49:function(e,t){e.deleteVertexArray(t)},__wbg_depthFunc_92e96d8f46a23300:function(e,t){e.depthFunc(t>>>0)},__wbg_depthFunc_a41fb5adacb22e09:function(e,t){e.depthFunc(t>>>0)},__wbg_depthMask_06ecff4d4514c38f:function(e,t){e.depthMask(t!==0)},__wbg_depthMask_0d7c3dec3b8405ee:function(e,t){e.depthMask(t!==0)},__wbg_depthRange_24c7969249461e8e:function(e,t,n){e.depthRange(t,n)},__wbg_depthRange_6a4e169ccf314148:function(e,t,n){e.depthRange(t,n)},__wbg_detachShader_1ed15fc2d289cf15:function(e,t,n){e.detachShader(t,n)},__wbg_detachShader_67dabaaad80a795e:function(e,t,n){e.detachShader(t,n)},__wbg_disable_19fe787eccdf0272:function(e,t){e.disable(t>>>0)},__wbg_disable_81b2cb5f8cea15ae:function(e,t){e.disable(t>>>0)},__wbg_drawArraysInstancedANGLE_b76512b5abba6668:function(e,t,n,_,o){e.drawArraysInstancedANGLE(t>>>0,n,_,o)},__wbg_drawArraysInstanced_9b44aa78a087154d:function(e,t,n,_,o){e.drawArraysInstanced(t>>>0,n,_,o)},__wbg_drawArrays_08872e02fb57b847:function(e,t,n,_){e.drawArrays(t>>>0,n,_)},__wbg_drawArrays_741af5c3f8db636f:function(e,t,n,_){e.drawArrays(t>>>0,n,_)},__wbg_drawElementsInstancedANGLE_c3fc0cfa9e29a1bc:function(e,t,n,_,o,i){e.drawElementsInstancedANGLE(t>>>0,n,_>>>0,o,i)},__wbg_drawElementsInstanced_d7c396aa034159b6:function(e,t,n,_,o,i){e.drawElementsInstanced(t>>>0,n,_>>>0,o,i)},__wbg_drawElements_c8988ba71de1101a:function(e,t,n,_,o){e.drawElements(t>>>0,n,_>>>0,o)},__wbg_drawElements_cc1e6c631e89eddf:function(e,t,n,_,o){e.drawElements(t>>>0,n,_>>>0,o)},__wbg_enableVertexAttribArray_1496b78a8dbab9fd:function(e,t){e.enableVertexAttribArray(t>>>0)},__wbg_enableVertexAttribArray_d52693866bc8b8dd:function(e,t){e.enableVertexAttribArray(t>>>0)},__wbg_enable_6eeb9c0e9b483cee:function(e,t){e.enable(t>>>0)},__wbg_enable_cb4fc19b51148c37:function(e,t){e.enable(t>>>0)},__wbg_error_c9cf3fc2064683a9:function(e){console.error(e)},__wbg_fenceSync_330293024adb66bc:function(e,t,n){let _=e.fenceSync(t>>>0,n>>>0);return u(_)?0:p(_)},__wbg_fetch_b322877f1ed6457d:function(e,t,n,_){return e.fetch(M(t,n),_)},__wbg_flush_13b162660ad850d2:function(e){e.flush()},__wbg_flush_a5ad38200881ac35:function(e){e.flush()},__wbg_framebufferRenderbuffer_1c6337e0030411f3:function(e,t,n,_,o){e.framebufferRenderbuffer(t>>>0,n>>>0,_>>>0,o)},__wbg_framebufferRenderbuffer_f019e9231b142c0d:function(e,t,n,_,o){e.framebufferRenderbuffer(t>>>0,n>>>0,_>>>0,o)},__wbg_framebufferTexture2D_73c52f23ec33aa22:function(e,t,n,_,o,i){e.framebufferTexture2D(t>>>0,n>>>0,_>>>0,o,i)},__wbg_framebufferTexture2D_caddefa1f767646e:function(e,t,n,_,o,i){e.framebufferTexture2D(t>>>0,n>>>0,_>>>0,o,i)},__wbg_from_296ca31f8d0f1c52:function(e){return Array.from(e)},__wbg_frontFace_6751b4b97f997aeb:function(e,t){e.frontFace(t>>>0)},__wbg_frontFace_b064adb15b6f3772:function(e,t){e.frontFace(t>>>0)},__wbg_generateMipmap_c63604006bfa52d5:function(e,t){e.generateMipmap(t>>>0)},__wbg_generateMipmap_cd49f6eec9558721:function(e,t){e.generateMipmap(t>>>0)},__wbg_getActiveUniform_239de631a40c387a:function(e,t,n){let _=e.getActiveUniform(t,n>>>0);return u(_)?0:p(_)},__wbg_getActiveUniform_f2052b3c57679fe2:function(e,t,n){let _=e.getActiveUniform(t,n>>>0);return u(_)?0:p(_)},__wbg_getBufferSubData_dd23246099b166d1:function(e,t,n,_){e.getBufferSubData(t>>>0,n,_)},__wbg_getContext_051324720aa5b7e8:function(){return w(function(e,t,n,_){let o=e.getContext(M(t,n),_);return u(o)?0:p(o)},arguments)},__wbg_getExtension_abfda2c5db286b07:function(){return w(function(e,t,n){let _=e.getExtension(M(t,n));return u(_)?0:p(_)},arguments)},__wbg_getParameter_974595a6624c6c10:function(){return w(function(e,t){return e.getParameter(t>>>0)},arguments)},__wbg_getParameter_a97f491753b05668:function(){return w(function(e,t){return e.getParameter(t>>>0)},arguments)},__wbg_getProgramInfoLog_208fb1ff31006495:function(e,t,n){let _=t.getProgramInfoLog(n);var o=u(_)?0:F(_,c.__wbindgen_malloc,c.__wbindgen_realloc),i=s;v().setInt32(e+4,i,!0),v().setInt32(e+0,o,!0)},__wbg_getProgramInfoLog_3276b294d6d42fe2:function(e,t,n){let _=t.getProgramInfoLog(n);var o=u(_)?0:F(_,c.__wbindgen_malloc,c.__wbindgen_realloc),i=s;v().setInt32(e+4,i,!0),v().setInt32(e+0,o,!0)},__wbg_getProgramParameter_50bafab01cf88652:function(e,t,n){return e.getProgramParameter(t,n>>>0)},__wbg_getProgramParameter_fc7124bb9fb7c675:function(e,t,n){return e.getProgramParameter(t,n>>>0)},__wbg_getShaderInfoLog_7e0cbba353ca95da:function(e,t,n){let _=t.getShaderInfoLog(n);var o=u(_)?0:F(_,c.__wbindgen_malloc,c.__wbindgen_realloc),i=s;v().setInt32(e+4,i,!0),v().setInt32(e+0,o,!0)},__wbg_getShaderInfoLog_bb64c5a52df0b7a3:function(e,t,n){let _=t.getShaderInfoLog(n);var o=u(_)?0:F(_,c.__wbindgen_malloc,c.__wbindgen_realloc),i=s;v().setInt32(e+4,i,!0),v().setInt32(e+0,o,!0)},__wbg_getShaderParameter_745acf10b8e45e31:function(e,t,n){return e.getShaderParameter(t,n>>>0)},__wbg_getShaderParameter_e55ea9c456df5484:function(e,t,n){return e.getShaderParameter(t,n>>>0)},__wbg_getSupportedExtensions_1459bad37860c0c3:function(e){let t=e.getSupportedExtensions();return u(t)?0:p(t)},__wbg_getSyncParameter_bb4be47b67bfa2f8:function(e,t,n){return e.getSyncParameter(t,n>>>0)},__wbg_getUniformLocation_50ba45dade572703:function(e,t,n,_){let o=e.getUniformLocation(t,M(n,_));return u(o)?0:p(o)},__wbg_getUniformLocation_cb4e3e121235f91a:function(e,t,n,_){let o=e.getUniformLocation(t,M(n,_));return u(o)?0:p(o)},__wbg_get_31af05bd4842a84f:function(){return w(function(e,t){return Reflect.get(e,t)},arguments)},__wbg_get_806853698d9fc227:function(){return w(function(e,t){return Reflect.get(e,t>>>0)},arguments)},__wbg_get_f75619e20cb68514:function(){return w(function(e,t,n,_){let o=t.get(M(n,_));var i=u(o)?0:F(o,c.__wbindgen_malloc,c.__wbindgen_realloc),a=s;v().setInt32(e+4,a,!0),v().setInt32(e+0,i,!0)},arguments)},__wbg_get_index_f4750150bb3083b3:function(e,t){return e[t>>>0]},__wbg_get_unchecked_288889d017702237:function(e,t){return e[t>>>0]},__wbg_headers_eba93595f8944c2f:function(e){return e.headers},__wbg_height_9dca4d43c3e4b84b:function(e){return e.height},__wbg_instanceof_ArrayBuffer_a99f175873e5d9b8:function(e){let t;try{t=e instanceof ArrayBuffer}catch(_){t=!1}return t},__wbg_instanceof_Blob_7c6191a4cd5834d3:function(e){let t;try{t=e instanceof Blob}catch(_){t=!1}return t},__wbg_instanceof_Error_80a725f81f2e102d:function(e){let t;try{t=e instanceof Error}catch(_){t=!1}return t},__wbg_instanceof_Float32Array_595afb0f28b828c9:function(e){let t;try{t=e instanceof Float32Array}catch(_){t=!1}return t},__wbg_instanceof_Float64Array_8a59377f9eec1b8b:function(e){let t;try{t=e instanceof Float64Array}catch(_){t=!1}return t},__wbg_instanceof_ImageBitmap_74bea45ee48d3d7a:function(e){let t;try{t=e instanceof ImageBitmap}catch(_){t=!1}return t},__wbg_instanceof_Promise_e1dc6893aa1ece28:function(e){let t;try{t=e instanceof Promise}catch(_){t=!1}return t},__wbg_instanceof_Response_b8758567269c30b2:function(e){let t;try{t=e instanceof Response}catch(_){t=!1}return t},__wbg_instanceof_Uint32Array_53a4facaf04b8a8b:function(e){let t;try{t=e instanceof Uint32Array}catch(_){t=!1}return t},__wbg_instanceof_Uint8Array_828cef2aaacafc31:function(e){let t;try{t=e instanceof Uint8Array}catch(_){t=!1}return t},__wbg_instanceof_WebGl2RenderingContext_64c994c14c0790fb:function(e){let t;try{t=e instanceof WebGL2RenderingContext}catch(_){t=!1}return t},__wbg_instanceof_Window_82d71df4eddf88bc:function(e){let t;try{t=e instanceof Window}catch(_){t=!1}return t},__wbg_isArray_e15a2ff68ffdbef2:function(e){return Array.isArray(e)},__wbg_isContextLost_fbbab8b921e614b7:function(e){return e.isContextLost()},__wbg_is_4b278c0bd3caba97:function(e,t){return Object.is(e,t)},__wbg_length_511b1f84719d3462:function(e){return e.length},__wbg_length_58572db4c38f3c3e:function(e){return e.length},__wbg_length_7f3c00c40364105e:function(e){return e.length},__wbg_length_b5f0008bbf60cf59:function(e){return e.length},__wbg_length_d4bdea10311bd9cf:function(e){return e.length},__wbg_linkProgram_571a9ea00d38ff83:function(e,t){e.linkProgram(t)},__wbg_linkProgram_acdc299c43d734a0:function(e,t){e.linkProgram(t)},__wbg_message_5f8387f0c32b90a7:function(e){return e.message},__wbg_name_91a697e9ff1634bf:function(e,t){let n=t.name,_=F(n,c.__wbindgen_malloc,c.__wbindgen_realloc),o=s;v().setInt32(e+4,o,!0),v().setInt32(e+0,_,!0)},__wbg_new_1dbf7428bba60a42:function(e){return new Uint8Array(e)},__wbg_new_2e41357094e99294:function(){return w(function(){return new AbortController},arguments)},__wbg_new_5502aad30c185fc8:function(e,t){try{var n={a:e,b:t},_=(i,a)=>{let f=n.a;n.a=0;try{return ze(f,n.b,i,a)}finally{n.a=f}};return new Promise(_)}finally{n.a=0}},__wbg_new_617a8cdb8bb1130e:function(){return{}},__wbg_new_83ca405eae412a62:function(){return w(function(){return new Headers},arguments)},__wbg_new_ee2291f50781bf1d:function(){return[]},__wbg_new_from_slice_37a3c3a194266cb8:function(e,t){return new Uint32Array(B(e,t))},__wbg_new_from_slice_9a868026ffa4208a:function(e,t){return new Uint8Array(ie(e,t))},__wbg_new_from_slice_ca6ad97db1f4779a:function(e,t){return new Float32Array(T(e,t))},__wbg_new_from_slice_f545fd22ddc142b8:function(e,t){return new Float64Array(ue(e,t))},__wbg_new_with_byte_offset_70ba6193352e027b:function(e,t){return new Uint8Array(e,t>>>0)},__wbg_new_with_byte_offset_and_length_40c170286adc9005:function(e,t,n){return new Float32Array(e,t>>>0,n>>>0)},__wbg_new_with_u8_array_sequence_and_options_fccc08fe93f4b8fd:function(){return w(function(e,t){return new Blob(e,t)},arguments)},__wbg_now_aa4ccb83129e9e55:function(){return Date.now()},__wbg_now_d0b7f4bea9f38490:function(e){return e.now()},__wbg_of_20798cb14708764f:function(e,t){return Array.of(e,t)},__wbg_of_d5dbecdc59e02e34:function(e){return Array.of(e)},__wbg_of_dde0b9d3265685ee:function(e,t,n){return Array.of(e,t,n)},__wbg_of_fea2613674ee0d0f:function(e,t,n,_,o){return Array.of(e,t,n,_,o)},__wbg_ok_125878a7db256ecb:function(e){return e.ok},__wbg_performance_d0d7b03fc649b694:function(e){let t=e.performance;return u(t)?0:p(t)},__wbg_pixelStorei_af18e636b3e7b725:function(e,t,n){e.pixelStorei(t>>>0,n)},__wbg_pixelStorei_cb4e43466f5b8703:function(e,t,n){e.pixelStorei(t>>>0,n)},__wbg_prototypesetcall_06eb15da165dee8f:function(e,t,n){Uint32Array.prototype.set.call(B(e,t),n)},__wbg_prototypesetcall_8b03c01e2c0f8066:function(e,t,n){Float32Array.prototype.set.call(T(e,t),n)},__wbg_prototypesetcall_bc27214492979395:function(e,t,n){Uint8Array.prototype.set.call(ie(e,t),n)},__wbg_prototypesetcall_d49a4fab5ca427bc:function(e,t,n){Float64Array.prototype.set.call(ue(e,t),n)},__wbg_push_2baf45db356cf468:function(e,t){return e.push(t)},__wbg_queueMicrotask_9833f9a49df95a49:function(e){return e.queueMicrotask},__wbg_queueMicrotask_a72f977e97f23c5f:function(e){queueMicrotask(e)},__wbg_readPixels_31e44e70558ac590:function(){return w(function(e,t,n,_,o,i,a,f){e.readPixels(t,n,_,o,i>>>0,a>>>0,f)},arguments)},__wbg_readPixels_3321086a7818a739:function(){return w(function(e,t,n,_,o,i,a,f){e.readPixels(t,n,_,o,i>>>0,a>>>0,f)},arguments)},__wbg_readPixels_eb030cd9976eeca5:function(){return w(function(e,t,n,_,o,i,a,f){e.readPixels(t,n,_,o,i>>>0,a>>>0,f)},arguments)},__wbg_renderbufferStorage_52b131bbf3112b3a:function(e,t,n,_,o){e.renderbufferStorage(t>>>0,n>>>0,_,o)},__wbg_renderbufferStorage_bca487b0dea425b8:function(e,t,n,_,o){e.renderbufferStorage(t>>>0,n>>>0,_,o)},__wbg_resolve_0076e10020304ede:function(e){return Promise.resolve(e)},__wbg_scissor_12ddc324094acd50:function(e,t,n,_,o){e.scissor(t,n,_,o)},__wbg_scissor_a9468482697c2bdb:function(e,t,n,_,o){e.scissor(t,n,_,o)},__wbg_setTimeout_db7bbc18a17e152a:function(){return w(function(e,t,n){return e.setTimeout(t,n)},arguments)},__wbg_set_145a351398b48c65:function(){return w(function(e,t,n){return Reflect.set(e,t,n)},arguments)},__wbg_set_af5932e3f78b5648:function(){return w(function(e,t,n,_,o){e.set(M(t,n),M(_,o))},arguments)},__wbg_set_alpha_6dea851a46253adf:function(e,t){e.alpha=t!==0},__wbg_set_antialias_1f699e96763e8a35:function(e,t){e.antialias=t!==0},__wbg_set_cache_7507c4cc5938ccc7:function(e,t){e.cache=Je[t]},__wbg_set_color_space_conversion_f27e9d866a683b4b:function(e,t){e.colorSpaceConversion=qe[t]},__wbg_set_depth_8b49de49803d4e60:function(e,t){e.depth=t!==0},__wbg_set_headers_40ad33dcf016613f:function(e,t){e.headers=t},__wbg_set_power_preference_6ef22d4c8baf517f:function(e,t){e.powerPreference=Ke[t]},__wbg_set_premultiply_alpha_45a4cf9a1e87bfbf:function(e,t){e.premultiplyAlpha=Xe[t]},__wbg_set_resize_height_274433c2f249624d:function(e,t){e.resizeHeight=t>>>0},__wbg_set_resize_width_6f06543b29d1ca48:function(e,t){e.resizeWidth=t>>>0},__wbg_set_signal_2dbd377604627f26:function(e,t){e.signal=t},__wbg_set_stencil_edc32d9477c7c107:function(e,t){e.stencil=t!==0},__wbg_set_type_dcf75b2afa60c694:function(e,t,n){e.type=M(t,n)},__wbg_shaderSource_06379dac249994dd:function(e,t,n,_){e.shaderSource(t,M(n,_))},__wbg_shaderSource_c8812639b47d87b9:function(e,t,n,_){e.shaderSource(t,M(n,_))},__wbg_signal_e5a49a2d9c65b7f6:function(e){return e.signal},__wbg_size_74c48d7329291685:function(e){return e.size},__wbg_static_accessor_GLOBAL_266715b9d96ba635:function(){let e=typeof global>"u"?null:global;return u(e)?0:p(e)},__wbg_static_accessor_GLOBAL_THIS_10fb7dc1ae063179:function(){let e=typeof globalThis>"u"?null:globalThis;return u(e)?0:p(e)},__wbg_static_accessor_SELF_0b583911f537483a:function(){let e=typeof self>"u"?null:self;return u(e)?0:p(e)},__wbg_static_accessor_WINDOW_d7f903d1508cbdc4:function(){let e=typeof window>"u"?null:window;return u(e)?0:p(e)},__wbg_status_ce0a98d3c57125f3:function(e){return e.status},__wbg_stencilFunc_aa3cd8856be514c4:function(e,t,n,_){e.stencilFunc(t>>>0,n,_>>>0)},__wbg_stencilFunc_bab7e0b7c443f093:function(e,t,n,_){e.stencilFunc(t>>>0,n,_>>>0)},__wbg_stencilMask_9e18cc018897c747:function(e,t){e.stencilMask(t>>>0)},__wbg_stencilMask_a22be64c66abd825:function(e,t){e.stencilMask(t>>>0)},__wbg_stencilOpSeparate_7d01185cbdb89d99:function(e,t,n,_,o){e.stencilOpSeparate(t>>>0,n>>>0,_>>>0,o>>>0)},__wbg_stencilOpSeparate_c5af5f5dbd237bea:function(e,t,n,_,o){e.stencilOpSeparate(t>>>0,n>>>0,_>>>0,o>>>0)},__wbg_stencilOp_12274af665ab8a00:function(e,t,n,_){e.stencilOp(t>>>0,n>>>0,_>>>0)},__wbg_stencilOp_2697194654fee819:function(e,t,n,_){e.stencilOp(t>>>0,n>>>0,_>>>0)},__wbg_subarray_002b94d5e13d1411:function(e,t,n){return e.subarray(t>>>0,n>>>0)},__wbg_texImage2D_1b3349107ad0faae:function(){return w(function(e,t,n,_,o,i,a){e.texImage2D(t>>>0,n,_,o>>>0,i>>>0,a)},arguments)},__wbg_texImage2D_82bf2b4c8aa9a1db:function(){return w(function(e,t,n,_,o,i,a,f,b,l){e.texImage2D(t>>>0,n,_,o,i,a,f>>>0,b>>>0,l)},arguments)},__wbg_texImage2D_8fc2f2fcca249b59:function(){return w(function(e,t,n,_,o,i,a){e.texImage2D(t>>>0,n,_,o>>>0,i>>>0,a)},arguments)},__wbg_texImage2D_a856af552acdc9d9:function(){return w(function(e,t,n,_,o,i,a,f,b,l){e.texImage2D(t>>>0,n,_,o,i,a,f>>>0,b>>>0,l)},arguments)},__wbg_texImage2D_ca3d0fe24620ec85:function(){return w(function(e,t,n,_,o,i,a,f,b,l){e.texImage2D(t>>>0,n,_,o,i,a,f>>>0,b>>>0,l)},arguments)},__wbg_texParameteri_647fdb1426809cb5:function(e,t,n,_){e.texParameteri(t>>>0,n>>>0,_)},__wbg_texParameteri_7864076abcdb03e0:function(e,t,n,_){e.texParameteri(t>>>0,n>>>0,_)},__wbg_texStorage2D_cf2bd991072d9efb:function(e,t,n,_,o,i){e.texStorage2D(t>>>0,n,_>>>0,o,i)},__wbg_texStorage3D_74b701c2b176380c:function(e,t,n,_,o,i,a){e.texStorage3D(t>>>0,n,_>>>0,o,i,a)},__wbg_texSubImage2D_31a0c2797aa04f32:function(){return w(function(e,t,n,_,o,i,a,f,b,l){e.texSubImage2D(t>>>0,n,_,o,i,a,f>>>0,b>>>0,l)},arguments)},__wbg_texSubImage2D_5e90c7a719d40256:function(){return w(function(e,t,n,_,o,i,a,f,b,l){e.texSubImage2D(t>>>0,n,_,o,i,a,f>>>0,b>>>0,l)},arguments)},__wbg_texSubImage2D_bb322aae90f7657f:function(){return w(function(e,t,n,_,o,i,a,f,b,l){e.texSubImage2D(t>>>0,n,_,o,i,a,f>>>0,b>>>0,l)},arguments)},__wbg_texSubImage3D_5143d5af7e182ddc:function(){return w(function(e,t,n,_,o,i,a,f,b,l,d,g){e.texSubImage3D(t>>>0,n,_,o,i,a,f,b,l>>>0,d>>>0,g)},arguments)},__wbg_texSubImage3D_5d773fc7a8cd4d08:function(){return w(function(e,t,n,_,o,i,a,f,b,l,d,g){e.texSubImage3D(t>>>0,n,_,o,i,a,f,b,l>>>0,d>>>0,g)},arguments)},__wbg_texSubImage3D_e0d113b7047a5130:function(){return w(function(e,t,n,_,o,i,a,f,b,l,d,g){e.texSubImage3D(t>>>0,n,_,o,i,a,f,b,l>>>0,d>>>0,g)},arguments)},__wbg_then_c949d5a25a4e78f8:function(e,t,n){return e.then(t,n)},__wbg_then_e71170d78fcf8954:function(e,t){return e.then(t)},__wbg_type_ff6f7b321fe8478b:function(e){return e.type},__wbg_uniform1f_9cfecfaeb8cf43c1:function(e,t,n){e.uniform1f(t,n)},__wbg_uniform1f_b5856e35a43b65a1:function(e,t,n){e.uniform1f(t,n)},__wbg_uniform1fv_1bf537fc926ef8b9:function(e,t,n,_){e.uniform1fv(t,T(n,_))},__wbg_uniform1fv_1cc1d09bc13b03bf:function(e,t,n,_){e.uniform1fv(t,T(n,_))},__wbg_uniform1i_531b98c4a7177366:function(e,t,n){e.uniform1i(t,n)},__wbg_uniform1i_fc2dc8cadc49d8ec:function(e,t,n){e.uniform1i(t,n)},__wbg_uniform1iv_4b8cbceccddfaa62:function(e,t,n,_){e.uniform1iv(t,U(n,_))},__wbg_uniform1iv_8fc880ae80c77c74:function(e,t,n,_){e.uniform1iv(t,U(n,_))},__wbg_uniform1ui_353c67ec681b540c:function(e,t,n){e.uniform1ui(t,n>>>0)},__wbg_uniform1uiv_ad5e946730aacbec:function(e,t,n,_){e.uniform1uiv(t,B(n,_))},__wbg_uniform2f_131da2d4bf17e4b9:function(e,t,n,_){e.uniform2f(t,n,_)},__wbg_uniform2f_a92b5bb95dc5b4d9:function(e,t,n,_){e.uniform2f(t,n,_)},__wbg_uniform2fv_319c49f0ce340f26:function(e,t,n,_){e.uniform2fv(t,T(n,_))},__wbg_uniform2fv_a7d3c1830d18c1b2:function(e,t,n,_){e.uniform2fv(t,T(n,_))},__wbg_uniform2iv_65f36fc9777697d7:function(e,t,n,_){e.uniform2iv(t,U(n,_))},__wbg_uniform2iv_ca9cb507409b9ad1:function(e,t,n,_){e.uniform2iv(t,U(n,_))},__wbg_uniform2uiv_c95af5fb653ccb86:function(e,t,n,_){e.uniform2uiv(t,B(n,_))},__wbg_uniform3f_1211579ff87ccfad:function(e,t,n,_,o){e.uniform3f(t,n,_,o)},__wbg_uniform3f_ee105161897ee48a:function(e,t,n,_,o){e.uniform3f(t,n,_,o)},__wbg_uniform3fv_055ea5ac38af4fce:function(e,t,n,_){e.uniform3fv(t,T(n,_))},__wbg_uniform3fv_58520ffe22a6e27c:function(e,t,n,_){e.uniform3fv(t,T(n,_))},__wbg_uniform3iv_0590e8b7eff2a791:function(e,t,n,_){e.uniform3iv(t,U(n,_))},__wbg_uniform3iv_e91b1410dc299f50:function(e,t,n,_){e.uniform3iv(t,U(n,_))},__wbg_uniform3uiv_9992491000463a52:function(e,t,n,_){e.uniform3uiv(t,B(n,_))},__wbg_uniform4f_22bfec882308eec2:function(e,t,n,_,o,i){e.uniform4f(t,n,_,o,i)},__wbg_uniform4f_8dd8f311e656ca0d:function(e,t,n,_,o,i){e.uniform4f(t,n,_,o,i)},__wbg_uniform4fv_3ef2f5121fcb78ae:function(e,t,n,_){e.uniform4fv(t,T(n,_))},__wbg_uniform4fv_cf8ff646c36232c8:function(e,t,n,_){e.uniform4fv(t,T(n,_))},__wbg_uniform4iv_6fc5436b4f876039:function(e,t,n,_){e.uniform4iv(t,U(n,_))},__wbg_uniform4iv_99c2b07787d362d6:function(e,t,n,_){e.uniform4iv(t,U(n,_))},__wbg_uniform4uiv_a6fb3237d9df7ed4:function(e,t,n,_){e.uniform4uiv(t,B(n,_))},__wbg_uniformMatrix3fv_472e7824735acce1:function(e,t,n,_,o){e.uniformMatrix3fv(t,n!==0,T(_,o))},__wbg_uniformMatrix3fv_83fdc9c3c0d43204:function(e,t,n,_,o){e.uniformMatrix3fv(t,n!==0,T(_,o))},__wbg_uniformMatrix4fv_dff9738d995fd0b1:function(e,t,n,_,o){e.uniformMatrix4fv(t,n!==0,T(_,o))},__wbg_uniformMatrix4fv_e691d7f14d3609f7:function(e,t,n,_,o){e.uniformMatrix4fv(t,n!==0,T(_,o))},__wbg_useProgram_5bdae58fd9f9826f:function(e,t){e.useProgram(t)},__wbg_useProgram_e075c2902e420761:function(e,t){e.useProgram(t)},__wbg_vertexAttrib1f_37ce0547e8fa5f36:function(e,t,n){e.vertexAttrib1f(t>>>0,n)},__wbg_vertexAttrib1f_470b2556c148483a:function(e,t,n){e.vertexAttrib1f(t>>>0,n)},__wbg_vertexAttribDivisorANGLE_659fb027198a47c3:function(e,t,n){e.vertexAttribDivisorANGLE(t>>>0,n>>>0)},__wbg_vertexAttribDivisor_7575d382215322f7:function(e,t,n){e.vertexAttribDivisor(t>>>0,n>>>0)},__wbg_vertexAttribIPointer_fc8057c62cfcc63c:function(e,t,n,_,o,i){e.vertexAttribIPointer(t>>>0,n,_>>>0,o,i)},__wbg_vertexAttribPointer_24b495e18df325dc:function(e,t,n,_,o,i,a){e.vertexAttribPointer(t>>>0,n,_>>>0,o!==0,i,a)},__wbg_vertexAttribPointer_54d56b18f71a946d:function(e,t,n,_,o,i,a){e.vertexAttribPointer(t>>>0,n,_>>>0,o!==0,i,a)},__wbg_viewport_16936692526e2ce6:function(e,t,n,_,o){e.viewport(t,n,_,o)},__wbg_viewport_e35d16c542d2ce70:function(e,t,n,_,o){e.viewport(t,n,_,o)},__wbg_warn_13abc63e0d4b3527:function(e){console.warn(e)},__wbg_width_8a9cc26363f10d5f:function(e){return e.width},__wbindgen_generic_0000000000000001:function(e,t){return _t(e,t,$e)},__wbindgen_generic_0000000000000002:function(e){return e},__wbindgen_generic_0000000000000003:function(e,t){return T(e,t)},__wbindgen_generic_0000000000000004:function(e,t){return Ye(e,t)},__wbindgen_generic_0000000000000005:function(e,t){return U(e,t)},__wbindgen_generic_0000000000000006:function(e,t){return Ze(e,t)},__wbindgen_generic_0000000000000007:function(e,t){return Qe(e,t)},__wbindgen_generic_0000000000000008:function(e,t){return B(e,t)},__wbindgen_generic_0000000000000009:function(e,t){return ie(e,t)},__wbindgen_generic_000000000000000a:function(e,t){return M(e,t)},__wbindgen_init_externref_table:function(){let e=c.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}}}}function $e(r,e,t){let n=c.wasm_bindgen_2e566c63402fe7fa___convert__closures_____invoke___wasm_bindgen_2e566c63402fe7fa___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_2e566c63402fe7fa___JsError___true_(r,e,t);if(n[1])throw y(n[0])}function ze(r,e,t,n){c.wasm_bindgen_2e566c63402fe7fa___convert__closures_____invoke___js_sys_b1e1c29ba6b0e6b3___Function_fn_wasm_bindgen_2e566c63402fe7fa___JsValue_____wasm_bindgen_2e566c63402fe7fa___sys__Undefined___js_sys_b1e1c29ba6b0e6b3___Function_fn_wasm_bindgen_2e566c63402fe7fa___JsValue_____wasm_bindgen_2e566c63402fe7fa___sys__Undefined_______true_(r,e,t,n)}var qe=["none","default"],Xe=["none","premultiply","default"],Je=["default","no-store","reload","no-cache","force-cache","only-if-cached"],Ke=["default","low-power","high-performance"],Te=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((r)=>c.__wbg_engine_free(r,1));function p(r){let e=c.__externref_table_alloc();return c.__wbindgen_externrefs.set(e,r),e}var Ie=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((r)=>c.__wbindgen_destroy_closure(r.a,r.b));function fe(r){let e=typeof r;if(e=="number"||e=="boolean"||r==null)return`${r}`;if(e=="string")return`"${r}"`;if(e=="symbol"){let _=r.description;if(_==null)return"Symbol";else return`Symbol(${_})`}if(e=="function"){let _=r.name;if(typeof _=="string"&&_.length>0)return`Function(${_})`;else return"Function"}if(Array.isArray(r)){let _=r.length,o="[";if(_>0)o+=fe(r[0]);for(let i=1;i<_;i++)o+=", "+fe(r[i]);return o+="]",o}let t=/\[object ([^\]]+)\]/.exec(toString.call(r)),n;if(t&&t.length>1)n=t[1];else return toString.call(r);if(n=="Object")try{return"Object("+JSON.stringify(r)+")"}catch(_){return"Object"}if(r instanceof Error)return`${r.name}: ${r.message}
3
3
  ${r.stack}`;return n}function T(r,e){return r=r>>>0,Re().subarray(r/4,r/4+e)}function ue(r,e){return r=r>>>0,Ee().subarray(r/8,r/8+e)}function Ye(r,e){return r=r>>>0,et().subarray(r/2,r/2+e)}function U(r,e){return r=r>>>0,tt().subarray(r/4,r/4+e)}function Ze(r,e){return r=r>>>0,nt().subarray(r/1,r/1+e)}function Qe(r,e){return r=r>>>0,rt().subarray(r/2,r/2+e)}function B(r,e){return r=r>>>0,Le().subarray(r/4,r/4+e)}function ie(r,e){return r=r>>>0,G().subarray(r/1,r/1+e)}var W=null;function v(){if(W===null||W.buffer.detached===!0||W.buffer.detached===void 0&&W.buffer!==c.memory.buffer)W=new DataView(c.memory.buffer);return W}var V=null;function Re(){if(V===null||V.byteLength===0)V=new Float32Array(c.memory.buffer);return V}var H=null;function Ee(){if(H===null||H.byteLength===0)H=new Float64Array(c.memory.buffer);return H}var z=null;function et(){if(z===null||z.byteLength===0)z=new Int16Array(c.memory.buffer);return z}var q=null;function tt(){if(q===null||q.byteLength===0)q=new Int32Array(c.memory.buffer);return q}var X=null;function nt(){if(X===null||X.byteLength===0)X=new Int8Array(c.memory.buffer);return X}function M(r,e){return ct(r>>>0,e)}var J=null;function rt(){if(J===null||J.byteLength===0)J=new Uint16Array(c.memory.buffer);return J}var K=null;function Le(){if(K===null||K.byteLength===0)K=new Uint32Array(c.memory.buffer);return K}var Y=null;function G(){if(Y===null||Y.byteLength===0)Y=new Uint8Array(c.memory.buffer);return Y}function w(r,e){try{return r.apply(this,e)}catch(t){let n=p(t);c.__wbindgen_exn_store(n)}}function u(r){return r===void 0||r===null}function _t(r,e,t){let n={a:r,b:e,cnt:1},_=(...o)=>{n.cnt++;let i=n.a;n.a=0;try{return t(i,n.b,...o)}finally{n.a=i,_._wbg_cb_unref()}};return _._wbg_cb_unref=()=>{if(--n.cnt===0)c.__wbindgen_destroy_closure(n.a,n.b),n.a=0,Ie.unregister(n)},Ie.register(_,n,n),_}function A(r,e){let t=e(r.length*4,4)>>>0;return Le().set(r,t/4),s=r.length,t}function R(r,e){let t=e(r.length*1,1)>>>0;return G().set(r,t/1),s=r.length,t}function x(r,e){let t=e(r.length*4,4)>>>0;return Re().set(r,t/4),s=r.length,t}function S(r,e){let t=e(r.length*8,8)>>>0;return Ee().set(r,t/8),s=r.length,t}function Pe(r,e){let t=e(r.length*4,4)>>>0;for(let n=0;n<r.length;n++){let _=p(r[n]);v().setUint32(t+4*n,_,!0)}return s=r.length,t}function F(r,e,t){if(t===void 0){let a=Z.encode(r),f=e(a.length,1)>>>0;return G().subarray(f,f+a.length).set(a),s=a.length,f}let n=r.length,_=e(n,1)>>>0,o=G(),i=0;for(;i<n;i++){let a=r.charCodeAt(i);if(a>127)break;o[_+i]=a}if(i!==n){if(i!==0)r=r.slice(i);_=t(_,n,n=i+r.length*3,1)>>>0;let a=G().subarray(_+i,_+n),f=Z.encodeInto(r,a);i+=f.written,_=t(_,n,i,1)>>>0}return s=i,_}function y(r){let e=c.__wbindgen_externrefs.get(r);return c.__externref_table_dealloc(r),e}var ne=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});ne.decode();var ot=2146435072,ae=0;function ct(r,e){if(ae+=e,ae>=ot)ne=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),ne.decode(),ae=e;return ne.decode(G().subarray(r,r+e))}var Z=new TextEncoder;if(!("encodeInto"in Z))Z.encodeInto=function(r,e){let t=Z.encode(r);return e.set(t),{read:r.length,written:t.length}};var s=0,it,at,c;function st(r,e){return at=r,c=r.exports,it=e,W=null,V=null,H=null,z=null,q=null,X=null,J=null,K=null,Y=null,c.__wbindgen_start(),c}async function ft(r,e){if(typeof Response==="function"&&r instanceof Response){if(!r.ok)throw Error(`failed to fetch Wasm: ${r.status} ${r.statusText} fetching '${r.url}'`);if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(r,e)}catch(_){if(t(r.type)&&r.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",_);else throw _}let n=await r.arrayBuffer();return await WebAssembly.instantiate(n,e)}else{let n=await WebAssembly.instantiate(r,e);if(n instanceof WebAssembly.Instance)return{instance:n,module:r};else return n}function t(n){switch(n){case"basic":case"cors":case"default":return!0}return!1}}async function ke(r){if(c!==void 0)return c;if(r!==void 0)if(Object.getPrototypeOf(r)===Object.prototype)({module_or_path:r}=r);else console.warn("using deprecated parameters for the initialization function; pass a single object instead");if(r===void 0)r=new URL("isard_bg.wasm",import.meta.url);let e=He();if(typeof r==="string"||typeof Request==="function"&&r instanceof Request||typeof URL==="function"&&r instanceof URL)r=fetch(r);let{instance:t,module:n}=await ft(await r,e);return st(t,n)}function Ce(r,e,t,n,_){let o=Ue(r,I.__wbindgen_malloc),i=j,a=Ue(e,I.__wbindgen_malloc),f=j,b=Be(t,I.__wbindgen_malloc),l=j,d=Be(n,I.__wbindgen_malloc),g=j,m=I.decodeCopc(o,i,a,f,b,l,d,g,_);if(m[3])throw gt(m[2]);var P=bt(m[0],m[1]).slice();return I.__wbindgen_free(m[0],m[1]*1,1),P}function ut(){return{__proto__:null,"./isard_points_bg.js":{__proto__:null,__wbindgen_generic_0000000000000001:function(e,t){return dt(e,t)},__wbindgen_init_externref_table:function(){let e=I.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}}}}function bt(r,e){return r=r>>>0,le().subarray(r/1,r/1+e)}var Q=null;function lt(){if(Q===null||Q.byteLength===0)Q=new Float64Array(I.memory.buffer);return Q}function dt(r,e){return mt(r>>>0,e)}var ee=null;function le(){if(ee===null||ee.byteLength===0)ee=new Uint8Array(I.memory.buffer);return ee}function Ue(r,e){let t=e(r.length*1,1)>>>0;return le().set(r,t/1),j=r.length,t}function Be(r,e){let t=e(r.length*8,8)>>>0;return lt().set(r,t/8),j=r.length,t}function gt(r){let e=I.__wbindgen_externrefs.get(r);return I.__externref_table_dealloc(r),e}var re=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});re.decode();var wt=2146435072,be=0;function mt(r,e){if(be+=e,be>=wt)re=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),re.decode(),be=e;return re.decode(le().subarray(r,r+e))}var j=0,pt,yt,I;function ht(r,e){return yt=r,I=r.exports,pt=e,Q=null,ee=null,I.__wbindgen_start(),I}async function At(r,e){if(typeof Response==="function"&&r instanceof Response){if(!r.ok)throw Error(`failed to fetch Wasm: ${r.status} ${r.statusText} fetching '${r.url}'`);if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(r,e)}catch(_){if(t(r.type)&&r.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",_);else throw _}let n=await r.arrayBuffer();return await WebAssembly.instantiate(n,e)}else{let n=await WebAssembly.instantiate(r,e);if(n instanceof WebAssembly.Instance)return{instance:n,module:r};else return n}function t(n){switch(n){case"basic":case"cors":case"default":return!0}return!1}}async function We(r){if(I!==void 0)return I;if(r!==void 0)if(Object.getPrototypeOf(r)===Object.prototype)({module_or_path:r}=r);else console.warn("using deprecated parameters for the initialization function; pass a single object instead");if(r===void 0)r=new URL("isard_points_bg.wasm",import.meta.url);let e=ut();if(typeof r==="string"||typeof Request==="function"&&r instanceof Request||typeof URL==="function"&&r instanceof URL)r=fetch(r);let{instance:t,module:n}=await At(await r,e);return ht(t,n)}var Oe,ge=Ae,Ge={astc:!1,bptc:!1,etc:!1,s3tc:!1},je="",de,te=new Map,_e=(r,e=[])=>postMessage(r,e);addEventListener("message",(r)=>{let e=r.data;switch(e.type){case"headers":Fe(e.rules);break;case"init":Oe=ke({module_or_path:e.module}),ge=e.decoders,Ge=e.formats,je=e.points;break;case"points":It(e);break;case"abort":te.get(e.id)?.abort();break;case"load":xt(e.id,e.url,e.transform,e.yUp,e.reload,e.priority);break}});async function xt(r,e,t,n,_,o){let i=new AbortController;te.set(r,i);try{await Oe;let a={signal:i.signal,cache:_?"reload":"default",...o?{priority:o}:{}},f=await fetch(e,ce(e,a));if(!f.ok)throw Error(`HTTP ${f.status}`);let b=new Uint8Array(await f.arrayBuffer()),l=Me(b),d=l.length>0?await xe(ge,l):void 0,g=De(b,t,n,d),m=new Map,P=(h,O)=>{let C=m.get(h);if(!C)C=O==="image/ktx2"?ve(ge,Ge,h).then((N)=>({bitmap:null,texture:N})):createImageBitmap(new Blob([h],{type:O??""}),{premultiplyAlpha:"none"}).then((N)=>({bitmap:N})),m.set(h,C);return C},E=g.points??[],L=await Promise.all(g.primitives.map(async({vertices:h,indices:O,image:C,mime:N,color:we,features:me})=>({vertices:h,indices:O,...we?{color:we}:{},...me?{features:me}:{},...C?await P(C,N):{bitmap:null}}))),D=new Set;for(let h of L){if(D.add(h.vertices.buffer),D.add(h.indices.buffer),h.color)D.add(h.color.buffer);if(h.features)D.add(h.features.buffer);if(h.bitmap)D.add(h.bitmap);for(let O of h.texture?.levels??[])D.add(O.data.buffer)}for(let h of E)D.add(h.buffer);let k={anchor:g.anchor,primitives:L,...E.length>0?{points:E}:{},...g.properties?{properties:g.properties}:{}};_e({type:"tile",id:r,tile:k},[...D])}catch(a){_e({type:"error",id:r,error:String(a),aborted:i.signal.aborted})}finally{te.delete(r)}}var vt=4,St=1000,Ft=(r,e)=>new Promise((t,n)=>{let _=setTimeout(t,r);e.addEventListener("abort",()=>{clearTimeout(_),n(new DOMException("aborted","AbortError"))})});async function Tt(r,e,t,n,_){for(let o=1;;o+=1){let i={signal:n,headers:{Range:`bytes=${e}-${e+Math.max(t,1)-1}`},..._?{priority:_}:{}},a=await fetch(r,ce(r,i));if(a.status===429&&o<vt){let f=Number(a.headers.get("Retry-After"));await Ft(f>0?f*1000:St*2**(o-1),n);continue}if(!a.ok)throw Error(`HTTP ${a.status}`);if(a.status!==206){if(!(Number(a.headers.get("Content-Length"))<=t))throw await a.body?.cancel(),Error("the server ignores range requests (HTTP 206 expected)");return new Uint8Array(await a.arrayBuffer()).subarray(e,e+t)}return new Uint8Array(await a.arrayBuffer())}}async function It(r){let{id:e,url:t,offset:n,size:_,laz:o,layout:i,grid:a,count:f,priority:b}=r,l=new AbortController;te.set(e,l);try{de??=We({module_or_path:je}).catch((m)=>{throw de=void 0,m});let[d]=await Promise.all([Tt(t,n,_,l.signal,b),de]),g=Ce(d,o,i,a,f);_e({type:"points",id:e,vertices:g},[g.buffer])}catch(d){_e({type:"error",id:e,error:String(d),aborted:l.signal.aborted})}finally{te.delete(e)}}
4
4
 
5
- //# debugId=CC6E4522F7653C8F64756E2164756E21
5
+ //# debugId=82A2F1E69A99417664756E2164756E21
6
6
  //# sourceMappingURL=decoder.worker.js.map