@nika-js/onlymap 0.6.26 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +2 -2
  3. package/dist/{LercDecode.es-B4KknLMs.js → LercDecode.es-gFG_4xNk.js} +1 -1
  4. package/dist/{basemap-C4bmWq6M.js → basemap-oVln_CKU.js} +1 -1
  5. package/dist/elements/om-map.d.ts +9 -1
  6. package/dist/{geoparquet-BPMda753.js → geoparquet-CufpN8G1.js} +1 -1
  7. package/dist/{index-DtU_XhTX.js → index--zvhxlLl.js} +2 -2
  8. package/dist/{index-B5hsHnPl.js → index-CLe7spTj.js} +1 -1
  9. package/dist/{index-COuIQk2Z.js → index-CnwhAoQ5.js} +11283 -11046
  10. package/dist/{index-DMT_7aV3.js → index-DEIMxmvY.js} +1 -1
  11. package/dist/{index-DK5w4OxN.js → index-EXrBWGX7.js} +1 -1
  12. package/dist/index.d.ts +1 -1
  13. package/dist/layer-registry.d.ts +10 -0
  14. package/dist/{lerc-BNW5A6zN.js → lerc-nHFgnN0N.js} +2 -2
  15. package/dist/onlymap.standalone.js +29352 -28617
  16. package/dist/onlymapjs.js +91 -89
  17. package/dist/{raster-eMqzBMQf.js → raster-CE4jsgUi.js} +1086 -799
  18. package/dist/raster-identify.d.ts +19 -0
  19. package/dist/{raster-pipeline-Dg-GSDP3.js → raster-pipeline-ghFqryqb.js} +665 -453
  20. package/dist/raster-pipeline.d.ts +109 -14
  21. package/dist/raster.d.ts +135 -1
  22. package/dist/react.js +253 -234
  23. package/dist/runtime-core.d.ts +23 -0
  24. package/dist/version.d.ts +1 -1
  25. package/dist/widget-layout.d.ts +18 -0
  26. package/dist/{zarr-Dv7OiUcg.js → zarr-DjEYckHG.js} +10 -3
  27. package/docs/design/cog-v2.md +223 -0
  28. package/llms.txt +2 -2
  29. package/onlymapjs.attributes.json +9 -0
  30. package/onlymapjs.html-data.json +24 -0
  31. package/package.json +1 -1
  32. package/skills/onlymapjs/SKILL.md +1 -1
  33. package/skills/onlymapjs/references/syntax.md +12 -7
@@ -1,20 +1,20 @@
1
- import { w as ae } from "./mgrs-BY9bIvp4.js";
2
- import { am as ce, an as le, ao as ee, ap as te, aq as ue, b as he, ar as de, l as Z, as as fe, d as pe, at as me, au as ge, av as ve, aw as ne } from "./index-COuIQk2Z.js";
3
- function Pe(o, e, t) {
4
- const { projectedCorners: n } = e, { topLeft: s, topRight: r, bottomRight: a, bottomLeft: i } = n, c = t(s[0], s[1]), u = t(r[0], r[1]), l = t(a[0], a[1]), d = t(i[0], i[1]), f = [
1
+ import { w as de } from "./mgrs-BY9bIvp4.js";
2
+ import { am as he, an as fe, ao as se, ap as oe, aq as me, b as pe, ar as ge, l as Z, as as ve, d as be, at as xe, au as Pe, av as ye, aw as ie } from "./index-CnwhAoQ5.js";
3
+ function Te(r, e, t) {
4
+ const { projectedCorners: n } = e, { topLeft: s, topRight: o, bottomRight: i, bottomLeft: a } = n, c = t(s[0], s[1]), u = t(o[0], o[1]), l = t(i[0], i[1]), h = t(a[0], a[1]), f = [
5
5
  c,
6
6
  u,
7
7
  l,
8
- d,
8
+ h,
9
9
  c
10
- ], h = [
10
+ ], d = [
11
11
  (c[0] + l[0]) / 2,
12
12
  (c[1] + l[1]) / 2
13
- ], p = new ce({
14
- id: `${o}-label`,
13
+ ], m = new he({
14
+ id: `${r}-label`,
15
15
  data: [
16
16
  {
17
- position: h,
17
+ position: d,
18
18
  text: `x=${e.index.x} y=${e.index.y} z=${e.index.z}`
19
19
  }
20
20
  ],
@@ -25,8 +25,8 @@ function Pe(o, e, t) {
25
25
  outlineColor: [0, 0, 0, 255],
26
26
  fontSettings: { sdf: !0 }
27
27
  });
28
- return [new le({
29
- id: o,
28
+ return [new fe({
29
+ id: r,
30
30
  data: [f],
31
31
  getPath: (g) => g,
32
32
  getColor: [255, 0, 0, 255],
@@ -34,9 +34,9 @@ function Pe(o, e, t) {
34
34
  getWidth: 2,
35
35
  widthUnits: "pixels",
36
36
  pickable: !1
37
- }), p];
37
+ }), m];
38
38
  }
39
- const xe = [
39
+ const Le = [
40
40
  [1 / 3, 1 / 3, 1 / 3],
41
41
  // centroid
42
42
  [0.5, 0.5, 0],
@@ -45,8 +45,8 @@ const xe = [
45
45
  // edge 0–2
46
46
  [0, 0.5, 0.5]
47
47
  // edge 1–2
48
- ], be = 0.125;
49
- class Te {
48
+ ], we = 0.125;
49
+ class Oe {
50
50
  reprojectors;
51
51
  /** Width of the image in pixels */
52
52
  width;
@@ -83,8 +83,8 @@ class Te {
83
83
  _pendingLen;
84
84
  constructor(e, t, n = t) {
85
85
  this.reprojectors = e, this.width = t, this.height = n, this.uvs = [], this.exactOutputPositions = [], this.triangles = [], this._halfedges = [], this._candidatesUV = [], this._queueIndices = [], this._queue = [], this._errors = [], this._pending = [], this._pendingLen = 0;
86
- const s = 1, r = 1, a = this._addPoint(0, 0), i = this._addPoint(s, 0), c = this._addPoint(0, r), u = this._addPoint(s, r), l = this._addTriangle(u, a, c, -1, -1, -1);
87
- this._addTriangle(a, u, i, l, -1, -1), this._flush();
86
+ const s = 1, o = 1, i = this._addPoint(0, 0), a = this._addPoint(s, 0), c = this._addPoint(0, o), u = this._addPoint(s, o), l = this._addTriangle(u, i, c, -1, -1, -1);
87
+ this._addTriangle(i, u, a, l, -1, -1), this._flush();
88
88
  }
89
89
  /**
90
90
  * Refine the mesh until its maximum error gets below the given one
@@ -94,7 +94,7 @@ class Te {
94
94
  *
95
95
  * @return {[type]} [return description]
96
96
  */
97
- run(e = be, { maxIterations: t = 1e4 } = {}) {
97
+ run(e = we, { maxIterations: t = 1e4 } = {}) {
98
98
  if (e <= 0)
99
99
  throw new Error("maxError must be positive");
100
100
  let n = 0;
@@ -128,64 +128,64 @@ class Te {
128
128
  * @return Doesn't return; instead modifies internal state.
129
129
  */
130
130
  _findReprojectionCandidate(e) {
131
- const t = 2 * this.triangles[e * 3 + 0], n = 2 * this.triangles[e * 3 + 1], s = 2 * this.triangles[e * 3 + 2], r = this.uvs[t], a = this.uvs[t + 1], i = this.uvs[n], c = this.uvs[n + 1], u = this.uvs[s], l = this.uvs[s + 1], d = this.exactOutputPositions[t], f = this.exactOutputPositions[t + 1], h = this.exactOutputPositions[n], p = this.exactOutputPositions[n + 1], m = this.exactOutputPositions[s], g = this.exactOutputPositions[s + 1];
132
- let b = 0, P = 0, x = 0;
133
- for (const v of xe) {
134
- const T = A(r, i, u, v[0], v[1], v[2]), L = A(a, c, l, v[0], v[1], v[2]), j = A(d, h, m, v[0], v[1], v[2]), w = A(f, p, g, v[0], v[1], v[2]), O = T * (this.width - 1), z = L * (this.height - 1), H = this.reprojectors.inverseReproject(j, w), F = this.reprojectors.inverseTransform(H[0], H[1]), oe = O - F[0], ie = z - F[1], W = Math.hypot(oe, ie);
135
- W > b && (b = W, P = T, x = L);
131
+ const t = 2 * this.triangles[e * 3 + 0], n = 2 * this.triangles[e * 3 + 1], s = 2 * this.triangles[e * 3 + 2], o = this.uvs[t], i = this.uvs[t + 1], a = this.uvs[n], c = this.uvs[n + 1], u = this.uvs[s], l = this.uvs[s + 1], h = this.exactOutputPositions[t], f = this.exactOutputPositions[t + 1], d = this.exactOutputPositions[n], m = this.exactOutputPositions[n + 1], p = this.exactOutputPositions[s], g = this.exactOutputPositions[s + 1];
132
+ let P = 0, b = 0, x = 0;
133
+ for (const v of Le) {
134
+ const y = R(o, a, u, v[0], v[1], v[2]), w = R(i, c, l, v[0], v[1], v[2]), M = R(h, d, p, v[0], v[1], v[2]), j = R(f, m, g, v[0], v[1], v[2]), O = y * (this.width - 1), B = w * (this.height - 1), H = this.reprojectors.inverseReproject(M, j), W = this.reprojectors.inverseTransform(H[0], H[1]), le = O - W[0], ue = B - W[1], U = Math.hypot(le, ue);
135
+ U > P && (P = U, b = y, x = w);
136
136
  }
137
- (P === r && x === a || P === i && x === c || P === u && x === l) && (b = 0), this._candidatesUV[2 * e] = P, this._candidatesUV[2 * e + 1] = x, this._queuePush(e, b);
137
+ (b === o && x === i || b === a && x === c || b === u && x === l) && (P = 0), this._candidatesUV[2 * e] = b, this._candidatesUV[2 * e + 1] = x, this._queuePush(e, P);
138
138
  }
139
139
  // process the next triangle in the queue, splitting it with a new point
140
140
  _step() {
141
- const e = this._queuePop(), t = e * 3 + 0, n = e * 3 + 1, s = e * 3 + 2, r = this.triangles[t], a = this.triangles[n], i = this.triangles[s], c = this.uvs[2 * r], u = this.uvs[2 * r + 1], l = this.uvs[2 * a], d = this.uvs[2 * a + 1], f = this.uvs[2 * i], h = this.uvs[2 * i + 1], p = this._candidatesUV[2 * e], m = this._candidatesUV[2 * e + 1], g = this._addPoint(p, m);
142
- if (D(c, u, l, d, p, m) === 0)
141
+ const e = this._queuePop(), t = e * 3 + 0, n = e * 3 + 1, s = e * 3 + 2, o = this.triangles[t], i = this.triangles[n], a = this.triangles[s], c = this.uvs[2 * o], u = this.uvs[2 * o + 1], l = this.uvs[2 * i], h = this.uvs[2 * i + 1], f = this.uvs[2 * a], d = this.uvs[2 * a + 1], m = this._candidatesUV[2 * e], p = this._candidatesUV[2 * e + 1], g = this._addPoint(m, p);
142
+ if (D(c, u, l, h, m, p) === 0)
143
143
  this._handleCollinear(g, t);
144
- else if (D(l, d, f, h, p, m) === 0)
144
+ else if (D(l, h, f, d, m, p) === 0)
145
145
  this._handleCollinear(g, n);
146
- else if (D(f, h, c, u, p, m) === 0)
146
+ else if (D(f, d, c, u, m, p) === 0)
147
147
  this._handleCollinear(g, s);
148
148
  else {
149
- const b = this._halfedges[t], P = this._halfedges[n], x = this._halfedges[s], v = this._addTriangle(r, a, g, b, -1, -1, t), T = this._addTriangle(a, i, g, P, -1, v + 1), L = this._addTriangle(i, r, g, x, v + 2, T + 1);
150
- this._legalize(v), this._legalize(T), this._legalize(L);
149
+ const P = this._halfedges[t], b = this._halfedges[n], x = this._halfedges[s], v = this._addTriangle(o, i, g, P, -1, -1, t), y = this._addTriangle(i, a, g, b, -1, v + 1), w = this._addTriangle(a, o, g, x, v + 2, y + 1);
150
+ this._legalize(v), this._legalize(y), this._legalize(w);
151
151
  }
152
152
  }
153
153
  // add coordinates for a new vertex
154
154
  _addPoint(e, t) {
155
155
  const n = this.uvs.length >> 1;
156
156
  this.uvs.push(e, t);
157
- const s = e * (this.width - 1), r = t * (this.height - 1), a = this.reprojectors.forwardTransform(s, r), i = this.reprojectors.forwardReproject(a[0], a[1]);
158
- return this.exactOutputPositions.push(i[0], i[1]), n;
157
+ const s = e * (this.width - 1), o = t * (this.height - 1), i = this.reprojectors.forwardTransform(s, o), a = this.reprojectors.forwardReproject(i[0], i[1]);
158
+ return this.exactOutputPositions.push(a[0], a[1]), n;
159
159
  }
160
160
  // add or update a triangle in the mesh
161
- _addTriangle(e, t, n, s, r, a, i = this.triangles.length) {
162
- const c = i / 3;
163
- return this.triangles[i + 0] = e, this.triangles[i + 1] = t, this.triangles[i + 2] = n, this._halfedges[i + 0] = s, this._halfedges[i + 1] = r, this._halfedges[i + 2] = a, s >= 0 && (this._halfedges[s] = i + 0), r >= 0 && (this._halfedges[r] = i + 1), a >= 0 && (this._halfedges[a] = i + 2), this._candidatesUV[2 * c + 0] = 0, this._candidatesUV[2 * c + 1] = 0, this._queueIndices[c] = -1, this._pending[this._pendingLen++] = c, i;
161
+ _addTriangle(e, t, n, s, o, i, a = this.triangles.length) {
162
+ const c = a / 3;
163
+ return this.triangles[a + 0] = e, this.triangles[a + 1] = t, this.triangles[a + 2] = n, this._halfedges[a + 0] = s, this._halfedges[a + 1] = o, this._halfedges[a + 2] = i, s >= 0 && (this._halfedges[s] = a + 0), o >= 0 && (this._halfedges[o] = a + 1), i >= 0 && (this._halfedges[i] = a + 2), this._candidatesUV[2 * c + 0] = 0, this._candidatesUV[2 * c + 1] = 0, this._queueIndices[c] = -1, this._pending[this._pendingLen++] = c, a;
164
164
  }
165
165
  _legalize(e) {
166
166
  const t = this._halfedges[e];
167
167
  if (t < 0)
168
168
  return;
169
- const n = e - e % 3, s = t - t % 3, r = n + (e + 1) % 3, a = n + (e + 2) % 3, i = s + (t + 2) % 3, c = s + (t + 1) % 3, u = this.triangles[a], l = this.triangles[e], d = this.triangles[r], f = this.triangles[i], h = this.uvs;
170
- if (!ye(h[2 * u], h[2 * u + 1], h[2 * l], h[2 * l + 1], h[2 * d], h[2 * d + 1], h[2 * f], h[2 * f + 1]))
169
+ const n = e - e % 3, s = t - t % 3, o = n + (e + 1) % 3, i = n + (e + 2) % 3, a = s + (t + 2) % 3, c = s + (t + 1) % 3, u = this.triangles[i], l = this.triangles[e], h = this.triangles[o], f = this.triangles[a], d = this.uvs;
170
+ if (!Me(d[2 * u], d[2 * u + 1], d[2 * l], d[2 * l + 1], d[2 * h], d[2 * h + 1], d[2 * f], d[2 * f + 1]))
171
171
  return;
172
- const p = this._halfedges[r], m = this._halfedges[a], g = this._halfedges[i], b = this._halfedges[c];
172
+ const m = this._halfedges[o], p = this._halfedges[i], g = this._halfedges[a], P = this._halfedges[c];
173
173
  this._queueRemove(n / 3), this._queueRemove(s / 3);
174
- const P = this._addTriangle(u, f, d, -1, g, p, n), x = this._addTriangle(f, u, l, P, m, b, s);
175
- this._legalize(P + 1), this._legalize(x + 2);
174
+ const b = this._addTriangle(u, f, h, -1, g, m, n), x = this._addTriangle(f, u, l, b, p, P, s);
175
+ this._legalize(b + 1), this._legalize(x + 2);
176
176
  }
177
177
  // handle a case where new vertex is on the edge of a triangle
178
178
  _handleCollinear(e, t) {
179
- const n = t - t % 3, s = n + (t + 1) % 3, r = n + (t + 2) % 3, a = this.triangles[r], i = this.triangles[t], c = this.triangles[s], u = this._halfedges[s], l = this._halfedges[r], d = this._halfedges[t];
180
- if (d < 0) {
181
- const L = this._addTriangle(e, a, i, -1, l, -1, n), j = this._addTriangle(a, e, c, L, -1, u);
182
- this._legalize(L + 1), this._legalize(j + 2);
179
+ const n = t - t % 3, s = n + (t + 1) % 3, o = n + (t + 2) % 3, i = this.triangles[o], a = this.triangles[t], c = this.triangles[s], u = this._halfedges[s], l = this._halfedges[o], h = this._halfedges[t];
180
+ if (h < 0) {
181
+ const w = this._addTriangle(e, i, a, -1, l, -1, n), M = this._addTriangle(i, e, c, w, -1, u);
182
+ this._legalize(w + 1), this._legalize(M + 2);
183
183
  return;
184
184
  }
185
- const f = d - d % 3, h = f + (d + 2) % 3, p = f + (d + 1) % 3, m = this.triangles[h], g = this._halfedges[h], b = this._halfedges[p];
185
+ const f = h - h % 3, d = f + (h + 2) % 3, m = f + (h + 1) % 3, p = this.triangles[d], g = this._halfedges[d], P = this._halfedges[m];
186
186
  this._queueRemove(f / 3);
187
- const P = this._addTriangle(a, i, e, l, -1, -1, n), x = this._addTriangle(i, m, e, b, -1, P + 1, f), v = this._addTriangle(m, c, e, g, -1, x + 1), T = this._addTriangle(c, a, e, u, P + 2, v + 1);
188
- this._legalize(P), this._legalize(x), this._legalize(v), this._legalize(T);
187
+ const b = this._addTriangle(i, a, e, l, -1, -1, n), x = this._addTriangle(a, p, e, P, -1, b + 1, f), v = this._addTriangle(p, c, e, g, -1, x + 1), y = this._addTriangle(c, i, e, u, b + 2, v + 1);
188
+ this._legalize(b), this._legalize(x), this._legalize(v), this._legalize(y);
189
189
  }
190
190
  // priority queue methods
191
191
  _queuePush(e, t) {
@@ -219,8 +219,8 @@ class Te {
219
219
  _queueSwap(e, t) {
220
220
  const n = this._queue[e], s = this._queue[t];
221
221
  this._queue[e] = s, this._queue[t] = n, this._queueIndices[n] = t, this._queueIndices[s] = e;
222
- const r = this._errors[e];
223
- this._errors[e] = this._errors[t], this._errors[t] = r;
222
+ const o = this._errors[e];
223
+ this._errors[e] = this._errors[t], this._errors[t] = o;
224
224
  }
225
225
  _queueUp(e) {
226
226
  let t = e;
@@ -237,26 +237,26 @@ class Te {
237
237
  const s = 2 * n + 1;
238
238
  if (s >= t || s < 0)
239
239
  break;
240
- const r = s + 1;
241
- let a = s;
242
- if (r < t && this._queueLess(r, s) && (a = r), !this._queueLess(a, n))
240
+ const o = s + 1;
241
+ let i = s;
242
+ if (o < t && this._queueLess(o, s) && (i = o), !this._queueLess(i, n))
243
243
  break;
244
- this._queueSwap(n, a), n = a;
244
+ this._queueSwap(n, i), n = i;
245
245
  }
246
246
  return n > e;
247
247
  }
248
248
  }
249
- function D(o, e, t, n, s, r) {
250
- return (t - s) * (e - r) - (n - r) * (o - s);
249
+ function D(r, e, t, n, s, o) {
250
+ return (t - s) * (e - o) - (n - o) * (r - s);
251
251
  }
252
- function ye(o, e, t, n, s, r, a, i) {
253
- const c = o - a, u = e - i, l = t - a, d = n - i, f = s - a, h = r - i, p = c * c + u * u, m = l * l + d * d, g = f * f + h * h;
254
- return c * (d * g - m * h) - u * (l * g - m * f) + p * (l * h - d * f) < 0;
252
+ function Me(r, e, t, n, s, o, i, a) {
253
+ const c = r - i, u = e - a, l = t - i, h = n - a, f = s - i, d = o - a, m = c * c + u * u, p = l * l + h * h, g = f * f + d * d;
254
+ return c * (h * g - p * d) - u * (l * g - p * f) + m * (l * d - h * f) < 0;
255
255
  }
256
- function A(o, e, t, n, s, r) {
257
- return n * o + s * e + r * t;
256
+ function R(r, e, t, n, s, o) {
257
+ return n * r + s * e + o * t;
258
258
  }
259
- const se = {
259
+ const ae = {
260
260
  name: "create-texture-unorm",
261
261
  inject: {
262
262
  "fs:#decl": "uniform sampler2D textureName;",
@@ -267,10 +267,10 @@ const se = {
267
267
  `
268
268
  )
269
269
  },
270
- getUniforms: (o) => ({
271
- textureName: o.textureName
270
+ getUniforms: (r) => ({
271
+ textureName: r.textureName
272
272
  })
273
- }, Le = (
273
+ }, je = (
274
274
  /* glsl */
275
275
  `#version 300 es
276
276
  #define SHADER_NAME simple-mesh-layer-fs
@@ -304,8 +304,8 @@ void main(void) {
304
304
  fragColor = vec4(lightColor, color.a * layer.opacity);
305
305
  }
306
306
  `
307
- ), Oe = {
308
- ...ee.defaultProps,
307
+ ), Ae = {
308
+ ...se.defaultProps,
309
309
  // Note: putting `image` in defaultProps causes Maplibre to fail to render
310
310
  // labels in interleaved mode 🤷‍♂️
311
311
  // image: { type: "image", value: null, async: true },
@@ -318,12 +318,12 @@ void main(void) {
318
318
  specularColor: [0, 0, 0]
319
319
  }
320
320
  };
321
- class je extends ee {
321
+ class Ce extends se {
322
322
  static layerName = "mesh-texture-layer";
323
- static defaultProps = Oe;
323
+ static defaultProps = Ae;
324
324
  _resolveRenderPipeline() {
325
325
  const { image: e, renderPipeline: t } = this.props;
326
- return [...e ? [{ module: se, props: { textureName: e } }] : [], ...t ?? []];
326
+ return [...e ? [{ module: ae, props: { textureName: e } }] : [], ...t ?? []];
327
327
  }
328
328
  updateState(e) {
329
329
  this.hasRenderPipelineChanged(e) && (e.changeFlags.extensionsChanged = !0), super.updateState(e);
@@ -333,11 +333,11 @@ class je extends ee {
333
333
  const { oldProps: t, props: n } = e;
334
334
  if (!!t.image != !!n.image)
335
335
  return !0;
336
- const s = t.renderPipeline ?? [], r = n.renderPipeline ?? [];
337
- if (s.length !== r.length)
336
+ const s = t.renderPipeline ?? [], o = n.renderPipeline ?? [];
337
+ if (s.length !== o.length)
338
338
  return !0;
339
- for (let a = 0; a < s.length; a++)
340
- if (s[a]?.module.name !== r[a]?.module.name)
339
+ for (let i = 0; i < s.length; i++)
340
+ if (s[i]?.module.name !== o[i]?.module.name)
341
341
  return !0;
342
342
  return !1;
343
343
  }
@@ -349,7 +349,7 @@ class je extends ee {
349
349
  ...e,
350
350
  // Override upstream's fragment shader with our copy with modified
351
351
  // injection points
352
- fs: Le,
352
+ fs: je,
353
353
  modules: t
354
354
  };
355
355
  }
@@ -362,7 +362,7 @@ class je extends ee {
362
362
  super.draw(e);
363
363
  }
364
364
  }
365
- const we = 0.125, U = [
365
+ const Re = 0.125, k = [
366
366
  [252, 73, 163],
367
367
  // pink
368
368
  [255, 51, 204],
@@ -407,7 +407,7 @@ const we = 0.125, U = [
407
407
  // turquoise
408
408
  [0, 204, 255]
409
409
  // cyan
410
- ], Me = {
410
+ ], ze = {
411
411
  // A prop with `type: "image"` gets converted to a texture automatically by
412
412
  // deck.gl (as long as async: true)
413
413
  image: { type: "image", value: null, async: !0 },
@@ -415,27 +415,27 @@ const we = 0.125, U = [
415
415
  debug: !1,
416
416
  debugOpacity: 0.5
417
417
  };
418
- class Ce extends te {
418
+ class Be extends oe {
419
419
  static layerName = "RasterLayer";
420
- static defaultProps = Me;
420
+ static defaultProps = ze;
421
421
  initializeState() {
422
422
  this.setState({});
423
423
  }
424
424
  updateState(e) {
425
425
  super.updateState(e);
426
- const { props: t, oldProps: n, changeFlags: s } = e, r = t.reprojectionFns.forwardTransform !== n.reprojectionFns?.forwardTransform || t.reprojectionFns.inverseTransform !== n.reprojectionFns?.inverseTransform || t.reprojectionFns.forwardReproject !== n.reprojectionFns?.forwardReproject || t.reprojectionFns.inverseReproject !== n.reprojectionFns?.inverseReproject;
427
- (!!s.dataChanged || t.width !== n.width || t.height !== n.height || r || t.maxError !== n.maxError) && this._generateMesh();
426
+ const { props: t, oldProps: n, changeFlags: s } = e, o = t.reprojectionFns.forwardTransform !== n.reprojectionFns?.forwardTransform || t.reprojectionFns.inverseTransform !== n.reprojectionFns?.inverseTransform || t.reprojectionFns.forwardReproject !== n.reprojectionFns?.forwardReproject || t.reprojectionFns.inverseReproject !== n.reprojectionFns?.inverseReproject;
427
+ (!!s.dataChanged || t.width !== n.width || t.height !== n.height || o || t.maxError !== n.maxError) && this._generateMesh();
428
428
  }
429
429
  _generateMesh() {
430
- const { width: e, height: t, reprojectionFns: n, maxError: s = we } = this.props, r = new Te(n, e + 1, t + 1);
431
- r.run(s);
432
- const { indices: a, positions: i, texCoords: c } = Ae(r);
430
+ const { width: e, height: t, reprojectionFns: n, maxError: s = Re } = this.props, o = new Oe(n, e + 1, t + 1);
431
+ o.run(s);
432
+ const { indices: i, positions: a, texCoords: c } = De(o);
433
433
  this.setState({
434
- reprojector: r,
434
+ reprojector: o,
435
435
  mesh: {
436
- indices: { value: a, size: 1 },
436
+ indices: { value: i, size: 1 },
437
437
  attributes: {
438
- POSITION: { value: i, size: 3 },
438
+ POSITION: { value: a, size: 3 },
439
439
  TEXCOORD_0: { value: c, size: 2 }
440
440
  }
441
441
  }
@@ -443,23 +443,23 @@ class Ce extends te {
443
443
  }
444
444
  renderDebugLayer() {
445
445
  const { reprojector: e } = this.state, { debugOpacity: t } = this.props;
446
- return e ? new ue(this.getSubLayerProps({
446
+ return e ? new me(this.getSubLayerProps({
447
447
  id: "polygon",
448
448
  // https://deck.gl/docs/developer-guide/performance#supply-binary-blobs-to-the-data-prop
449
449
  // This `data` gets passed into `getPolygon` with the row index.
450
450
  data: { reprojector: e, length: e.triangles.length / 3 },
451
- getPolygon: (n, { index: s, data: r }) => {
452
- const a = r.reprojector.triangles, i = e.exactOutputPositions, c = a[s * 3], u = a[s * 3 + 1], l = a[s * 3 + 2];
451
+ getPolygon: (n, { index: s, data: o }) => {
452
+ const i = o.reprojector.triangles, a = e.exactOutputPositions, c = i[s * 3], u = i[s * 3 + 1], l = i[s * 3 + 2];
453
453
  return [
454
- [i[c * 2], i[c * 2 + 1]],
455
- [i[u * 2], i[u * 2 + 1]],
456
- [i[l * 2], i[l * 2 + 1]],
457
- [i[c * 2], i[c * 2 + 1]]
454
+ [a[c * 2], a[c * 2 + 1]],
455
+ [a[u * 2], a[u * 2 + 1]],
456
+ [a[l * 2], a[l * 2 + 1]],
457
+ [a[c * 2], a[c * 2 + 1]]
458
458
  ];
459
459
  },
460
- getFillColor: (n, { index: s, target: r }) => {
461
- const a = U[s % U.length];
462
- return r[0] = a[0], r[1] = a[1], r[2] = a[2], r[3] = 255, r;
460
+ getFillColor: (n, { index: s, target: o }) => {
461
+ const i = k[s % k.length];
462
+ return o[0] = i[0], o[1] = i[1], o[2] = i[2], o[3] = 255, o;
463
463
  },
464
464
  getLineColor: [0, 0, 0],
465
465
  getLineWidth: 1,
@@ -472,7 +472,7 @@ class Ce extends te {
472
472
  const { mesh: e } = this.state, { debug: t, image: n, renderPipeline: s } = this.props;
473
473
  if (!e || !n && (s?.length ?? 0) === 0)
474
474
  return null;
475
- const a = [new je(this.getSubLayerProps({
475
+ const i = [new Ce(this.getSubLayerProps({
476
476
  id: "raster",
477
477
  image: n,
478
478
  renderPipeline: s,
@@ -490,23 +490,23 @@ class Ce extends te {
490
490
  getColor: [255, 255, 255]
491
491
  }))];
492
492
  if (t) {
493
- const i = this.renderDebugLayer();
494
- i && a.push(i);
493
+ const a = this.renderDebugLayer();
494
+ a && i.push(a);
495
495
  }
496
- return a;
496
+ return i;
497
497
  }
498
498
  }
499
- function Ae(o) {
500
- const e = o.uvs.length / 2, t = new Float32Array(e * 3), n = new Float32Array(o.uvs);
501
- for (let r = 0; r < e; r++)
502
- t[r * 3] = o.exactOutputPositions[r * 2], t[r * 3 + 1] = o.exactOutputPositions[r * 2 + 1], t[r * 3 + 2] = 0;
499
+ function De(r) {
500
+ const e = r.uvs.length / 2, t = new Float32Array(e * 3), n = new Float32Array(r.uvs);
501
+ for (let o = 0; o < e; o++)
502
+ t[o * 3] = r.exactOutputPositions[o * 2], t[o * 3 + 1] = r.exactOutputPositions[o * 2 + 1], t[o * 3 + 2] = 0;
503
503
  return {
504
- indices: new Uint32Array(o.triangles),
504
+ indices: new Uint32Array(r.triangles),
505
505
  positions: t,
506
506
  texCoords: n
507
507
  };
508
508
  }
509
- class ft {
509
+ class jt {
510
510
  levels;
511
511
  projectTo3857;
512
512
  projectFrom3857;
@@ -519,49 +519,49 @@ class ft {
519
519
  this.levels = e.levels, this.projectTo3857 = e.projectTo3857, this.projectFrom3857 = e.projectFrom3857, this.projectTo4326 = e.projectTo4326, this.projectFrom4326 = e.projectFrom4326, this.projectedBounds = e.levels[0].projectedBounds;
520
520
  }
521
521
  }
522
- function Re(o, e) {
523
- return [1, 0, o, 0, 1, e];
522
+ function Ie(r, e) {
523
+ return [1, 0, r, 0, 1, e];
524
524
  }
525
- function pt(o, e = o) {
526
- return [o, 0, 0, 0, e, 0];
525
+ function At(r, e = r) {
526
+ return [r, 0, 0, 0, e, 0];
527
527
  }
528
- function y([o, e, t, n, s, r], a, i) {
528
+ function L([r, e, t, n, s, o], i, a) {
529
529
  return [
530
- o * a + e * i + t,
531
- n * a + s * i + r
530
+ r * i + e * a + t,
531
+ n * i + s * a + o
532
532
  ];
533
533
  }
534
- function ze([o, e, t, n, s, r], [a, i, c, u, l, d]) {
534
+ function Xe([r, e, t, n, s, o], [i, a, c, u, l, h]) {
535
535
  return [
536
- o * a + e * u,
537
- o * i + e * l,
538
- o * c + e * d + t,
539
- n * a + s * u,
540
- n * i + s * l,
541
- n * c + s * d + r
536
+ r * i + e * u,
537
+ r * a + e * l,
538
+ r * c + e * h + t,
539
+ n * i + s * u,
540
+ n * a + s * l,
541
+ n * c + s * h + o
542
542
  ];
543
543
  }
544
- function q([o, e, t, n, s, r]) {
545
- const a = o * s - e * n;
546
- if (a === 0)
544
+ function q([r, e, t, n, s, o]) {
545
+ const i = r * s - e * n;
546
+ if (i === 0)
547
547
  throw new Error("Cannot invert degenerate transform");
548
- const i = 1 / a, c = s * i, u = -e * i, l = -n * i, d = o * i;
548
+ const a = 1 / i, c = s * a, u = -e * a, l = -n * a, h = r * a;
549
549
  return [
550
550
  c,
551
551
  u,
552
- -t * c - r * u,
552
+ -t * c - o * u,
553
553
  l,
554
- d,
555
- -t * l - r * d
554
+ h,
555
+ -t * l - o * h
556
556
  ];
557
557
  }
558
- function De(o) {
559
- return o[0];
558
+ function Ee(r) {
559
+ return r[0];
560
560
  }
561
- function Xe(o) {
562
- return o[4];
561
+ function Se(r) {
562
+ return r[4];
563
563
  }
564
- class mt {
564
+ class Ct {
565
565
  tileWidth;
566
566
  tileHeight;
567
567
  matrixWidth;
@@ -576,49 +576,49 @@ class mt {
576
576
  _invAffine;
577
577
  constructor(e) {
578
578
  this._affine = e.affine, this._invAffine = q(e.affine), this.tileWidth = e.tileWidth, this.tileHeight = e.tileHeight, this.matrixWidth = Math.ceil(e.arrayWidth / e.tileWidth), this.matrixHeight = Math.ceil(e.arrayHeight / e.tileHeight);
579
- const t = De(e.affine), n = Xe(e.affine);
579
+ const t = Ee(e.affine), n = Se(e.affine);
580
580
  this.metersPerPixel = Math.sqrt(Math.abs(t * n)) * e.mpu;
581
581
  const s = [
582
- y(e.affine, 0, 0),
583
- y(e.affine, e.arrayWidth, 0),
584
- y(e.affine, 0, e.arrayHeight),
585
- y(e.affine, e.arrayWidth, e.arrayHeight)
586
- ], r = s.map(([i]) => i), a = s.map(([, i]) => i);
582
+ L(e.affine, 0, 0),
583
+ L(e.affine, e.arrayWidth, 0),
584
+ L(e.affine, 0, e.arrayHeight),
585
+ L(e.affine, e.arrayWidth, e.arrayHeight)
586
+ ], o = s.map(([a]) => a), i = s.map(([, a]) => a);
587
587
  this.projectedBounds = [
588
- Math.min(...r),
589
- Math.min(...a),
590
- Math.max(...r),
591
- Math.max(...a)
588
+ Math.min(...o),
589
+ Math.min(...i),
590
+ Math.max(...o),
591
+ Math.max(...i)
592
592
  ];
593
593
  }
594
594
  projectedTileCorners(e, t) {
595
- const n = this.tileWidth, s = this.tileHeight, r = this._affine;
595
+ const n = this.tileWidth, s = this.tileHeight, o = this._affine;
596
596
  return {
597
- topLeft: y(r, e * n, t * s),
598
- topRight: y(r, (e + 1) * n, t * s),
599
- bottomLeft: y(r, e * n, (t + 1) * s),
600
- bottomRight: y(r, (e + 1) * n, (t + 1) * s)
597
+ topLeft: L(o, e * n, t * s),
598
+ topRight: L(o, (e + 1) * n, t * s),
599
+ bottomLeft: L(o, e * n, (t + 1) * s),
600
+ bottomRight: L(o, (e + 1) * n, (t + 1) * s)
601
601
  };
602
602
  }
603
603
  tileTransform(e, t) {
604
- const n = Re(e * this.tileWidth, t * this.tileHeight), s = ze(this._affine, n), r = q(s);
604
+ const n = Ie(e * this.tileWidth, t * this.tileHeight), s = Xe(this._affine, n), o = q(s);
605
605
  return {
606
- forwardTransform: (a, i) => y(s, a, i),
607
- inverseTransform: (a, i) => y(r, a, i)
606
+ forwardTransform: (i, a) => L(s, i, a),
607
+ inverseTransform: (i, a) => L(o, i, a)
608
608
  };
609
609
  }
610
610
  crsBoundsToTileRange(e, t, n, s) {
611
- const r = this._invAffine, a = [
612
- y(r, e, t),
613
- y(r, n, t),
614
- y(r, e, s),
615
- y(r, n, s)
616
- ], i = a.map(([T]) => T), c = a.map(([, T]) => T), u = Math.min(...i), l = Math.max(...i), d = Math.min(...c), f = Math.max(...c), h = this.tileWidth, p = this.tileHeight, m = this.matrixWidth - 1, g = this.matrixHeight - 1, b = Math.max(0, Math.floor(u / h)), P = Math.min(m, Math.floor(l / h)), x = Math.max(0, Math.floor(d / p)), v = Math.min(g, Math.floor(f / p));
617
- return { minCol: b, maxCol: P, minRow: x, maxRow: v };
611
+ const o = this._invAffine, i = [
612
+ L(o, e, t),
613
+ L(o, n, t),
614
+ L(o, e, s),
615
+ L(o, n, s)
616
+ ], a = i.map(([y]) => y), c = i.map(([, y]) => y), u = Math.min(...a), l = Math.max(...a), h = Math.min(...c), f = Math.max(...c), d = this.tileWidth, m = this.tileHeight, p = this.matrixWidth - 1, g = this.matrixHeight - 1, P = Math.max(0, Math.floor(u / d)), b = Math.min(p, Math.floor(l / d)), x = Math.max(0, Math.floor(h / m)), v = Math.min(g, Math.floor(f / m));
617
+ return { minCol: P, maxCol: b, minRow: x, maxRow: v };
618
618
  }
619
619
  }
620
- function gt(o, { semiMajorAxis: e } = {}) {
621
- switch (o = o.toLowerCase(), o) {
620
+ function Rt(r, { semiMajorAxis: e } = {}) {
621
+ switch (r = r.toLowerCase(), r) {
622
622
  case "m":
623
623
  case "metre":
624
624
  case "meter":
@@ -629,62 +629,62 @@ function gt(o, { semiMajorAxis: e } = {}) {
629
629
  case "us survey foot":
630
630
  return 1200 / 3937;
631
631
  }
632
- if (o === "degree") {
632
+ if (r === "degree") {
633
633
  if (e === void 0)
634
634
  throw new Error("CRS with degrees unit requires ellipsoid semi-major-axis");
635
635
  return 2 * Math.PI * e / 360;
636
636
  }
637
- throw new Error(`Unsupported CRS units: ${o} when computing metersPerUnit.`);
637
+ throw new Error(`Unsupported CRS units: ${r} when computing metersPerUnit.`);
638
638
  }
639
- function Ie(o) {
640
- const e = ae(o);
639
+ function Ne(r) {
640
+ const e = de(r);
641
641
  return e.projName === "longlat" && (!e.units || e.units === "unknown") && (e.units = "degree", e.to_meter = void 0), e;
642
642
  }
643
- const k = /* @__PURE__ */ new Map();
644
- async function vt(o) {
645
- const e = `EPSG:${o}`, t = k.get(e);
643
+ const V = /* @__PURE__ */ new Map();
644
+ async function zt(r) {
645
+ const e = `EPSG:${r}`, t = V.get(e);
646
646
  if (t !== void 0)
647
647
  return t;
648
- const n = await Be(o), s = Ie(n);
649
- return k.set(e, s), s;
648
+ const n = await Fe(r), s = Ne(n);
649
+ return V.set(e, s), s;
650
650
  }
651
- async function Be(o) {
652
- const e = `https://epsg.io/${o}.json`, t = await fetch(e);
651
+ async function Fe(r) {
652
+ const e = `https://epsg.io/${r}.json`, t = await fetch(e);
653
653
  if (!t.ok)
654
654
  throw new Error(`Failed to fetch PROJJSON from ${e}`);
655
655
  return await t.json();
656
656
  }
657
- function I(o, e, t, n, s, r = {}) {
658
- const { densifyPts: a = 21 } = r, i = [e, n, n, e], c = [t, t, s, s];
659
- let u = 1 / 0, l = 1 / 0, d = -1 / 0, f = -1 / 0;
660
- for (let h = 0; h < 4; h++) {
661
- const p = i[h], m = c[h], g = i[(h + 1) % 4], b = c[(h + 1) % 4];
662
- for (let P = 0; P <= a; P++) {
663
- const x = P / (a + 1), [v, T] = o(p + (g - p) * x, m + (b - m) * x);
664
- v < u && (u = v), T < l && (l = T), v > d && (d = v), T > f && (f = T);
657
+ function X(r, e, t, n, s, o = {}) {
658
+ const { densifyPts: i = 21 } = o, a = [e, n, n, e], c = [t, t, s, s];
659
+ let u = 1 / 0, l = 1 / 0, h = -1 / 0, f = -1 / 0;
660
+ for (let d = 0; d < 4; d++) {
661
+ const m = a[d], p = c[d], g = a[(d + 1) % 4], P = c[(d + 1) % 4];
662
+ for (let b = 0; b <= i; b++) {
663
+ const x = b / (i + 1), [v, y] = r(m + (g - m) * x, p + (P - p) * x);
664
+ v < u && (u = v), y < l && (l = y), v > h && (h = v), y > f && (f = y);
665
665
  }
666
666
  }
667
- return [u, l, d, f];
667
+ return [u, l, h, f];
668
668
  }
669
- const V = 6378137, Y = 85.05112877980659;
670
- function Ee(o, e) {
671
- const t = o * Math.PI * V / 180, n = e * Math.PI / 180, s = Math.log(Math.tan(Math.PI / 4 + n / 2)) * V;
669
+ const G = 6378137, Y = 85.05112877980659;
670
+ function He(r, e) {
671
+ const t = r * Math.PI * G / 180, n = e * Math.PI / 180, s = Math.log(Math.tan(Math.PI / 4 + n / 2)) * G;
672
672
  return [t, s];
673
673
  }
674
- function Pt(o, e) {
674
+ function Bt(r, e) {
675
675
  return (t, n) => {
676
- const [s, r] = o(t, n);
677
- if (Number.isFinite(s) && Number.isFinite(r))
678
- return [s, r];
679
- const [a, i] = e(t, n), c = Math.max(-Y, Math.min(Y, i));
680
- return Ee(a, c);
676
+ const [s, o] = r(t, n);
677
+ if (Number.isFinite(s) && Number.isFinite(o))
678
+ return [s, o];
679
+ const [i, a] = e(t, n), c = Math.max(-Y, Math.min(Y, a));
680
+ return He(i, c);
681
681
  };
682
682
  }
683
- const Se = 65536;
684
- class re {
683
+ const We = 65536;
684
+ class ce {
685
685
  entries = /* @__PURE__ */ new Map();
686
686
  maxEntries;
687
- constructor({ maxEntries: e = Se } = {}) {
687
+ constructor({ maxEntries: e = We } = {}) {
688
688
  this.maxEntries = Math.max(0, e);
689
689
  }
690
690
  /** Number of cached entries. */
@@ -696,14 +696,14 @@ class re {
696
696
  * is marked most-recently-used. Returns `undefined` on a miss.
697
697
  */
698
698
  get(e, t, n) {
699
- const s = `${e}/${t}/${n}`, r = this.entries.get(s);
700
- if (r !== void 0)
701
- return this.entries.delete(s), this.entries.set(s, r), r;
699
+ const s = `${e}/${t}/${n}`, o = this.entries.get(s);
700
+ if (o !== void 0)
701
+ return this.entries.delete(s), this.entries.set(s, o), o;
702
702
  }
703
703
  /** Store the bounding volume for tile `(z, x, y)` as most-recently-used. */
704
704
  set(e, t, n, s) {
705
- const r = `${e}/${t}/${n}`;
706
- this.entries.delete(r), this.entries.set(r, s);
705
+ const o = `${e}/${t}/${n}`;
706
+ this.entries.delete(o), this.entries.set(o, s);
707
707
  }
708
708
  /**
709
709
  * If the cache is over its soft cap, drop least-recently-used entries down to
@@ -721,7 +721,7 @@ class re {
721
721
  this.entries.delete(s);
722
722
  }
723
723
  }
724
- const G = 512, Ne = [
724
+ const J = 512, Ue = [
725
725
  [0.5, 0.5],
726
726
  // center
727
727
  [0, 0],
@@ -732,7 +732,7 @@ const G = 512, Ne = [
732
732
  // top-right
733
733
  [1, 1]
734
734
  // bottom-right
735
- ], He = Ne.concat([
735
+ ], Ze = Ue.concat([
736
736
  [0, 0.5],
737
737
  // left edge
738
738
  [0.5, 0],
@@ -741,8 +741,8 @@ const G = 512, Ne = [
741
741
  // right edge
742
742
  [0.5, 1]
743
743
  // bottom edge
744
- ]), B = 6378137, E = 2 * Math.PI * B, J = E / 2, K = 85.05112877980659;
745
- class R {
744
+ ]), E = 6378137, S = 2 * Math.PI * E, K = S / 2, Q = 85.05112877980659;
745
+ class z {
746
746
  /** Index across a row */
747
747
  x;
748
748
  /** Index down a column */
@@ -785,10 +785,10 @@ class R {
785
785
  const e = this.descriptor.levels.length - 1;
786
786
  if (this.z >= e)
787
787
  return this._children = null, null;
788
- const t = this.z + 1, n = this.descriptor.levels[t], s = this.level.projectedTileCorners(this.x, this.y), r = Ge(s), { minCol: a, maxCol: i, minRow: c, maxRow: u } = n.crsBoundsToTileRange(...r), l = [], { descriptor: d } = this;
788
+ const t = this.z + 1, n = this.descriptor.levels[t], s = this.level.projectedTileCorners(this.x, this.y), o = _e(s), { minCol: i, maxCol: a, minRow: c, maxRow: u } = n.crsBoundsToTileRange(...o), l = [], { descriptor: h } = this;
789
789
  for (let f = c; f <= u; f++)
790
- for (let h = a; h <= i; h++)
791
- l.push(new R(h, f, t, { descriptor: d }));
790
+ for (let d = i; d <= a; d++)
791
+ l.push(new z(d, f, t, { descriptor: h }));
792
792
  this._children = l.length > 0 ? l : null;
793
793
  }
794
794
  return this._children;
@@ -813,21 +813,21 @@ class R {
813
813
  */
814
814
  update(e) {
815
815
  this.childVisible = !1, this.selected = !1;
816
- const { viewport: t, cullingVolume: n, elevationBounds: s, minZ: r, maxZ: a = this.descriptor.levels.length - 1, project: i, bounds: c, pixelRatio: u, boundingVolumeCache: l } = e, { boundingVolume: d, commonSpaceBounds: f } = this.getBoundingVolume(s, i, l);
817
- if (c && !this.insideBounds(c, f) || n.computeVisibility(d) < 0)
816
+ const { viewport: t, cullingVolume: n, elevationBounds: s, minZ: o, maxZ: i = this.descriptor.levels.length - 1, project: a, bounds: c, pixelRatio: u, boundingVolumeCache: l } = e, { boundingVolume: h, commonSpaceBounds: f } = this.getBoundingVolume(s, a, l);
817
+ if (c && !this.insideBounds(c, f) || n.computeVisibility(h) < 0)
818
818
  return !1;
819
- const p = this.children;
820
- if (!this.childVisible && this.z >= r) {
821
- const m = Ye(d, t.zoom);
822
- if (this.level.metersPerPixel * u / m <= 1 || this.z >= a || p === null && this.z >= r)
819
+ const m = this.children;
820
+ if (!this.childVisible && this.z >= o) {
821
+ const p = Qe(h, t.zoom);
822
+ if (this.level.metersPerPixel * u / p <= 1 || this.z >= i || m === null && this.z >= o)
823
823
  return this.selected = !0, !0;
824
824
  }
825
- if (p && p.length > 0) {
825
+ if (m && m.length > 0) {
826
826
  this.selected = !1;
827
- let m = !1;
828
- for (const g of p)
829
- g.update(e) && (m = !0);
830
- return this.childVisible = m, m;
827
+ let p = !1;
828
+ for (const g of m)
829
+ g.update(e) && (p = !0);
830
+ return this.childVisible = p, p;
831
831
  }
832
832
  return !0;
833
833
  }
@@ -852,8 +852,8 @@ class R {
852
852
  * @returns true if tile overlaps the bounds
853
853
  */
854
854
  insideBounds(e, t) {
855
- const [n, s, r, a] = e, [i, c, u, l] = t;
856
- return i < r && u > n && c < a && l > s;
855
+ const [n, s, o, i] = e, [a, c, u, l] = t;
856
+ return a < o && u > n && c < i && l > s;
857
857
  }
858
858
  /**
859
859
  * The 3D bounding volume for this tile in deck.gl's common coordinate space,
@@ -868,8 +868,8 @@ class R {
868
868
  const s = n.get(this.z, this.x, this.y);
869
869
  if (s && s.zRange[0] === e[0] && s.zRange[1] === e[1])
870
870
  return s;
871
- const r = this.computeBoundingVolume(e, t);
872
- return n.set(this.z, this.x, this.y, { zRange: e, ...r }), r;
871
+ const o = this.computeBoundingVolume(e, t);
872
+ return n.set(this.z, this.x, this.y, { zRange: e, ...o }), o;
873
873
  }
874
874
  /**
875
875
  * Compute (without caching) the 3D bounding volume for this tile in deck.gl's
@@ -879,7 +879,7 @@ class R {
879
879
  * tiling is already in EPSG:3857.
880
880
  */
881
881
  computeBoundingVolume(e, t) {
882
- return t && pe(!1, "TODO: implement getBoundingVolume in Globe view"), this._getGenericBoundingVolume(e);
882
+ return t && be(!1, "TODO: implement getBoundingVolume in Globe view"), this._getGenericBoundingVolume(e);
883
883
  }
884
884
  /**
885
885
  * Generic case - sample reference points and reproject to Web Mercator, then
@@ -887,157 +887,157 @@ class R {
887
887
  *
888
888
  */
889
889
  _getGenericBoundingVolume(e) {
890
- const [t, n] = e, s = this.level.projectedTileCorners(this.x, this.y), a = We(He, s, this.descriptor.projectTo3857, this.descriptor.projectTo4326).map((h) => Ze(h)), i = [];
891
- for (const h of a)
892
- i.push([h[0], h[1], t]), t !== n && i.push([h[0], h[1], n]);
893
- let c = Number.POSITIVE_INFINITY, u = Number.POSITIVE_INFINITY, l = Number.NEGATIVE_INFINITY, d = Number.NEGATIVE_INFINITY;
894
- for (const [h, p] of a)
895
- h < c && (c = h), p < u && (u = p), h > l && (l = h), p > d && (d = p);
896
- const f = [c, u, l, d];
890
+ const [t, n] = e, s = this.level.projectedTileCorners(this.x, this.y), i = qe(Ze, s, this.descriptor.projectTo3857, this.descriptor.projectTo4326).map((d) => Ve(d)), a = [];
891
+ for (const d of i)
892
+ a.push([d[0], d[1], t]), t !== n && a.push([d[0], d[1], n]);
893
+ let c = Number.POSITIVE_INFINITY, u = Number.POSITIVE_INFINITY, l = Number.NEGATIVE_INFINITY, h = Number.NEGATIVE_INFINITY;
894
+ for (const [d, m] of i)
895
+ d < c && (c = d), m < u && (u = m), d > l && (l = d), m > h && (h = m);
896
+ const f = [c, u, l, h];
897
897
  return {
898
- boundingVolume: me(i),
898
+ boundingVolume: xe(a),
899
899
  commonSpaceBounds: f
900
900
  };
901
901
  }
902
902
  }
903
- function Fe(o, e) {
903
+ function ke(r, e) {
904
904
  return (t, n) => {
905
- const [s, r] = o(t, n);
906
- if (Number.isFinite(s) && Number.isFinite(r))
907
- return [s, r];
908
- const [a, i] = e(t, n), u = Math.max(-K, Math.min(K, i)) * Math.PI / 180, l = a * Math.PI * B / 180, d = Math.log(Math.tan(Math.PI / 4 + u / 2)) * B;
909
- return [l, d];
905
+ const [s, o] = r(t, n);
906
+ if (Number.isFinite(s) && Number.isFinite(o))
907
+ return [s, o];
908
+ const [i, a] = e(t, n), u = Math.max(-Q, Math.min(Q, a)) * Math.PI / 180, l = i * Math.PI * E / 180, h = Math.log(Math.tan(Math.PI / 4 + u / 2)) * E;
909
+ return [l, h];
910
910
  };
911
911
  }
912
- function We(o, e, t, n) {
913
- const { topLeft: s, topRight: r, bottomLeft: a, bottomRight: i } = e, c = Fe(t, n), u = [];
914
- for (const [l, d] of o) {
915
- const [f, h] = Je(s, r, a, i, l, d);
916
- u.push(c(f, h));
912
+ function qe(r, e, t, n) {
913
+ const { topLeft: s, topRight: o, bottomLeft: i, bottomRight: a } = e, c = ke(t, n), u = [];
914
+ for (const [l, h] of r) {
915
+ const [f, d] = $e(s, o, i, a, l, h);
916
+ u.push(c(f, d));
917
917
  }
918
918
  return u;
919
919
  }
920
- function Ze([o, e]) {
921
- const t = Math.max(-J, Math.min(J, e));
920
+ function Ve([r, e]) {
921
+ const t = Math.max(-K, Math.min(K, e));
922
922
  return [
923
- (o / E + 0.5) * G,
924
- (t / E + 0.5) * G
923
+ (r / S + 0.5) * J,
924
+ (t / S + 0.5) * J
925
925
  ];
926
926
  }
927
- const Ue = 100;
928
- function qe(o) {
929
- const { descriptor: e, viewport: t, datasetWgs84Bounds: n } = o, s = e.levels[0], r = [];
930
- if (s.matrixWidth * s.matrixHeight <= Ue) {
931
- for (let p = 0; p < s.matrixHeight; p++)
932
- for (let m = 0; m < s.matrixWidth; m++)
933
- r.push(new R(m, p, 0, { descriptor: e }));
934
- return r;
927
+ const Ge = 100;
928
+ function Ye(r) {
929
+ const { descriptor: e, viewport: t, datasetWgs84Bounds: n } = r, s = e.levels[0], o = [];
930
+ if (s.matrixWidth * s.matrixHeight <= Ge) {
931
+ for (let m = 0; m < s.matrixHeight; m++)
932
+ for (let p = 0; p < s.matrixWidth; p++)
933
+ o.push(new z(p, m, 0, { descriptor: e }));
934
+ return o;
935
935
  }
936
- const i = t.getBounds(), c = [
937
- Math.max(n[0], i[0]),
938
- Math.max(n[1], i[1]),
939
- Math.min(n[2], i[2]),
940
- Math.min(n[3], i[3])
936
+ const a = t.getBounds(), c = [
937
+ Math.max(n[0], a[0]),
938
+ Math.max(n[1], a[1]),
939
+ Math.min(n[2], a[2]),
940
+ Math.min(n[3], a[3])
941
941
  ];
942
942
  if (c[0] > c[2] || c[1] > c[3])
943
- return r;
944
- const [u, l, d, f] = I(e.projectFrom4326, c[0], c[1], c[2], c[3]), h = s.crsBoundsToTileRange(u, l, d, f);
945
- for (let p = h.minRow; p <= h.maxRow; p++)
946
- for (let m = h.minCol; m <= h.maxCol; m++)
947
- r.push(new R(m, p, 0, { descriptor: e }));
948
- return r;
943
+ return o;
944
+ const [u, l, h, f] = X(e.projectFrom4326, c[0], c[1], c[2], c[3]), d = s.crsBoundsToTileRange(u, l, h, f);
945
+ for (let m = d.minRow; m <= d.maxRow; m++)
946
+ for (let p = d.minCol; p <= d.maxCol; p++)
947
+ o.push(new z(p, m, 0, { descriptor: e }));
948
+ return o;
949
949
  }
950
- function ke(o, e) {
951
- const { viewport: t, maxZ: n, zRange: s, wgs84Bounds: r, pixelRatio: a = 1 } = e, i = e.boundingVolumeCache ?? new re();
952
- i.sweep();
953
- const c = t instanceof he && t.resolution ? t.projectPosition : null, u = Object.values(t.getFrustumPlanes()).map(({ normal: O, distance: z }) => new de(O.clone().negate(), z)), l = new fe(u), d = t.distanceScales.unitsPerMeter[2], f = s && s[0] * d || 0, h = s && s[1] * d || 0, p = 0, [m, g, b, P] = r, x = Z([m, g]), v = Z([b, P]), T = [
950
+ function Je(r, e) {
951
+ const { viewport: t, maxZ: n, zRange: s, wgs84Bounds: o, pixelRatio: i = 1 } = e, a = e.boundingVolumeCache ?? new ce();
952
+ a.sweep();
953
+ const c = t instanceof pe && t.resolution ? t.projectPosition : null, u = Object.values(t.getFrustumPlanes()).map(({ normal: O, distance: B }) => new ge(O.clone().negate(), B)), l = new ve(u), h = t.distanceScales.unitsPerMeter[2], f = s && s[0] * h || 0, d = s && s[1] * h || 0, m = 0, [p, g, P, b] = o, x = Z([p, g]), v = Z([P, b]), y = [
954
954
  x[0],
955
955
  x[1],
956
956
  v[0],
957
957
  v[1]
958
- ], L = qe({
959
- descriptor: o,
958
+ ], w = Ye({
959
+ descriptor: r,
960
960
  viewport: t,
961
- datasetWgs84Bounds: r
962
- }), j = {
961
+ datasetWgs84Bounds: o
962
+ }), M = {
963
963
  viewport: t,
964
964
  project: c,
965
965
  cullingVolume: l,
966
- elevationBounds: [f, h],
967
- minZ: p,
966
+ elevationBounds: [f, d],
967
+ minZ: m,
968
968
  maxZ: n,
969
- bounds: T,
970
- pixelRatio: a,
971
- boundingVolumeCache: i
969
+ bounds: y,
970
+ pixelRatio: i,
971
+ boundingVolumeCache: a
972
972
  };
973
- for (const O of L)
974
- O.update(j);
975
- const w = [];
976
- for (const O of L)
977
- O.getSelected(w);
978
- return w;
973
+ for (const O of w)
974
+ O.update(M);
975
+ const j = [];
976
+ for (const O of w)
977
+ O.getSelected(j);
978
+ return j;
979
979
  }
980
- function Ve(o, e) {
981
- return 40075016686e-3 * Math.cos(o * Math.PI / 180) / 2 ** (e + 8);
980
+ function Ke(r, e) {
981
+ return 40075016686e-3 * Math.cos(r * Math.PI / 180) / 2 ** (e + 8);
982
982
  }
983
- function Ye(o, e) {
984
- const [t, n] = ge(o.center);
985
- return Ve(n, e);
983
+ function Qe(r, e) {
984
+ const [t, n] = Pe(r.center);
985
+ return Ke(n, e);
986
986
  }
987
- function Ge({ topLeft: o, topRight: e, bottomLeft: t, bottomRight: n }) {
988
- const s = [o[0], e[0], t[0], n[0]], r = [o[1], e[1], t[1], n[1]];
989
- return [Math.min(...s), Math.min(...r), Math.max(...s), Math.max(...r)];
987
+ function _e({ topLeft: r, topRight: e, bottomLeft: t, bottomRight: n }) {
988
+ const s = [r[0], e[0], t[0], n[0]], o = [r[1], e[1], t[1], n[1]];
989
+ return [Math.min(...s), Math.min(...o), Math.max(...s), Math.max(...o)];
990
990
  }
991
- function Je(o, e, t, n, s, r) {
992
- const a = (1 - s) * (1 - r), i = s * (1 - r), c = (1 - s) * r, u = s * r;
991
+ function $e(r, e, t, n, s, o) {
992
+ const i = (1 - s) * (1 - o), a = s * (1 - o), c = (1 - s) * o, u = s * o;
993
993
  return [
994
- o[0] * a + e[0] * i + t[0] * c + n[0] * u,
995
- o[1] * a + e[1] * i + t[1] * c + n[1] * u
994
+ r[0] * i + e[0] * a + t[0] * c + n[0] * u,
995
+ r[1] * i + e[1] * a + t[1] * c + n[1] * u
996
996
  ];
997
997
  }
998
- function Ke(o, e) {
999
- const t = o.length;
998
+ function et(r, e) {
999
+ const t = r.length;
1000
1000
  if (t < 2)
1001
- return o;
1002
- const { getCenter: n, reference: s } = e, r = s[0], a = s[1], i = new Float64Array(t);
1001
+ return r;
1002
+ const { getCenter: n, reference: s } = e, o = s[0], i = s[1], a = new Float64Array(t);
1003
1003
  for (let l = 0; l < t; l++) {
1004
- const d = n(o[l]), f = d[0] - r, h = d[1] - a;
1005
- i[l] = f * f + h * h;
1004
+ const h = n(r[l]), f = h[0] - o, d = h[1] - i;
1005
+ a[l] = f * f + d * d;
1006
1006
  }
1007
1007
  const c = new Uint32Array(t);
1008
1008
  for (let l = 0; l < t; l++)
1009
1009
  c[l] = l;
1010
- c.sort((l, d) => i[l] - i[d]);
1011
- const u = o.slice();
1010
+ c.sort((l, h) => a[l] - a[h]);
1011
+ const u = r.slice();
1012
1012
  for (let l = 0; l < t; l++)
1013
- o[l] = u[c[l]];
1014
- return o;
1013
+ r[l] = u[c[l]];
1014
+ return r;
1015
1015
  }
1016
- function Qe(o, e, t) {
1017
- const [n, s, r, a] = e.getBounds(), i = [
1018
- (n + r) / 2,
1019
- (s + a) / 2
1016
+ function tt(r, e, t) {
1017
+ const [n, s, o, i] = e.getBounds(), a = [
1018
+ (n + o) / 2,
1019
+ (s + i) / 2
1020
1020
  ];
1021
- return Ke(o, {
1022
- reference: i,
1021
+ return et(r, {
1022
+ reference: a,
1023
1023
  getCenter: t
1024
1024
  });
1025
1025
  }
1026
- class _e extends ve {
1026
+ class nt extends ye {
1027
1027
  descriptor;
1028
1028
  wgs84Bounds;
1029
1029
  getPixelRatio;
1030
1030
  boundingVolumeCache;
1031
1031
  constructor(e, t, { getPixelRatio: n, maxBoundingVolumeCacheSize: s } = {}) {
1032
- super(e), this.descriptor = t, this.getPixelRatio = n ?? (() => 1), this.boundingVolumeCache = new re({
1032
+ super(e), this.descriptor = t, this.getPixelRatio = n ?? (() => 1), this.boundingVolumeCache = new ce({
1033
1033
  maxEntries: s
1034
1034
  });
1035
- const r = I(this.descriptor.projectTo4326, ...this.descriptor.projectedBounds), a = 85.0511287798066;
1035
+ const o = X(this.descriptor.projectTo4326, ...this.descriptor.projectedBounds), i = 85.0511287798066;
1036
1036
  this.wgs84Bounds = [
1037
- r[0],
1038
- Math.max(r[1], -a),
1039
- r[2],
1040
- Math.min(r[3], a)
1037
+ o[0],
1038
+ Math.max(o[1], -i),
1039
+ o[2],
1040
+ Math.min(o[3], i)
1041
1041
  ];
1042
1042
  }
1043
1043
  /**
@@ -1061,15 +1061,15 @@ class _e extends ve {
1061
1061
  const { viewport: t, minZoom: n } = e;
1062
1062
  if (typeof n == "number" && t.zoom < n)
1063
1063
  return [];
1064
- const s = this.descriptor.levels.length - 1, r = typeof e.maxZoom == "number" ? Math.min(e.maxZoom, s) : s, a = ke(this.descriptor, {
1064
+ const s = this.descriptor.levels.length - 1, o = typeof e.maxZoom == "number" ? Math.min(e.maxZoom, s) : s, i = Je(this.descriptor, {
1065
1065
  viewport: t,
1066
- maxZ: r,
1066
+ maxZ: o,
1067
1067
  zRange: e.zRange ?? null,
1068
1068
  wgs84Bounds: this.wgs84Bounds,
1069
1069
  pixelRatio: this.getPixelRatio(),
1070
1070
  boundingVolumeCache: this.boundingVolumeCache
1071
1071
  });
1072
- return this.sortTileIndicesByDistance(a, t);
1072
+ return this.sortTileIndicesByDistance(i, t);
1073
1073
  }
1074
1074
  /**
1075
1075
  * Sort tile indices by ascending distance from the viewport center in
@@ -1084,12 +1084,12 @@ class _e extends ve {
1084
1084
  if (e.length <= n)
1085
1085
  return e;
1086
1086
  const s = this.descriptor;
1087
- return Qe(e, t, (r) => {
1088
- const { x: a, y: i, z: c } = r, { topLeft: u, bottomRight: l } = s.levels[c].projectedTileCorners(a, i), d = [
1087
+ return tt(e, t, (o) => {
1088
+ const { x: i, y: a, z: c } = o, { topLeft: u, bottomRight: l } = s.levels[c].projectedTileCorners(i, a), h = [
1089
1089
  (u[0] + l[0]) / 2,
1090
1090
  (u[1] + l[1]) / 2
1091
1091
  ];
1092
- return s.projectTo4326(d[0], d[1]);
1092
+ return s.projectTo4326(h[0], h[1]);
1093
1093
  });
1094
1094
  }
1095
1095
  getTileId(e) {
@@ -1098,7 +1098,7 @@ class _e extends ve {
1098
1098
  getParentIndex(e) {
1099
1099
  if (e.z === 0)
1100
1100
  return e;
1101
- const t = this.descriptor.levels[e.z], n = this.descriptor.levels[e.z - 1], s = n.metersPerPixel * n.tileWidth, r = n.metersPerPixel * n.tileHeight, a = t.metersPerPixel * t.tileWidth, i = t.metersPerPixel * t.tileHeight, c = s / a, u = r / i;
1101
+ const t = this.descriptor.levels[e.z], n = this.descriptor.levels[e.z - 1], s = n.metersPerPixel * n.tileWidth, o = n.metersPerPixel * n.tileHeight, i = t.metersPerPixel * t.tileWidth, a = t.metersPerPixel * t.tileHeight, c = s / i, u = o / a;
1102
1102
  return {
1103
1103
  x: Math.floor(e.x / c),
1104
1104
  y: Math.floor(e.y / u),
@@ -1109,47 +1109,47 @@ class _e extends ve {
1109
1109
  return e.z;
1110
1110
  }
1111
1111
  getTileMetadata(e) {
1112
- const { x: t, y: n, z: s } = e, r = this.descriptor.levels[s], { tileHeight: a, tileWidth: i } = r, { topLeft: c, topRight: u, bottomLeft: l, bottomRight: d } = r.projectedTileCorners(t, n), f = {
1112
+ const { x: t, y: n, z: s } = e, o = this.descriptor.levels[s], { tileHeight: i, tileWidth: a } = o, { topLeft: c, topRight: u, bottomLeft: l, bottomRight: h } = o.projectedTileCorners(t, n), f = {
1113
1113
  topLeft: c,
1114
1114
  topRight: u,
1115
1115
  bottomLeft: l,
1116
- bottomRight: d
1117
- }, h = [
1118
- Math.min(c[0], u[0], l[0], d[0]),
1119
- Math.min(c[1], u[1], l[1], d[1]),
1120
- Math.max(c[0], u[0], l[0], d[0]),
1121
- Math.max(c[1], u[1], l[1], d[1])
1122
- ], [p, m, g, b] = I(this.descriptor.projectTo4326, ...h), { forwardTransform: P, inverseTransform: x } = r.tileTransform(t, n);
1116
+ bottomRight: h
1117
+ }, d = [
1118
+ Math.min(c[0], u[0], l[0], h[0]),
1119
+ Math.min(c[1], u[1], l[1], h[1]),
1120
+ Math.max(c[0], u[0], l[0], h[0]),
1121
+ Math.max(c[1], u[1], l[1], h[1])
1122
+ ], [m, p, g, P] = X(this.descriptor.projectTo4326, ...d), { forwardTransform: b, inverseTransform: x } = o.tileTransform(t, n);
1123
1123
  return {
1124
1124
  bbox: {
1125
- west: p,
1126
- south: m,
1125
+ west: m,
1126
+ south: p,
1127
1127
  east: g,
1128
- north: b
1128
+ north: P
1129
1129
  },
1130
1130
  projectedBbox: {
1131
- left: h[0],
1132
- bottom: h[1],
1133
- right: h[2],
1134
- top: h[3]
1131
+ left: d[0],
1132
+ bottom: d[1],
1133
+ right: d[2],
1134
+ top: d[3]
1135
1135
  },
1136
1136
  projectedCorners: f,
1137
- tileWidth: i,
1138
- tileHeight: a,
1139
- forwardTransform: P,
1137
+ tileWidth: a,
1138
+ tileHeight: i,
1139
+ forwardTransform: b,
1140
1140
  inverseTransform: x
1141
1141
  };
1142
1142
  }
1143
1143
  }
1144
- const S = 512, $e = 40075016686e-3, Q = S / $e, et = {
1145
- ...ne.defaultProps,
1144
+ const N = 512, rt = 40075016686e-3, _ = N / rt, st = {
1145
+ ...ie.defaultProps,
1146
1146
  maxError: 0.125,
1147
1147
  debug: !1,
1148
1148
  debugOpacity: 0.5
1149
1149
  };
1150
- class xt extends te {
1150
+ class Dt extends oe {
1151
1151
  static layerName = "RasterTileLayer";
1152
- static defaultProps = et;
1152
+ static defaultProps = st;
1153
1153
  /**
1154
1154
  * The currently effective {@link RasterTilesetDescriptor}.
1155
1155
  *
@@ -1202,7 +1202,7 @@ class xt extends te {
1202
1202
  */
1203
1203
  _renderDebug(e, t) {
1204
1204
  const n = this._tilesetDescriptor();
1205
- return n ? Pe(`${this.id}-${e.id}-bounds`, e, n.projectTo4326) : [];
1205
+ return n ? Te(`${this.id}-${e.id}-bounds`, e, n.projectTo4326) : [];
1206
1206
  }
1207
1207
  renderLayers() {
1208
1208
  const e = this._tilesetDescriptor(), t = this._getTileDataCallback(), n = this._renderTileCallback();
@@ -1210,56 +1210,56 @@ class xt extends te {
1210
1210
  }
1211
1211
  _renderTileLayer(e, t, n) {
1212
1212
  const s = this.context.device;
1213
- class r extends _e {
1214
- constructor(L) {
1215
- super(L, e, {
1213
+ class o extends nt {
1214
+ constructor(w) {
1215
+ super(w, e, {
1216
1216
  getPixelRatio: () => {
1217
- const j = s.getDefaultCanvasContext(), [w] = j.getDrawingBufferSize(), [O] = j.getCSSSize();
1218
- return O ? w / O : 1;
1217
+ const M = s.getDefaultCanvasContext(), [j] = M.getDrawingBufferSize(), [O] = M.getCSSSize();
1218
+ return O ? j / O : 1;
1219
1219
  }
1220
1220
  });
1221
1221
  }
1222
1222
  }
1223
- const { tileSize: a, zoomOffset: i, maxZoom: c, minZoom: u, extent: l, debounceTime: d, maxCacheSize: f, maxCacheByteSize: h, maxRequests: p, refinementStrategy: m, updateTriggers: g, onTileError: b, onTileLoad: P, onTileUnload: x, onViewportLoad: v } = this.props;
1224
- return new ne({
1223
+ const { tileSize: i, zoomOffset: a, maxZoom: c, minZoom: u, extent: l, debounceTime: h, maxCacheSize: f, maxCacheByteSize: d, maxRequests: m, refinementStrategy: p, updateTriggers: g, onTileError: P, onTileLoad: b, onTileUnload: x, onViewportLoad: v } = this.props;
1224
+ return new ie({
1225
1225
  id: `raster-tile-layer-${this.id}`,
1226
- TilesetClass: r,
1227
- getTileData: (T) => this._wrapGetTileData(T, t),
1228
- renderSubLayers: (T) => this._renderSubLayers(T, e, n),
1226
+ TilesetClass: o,
1227
+ getTileData: (y) => this._wrapGetTileData(y, t),
1228
+ renderSubLayers: (y) => this._renderSubLayers(y, e, n),
1229
1229
  updateTriggers: {
1230
1230
  renderSubLayers: g?.renderTile
1231
1231
  },
1232
- tileSize: a,
1233
- zoomOffset: i,
1232
+ tileSize: i,
1233
+ zoomOffset: a,
1234
1234
  maxZoom: c,
1235
1235
  minZoom: u,
1236
1236
  extent: l,
1237
- debounceTime: d,
1237
+ debounceTime: h,
1238
1238
  maxCacheSize: f,
1239
- maxCacheByteSize: h,
1240
- maxRequests: p,
1241
- refinementStrategy: m,
1242
- onTileError: b,
1243
- onTileLoad: P,
1239
+ maxCacheByteSize: d,
1240
+ maxRequests: m,
1241
+ refinementStrategy: p,
1242
+ onTileError: P,
1243
+ onTileLoad: b,
1244
1244
  onTileUnload: x,
1245
1245
  onViewportLoad: v
1246
1246
  });
1247
1247
  }
1248
1248
  async _wrapGetTileData(e, t) {
1249
- const { signal: n } = e, s = this.props.signal, r = s && n ? AbortSignal.any([s, n]) : s ?? n, a = {
1249
+ const { signal: n } = e, s = this.props.signal, o = s && n ? AbortSignal.any([s, n]) : s ?? n, i = {
1250
1250
  device: this.context.device,
1251
- signal: r
1251
+ signal: o
1252
1252
  };
1253
- return t(e, a);
1253
+ return t(e, i);
1254
1254
  }
1255
1255
  _renderSubLayers(e, t, n) {
1256
- const { maxError: s, debug: r, debugOpacity: a } = this.props, i = e.tile, c = r ? this._renderDebug(i, e.data ?? null) : [];
1256
+ const { maxError: s, debug: o, debugOpacity: i } = this.props, a = e.tile, c = o ? this._renderDebug(a, e.data ?? null) : [];
1257
1257
  if (!e.data)
1258
1258
  return c;
1259
- const { forwardTransform: u, inverseTransform: l } = i, d = n(e.data);
1260
- if (!d)
1259
+ const { forwardTransform: u, inverseTransform: l } = a, h = n(e.data);
1260
+ if (!h)
1261
1261
  return c;
1262
- const { image: f, renderPipeline: h } = d, { width: p, height: m } = e.data, g = this.context.viewport.resolution !== void 0, b = g ? {
1262
+ const { image: f, renderPipeline: d } = h, { width: m, height: p } = e.data, g = this.context.viewport.resolution !== void 0, P = g ? {
1263
1263
  forwardTransform: u,
1264
1264
  inverseTransform: l,
1265
1265
  forwardReproject: t.projectTo4326,
@@ -1269,17 +1269,17 @@ class xt extends te {
1269
1269
  inverseTransform: l,
1270
1270
  forwardReproject: t.projectTo3857,
1271
1271
  inverseReproject: t.projectFrom3857
1272
- }, P = g ? {} : {
1272
+ }, b = g ? {} : {
1273
1273
  coordinateSystem: "cartesian",
1274
- coordinateOrigin: [S / 2, S / 2, 0],
1274
+ coordinateOrigin: [N / 2, N / 2, 0],
1275
1275
  // biome-ignore format: array
1276
1276
  modelMatrix: [
1277
- Q,
1277
+ _,
1278
1278
  0,
1279
1279
  0,
1280
1280
  0,
1281
1281
  0,
1282
- Q,
1282
+ _,
1283
1283
  0,
1284
1284
  0,
1285
1285
  0,
@@ -1292,23 +1292,23 @@ class xt extends te {
1292
1292
  1
1293
1293
  ]
1294
1294
  };
1295
- return [new Ce(this.getSubLayerProps({
1295
+ return [new Be(this.getSubLayerProps({
1296
1296
  id: `${e.id}-raster`,
1297
- width: p,
1298
- height: m,
1297
+ width: m,
1298
+ height: p,
1299
1299
  // Passing `image: undefined` explicitly would trip isAsyncPropLoading
1300
1300
  // and cause a transient black flash (see issue #376).
1301
1301
  ...f !== void 0 && { image: f },
1302
- renderPipeline: h,
1302
+ renderPipeline: d,
1303
1303
  maxError: s,
1304
- reprojectionFns: b,
1305
- debug: r,
1306
- debugOpacity: a,
1307
- ...P
1304
+ reprojectionFns: P,
1305
+ debug: o,
1306
+ debugOpacity: i,
1307
+ ...b
1308
1308
  })), ...c];
1309
1309
  }
1310
1310
  }
1311
- const C = "colormap", tt = {
1311
+ const C = "colormap", ot = {
1312
1312
  name: C,
1313
1313
  fs: `uniform ${C}Uniforms {
1314
1314
  int colormapIndex;
@@ -1334,12 +1334,12 @@ uniform sampler2DArray colormapTexture;
1334
1334
  colormapIndex: "i32",
1335
1335
  reversed: "f32"
1336
1336
  },
1337
- getUniforms: (o) => ({
1338
- colormapTexture: o.colormapTexture,
1339
- colormapIndex: o.colormapIndex ?? 0,
1340
- reversed: o.reversed ?? !1
1337
+ getUniforms: (r) => ({
1338
+ colormapTexture: r.colormapTexture,
1339
+ colormapIndex: r.colormapIndex ?? 0,
1340
+ reversed: r.reversed ?? !1
1341
1341
  })
1342
- }, X = {
1342
+ }, I = {
1343
1343
  accent: 0,
1344
1344
  afmhot: 1,
1345
1345
  algae: 2,
@@ -1447,12 +1447,77 @@ uniform sampler2DArray colormapTexture;
1447
1447
  ylgnbu: 104,
1448
1448
  ylorbr: 105,
1449
1449
  ylorrd: 106
1450
+ }, T = "compositeBands", it = {
1451
+ name: T,
1452
+ // Texture samplers — declared via inject, bound via getUniforms
1453
+ inject: {
1454
+ "fs:#decl": (
1455
+ /* glsl */
1456
+ `
1457
+ uniform sampler2D band0;
1458
+ uniform sampler2D band1;
1459
+ uniform sampler2D band2;
1460
+ uniform sampler2D band3;
1461
+
1462
+ vec2 compositeBands_applyUv(vec2 uv, vec4 transform) {
1463
+ return uv * transform.zw + transform.xy;
1464
+ }
1465
+
1466
+ float compositeBands_sampleSlot(int slot, vec2 uv) {
1467
+ if (slot == 0) return texture(band0, compositeBands_applyUv(uv, ${T}.uvTransform0)).r;
1468
+ if (slot == 1) return texture(band1, compositeBands_applyUv(uv, ${T}.uvTransform1)).r;
1469
+ if (slot == 2) return texture(band2, compositeBands_applyUv(uv, ${T}.uvTransform2)).r;
1470
+ if (slot == 3) return texture(band3, compositeBands_applyUv(uv, ${T}.uvTransform3)).r;
1471
+ return 0.0;
1472
+ }
1473
+ `
1474
+ ),
1475
+ "fs:DECKGL_FILTER_COLOR": (
1476
+ /* glsl */
1477
+ `
1478
+ float r = ${T}.channelMap.r >= 0 ? compositeBands_sampleSlot(${T}.channelMap.r, geometry.uv) : 0.0;
1479
+ float g = ${T}.channelMap.g >= 0 ? compositeBands_sampleSlot(${T}.channelMap.g, geometry.uv) : 0.0;
1480
+ float b = ${T}.channelMap.b >= 0 ? compositeBands_sampleSlot(${T}.channelMap.b, geometry.uv) : 0.0;
1481
+ float a = ${T}.channelMap.a >= 0 ? compositeBands_sampleSlot(${T}.channelMap.a, geometry.uv) : 1.0;
1482
+ color = vec4(r, g, b, a);
1483
+ `
1484
+ )
1485
+ },
1486
+ // Scalar uniforms — declared via fs uniform block + uniformTypes
1487
+ fs: `uniform ${T}Uniforms {
1488
+ vec4 uvTransform0;
1489
+ vec4 uvTransform1;
1490
+ vec4 uvTransform2;
1491
+ vec4 uvTransform3;
1492
+ ivec4 channelMap;
1493
+ } ${T};
1494
+ `,
1495
+ uniformTypes: {
1496
+ uvTransform0: "vec4<f32>",
1497
+ uvTransform1: "vec4<f32>",
1498
+ uvTransform2: "vec4<f32>",
1499
+ uvTransform3: "vec4<f32>",
1500
+ channelMap: "vec4<i32>"
1501
+ },
1502
+ getUniforms: (r) => ({
1503
+ // Texture bindings
1504
+ band0: r.band0,
1505
+ band1: r.band1,
1506
+ band2: r.band2,
1507
+ band3: r.band3,
1508
+ // Scalar uniforms (uniform block)
1509
+ uvTransform0: r.uvTransform0 ?? [0, 0, 1, 1],
1510
+ uvTransform1: r.uvTransform1 ?? [0, 0, 1, 1],
1511
+ uvTransform2: r.uvTransform2 ?? [0, 0, 1, 1],
1512
+ uvTransform3: r.uvTransform3 ?? [0, 0, 1, 1],
1513
+ channelMap: r.channelMap ?? [0, 1, 2, -1]
1514
+ })
1450
1515
  };
1451
- function nt(o, e) {
1516
+ function at(r, e) {
1452
1517
  if (e.width !== 256)
1453
1518
  throw new Error(`Expected a 256-pixel-wide colormap sprite, got width ${e.width}.`);
1454
1519
  const t = new Uint8Array(e.data.buffer, e.data.byteOffset, e.data.byteLength);
1455
- return o.createTexture({
1520
+ return r.createTexture({
1456
1521
  dimension: "2d-array",
1457
1522
  format: "rgba8unorm",
1458
1523
  width: 256,
@@ -1471,32 +1536,32 @@ function nt(o, e) {
1471
1536
  }
1472
1537
  });
1473
1538
  }
1474
- async function st(o) {
1475
- const e = await rt(o);
1539
+ async function ct(r) {
1540
+ const e = await lt(r);
1476
1541
  try {
1477
- return ot(e);
1542
+ return ut(e);
1478
1543
  } finally {
1479
1544
  e.close();
1480
1545
  }
1481
1546
  }
1482
- async function rt(o) {
1483
- if (o instanceof ImageBitmap)
1484
- return o;
1485
- const e = new Blob([o]);
1547
+ async function lt(r) {
1548
+ if (r instanceof ImageBitmap)
1549
+ return r;
1550
+ const e = new Blob([r]);
1486
1551
  return createImageBitmap(e);
1487
1552
  }
1488
- function ot(o) {
1489
- const t = new OffscreenCanvas(o.width, o.height).getContext("2d");
1553
+ function ut(r) {
1554
+ const t = new OffscreenCanvas(r.width, r.height).getContext("2d");
1490
1555
  if (!t)
1491
1556
  throw new Error("Failed to obtain 2D context for decoding the colormap sprite.");
1492
- return t.drawImage(o, 0, 0), t.getImageData(0, 0, o.width, o.height);
1557
+ return t.drawImage(r, 0, 0), t.getImageData(0, 0, r.width, r.height);
1493
1558
  }
1494
- const N = "nodata", it = `uniform ${N}Uniforms {
1559
+ const F = "nodata", dt = `uniform ${F}Uniforms {
1495
1560
  float value;
1496
- } ${N};
1497
- `, at = {
1498
- name: N,
1499
- fs: it,
1561
+ } ${F};
1562
+ `, ht = {
1563
+ name: F,
1564
+ fs: dt,
1500
1565
  inject: {
1501
1566
  "fs:DECKGL_FILTER_COLOR": (
1502
1567
  /* glsl */
@@ -1510,21 +1575,21 @@ const N = "nodata", it = `uniform ${N}Uniforms {
1510
1575
  uniformTypes: {
1511
1576
  value: "f32"
1512
1577
  },
1513
- getUniforms: (o) => ({
1514
- value: o.value
1578
+ getUniforms: (r) => ({
1579
+ value: r.value
1515
1580
  })
1516
- }, M = "linearRescale", ct = {
1517
- name: M,
1518
- fs: `uniform ${M}Uniforms {
1581
+ }, A = "linearRescale", ft = {
1582
+ name: A,
1583
+ fs: `uniform ${A}Uniforms {
1519
1584
  float rescaleMin;
1520
1585
  float rescaleMax;
1521
- } ${M};
1586
+ } ${A};
1522
1587
  `,
1523
1588
  inject: {
1524
1589
  "fs:DECKGL_FILTER_COLOR": (
1525
1590
  /* glsl */
1526
1591
  `
1527
- color.rgb = clamp((color.rgb - ${M}.rescaleMin) / (${M}.rescaleMax - ${M}.rescaleMin), 0.0, 1.0);
1592
+ color.rgb = clamp((color.rgb - ${A}.rescaleMin) / (${A}.rescaleMax - ${A}.rescaleMin), 0.0, 1.0);
1528
1593
  `
1529
1594
  )
1530
1595
  },
@@ -1532,54 +1597,201 @@ const N = "nodata", it = `uniform ${N}Uniforms {
1532
1597
  rescaleMin: "f32",
1533
1598
  rescaleMax: "f32"
1534
1599
  },
1535
- getUniforms: (o) => ({
1536
- rescaleMin: o.rescaleMin ?? 0,
1537
- rescaleMax: o.rescaleMax ?? 1
1600
+ getUniforms: (r) => ({
1601
+ rescaleMin: r.rescaleMin ?? 0,
1602
+ rescaleMax: r.rescaleMax ?? 1
1538
1603
  })
1539
- }, lt = "data:image/png;base64,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", _ = /* @__PURE__ */ new WeakMap();
1540
- function bt(o) {
1541
- const e = _.get(o);
1604
+ }, mt = "data:image/png;base64,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", $ = /* @__PURE__ */ new WeakMap();
1605
+ function It(r) {
1606
+ const e = $.get(r);
1542
1607
  if (e) return e;
1543
1608
  const t = (async () => {
1544
- const n = await (await fetch(lt)).arrayBuffer();
1545
- return nt(o, await st(n));
1609
+ const n = await (await fetch(mt)).arrayBuffer();
1610
+ return at(r, await ct(n));
1546
1611
  })();
1547
- return _.set(o, t), t;
1612
+ return $.set(r, t), t;
1613
+ }
1614
+ const ee = /* @__PURE__ */ new Set();
1615
+ function pt(r) {
1616
+ return r in I ? I[r] : (ee.has(r) || (ee.add(r), console.warn(`[onlymapjs] raster: unknown colormap "${r}" — falling back to gray.`)), I.gray);
1617
+ }
1618
+ const te = /* @__PURE__ */ new Set();
1619
+ function gt(r, e) {
1620
+ const t = e >= 3 ? [0, 1, 2] : [0];
1621
+ if (r == null) return t;
1622
+ const n = typeof r == "number" ? [r] : r;
1623
+ if (!(Array.isArray(n) && (n.length === 1 || n.length === 3) && n.every((o) => Number.isInteger(o) && o >= 1 && o <= e))) {
1624
+ const o = JSON.stringify(r);
1625
+ return te.has(o) || (te.add(o), console.warn(`[onlymapjs] raster: bands=${o} is not a 1-based band or [r,g,b] triple within this source's ${e} band(s) — using the default.`)), t;
1626
+ }
1627
+ return n.map((o) => o - 1);
1628
+ }
1629
+ function Xt(r, e, t, n) {
1630
+ const s = t * r.width + e, o = [];
1631
+ if (r.layout === "band-separate")
1632
+ for (let i = 0; i < n; i++) o.push(Number(r.bands[i][s]));
1633
+ else {
1634
+ const { data: i, count: a } = r;
1635
+ for (let c = 0; c < n; c++) o.push(Number(i[s * a + c]));
1636
+ }
1637
+ return o;
1638
+ }
1639
+ function vt(r, e) {
1640
+ if (r.layout === "band-separate") {
1641
+ const i = r.bands[e];
1642
+ return i instanceof Float32Array ? i : Float32Array.from(i);
1643
+ }
1644
+ const { data: t, count: n } = r, s = r.width * r.height, o = new Float32Array(s);
1645
+ for (let i = 0; i < s; i++) o[i] = t[i * n + e];
1646
+ return o;
1548
1647
  }
1549
- const $ = /* @__PURE__ */ new Set();
1550
- function ut(o) {
1551
- return o in X ? X[o] : ($.has(o) || ($.add(o), console.warn(`[onlymapjs] raster: unknown colormap "${o}" — falling back to gray.`)), X.gray);
1648
+ function bt(r, e) {
1649
+ const t = new Set(e);
1650
+ if (r.array)
1651
+ for (const [s, o] of r.bandTextures)
1652
+ t.has(s) || (o.destroy(), r.bandTextures.delete(s));
1653
+ for (const s of t) {
1654
+ if (r.bandTextures.has(s) || !r.array) continue;
1655
+ const o = vt(r.array, s);
1656
+ r.bandTextures.set(
1657
+ s,
1658
+ r.device.createTexture({
1659
+ data: o,
1660
+ format: "r32float",
1661
+ width: r.width,
1662
+ height: r.height,
1663
+ // NEAREST sampling: OES_texture_float_linear isn't universal.
1664
+ sampler: { minFilter: "nearest", magFilter: "nearest" }
1665
+ })
1666
+ );
1667
+ }
1668
+ const n = r.bandTextures.values().next().value;
1669
+ return e.map((s) => r.bandTextures.get(s) ?? n);
1552
1670
  }
1553
- function Tt(o, e) {
1554
- const t = [
1555
- // Per-tile textureName (not the layer-level `image:` shorthand — that
1556
- // binds only the first tile's sampler in this setup).
1557
- { module: se, props: { textureName: o.texture } }
1558
- ], n = e.nodataOverride ?? o.nodata;
1559
- return n != null && Number.isFinite(n) && t.push({ module: at, props: { value: n } }), t.push({
1560
- module: ct,
1561
- props: { rescaleMin: e.rescaleMin ?? 0, rescaleMax: e.rescaleMax ?? 255 }
1562
- }), o.bandCount === 1 && t.push({
1563
- module: tt,
1564
- props: { colormapTexture: o.colormapTexture, colormapIndex: ut(e.colormap ?? "gray") }
1565
- }), { renderPipeline: t };
1671
+ function Et(r) {
1672
+ for (const e of r.bandTextures.values()) e.destroy();
1673
+ r.bandTextures.clear(), r.array = null;
1674
+ }
1675
+ const xt = {
1676
+ name: "perBandRescale",
1677
+ fs: `uniform perBandRescaleUniforms {
1678
+ vec3 minV;
1679
+ vec3 maxV;
1680
+ } perBandRescale;
1681
+ `,
1682
+ inject: {
1683
+ "fs:DECKGL_FILTER_COLOR": (
1684
+ /* glsl */
1685
+ `
1686
+ color.rgb = clamp((color.rgb - perBandRescale.minV) / (perBandRescale.maxV - perBandRescale.minV), 0.0, 1.0);
1687
+ `
1688
+ )
1689
+ },
1690
+ uniformTypes: { minV: "vec3<f32>", maxV: "vec3<f32>" },
1691
+ getUniforms: (r) => ({
1692
+ minV: r.minV ?? [0, 0, 0],
1693
+ maxV: r.maxV ?? [255, 255, 255]
1694
+ })
1695
+ }, Pt = {
1696
+ name: "stretchGamma",
1697
+ fs: `uniform stretchGammaUniforms {
1698
+ float mode;
1699
+ float invGamma;
1700
+ } stretchGamma;
1701
+ `,
1702
+ inject: {
1703
+ "fs:DECKGL_FILTER_COLOR": (
1704
+ /* glsl */
1705
+ `
1706
+ if (stretchGamma.mode > 0.5 && stretchGamma.mode < 1.5) {
1707
+ color.rgb = log(1.0 + 9.0 * color.rgb) / log(10.0);
1708
+ } else if (stretchGamma.mode > 1.5) {
1709
+ color.rgb = sqrt(color.rgb);
1710
+ }
1711
+ color.rgb = pow(color.rgb, vec3(stretchGamma.invGamma));
1712
+ `
1713
+ )
1714
+ },
1715
+ uniformTypes: { mode: "f32", invGamma: "f32" },
1716
+ getUniforms: (r) => ({
1717
+ mode: r.mode ?? 0,
1718
+ invGamma: r.invGamma ?? 1
1719
+ })
1720
+ }, ne = /* @__PURE__ */ new Set();
1721
+ function yt(r) {
1722
+ return r == null || r === "" || r === "linear" ? 0 : r === "log" ? 1 : r === "sqrt" ? 2 : (ne.has(r) || (ne.add(r), console.warn(`[onlymapjs] raster: stretch="${r}" is not linear|log|sqrt — using linear.`)), 0);
1723
+ }
1724
+ const re = /* @__PURE__ */ new Set();
1725
+ function Tt(r) {
1726
+ return r == null ? 1 : Number.isFinite(r) && r > 0 ? r : (re.has(r) || (re.add(r), console.warn(`[onlymapjs] raster: gamma=${r} — a power-law exponent must be > 0; ignoring.`)), 1);
1727
+ }
1728
+ function Lt(r, e) {
1729
+ const t = (i, a) => i == null ? a : typeof i == "number" || Array.isArray(i) && i.length === 3 && i.every((c) => typeof c == "number" && Number.isFinite(c)) && e.length === 3 ? i : Array.isArray(i) && typeof i[0] == "number" ? i[0] : a, n = t(r.rescaleMin, 0), s = t(r.rescaleMax, 255);
1730
+ if (typeof n == "number" && typeof s == "number") return { kind: "scalar", min: n, max: s };
1731
+ const o = (i) => typeof i == "number" ? [i, i, i] : i;
1732
+ return { kind: "per-band", minV: o(n), maxV: o(s) };
1733
+ }
1734
+ function wt(r, e) {
1735
+ if (r.length === 1) {
1736
+ const t = e(r[0]);
1737
+ return [t, t, t, -1];
1738
+ }
1739
+ return [e(r[0]), e(r[1]), e(r[2]), -1];
1740
+ }
1741
+ function St(r, e) {
1742
+ const t = gt(e.bands, r.bandCount), n = bt(r, t), s = [...new Set(t)], o = (f) => s.indexOf(f), i = (f) => {
1743
+ const d = s[f];
1744
+ return d === void 0 ? n[0] : r.bandTextures.get(d) ?? n[0];
1745
+ }, a = [
1746
+ // Base-texture insurance: CompositeBands rewrites the color wholesale,
1747
+ // but the underlying raster mesh expects a bound base texture — slot-0's
1748
+ // band doubles as it (harmless; immediately overwritten).
1749
+ { module: ae, props: { textureName: n[0] } },
1750
+ {
1751
+ module: it,
1752
+ props: {
1753
+ band0: i(0),
1754
+ band1: i(1),
1755
+ band2: i(2),
1756
+ band3: i(3),
1757
+ channelMap: wt(t, o)
1758
+ }
1759
+ }
1760
+ ], c = e.nodataOverride ?? r.nodata;
1761
+ c != null && Number.isFinite(c) && a.push({ module: ht, props: { value: c } });
1762
+ const u = Lt(e, t);
1763
+ u.kind === "scalar" ? a.push({ module: ft, props: { rescaleMin: u.min, rescaleMax: u.max } }) : a.push({ module: xt, props: { minV: u.minV, maxV: u.maxV } });
1764
+ const l = yt(e.stretch), h = Tt(e.gamma);
1765
+ return (l !== 0 || h !== 1) && a.push({ module: Pt, props: { mode: l, invGamma: 1 / h } }), t.length === 1 && a.push({
1766
+ module: ot,
1767
+ props: {
1768
+ colormapTexture: r.colormapTexture,
1769
+ colormapIndex: pt(e.colormap ?? "gray"),
1770
+ reversed: e.reverse === !0
1771
+ }
1772
+ }), { renderPipeline: a };
1566
1773
  }
1567
1774
  export {
1568
- mt as A,
1569
- tt as C,
1570
- at as F,
1571
- xt as R,
1572
- y as a,
1573
- se as b,
1574
- ze as c,
1575
- ft as d,
1576
- vt as e,
1577
- Pt as f,
1578
- Tt as g,
1579
- bt as h,
1775
+ Ct as A,
1776
+ ot as C,
1777
+ ht as F,
1778
+ Dt as R,
1779
+ L as a,
1780
+ ae as b,
1781
+ Xe as c,
1782
+ jt as d,
1783
+ zt as e,
1784
+ Bt as f,
1785
+ Et as g,
1786
+ Xt as h,
1580
1787
  q as i,
1581
- gt as m,
1582
- Ie as p,
1583
- pt as s,
1584
- Re as t
1788
+ St as j,
1789
+ It as k,
1790
+ bt as l,
1791
+ Rt as m,
1792
+ vt as n,
1793
+ Ne as p,
1794
+ gt as r,
1795
+ At as s,
1796
+ Ie as t
1585
1797
  };