@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.
- package/LICENSE +19 -0
- package/dist/cartoRasterTile-worker.js +2 -2
- package/dist/cartoSpatialTile-worker.js +2 -2
- package/dist/cartoVectorTile-worker.js +502 -2
- package/dist/dist.dev.js +521 -17
- package/dist/es5/api/maps-v3-client.js +1 -1
- package/dist/es5/api/maps-v3-client.js.map +1 -1
- package/dist/es5/layers/carto-tile-layer.js +1 -10
- package/dist/es5/layers/carto-tile-layer.js.map +1 -1
- package/dist/es5/layers/h3-tile-layer.js +1 -2
- package/dist/es5/layers/h3-tile-layer.js.map +1 -1
- package/dist/es5/layers/quadbin-tile-layer.js +1 -2
- package/dist/es5/layers/quadbin-tile-layer.js.map +1 -1
- package/dist/es5/layers/schema/carto-raster-tile-loader.js +2 -2
- package/dist/es5/layers/schema/carto-raster-tile-loader.js.map +1 -1
- package/dist/es5/layers/schema/carto-spatial-tile-loader.js +2 -2
- package/dist/es5/layers/schema/carto-spatial-tile-loader.js.map +1 -1
- package/dist/es5/layers/schema/carto-vector-tile-loader.js +53 -2
- package/dist/es5/layers/schema/carto-vector-tile-loader.js.map +1 -1
- package/dist/esm/api/maps-v3-client.js +1 -1
- package/dist/esm/api/maps-v3-client.js.map +1 -1
- package/dist/esm/layers/carto-tile-layer.js +2 -10
- package/dist/esm/layers/carto-tile-layer.js.map +1 -1
- package/dist/esm/layers/h3-tile-layer.js +1 -2
- package/dist/esm/layers/h3-tile-layer.js.map +1 -1
- package/dist/esm/layers/quadbin-tile-layer.js +1 -2
- package/dist/esm/layers/quadbin-tile-layer.js.map +1 -1
- package/dist/esm/layers/schema/carto-raster-tile-loader.js +2 -2
- package/dist/esm/layers/schema/carto-raster-tile-loader.js.map +1 -1
- package/dist/esm/layers/schema/carto-spatial-tile-loader.js +2 -2
- package/dist/esm/layers/schema/carto-spatial-tile-loader.js.map +1 -1
- package/dist/esm/layers/schema/carto-vector-tile-loader.js +53 -2
- package/dist/esm/layers/schema/carto-vector-tile-loader.js.map +1 -1
- package/dist.min.js +24 -24
- package/package.json +8 -8
- package/src/api/maps-v3-client.ts +1 -1
- package/src/layers/carto-tile-layer.ts +2 -12
- package/src/layers/h3-tile-layer.ts +1 -2
- package/src/layers/quadbin-tile-layer.ts +1 -2
- package/src/layers/schema/carto-raster-tile-loader.ts +1 -1
- package/src/layers/schema/carto-spatial-tile-loader.ts +1 -1
- package/src/layers/schema/carto-vector-tile-loader.ts +57 -4
- package/typed/layers/carto-tile-layer.d.ts.map +1 -1
- package/typed/layers/h3-tile-layer.d.ts.map +1 -1
- package/typed/layers/quadbin-tile-layer.d.ts.map +1 -1
- 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.
|
|
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:
|
|
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.
|
|
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:
|
|
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.
|
|
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:
|
|
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;
|