@deck.gl/carto 8.9.25 → 8.9.27

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 (46) hide show
  1. package/LICENSE +19 -0
  2. package/dist/cartoRasterTile-worker.js +2 -2
  3. package/dist/cartoSpatialTile-worker.js +2 -2
  4. package/dist/cartoVectorTile-worker.js +502 -2
  5. package/dist/dist.dev.js +521 -17
  6. package/dist/es5/api/maps-v3-client.js +1 -1
  7. package/dist/es5/api/maps-v3-client.js.map +1 -1
  8. package/dist/es5/layers/carto-tile-layer.js +1 -10
  9. package/dist/es5/layers/carto-tile-layer.js.map +1 -1
  10. package/dist/es5/layers/h3-tile-layer.js +1 -2
  11. package/dist/es5/layers/h3-tile-layer.js.map +1 -1
  12. package/dist/es5/layers/quadbin-tile-layer.js +1 -2
  13. package/dist/es5/layers/quadbin-tile-layer.js.map +1 -1
  14. package/dist/es5/layers/schema/carto-raster-tile-loader.js +2 -2
  15. package/dist/es5/layers/schema/carto-raster-tile-loader.js.map +1 -1
  16. package/dist/es5/layers/schema/carto-spatial-tile-loader.js +2 -2
  17. package/dist/es5/layers/schema/carto-spatial-tile-loader.js.map +1 -1
  18. package/dist/es5/layers/schema/carto-vector-tile-loader.js +53 -2
  19. package/dist/es5/layers/schema/carto-vector-tile-loader.js.map +1 -1
  20. package/dist/esm/api/maps-v3-client.js +1 -1
  21. package/dist/esm/api/maps-v3-client.js.map +1 -1
  22. package/dist/esm/layers/carto-tile-layer.js +2 -10
  23. package/dist/esm/layers/carto-tile-layer.js.map +1 -1
  24. package/dist/esm/layers/h3-tile-layer.js +1 -2
  25. package/dist/esm/layers/h3-tile-layer.js.map +1 -1
  26. package/dist/esm/layers/quadbin-tile-layer.js +1 -2
  27. package/dist/esm/layers/quadbin-tile-layer.js.map +1 -1
  28. package/dist/esm/layers/schema/carto-raster-tile-loader.js +2 -2
  29. package/dist/esm/layers/schema/carto-raster-tile-loader.js.map +1 -1
  30. package/dist/esm/layers/schema/carto-spatial-tile-loader.js +2 -2
  31. package/dist/esm/layers/schema/carto-spatial-tile-loader.js.map +1 -1
  32. package/dist/esm/layers/schema/carto-vector-tile-loader.js +53 -2
  33. package/dist/esm/layers/schema/carto-vector-tile-loader.js.map +1 -1
  34. package/dist.min.js +24 -24
  35. package/package.json +8 -8
  36. package/src/api/maps-v3-client.ts +1 -1
  37. package/src/layers/carto-tile-layer.ts +2 -12
  38. package/src/layers/h3-tile-layer.ts +1 -2
  39. package/src/layers/quadbin-tile-layer.ts +1 -2
  40. package/src/layers/schema/carto-raster-tile-loader.ts +1 -1
  41. package/src/layers/schema/carto-spatial-tile-loader.ts +1 -1
  42. package/src/layers/schema/carto-vector-tile-loader.ts +57 -4
  43. package/typed/layers/carto-tile-layer.d.ts.map +1 -1
  44. package/typed/layers/h3-tile-layer.d.ts.map +1 -1
  45. package/typed/layers/quadbin-tile-layer.d.ts.map +1 -1
  46. package/typed/layers/schema/carto-vector-tile-loader.d.ts.map +1 -1
package/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright Vis.gl contributors.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
@@ -1045,7 +1045,7 @@
1045
1045
  }
1046
1046
 
1047
1047
  // src/layers/schema/carto-raster-tile-loader.ts
1048
- var VERSION = true ? "8.9.25" : "latest";
1048
+ var VERSION = true ? "8.9.27" : "latest";
1049
1049
  var id = "cartoRasterTile";
1050
1050
  var DEFAULT_OPTIONS = {
1051
1051
  cartoRasterTile: {
@@ -1062,7 +1062,7 @@
1062
1062
  category: "geometry",
1063
1063
  parse: async (arrayBuffer, options) => parseCartoRasterTile(arrayBuffer, options),
1064
1064
  parseSync: parseCartoRasterTile,
1065
- worker: false,
1065
+ worker: true,
1066
1066
  options: DEFAULT_OPTIONS
1067
1067
  };
1068
1068
  function parseCartoRasterTile(arrayBuffer, options) {
@@ -1432,7 +1432,7 @@
1432
1432
  }
1433
1433
 
1434
1434
  // src/layers/schema/carto-spatial-tile-loader.ts
1435
- var VERSION = true ? "8.9.25" : "latest";
1435
+ var VERSION = true ? "8.9.27" : "latest";
1436
1436
  var id = "cartoSpatialTile";
1437
1437
  var DEFAULT_OPTIONS = {
1438
1438
  cartoSpatialTile: {
@@ -1450,7 +1450,7 @@
1450
1450
  category: "geometry",
1451
1451
  parse: async (arrayBuffer, options) => parseCartoSpatialTile(arrayBuffer, options),
1452
1452
  parseSync: parseCartoSpatialTile,
1453
- worker: false,
1453
+ worker: true,
1454
1454
  options: DEFAULT_OPTIONS
1455
1455
  };
1456
1456
  function parseCartoSpatialTile(arrayBuffer, options) {
@@ -22,6 +22,471 @@
22
22
  mod
23
23
  ));
24
24
 
25
+ // ../../node_modules/earcut/src/earcut.js
26
+ var require_earcut = __commonJS({
27
+ "../../node_modules/earcut/src/earcut.js"(exports, module) {
28
+ "use strict";
29
+ module.exports = earcut2;
30
+ module.exports.default = earcut2;
31
+ function earcut2(data, holeIndices, dim) {
32
+ dim = dim || 2;
33
+ var hasHoles = holeIndices && holeIndices.length, outerLen = hasHoles ? holeIndices[0] * dim : data.length, outerNode = linkedList(data, 0, outerLen, dim, true), triangles = [];
34
+ if (!outerNode || outerNode.next === outerNode.prev)
35
+ return triangles;
36
+ var minX, minY, maxX, maxY, x, y, invSize;
37
+ if (hasHoles)
38
+ outerNode = eliminateHoles(data, holeIndices, outerNode, dim);
39
+ if (data.length > 80 * dim) {
40
+ minX = maxX = data[0];
41
+ minY = maxY = data[1];
42
+ for (var i = dim; i < outerLen; i += dim) {
43
+ x = data[i];
44
+ y = data[i + 1];
45
+ if (x < minX)
46
+ minX = x;
47
+ if (y < minY)
48
+ minY = y;
49
+ if (x > maxX)
50
+ maxX = x;
51
+ if (y > maxY)
52
+ maxY = y;
53
+ }
54
+ invSize = Math.max(maxX - minX, maxY - minY);
55
+ invSize = invSize !== 0 ? 1 / invSize : 0;
56
+ }
57
+ earcutLinked(outerNode, triangles, dim, minX, minY, invSize);
58
+ return triangles;
59
+ }
60
+ function linkedList(data, start, end, dim, clockwise) {
61
+ var i, last;
62
+ if (clockwise === signedArea(data, start, end, dim) > 0) {
63
+ for (i = start; i < end; i += dim)
64
+ last = insertNode(i, data[i], data[i + 1], last);
65
+ } else {
66
+ for (i = end - dim; i >= start; i -= dim)
67
+ last = insertNode(i, data[i], data[i + 1], last);
68
+ }
69
+ if (last && equals(last, last.next)) {
70
+ removeNode(last);
71
+ last = last.next;
72
+ }
73
+ return last;
74
+ }
75
+ function filterPoints(start, end) {
76
+ if (!start)
77
+ return start;
78
+ if (!end)
79
+ end = start;
80
+ var p = start, again;
81
+ do {
82
+ again = false;
83
+ if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {
84
+ removeNode(p);
85
+ p = end = p.prev;
86
+ if (p === p.next)
87
+ break;
88
+ again = true;
89
+ } else {
90
+ p = p.next;
91
+ }
92
+ } while (again || p !== end);
93
+ return end;
94
+ }
95
+ function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {
96
+ if (!ear)
97
+ return;
98
+ if (!pass && invSize)
99
+ indexCurve(ear, minX, minY, invSize);
100
+ var stop = ear, prev, next;
101
+ while (ear.prev !== ear.next) {
102
+ prev = ear.prev;
103
+ next = ear.next;
104
+ if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {
105
+ triangles.push(prev.i / dim);
106
+ triangles.push(ear.i / dim);
107
+ triangles.push(next.i / dim);
108
+ removeNode(ear);
109
+ ear = next.next;
110
+ stop = next.next;
111
+ continue;
112
+ }
113
+ ear = next;
114
+ if (ear === stop) {
115
+ if (!pass) {
116
+ earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);
117
+ } else if (pass === 1) {
118
+ ear = cureLocalIntersections(filterPoints(ear), triangles, dim);
119
+ earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);
120
+ } else if (pass === 2) {
121
+ splitEarcut(ear, triangles, dim, minX, minY, invSize);
122
+ }
123
+ break;
124
+ }
125
+ }
126
+ }
127
+ function isEar(ear) {
128
+ var a = ear.prev, b = ear, c = ear.next;
129
+ if (area(a, b, c) >= 0)
130
+ return false;
131
+ var p = ear.next.next;
132
+ while (p !== ear.prev) {
133
+ if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0)
134
+ return false;
135
+ p = p.next;
136
+ }
137
+ return true;
138
+ }
139
+ function isEarHashed(ear, minX, minY, invSize) {
140
+ var a = ear.prev, b = ear, c = ear.next;
141
+ if (area(a, b, c) >= 0)
142
+ return false;
143
+ var minTX = a.x < b.x ? a.x < c.x ? a.x : c.x : b.x < c.x ? b.x : c.x, minTY = a.y < b.y ? a.y < c.y ? a.y : c.y : b.y < c.y ? b.y : c.y, maxTX = a.x > b.x ? a.x > c.x ? a.x : c.x : b.x > c.x ? b.x : c.x, maxTY = a.y > b.y ? a.y > c.y ? a.y : c.y : b.y > c.y ? b.y : c.y;
144
+ var minZ = zOrder(minTX, minTY, minX, minY, invSize), maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);
145
+ var p = ear.prevZ, n = ear.nextZ;
146
+ while (p && p.z >= minZ && n && n.z <= maxZ) {
147
+ if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0)
148
+ return false;
149
+ p = p.prevZ;
150
+ if (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0)
151
+ return false;
152
+ n = n.nextZ;
153
+ }
154
+ while (p && p.z >= minZ) {
155
+ if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0)
156
+ return false;
157
+ p = p.prevZ;
158
+ }
159
+ while (n && n.z <= maxZ) {
160
+ if (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0)
161
+ return false;
162
+ n = n.nextZ;
163
+ }
164
+ return true;
165
+ }
166
+ function cureLocalIntersections(start, triangles, dim) {
167
+ var p = start;
168
+ do {
169
+ var a = p.prev, b = p.next.next;
170
+ if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {
171
+ triangles.push(a.i / dim);
172
+ triangles.push(p.i / dim);
173
+ triangles.push(b.i / dim);
174
+ removeNode(p);
175
+ removeNode(p.next);
176
+ p = start = b;
177
+ }
178
+ p = p.next;
179
+ } while (p !== start);
180
+ return filterPoints(p);
181
+ }
182
+ function splitEarcut(start, triangles, dim, minX, minY, invSize) {
183
+ var a = start;
184
+ do {
185
+ var b = a.next.next;
186
+ while (b !== a.prev) {
187
+ if (a.i !== b.i && isValidDiagonal(a, b)) {
188
+ var c = splitPolygon(a, b);
189
+ a = filterPoints(a, a.next);
190
+ c = filterPoints(c, c.next);
191
+ earcutLinked(a, triangles, dim, minX, minY, invSize);
192
+ earcutLinked(c, triangles, dim, minX, minY, invSize);
193
+ return;
194
+ }
195
+ b = b.next;
196
+ }
197
+ a = a.next;
198
+ } while (a !== start);
199
+ }
200
+ function eliminateHoles(data, holeIndices, outerNode, dim) {
201
+ var queue = [], i, len, start, end, list;
202
+ for (i = 0, len = holeIndices.length; i < len; i++) {
203
+ start = holeIndices[i] * dim;
204
+ end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
205
+ list = linkedList(data, start, end, dim, false);
206
+ if (list === list.next)
207
+ list.steiner = true;
208
+ queue.push(getLeftmost(list));
209
+ }
210
+ queue.sort(compareX);
211
+ for (i = 0; i < queue.length; i++) {
212
+ eliminateHole(queue[i], outerNode);
213
+ outerNode = filterPoints(outerNode, outerNode.next);
214
+ }
215
+ return outerNode;
216
+ }
217
+ function compareX(a, b) {
218
+ return a.x - b.x;
219
+ }
220
+ function eliminateHole(hole, outerNode) {
221
+ outerNode = findHoleBridge(hole, outerNode);
222
+ if (outerNode) {
223
+ var b = splitPolygon(outerNode, hole);
224
+ filterPoints(b, b.next);
225
+ }
226
+ }
227
+ function findHoleBridge(hole, outerNode) {
228
+ var p = outerNode, hx = hole.x, hy = hole.y, qx = -Infinity, m;
229
+ do {
230
+ if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {
231
+ var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);
232
+ if (x <= hx && x > qx) {
233
+ qx = x;
234
+ if (x === hx) {
235
+ if (hy === p.y)
236
+ return p;
237
+ if (hy === p.next.y)
238
+ return p.next;
239
+ }
240
+ m = p.x < p.next.x ? p : p.next;
241
+ }
242
+ }
243
+ p = p.next;
244
+ } while (p !== outerNode);
245
+ if (!m)
246
+ return null;
247
+ if (hx === qx)
248
+ return m;
249
+ var stop = m, mx = m.x, my = m.y, tanMin = Infinity, tan;
250
+ p = m;
251
+ do {
252
+ if (hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {
253
+ tan = Math.abs(hy - p.y) / (hx - p.x);
254
+ if (locallyInside(p, hole) && (tan < tanMin || tan === tanMin && (p.x > m.x || p.x === m.x && sectorContainsSector(m, p)))) {
255
+ m = p;
256
+ tanMin = tan;
257
+ }
258
+ }
259
+ p = p.next;
260
+ } while (p !== stop);
261
+ return m;
262
+ }
263
+ function sectorContainsSector(m, p) {
264
+ return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;
265
+ }
266
+ function indexCurve(start, minX, minY, invSize) {
267
+ var p = start;
268
+ do {
269
+ if (p.z === null)
270
+ p.z = zOrder(p.x, p.y, minX, minY, invSize);
271
+ p.prevZ = p.prev;
272
+ p.nextZ = p.next;
273
+ p = p.next;
274
+ } while (p !== start);
275
+ p.prevZ.nextZ = null;
276
+ p.prevZ = null;
277
+ sortLinked(p);
278
+ }
279
+ function sortLinked(list) {
280
+ var i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1;
281
+ do {
282
+ p = list;
283
+ list = null;
284
+ tail = null;
285
+ numMerges = 0;
286
+ while (p) {
287
+ numMerges++;
288
+ q = p;
289
+ pSize = 0;
290
+ for (i = 0; i < inSize; i++) {
291
+ pSize++;
292
+ q = q.nextZ;
293
+ if (!q)
294
+ break;
295
+ }
296
+ qSize = inSize;
297
+ while (pSize > 0 || qSize > 0 && q) {
298
+ if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {
299
+ e = p;
300
+ p = p.nextZ;
301
+ pSize--;
302
+ } else {
303
+ e = q;
304
+ q = q.nextZ;
305
+ qSize--;
306
+ }
307
+ if (tail)
308
+ tail.nextZ = e;
309
+ else
310
+ list = e;
311
+ e.prevZ = tail;
312
+ tail = e;
313
+ }
314
+ p = q;
315
+ }
316
+ tail.nextZ = null;
317
+ inSize *= 2;
318
+ } while (numMerges > 1);
319
+ return list;
320
+ }
321
+ function zOrder(x, y, minX, minY, invSize) {
322
+ x = 32767 * (x - minX) * invSize;
323
+ y = 32767 * (y - minY) * invSize;
324
+ x = (x | x << 8) & 16711935;
325
+ x = (x | x << 4) & 252645135;
326
+ x = (x | x << 2) & 858993459;
327
+ x = (x | x << 1) & 1431655765;
328
+ y = (y | y << 8) & 16711935;
329
+ y = (y | y << 4) & 252645135;
330
+ y = (y | y << 2) & 858993459;
331
+ y = (y | y << 1) & 1431655765;
332
+ return x | y << 1;
333
+ }
334
+ function getLeftmost(start) {
335
+ var p = start, leftmost = start;
336
+ do {
337
+ if (p.x < leftmost.x || p.x === leftmost.x && p.y < leftmost.y)
338
+ leftmost = p;
339
+ p = p.next;
340
+ } while (p !== start);
341
+ return leftmost;
342
+ }
343
+ function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {
344
+ return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
345
+ }
346
+ function isValidDiagonal(a, b) {
347
+ return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && (area(a.prev, a, b.prev) || area(a, b.prev, b)) || equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0);
348
+ }
349
+ function area(p, q, r) {
350
+ return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
351
+ }
352
+ function equals(p1, p2) {
353
+ return p1.x === p2.x && p1.y === p2.y;
354
+ }
355
+ function intersects(p1, q1, p2, q2) {
356
+ var o1 = sign(area(p1, q1, p2));
357
+ var o2 = sign(area(p1, q1, q2));
358
+ var o3 = sign(area(p2, q2, p1));
359
+ var o4 = sign(area(p2, q2, q1));
360
+ if (o1 !== o2 && o3 !== o4)
361
+ return true;
362
+ if (o1 === 0 && onSegment(p1, p2, q1))
363
+ return true;
364
+ if (o2 === 0 && onSegment(p1, q2, q1))
365
+ return true;
366
+ if (o3 === 0 && onSegment(p2, p1, q2))
367
+ return true;
368
+ if (o4 === 0 && onSegment(p2, q1, q2))
369
+ return true;
370
+ return false;
371
+ }
372
+ function onSegment(p, q, r) {
373
+ return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);
374
+ }
375
+ function sign(num) {
376
+ return num > 0 ? 1 : num < 0 ? -1 : 0;
377
+ }
378
+ function intersectsPolygon(a, b) {
379
+ var p = a;
380
+ do {
381
+ if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b))
382
+ return true;
383
+ p = p.next;
384
+ } while (p !== a);
385
+ return false;
386
+ }
387
+ function locallyInside(a, b) {
388
+ return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;
389
+ }
390
+ function middleInside(a, b) {
391
+ var p = a, inside = false, px = (a.x + b.x) / 2, py = (a.y + b.y) / 2;
392
+ do {
393
+ if (p.y > py !== p.next.y > py && p.next.y !== p.y && px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)
394
+ inside = !inside;
395
+ p = p.next;
396
+ } while (p !== a);
397
+ return inside;
398
+ }
399
+ function splitPolygon(a, b) {
400
+ var a2 = new Node(a.i, a.x, a.y), b2 = new Node(b.i, b.x, b.y), an = a.next, bp = b.prev;
401
+ a.next = b;
402
+ b.prev = a;
403
+ a2.next = an;
404
+ an.prev = a2;
405
+ b2.next = a2;
406
+ a2.prev = b2;
407
+ bp.next = b2;
408
+ b2.prev = bp;
409
+ return b2;
410
+ }
411
+ function insertNode(i, x, y, last) {
412
+ var p = new Node(i, x, y);
413
+ if (!last) {
414
+ p.prev = p;
415
+ p.next = p;
416
+ } else {
417
+ p.next = last.next;
418
+ p.prev = last;
419
+ last.next.prev = p;
420
+ last.next = p;
421
+ }
422
+ return p;
423
+ }
424
+ function removeNode(p) {
425
+ p.next.prev = p.prev;
426
+ p.prev.next = p.next;
427
+ if (p.prevZ)
428
+ p.prevZ.nextZ = p.nextZ;
429
+ if (p.nextZ)
430
+ p.nextZ.prevZ = p.prevZ;
431
+ }
432
+ function Node(i, x, y) {
433
+ this.i = i;
434
+ this.x = x;
435
+ this.y = y;
436
+ this.prev = null;
437
+ this.next = null;
438
+ this.z = null;
439
+ this.prevZ = null;
440
+ this.nextZ = null;
441
+ this.steiner = false;
442
+ }
443
+ earcut2.deviation = function(data, holeIndices, dim, triangles) {
444
+ var hasHoles = holeIndices && holeIndices.length;
445
+ var outerLen = hasHoles ? holeIndices[0] * dim : data.length;
446
+ var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));
447
+ if (hasHoles) {
448
+ for (var i = 0, len = holeIndices.length; i < len; i++) {
449
+ var start = holeIndices[i] * dim;
450
+ var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
451
+ polygonArea -= Math.abs(signedArea(data, start, end, dim));
452
+ }
453
+ }
454
+ var trianglesArea = 0;
455
+ for (i = 0; i < triangles.length; i += 3) {
456
+ var a = triangles[i] * dim;
457
+ var b = triangles[i + 1] * dim;
458
+ var c = triangles[i + 2] * dim;
459
+ trianglesArea += Math.abs(
460
+ (data[a] - data[c]) * (data[b + 1] - data[a + 1]) - (data[a] - data[b]) * (data[c + 1] - data[a + 1])
461
+ );
462
+ }
463
+ return polygonArea === 0 && trianglesArea === 0 ? 0 : Math.abs((trianglesArea - polygonArea) / polygonArea);
464
+ };
465
+ function signedArea(data, start, end, dim) {
466
+ var sum = 0;
467
+ for (var i = start, j = end - dim; i < end; i += dim) {
468
+ sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);
469
+ j = i;
470
+ }
471
+ return sum;
472
+ }
473
+ earcut2.flatten = function(data) {
474
+ var dim = data[0][0].length, result = { vertices: [], holes: [], dimensions: dim }, holeIndex = 0;
475
+ for (var i = 0; i < data.length; i++) {
476
+ for (var j = 0; j < data[i].length; j++) {
477
+ for (var d = 0; d < dim; d++)
478
+ result.vertices.push(data[i][j][d]);
479
+ }
480
+ if (i > 0) {
481
+ holeIndex += data[i - 1].length;
482
+ result.holes.push(holeIndex);
483
+ }
484
+ }
485
+ return result;
486
+ };
487
+ }
488
+ });
489
+
25
490
  // ../../node_modules/pbf/node_modules/ieee754/index.js
26
491
  var require_ieee754 = __commonJS({
27
492
  "../../node_modules/pbf/node_modules/ieee754/index.js"(exports) {
@@ -977,6 +1442,9 @@
977
1442
  }, context, loader);
978
1443
  }
979
1444
 
1445
+ // src/layers/schema/carto-vector-tile-loader.ts
1446
+ var import_earcut = __toESM(require_earcut());
1447
+
980
1448
  // src/layers/schema/fast-pbf.ts
981
1449
  function readPackedTypedArray(TypedArray, pbf, obj) {
982
1450
  const end = pbf.type === 2 ? pbf.readVarint() + pbf.pos : pbf.pos + 1;
@@ -1194,7 +1662,7 @@
1194
1662
  }
1195
1663
 
1196
1664
  // src/layers/schema/carto-vector-tile-loader.ts
1197
- var VERSION = true ? "8.9.25" : "latest";
1665
+ var VERSION = true ? "8.9.27" : "latest";
1198
1666
  var id = "cartoVectorTile";
1199
1667
  var DEFAULT_OPTIONS = {
1200
1668
  cartoVectorTile: {
@@ -1211,13 +1679,45 @@
1211
1679
  category: "geometry",
1212
1680
  parse: async (arrayBuffer, options) => parseCartoVectorTile(arrayBuffer, options),
1213
1681
  parseSync: parseCartoVectorTile,
1214
- worker: false,
1682
+ worker: true,
1215
1683
  options: DEFAULT_OPTIONS
1216
1684
  };
1685
+ function triangulatePolygon(polygons, target, {
1686
+ startPosition,
1687
+ endPosition,
1688
+ indices
1689
+ }) {
1690
+ const coordLength = polygons.positions.size;
1691
+ const start = startPosition * coordLength;
1692
+ const end = endPosition * coordLength;
1693
+ const polygonPositions = polygons.positions.value.subarray(start, end);
1694
+ const holes = indices.slice(1).map((n) => n - startPosition);
1695
+ const triangles = (0, import_earcut.default)(polygonPositions, holes, coordLength);
1696
+ for (let t = 0, tl = triangles.length; t < tl; ++t) {
1697
+ target.push(startPosition + triangles[t]);
1698
+ }
1699
+ }
1700
+ function triangulate(polygons) {
1701
+ const { polygonIndices, positions, primitivePolygonIndices } = polygons;
1702
+ const triangles = [];
1703
+ let rangeStart = 0;
1704
+ for (let i = 0; i < polygonIndices.value.length - 1; i++) {
1705
+ const startPosition = polygonIndices.value[i];
1706
+ const endPosition = polygonIndices.value[i + 1];
1707
+ const rangeEnd = primitivePolygonIndices.value.indexOf(endPosition);
1708
+ const indices = primitivePolygonIndices.value.subarray(rangeStart, rangeEnd);
1709
+ rangeStart = rangeEnd;
1710
+ triangulatePolygon(polygons, triangles, { startPosition, endPosition, indices });
1711
+ }
1712
+ polygons.triangles = { value: new Uint32Array(triangles), size: 1 };
1713
+ }
1217
1714
  function parseCartoVectorTile(arrayBuffer, options) {
1218
1715
  if (!arrayBuffer)
1219
1716
  return null;
1220
1717
  const tile = parsePbf(arrayBuffer, TileReader);
1718
+ if (tile.polygons && !tile.polygons.triangles) {
1719
+ triangulate(tile.polygons);
1720
+ }
1221
1721
  return tile;
1222
1722
  }
1223
1723
  var carto_vector_tile_loader_default = CartoVectorTileLoader;