@gisatcz/deckgl-geolib 1.5.0 → 1.6.0-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -4,6 +4,7 @@ var core = require('@deck.gl/core');
4
4
  var geoLayers = require('@deck.gl/geo-layers');
5
5
  var layers = require('@deck.gl/layers');
6
6
  var chroma = require('chroma-js');
7
+ var core$1 = require('@luma.gl/core');
7
8
 
8
9
  /******************************************************************************
9
10
  Copyright (c) Microsoft Corporation.
@@ -32,6 +33,1226 @@ function __awaiter(thisArg, _arguments, P, generator) {
32
33
  });
33
34
  }
34
35
 
36
+ function _typeof(obj) {
37
+ "@babel/helpers - typeof";
38
+
39
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
40
+ return typeof obj;
41
+ } : function (obj) {
42
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
43
+ }, _typeof(obj);
44
+ }
45
+
46
+ function _toPrimitive(input, hint) {
47
+ if (_typeof(input) !== "object" || input === null) return input;
48
+ var prim = input[Symbol.toPrimitive];
49
+ if (prim !== undefined) {
50
+ var res = prim.call(input, hint || "default");
51
+ if (_typeof(res) !== "object") return res;
52
+ throw new TypeError("@@toPrimitive must return a primitive value.");
53
+ }
54
+ return (hint === "string" ? String : Number)(input);
55
+ }
56
+
57
+ function _toPropertyKey(arg) {
58
+ var key = _toPrimitive(arg, "string");
59
+ return _typeof(key) === "symbol" ? key : String(key);
60
+ }
61
+
62
+ function _defineProperty(obj, key, value) {
63
+ key = _toPropertyKey(key);
64
+ if (key in obj) {
65
+ Object.defineProperty(obj, key, {
66
+ value: value,
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true
70
+ });
71
+ } else {
72
+ obj[key] = value;
73
+ }
74
+ return obj;
75
+ }
76
+
77
+ /**
78
+ * Common utilities
79
+ * @module glMatrix
80
+ */
81
+ // Configuration Constants
82
+ var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;
83
+ if (!Math.hypot) Math.hypot = function () {
84
+ var y = 0,
85
+ i = arguments.length;
86
+
87
+ while (i--) {
88
+ y += arguments[i] * arguments[i];
89
+ }
90
+
91
+ return Math.sqrt(y);
92
+ };
93
+
94
+ /**
95
+ * 2 Dimensional Vector
96
+ * @module vec2
97
+ */
98
+
99
+ /**
100
+ * Creates a new, empty vec2
101
+ *
102
+ * @returns {vec2} a new 2D vector
103
+ */
104
+
105
+ function create$2() {
106
+ var out = new ARRAY_TYPE(2);
107
+
108
+ if (ARRAY_TYPE != Float32Array) {
109
+ out[0] = 0;
110
+ out[1] = 0;
111
+ }
112
+
113
+ return out;
114
+ }
115
+ /**
116
+ * Perform some operation over an array of vec2s.
117
+ *
118
+ * @param {Array} a the array of vectors to iterate over
119
+ * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed
120
+ * @param {Number} offset Number of elements to skip at the beginning of the array
121
+ * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array
122
+ * @param {Function} fn Function to call for each vector in the array
123
+ * @param {Object} [arg] additional argument to pass to fn
124
+ * @returns {Array} a
125
+ * @function
126
+ */
127
+
128
+ (function () {
129
+ var vec = create$2();
130
+ return function (a, stride, offset, count, fn, arg) {
131
+ var i, l;
132
+
133
+ if (!stride) {
134
+ stride = 2;
135
+ }
136
+
137
+ if (!offset) {
138
+ offset = 0;
139
+ }
140
+
141
+ if (count) {
142
+ l = Math.min(count * stride + offset, a.length);
143
+ } else {
144
+ l = a.length;
145
+ }
146
+
147
+ for (i = offset; i < l; i += stride) {
148
+ vec[0] = a[i];
149
+ vec[1] = a[i + 1];
150
+ fn(vec, vec, arg);
151
+ a[i] = vec[0];
152
+ a[i + 1] = vec[1];
153
+ }
154
+
155
+ return a;
156
+ };
157
+ })();
158
+
159
+ /**
160
+ * 3 Dimensional Vector
161
+ * @module vec3
162
+ */
163
+
164
+ /**
165
+ * Creates a new, empty vec3
166
+ *
167
+ * @returns {vec3} a new 3D vector
168
+ */
169
+
170
+ function create$1() {
171
+ var out = new ARRAY_TYPE(3);
172
+
173
+ if (ARRAY_TYPE != Float32Array) {
174
+ out[0] = 0;
175
+ out[1] = 0;
176
+ out[2] = 0;
177
+ }
178
+
179
+ return out;
180
+ }
181
+ /**
182
+ * Perform some operation over an array of vec3s.
183
+ *
184
+ * @param {Array} a the array of vectors to iterate over
185
+ * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed
186
+ * @param {Number} offset Number of elements to skip at the beginning of the array
187
+ * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array
188
+ * @param {Function} fn Function to call for each vector in the array
189
+ * @param {Object} [arg] additional argument to pass to fn
190
+ * @returns {Array} a
191
+ * @function
192
+ */
193
+
194
+ (function () {
195
+ var vec = create$1();
196
+ return function (a, stride, offset, count, fn, arg) {
197
+ var i, l;
198
+
199
+ if (!stride) {
200
+ stride = 3;
201
+ }
202
+
203
+ if (!offset) {
204
+ offset = 0;
205
+ }
206
+
207
+ if (count) {
208
+ l = Math.min(count * stride + offset, a.length);
209
+ } else {
210
+ l = a.length;
211
+ }
212
+
213
+ for (i = offset; i < l; i += stride) {
214
+ vec[0] = a[i];
215
+ vec[1] = a[i + 1];
216
+ vec[2] = a[i + 2];
217
+ fn(vec, vec, arg);
218
+ a[i] = vec[0];
219
+ a[i + 1] = vec[1];
220
+ a[i + 2] = vec[2];
221
+ }
222
+
223
+ return a;
224
+ };
225
+ })();
226
+
227
+ /**
228
+ * 4 Dimensional Vector
229
+ * @module vec4
230
+ */
231
+
232
+ /**
233
+ * Creates a new, empty vec4
234
+ *
235
+ * @returns {vec4} a new 4D vector
236
+ */
237
+
238
+ function create() {
239
+ var out = new ARRAY_TYPE(4);
240
+
241
+ if (ARRAY_TYPE != Float32Array) {
242
+ out[0] = 0;
243
+ out[1] = 0;
244
+ out[2] = 0;
245
+ out[3] = 0;
246
+ }
247
+
248
+ return out;
249
+ }
250
+ /**
251
+ * Perform some operation over an array of vec4s.
252
+ *
253
+ * @param {Array} a the array of vectors to iterate over
254
+ * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed
255
+ * @param {Number} offset Number of elements to skip at the beginning of the array
256
+ * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array
257
+ * @param {Function} fn Function to call for each vector in the array
258
+ * @param {Object} [arg] additional argument to pass to fn
259
+ * @returns {Array} a
260
+ * @function
261
+ */
262
+
263
+ (function () {
264
+ var vec = create();
265
+ return function (a, stride, offset, count, fn, arg) {
266
+ var i, l;
267
+
268
+ if (!stride) {
269
+ stride = 4;
270
+ }
271
+
272
+ if (!offset) {
273
+ offset = 0;
274
+ }
275
+
276
+ if (count) {
277
+ l = Math.min(count * stride + offset, a.length);
278
+ } else {
279
+ l = a.length;
280
+ }
281
+
282
+ for (i = offset; i < l; i += stride) {
283
+ vec[0] = a[i];
284
+ vec[1] = a[i + 1];
285
+ vec[2] = a[i + 2];
286
+ vec[3] = a[i + 3];
287
+ fn(vec, vec, arg);
288
+ a[i] = vec[0];
289
+ a[i + 1] = vec[1];
290
+ a[i + 2] = vec[2];
291
+ a[i + 3] = vec[3];
292
+ }
293
+
294
+ return a;
295
+ };
296
+ })();
297
+
298
+ function joinLayerBounds(layers, viewport) {
299
+ const bounds = [Infinity, Infinity, -Infinity, -Infinity];
300
+
301
+ for (const layer of layers) {
302
+ const layerBounds = layer.getBounds();
303
+
304
+ if (layerBounds) {
305
+ const bottomLeftCommon = layer.projectPosition(layerBounds[0], {
306
+ viewport,
307
+ autoOffset: false
308
+ });
309
+ const topRightCommon = layer.projectPosition(layerBounds[1], {
310
+ viewport,
311
+ autoOffset: false
312
+ });
313
+ bounds[0] = Math.min(bounds[0], bottomLeftCommon[0]);
314
+ bounds[1] = Math.min(bounds[1], bottomLeftCommon[1]);
315
+ bounds[2] = Math.max(bounds[2], topRightCommon[0]);
316
+ bounds[3] = Math.max(bounds[3], topRightCommon[1]);
317
+ }
318
+ }
319
+
320
+ if (Number.isFinite(bounds[0])) {
321
+ return bounds;
322
+ }
323
+
324
+ return null;
325
+ }
326
+ const MAX_VIEWPORT_SIZE = 2048;
327
+ function makeViewport(opts) {
328
+ const {
329
+ bounds,
330
+ viewport,
331
+ border = 0
332
+ } = opts;
333
+ const {
334
+ isGeospatial
335
+ } = viewport;
336
+
337
+ if (bounds[2] <= bounds[0] || bounds[3] <= bounds[1]) {
338
+ return null;
339
+ }
340
+
341
+ const centerWorld = viewport.unprojectPosition([(bounds[0] + bounds[2]) / 2, (bounds[1] + bounds[3]) / 2, 0]);
342
+ let {
343
+ width,
344
+ height,
345
+ zoom
346
+ } = opts;
347
+
348
+ if (zoom === undefined) {
349
+ width = width - border * 2;
350
+ height = height - border * 2;
351
+ const scale = Math.min(width / (bounds[2] - bounds[0]), height / (bounds[3] - bounds[1]));
352
+ zoom = Math.min(Math.log2(scale), 20);
353
+ } else if (!width || !height) {
354
+ const scale = 2 ** zoom;
355
+ width = Math.round(Math.abs(bounds[2] - bounds[0]) * scale);
356
+ height = Math.round(Math.abs(bounds[3] - bounds[1]) * scale);
357
+ const maxSize = MAX_VIEWPORT_SIZE - border * 2;
358
+
359
+ if (width > maxSize || height > maxSize) {
360
+ const r = maxSize / Math.max(width, height);
361
+ width = Math.round(width * r);
362
+ height = Math.round(height * r);
363
+ zoom += Math.log2(r);
364
+ }
365
+ }
366
+
367
+ return isGeospatial ? new core.WebMercatorViewport({
368
+ id: viewport.id,
369
+ x: border,
370
+ y: border,
371
+ width,
372
+ height,
373
+ longitude: centerWorld[0],
374
+ latitude: centerWorld[1],
375
+ zoom,
376
+ orthographic: true
377
+ }) : new core.OrthographicViewport({
378
+ id: viewport.id,
379
+ x: border,
380
+ y: border,
381
+ width,
382
+ height,
383
+ target: centerWorld,
384
+ zoom,
385
+ flipY: false
386
+ });
387
+ }
388
+ function getViewportBounds(viewport, zRange) {
389
+ let viewportBoundsWorld;
390
+
391
+ if (zRange && zRange.length === 2) {
392
+ const [minZ, maxZ] = zRange;
393
+ const bounds0 = viewport.getBounds({
394
+ z: minZ
395
+ });
396
+ const bounds1 = viewport.getBounds({
397
+ z: maxZ
398
+ });
399
+ viewportBoundsWorld = [Math.min(bounds0[0], bounds1[0]), Math.min(bounds0[1], bounds1[1]), Math.max(bounds0[2], bounds1[2]), Math.max(bounds0[3], bounds1[3])];
400
+ } else {
401
+ viewportBoundsWorld = viewport.getBounds();
402
+ }
403
+
404
+ const viewportBottomLeftCommon = viewport.projectPosition(viewportBoundsWorld.slice(0, 2));
405
+ const viewportTopRightCommon = viewport.projectPosition(viewportBoundsWorld.slice(2, 4));
406
+ return [viewportBottomLeftCommon[0], viewportBottomLeftCommon[1], viewportTopRightCommon[0], viewportTopRightCommon[1]];
407
+ }
408
+ function getRenderBounds(layerBounds, viewport, zRange) {
409
+ if (!layerBounds) {
410
+ return [0, 0, 1, 1];
411
+ }
412
+
413
+ const viewportBounds = getViewportBounds(viewport, zRange);
414
+ const paddedBounds = doubleBounds(viewportBounds);
415
+
416
+ if (layerBounds[2] - layerBounds[0] <= paddedBounds[2] - paddedBounds[0] && layerBounds[3] - layerBounds[1] <= paddedBounds[3] - paddedBounds[1]) {
417
+ return layerBounds;
418
+ }
419
+
420
+ return [Math.max(layerBounds[0], paddedBounds[0]), Math.max(layerBounds[1], paddedBounds[1]), Math.min(layerBounds[2], paddedBounds[2]), Math.min(layerBounds[3], paddedBounds[3])];
421
+ }
422
+
423
+ function doubleBounds(bounds) {
424
+ const dx = bounds[2] - bounds[0];
425
+ const dy = bounds[3] - bounds[1];
426
+ const centerX = (bounds[0] + bounds[2]) / 2;
427
+ const centerY = (bounds[1] + bounds[3]) / 2;
428
+ return [centerX - dx, centerY - dy, centerX + dx, centerY + dy];
429
+ }
430
+
431
+ const TERRAIN_MODE = {
432
+ NONE: 0,
433
+ WRITE_HEIGHT_MAP: 1,
434
+ USE_HEIGHT_MAP: 2,
435
+ USE_COVER: 3,
436
+ USE_COVER_ONLY: 4,
437
+ SKIP: 5
438
+ };
439
+ const TERRAIN_MODE_CONSTANTS = Object.keys(TERRAIN_MODE).map(key => "const float TERRAIN_MODE_".concat(key, " = ").concat(TERRAIN_MODE[key], ".0;")).join('\n');
440
+ const terrainModule = {
441
+ name: 'terrain',
442
+ dependencies: [core.project],
443
+ inject: {
444
+ 'vs:#decl': "\nuniform float terrain_mode;\nuniform sampler2D terrain_map;\nuniform vec4 terrain_bounds;\nvarying vec3 commonPos;\n".concat(TERRAIN_MODE_CONSTANTS, "\n "),
445
+ 'vs:#main-start': "\nif (terrain_mode == TERRAIN_MODE_SKIP) {\n gl_Position = vec4(0.0);\n return;\n}\n",
446
+ 'vs:DECKGL_FILTER_GL_POSITION': "\ncommonPos = geometry.position.xyz;\nif (terrain_mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {\n vec2 texCoords = (commonPos.xy - terrain_bounds.xy) / terrain_bounds.zw;\n position = vec4(texCoords * 2.0 - 1.0, 0.0, 1.0);\n commonPos.z += project_uCommonOrigin.z;\n}\nif (terrain_mode == TERRAIN_MODE_USE_HEIGHT_MAP) {\n vec3 anchor = geometry.worldPosition;\n anchor.z = 0.0;\n vec3 anchorCommon = project_position(anchor);\n vec2 texCoords = (anchorCommon.xy - terrain_bounds.xy) / terrain_bounds.zw;\n if (texCoords.x >= 0.0 && texCoords.y >= 0.0 && texCoords.x <= 1.0 && texCoords.y <= 1.0) {\n float terrainZ = texture2D(terrain_map, texCoords).r;\n geometry.position.z += terrainZ;\n position = project_common_position_to_clipspace(geometry.position);\n }\n}\n ",
447
+ 'fs:#decl': "\nuniform float terrain_mode;\nuniform sampler2D terrain_map;\nuniform vec4 terrain_bounds;\nvarying vec3 commonPos;\n".concat(TERRAIN_MODE_CONSTANTS, "\n "),
448
+ 'fs:#main-start': "\nif (terrain_mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {\n gl_FragColor = vec4(commonPos.z, 0.0, 0.0, 1.0);\n return;\n}\n ",
449
+ 'fs:DECKGL_FILTER_COLOR': "\nif ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_USE_COVER_ONLY)) {\n vec2 texCoords = (commonPos.xy - terrain_bounds.xy) / terrain_bounds.zw;\n vec4 pixel = texture2D(terrain_map, texCoords);\n if (terrain_mode == TERRAIN_MODE_USE_COVER_ONLY) {\n color = pixel;\n } else {\n // pixel is premultiplied\n color = pixel + color * (1.0 - pixel.a);\n }\n return;\n}\n "
450
+ },
451
+ getUniforms: (opts = {}, uniforms) => {
452
+ if ('dummyHeightMap' in opts) {
453
+ const {
454
+ drawToTerrainHeightMap,
455
+ heightMap,
456
+ heightMapBounds,
457
+ dummyHeightMap,
458
+ terrainCover,
459
+ useTerrainHeightMap,
460
+ terrainSkipRender
461
+ } = opts;
462
+ const {
463
+ project_uCommonOrigin
464
+ } = uniforms;
465
+ let mode = terrainSkipRender ? TERRAIN_MODE.SKIP : TERRAIN_MODE.NONE;
466
+ let sampler = dummyHeightMap;
467
+ let bounds = null;
468
+
469
+ if (drawToTerrainHeightMap) {
470
+ mode = TERRAIN_MODE.WRITE_HEIGHT_MAP;
471
+ bounds = heightMapBounds;
472
+ } else if (useTerrainHeightMap && heightMap) {
473
+ mode = TERRAIN_MODE.USE_HEIGHT_MAP;
474
+ sampler = heightMap;
475
+ bounds = heightMapBounds;
476
+ } else if (terrainCover) {
477
+ const isPicking = opts.pickingActive;
478
+ sampler = isPicking ? terrainCover.getPickingFramebuffer() : terrainCover.getRenderFramebuffer();
479
+
480
+ if (isPicking) {
481
+ mode = TERRAIN_MODE.SKIP;
482
+ }
483
+
484
+ if (sampler) {
485
+ mode = mode === TERRAIN_MODE.SKIP ? TERRAIN_MODE.USE_COVER_ONLY : TERRAIN_MODE.USE_COVER;
486
+ bounds = terrainCover.bounds;
487
+ } else {
488
+ sampler = dummyHeightMap;
489
+ }
490
+ }
491
+
492
+ return {
493
+ terrain_mode: mode,
494
+ terrain_map: sampler,
495
+ terrain_bounds: bounds ? [bounds[0] - project_uCommonOrigin[0], bounds[1] - project_uCommonOrigin[1], bounds[2] - bounds[0], bounds[3] - bounds[1]] : [0, 0, 0, 0]
496
+ };
497
+ }
498
+
499
+ return null;
500
+ }
501
+ };
502
+
503
+ function createRenderTarget(gl, opts) {
504
+ return new core$1.Framebuffer(gl, {
505
+ id: opts.id,
506
+ attachments: {
507
+ [36064]: new core$1.Texture2D(gl, { ...(opts.float && {
508
+ format: core$1.isWebGL2(gl) ? 34836 : 6408,
509
+ type: 5126
510
+ }),
511
+ mipmaps: false,
512
+ parameters: {
513
+ [10241]: 9729,
514
+ [10240]: 9729,
515
+ [10242]: 33071,
516
+ [10243]: 33071
517
+ }
518
+ })
519
+ }
520
+ });
521
+ }
522
+
523
+ class TerrainCover {
524
+ constructor(targetLayer) {
525
+ _defineProperty(this, "isDirty", true);
526
+
527
+ _defineProperty(this, "targetLayer", void 0);
528
+
529
+ _defineProperty(this, "renderViewport", null);
530
+
531
+ _defineProperty(this, "bounds", null);
532
+
533
+ _defineProperty(this, "fbo", void 0);
534
+
535
+ _defineProperty(this, "pickingFbo", void 0);
536
+
537
+ _defineProperty(this, "layers", []);
538
+
539
+ _defineProperty(this, "tile", void 0);
540
+
541
+ _defineProperty(this, "targetBounds", null);
542
+
543
+ _defineProperty(this, "targetBoundsCommon", null);
544
+
545
+ this.targetLayer = targetLayer;
546
+ this.tile = getTile(targetLayer);
547
+ }
548
+
549
+ get id() {
550
+ return this.targetLayer.id;
551
+ }
552
+
553
+ get isActive() {
554
+ return Boolean(this.targetLayer.getCurrentLayer());
555
+ }
556
+
557
+ shouldUpdate({
558
+ targetLayer,
559
+ viewport,
560
+ layers,
561
+ layerNeedsRedraw
562
+ }) {
563
+ if (targetLayer) {
564
+ this.targetLayer = targetLayer;
565
+ }
566
+
567
+ const sizeChanged = viewport ? this._updateViewport(viewport) : false;
568
+ let layersChanged = layers ? this._updateLayers(layers) : false;
569
+
570
+ if (layerNeedsRedraw) {
571
+ for (const id of this.layers) {
572
+ if (layerNeedsRedraw[id]) {
573
+ layersChanged = true;
574
+ break;
575
+ }
576
+ }
577
+ }
578
+
579
+ return layersChanged || sizeChanged;
580
+ }
581
+
582
+ _updateLayers(layers) {
583
+ let needsRedraw = false;
584
+ layers = this.tile ? getIntersectingLayers(this.tile, layers) : layers;
585
+
586
+ if (layers.length !== this.layers.length) {
587
+ needsRedraw = true;
588
+ } else {
589
+ for (let i = 0; i < layers.length; i++) {
590
+ const id = layers[i].id;
591
+
592
+ if (id !== this.layers[i]) {
593
+ needsRedraw = true;
594
+ break;
595
+ }
596
+ }
597
+ }
598
+
599
+ if (needsRedraw) {
600
+ this.layers = layers.map(layer => layer.id);
601
+ }
602
+
603
+ return needsRedraw;
604
+ }
605
+
606
+ _updateViewport(viewport) {
607
+ const targetLayer = this.targetLayer;
608
+ let shouldRedraw = false;
609
+
610
+ if (this.tile && 'boundingBox' in this.tile) {
611
+ if (!this.targetBounds) {
612
+ shouldRedraw = true;
613
+ this.targetBounds = this.tile.boundingBox;
614
+ const bottomLeftCommon = viewport.projectPosition(this.targetBounds[0]);
615
+ const topRightCommon = viewport.projectPosition(this.targetBounds[1]);
616
+ this.targetBoundsCommon = [bottomLeftCommon[0], bottomLeftCommon[1], topRightCommon[0], topRightCommon[1]];
617
+ }
618
+ } else if (this.targetBounds !== targetLayer.getBounds()) {
619
+ shouldRedraw = true;
620
+ this.targetBounds = targetLayer.getBounds();
621
+ this.targetBoundsCommon = joinLayerBounds([targetLayer], viewport);
622
+ }
623
+
624
+ if (!this.targetBoundsCommon) {
625
+ return false;
626
+ }
627
+
628
+ const newZoom = Math.ceil(viewport.zoom + 0.5);
629
+
630
+ if (this.tile) {
631
+ this.bounds = this.targetBoundsCommon;
632
+ } else {
633
+ var _this$renderViewport;
634
+
635
+ const oldZoom = (_this$renderViewport = this.renderViewport) === null || _this$renderViewport === void 0 ? void 0 : _this$renderViewport.zoom;
636
+ shouldRedraw = shouldRedraw || newZoom !== oldZoom;
637
+ const newBounds = getRenderBounds(this.targetBoundsCommon, viewport);
638
+ const oldBounds = this.bounds;
639
+ shouldRedraw = shouldRedraw || !oldBounds || newBounds.some((x, i) => x !== oldBounds[i]);
640
+ this.bounds = newBounds;
641
+ }
642
+
643
+ if (shouldRedraw) {
644
+ this.renderViewport = makeViewport({
645
+ bounds: this.bounds,
646
+ zoom: newZoom,
647
+ viewport
648
+ });
649
+ }
650
+
651
+ return shouldRedraw;
652
+ }
653
+
654
+ getRenderFramebuffer() {
655
+ if (!this.renderViewport || this.layers.length === 0) {
656
+ return null;
657
+ }
658
+
659
+ if (!this.fbo) {
660
+ this.fbo = createRenderTarget(this.targetLayer.context.gl, {
661
+ id: this.id
662
+ });
663
+ }
664
+
665
+ return this.fbo;
666
+ }
667
+
668
+ getPickingFramebuffer() {
669
+ if (!this.renderViewport || this.layers.length === 0 && !this.targetLayer.props.pickable) {
670
+ return null;
671
+ }
672
+
673
+ if (!this.pickingFbo) {
674
+ this.pickingFbo = createRenderTarget(this.targetLayer.context.gl, {
675
+ id: "".concat(this.id, "-picking")
676
+ });
677
+ }
678
+
679
+ return this.pickingFbo;
680
+ }
681
+
682
+ filterLayers(layers) {
683
+ return layers.filter(({
684
+ id
685
+ }) => this.layers.includes(id));
686
+ }
687
+
688
+ delete() {
689
+ const {
690
+ fbo,
691
+ pickingFbo
692
+ } = this;
693
+
694
+ if (fbo) {
695
+ fbo.texture.delete();
696
+ fbo.delete();
697
+ }
698
+
699
+ if (pickingFbo) {
700
+ pickingFbo.texture.delete();
701
+ pickingFbo.delete();
702
+ }
703
+ }
704
+
705
+ }
706
+
707
+ function getIntersectingLayers(sourceTile, layers) {
708
+ return layers.filter(layer => {
709
+ const tile = getTile(layer);
710
+
711
+ if (tile) {
712
+ return intersect(sourceTile.boundingBox, tile.boundingBox);
713
+ }
714
+
715
+ return true;
716
+ });
717
+ }
718
+
719
+ function getTile(layer) {
720
+ while (layer) {
721
+ const {
722
+ tile
723
+ } = layer.props;
724
+
725
+ if (tile) {
726
+ return tile;
727
+ }
728
+
729
+ layer = layer.parent;
730
+ }
731
+
732
+ return null;
733
+ }
734
+
735
+ function intersect(b1, b2) {
736
+ if (b1 && b2) {
737
+ return b1[0][0] < b2[1][0] && b2[0][0] < b1[1][0] && b1[0][1] < b2[1][1] && b2[0][1] < b1[1][1];
738
+ }
739
+
740
+ return false;
741
+ }
742
+
743
+ class TerrainPass extends core._LayersPass {
744
+ getRenderableLayers(viewport, opts) {
745
+ const {
746
+ layers
747
+ } = opts;
748
+ const result = [];
749
+
750
+ const drawParamsByIndex = this._getDrawLayerParams(viewport, opts, true);
751
+
752
+ for (let i = 0; i < layers.length; i++) {
753
+ const layer = layers[i];
754
+
755
+ if (!layer.isComposite && drawParamsByIndex[i].shouldDrawLayer) {
756
+ result.push(layer);
757
+ }
758
+ }
759
+
760
+ return result;
761
+ }
762
+
763
+ renderHeightMap(heightMap, opts) {
764
+ const target = heightMap.getRenderFramebuffer();
765
+ const viewport = heightMap.renderViewport;
766
+
767
+ if (!target || !viewport) {
768
+ return;
769
+ }
770
+
771
+ target.resize(viewport);
772
+ core$1.withParameters(this.gl, {
773
+ clearColor: [0, 0, 0, 0],
774
+ blend: true,
775
+ blendFunc: [1, 1],
776
+ blendEquation: 32776,
777
+ depthTest: false
778
+ }, () => this.render({ ...opts,
779
+ target,
780
+ pass: 'terrain-height-map',
781
+ layers: opts.layers,
782
+ viewports: [viewport],
783
+ effects: []
784
+ }));
785
+ }
786
+
787
+ renderTerrainCover(terrainCover, opts) {
788
+ const target = terrainCover.getRenderFramebuffer();
789
+ const viewport = terrainCover.renderViewport;
790
+
791
+ if (!target || !viewport) {
792
+ return;
793
+ }
794
+
795
+ const layers = terrainCover.filterLayers(opts.layers);
796
+ target.resize(viewport);
797
+ core$1.withParameters(this.gl, {
798
+ depthTest: false
799
+ }, () => this.render({ ...opts,
800
+ target,
801
+ pass: "terrain-cover-".concat(terrainCover.id),
802
+ layers,
803
+ effects: [],
804
+ viewports: [viewport]
805
+ }));
806
+ }
807
+
808
+ }
809
+
810
+ class TerrainPickingPass extends core._PickLayersPass {
811
+ constructor(...args) {
812
+ super(...args);
813
+
814
+ _defineProperty(this, "drawParameters", {});
815
+ }
816
+
817
+ getRenderableLayers(viewport, opts) {
818
+ const {
819
+ layers
820
+ } = opts;
821
+ const result = [];
822
+ this.drawParameters = {};
823
+
824
+ this._resetColorEncoder(opts.pickZ);
825
+
826
+ const drawParamsByIndex = this._getDrawLayerParams(viewport, opts);
827
+
828
+ for (let i = 0; i < layers.length; i++) {
829
+ const layer = layers[i];
830
+
831
+ if (!layer.isComposite && drawParamsByIndex[i].shouldDrawLayer) {
832
+ result.push(layer);
833
+ this.drawParameters[layer.id] = drawParamsByIndex[i].layerParameters;
834
+ }
835
+ }
836
+
837
+ return result;
838
+ }
839
+
840
+ renderTerrainCover(terrainCover, opts) {
841
+ const target = terrainCover.getPickingFramebuffer();
842
+ const viewport = terrainCover.renderViewport;
843
+
844
+ if (!target || !viewport) {
845
+ return;
846
+ }
847
+
848
+ const layers = terrainCover.filterLayers(opts.layers);
849
+ const terrainLayer = terrainCover.targetLayer;
850
+
851
+ if (terrainLayer.props.pickable) {
852
+ layers.unshift(terrainLayer);
853
+ }
854
+
855
+ target.resize(viewport);
856
+ core$1.withParameters(this.gl, {
857
+ depthTest: false
858
+ }, () => this.render({ ...opts,
859
+ pickingFBO: target,
860
+ pass: "terrain-cover-picking-".concat(terrainCover.id),
861
+ layers,
862
+ effects: [],
863
+ viewports: [viewport],
864
+ cullRect: undefined,
865
+ deviceRect: viewport,
866
+ pickZ: false
867
+ }));
868
+ }
869
+
870
+ getLayerParameters(layer, layerIndex, viewport) {
871
+ if (this.drawParameters[layer.id]) {
872
+ return this.drawParameters[layer.id];
873
+ }
874
+
875
+ const parameters = super.getLayerParameters(layer, layerIndex, viewport);
876
+ parameters.blend = true;
877
+ return parameters;
878
+ }
879
+
880
+ }
881
+
882
+ const MAP_MAX_SIZE = 2048;
883
+ class HeightMapBuilder {
884
+ static isSupported(gl) {
885
+ return core$1.Framebuffer.isSupported(gl, {
886
+ colorBufferFloat: true
887
+ });
888
+ }
889
+
890
+ constructor(gl) {
891
+ _defineProperty(this, "renderViewport", null);
892
+
893
+ _defineProperty(this, "bounds", null);
894
+
895
+ _defineProperty(this, "fbo", void 0);
896
+
897
+ _defineProperty(this, "gl", void 0);
898
+
899
+ _defineProperty(this, "layers", []);
900
+
901
+ _defineProperty(this, "layersBounds", []);
902
+
903
+ _defineProperty(this, "layersBoundsCommon", null);
904
+
905
+ _defineProperty(this, "lastViewport", null);
906
+
907
+ this.gl = gl;
908
+ }
909
+
910
+ getRenderFramebuffer() {
911
+ if (!this.renderViewport) {
912
+ return null;
913
+ }
914
+
915
+ if (!this.fbo) {
916
+ this.fbo = createRenderTarget(this.gl, {
917
+ id: 'height-map',
918
+ float: true
919
+ });
920
+ }
921
+
922
+ return this.fbo;
923
+ }
924
+
925
+ shouldUpdate({
926
+ layers,
927
+ viewport
928
+ }) {
929
+ const layersChanged = layers.length !== this.layers.length || layers.some((layer, i) => layer !== this.layers[i] || layer.props.transitions || layer.getBounds() !== this.layersBounds[i]);
930
+
931
+ if (layersChanged) {
932
+ this.layers = layers;
933
+ this.layersBounds = layers.map(layer => layer.getBounds());
934
+ this.layersBoundsCommon = joinLayerBounds(layers, viewport);
935
+ }
936
+
937
+ const viewportChanged = !this.lastViewport || !viewport.equals(this.lastViewport);
938
+
939
+ if (!this.layersBoundsCommon) {
940
+ this.renderViewport = null;
941
+ } else if (layersChanged || viewportChanged) {
942
+ const bounds = getRenderBounds(this.layersBoundsCommon, viewport);
943
+
944
+ if (bounds[2] <= bounds[0] || bounds[3] <= bounds[1]) {
945
+ this.renderViewport = null;
946
+ return false;
947
+ }
948
+
949
+ this.bounds = bounds;
950
+ this.lastViewport = viewport;
951
+ const scale = viewport.scale;
952
+ const pixelWidth = (bounds[2] - bounds[0]) * scale;
953
+ const pixelHeight = (bounds[3] - bounds[1]) * scale;
954
+ this.renderViewport = pixelWidth > 0 || pixelHeight > 0 ? makeViewport({
955
+ bounds: [viewport.center[0] - 1, viewport.center[1] - 1, viewport.center[0] + 1, viewport.center[1] + 1],
956
+ zoom: viewport.zoom,
957
+ width: Math.min(pixelWidth, MAP_MAX_SIZE),
958
+ height: Math.min(pixelHeight, MAP_MAX_SIZE),
959
+ viewport
960
+ }) : null;
961
+ return true;
962
+ }
963
+
964
+ return false;
965
+ }
966
+
967
+ delete() {
968
+ if (this.fbo) {
969
+ this.fbo.color.delete();
970
+ this.fbo.delete();
971
+ }
972
+ }
973
+
974
+ }
975
+
976
+ class TerrainEffect {
977
+ constructor() {
978
+ _defineProperty(this, "id", 'terrain-effect');
979
+
980
+ _defineProperty(this, "props", null);
981
+
982
+ _defineProperty(this, "useInPicking", true);
983
+
984
+ _defineProperty(this, "isPicking", false);
985
+
986
+ _defineProperty(this, "isDrapingEnabled", false);
987
+
988
+ _defineProperty(this, "dummyHeightMap", void 0);
989
+
990
+ _defineProperty(this, "heightMap", void 0);
991
+
992
+ _defineProperty(this, "terrainPass", void 0);
993
+
994
+ _defineProperty(this, "terrainPickingPass", void 0);
995
+
996
+ _defineProperty(this, "terrainCovers", new Map());
997
+ }
998
+
999
+ initialize(gl) {
1000
+ this.dummyHeightMap = new core$1.Texture2D(gl, {
1001
+ width: 1,
1002
+ height: 1,
1003
+ data: new Uint8Array([0, 0, 0, 0])
1004
+ });
1005
+ this.terrainPass = new TerrainPass(gl, {
1006
+ id: 'terrain'
1007
+ });
1008
+ this.terrainPickingPass = new TerrainPickingPass(gl, {
1009
+ id: 'terrain-picking'
1010
+ });
1011
+
1012
+ if (HeightMapBuilder.isSupported(gl)) {
1013
+ this.heightMap = new HeightMapBuilder(gl);
1014
+ } else {
1015
+ core.log.warn('Terrain offset mode is not supported by this browser')();
1016
+ }
1017
+
1018
+ core$1.ProgramManager.getDefaultProgramManager(gl).addDefaultModule(terrainModule);
1019
+ }
1020
+
1021
+ preRender(gl, opts) {
1022
+ if (!this.dummyHeightMap) {
1023
+ this.initialize(gl);
1024
+
1025
+ for (const layer of opts.layers) {
1026
+ if (layer.props.operation.includes('terrain')) {
1027
+ layer.setChangeFlags({
1028
+ extensionsChanged: true
1029
+ });
1030
+ }
1031
+ }
1032
+ }
1033
+
1034
+ if (opts.pickZ) {
1035
+ this.isDrapingEnabled = false;
1036
+ return;
1037
+ }
1038
+
1039
+ const {
1040
+ viewports,
1041
+ isPicking = false
1042
+ } = opts;
1043
+ this.isPicking = isPicking;
1044
+ this.isDrapingEnabled = true;
1045
+ const viewport = viewports[0];
1046
+ const layers = (isPicking ? this.terrainPickingPass : this.terrainPass).getRenderableLayers(viewport, opts);
1047
+ const terrainLayers = layers.filter(l => l.props.operation.includes('terrain'));
1048
+
1049
+ if (terrainLayers.length === 0) {
1050
+ return;
1051
+ }
1052
+
1053
+ if (!isPicking) {
1054
+ const offsetLayers = layers.filter(l => l.state.terrainDrawMode === 'offset');
1055
+
1056
+ if (offsetLayers.length > 0) {
1057
+ this._updateHeightMap(terrainLayers, viewport, opts);
1058
+ }
1059
+ }
1060
+
1061
+ const drapeLayers = layers.filter(l => l.state.terrainDrawMode === 'drape');
1062
+
1063
+ this._updateTerrainCovers(terrainLayers, drapeLayers, viewport, opts);
1064
+ }
1065
+
1066
+ getModuleParameters(layer) {
1067
+ var _this$heightMap, _this$heightMap2;
1068
+
1069
+ const {
1070
+ terrainDrawMode
1071
+ } = layer.state;
1072
+ return {
1073
+ heightMap: (_this$heightMap = this.heightMap) === null || _this$heightMap === void 0 ? void 0 : _this$heightMap.getRenderFramebuffer(),
1074
+ heightMapBounds: (_this$heightMap2 = this.heightMap) === null || _this$heightMap2 === void 0 ? void 0 : _this$heightMap2.bounds,
1075
+ dummyHeightMap: this.dummyHeightMap,
1076
+ terrainCover: this.isDrapingEnabled ? this.terrainCovers.get(layer.id) : null,
1077
+ useTerrainHeightMap: terrainDrawMode === 'offset',
1078
+ terrainSkipRender: terrainDrawMode === 'drape' || !layer.props.operation.includes('draw')
1079
+ };
1080
+ }
1081
+
1082
+ cleanup() {
1083
+ if (this.dummyHeightMap) {
1084
+ this.dummyHeightMap.delete();
1085
+ this.dummyHeightMap = undefined;
1086
+ }
1087
+
1088
+ if (this.heightMap) {
1089
+ this.heightMap.delete();
1090
+ this.heightMap = undefined;
1091
+ }
1092
+
1093
+ for (const terrainCover of this.terrainCovers.values()) {
1094
+ terrainCover.delete();
1095
+ }
1096
+
1097
+ this.terrainCovers.clear();
1098
+ }
1099
+
1100
+ _updateHeightMap(terrainLayers, viewport, opts) {
1101
+ if (!this.heightMap) {
1102
+ return;
1103
+ }
1104
+
1105
+ const shouldUpdate = this.heightMap.shouldUpdate({
1106
+ layers: terrainLayers,
1107
+ viewport
1108
+ });
1109
+
1110
+ if (!shouldUpdate) {
1111
+ return;
1112
+ }
1113
+
1114
+ this.terrainPass.renderHeightMap(this.heightMap, { ...opts,
1115
+ layers: terrainLayers,
1116
+ moduleParameters: {
1117
+ heightMapBounds: this.heightMap.bounds,
1118
+ dummyHeightMap: this.dummyHeightMap,
1119
+ devicePixelRatio: 1,
1120
+ drawToTerrainHeightMap: true
1121
+ }
1122
+ });
1123
+ }
1124
+
1125
+ _updateTerrainCovers(terrainLayers, drapeLayers, viewport, opts) {
1126
+ const layerNeedsRedraw = {};
1127
+
1128
+ for (const layer of drapeLayers) {
1129
+ if (layer.state.terrainCoverNeedsRedraw) {
1130
+ layerNeedsRedraw[layer.id] = true;
1131
+ layer.state.terrainCoverNeedsRedraw = false;
1132
+ }
1133
+ }
1134
+
1135
+ for (const terrainCover of this.terrainCovers.values()) {
1136
+ terrainCover.isDirty = terrainCover.isDirty || terrainCover.shouldUpdate({
1137
+ layerNeedsRedraw
1138
+ });
1139
+ }
1140
+
1141
+ for (const layer of terrainLayers) {
1142
+ this._updateTerrainCover(layer, drapeLayers, viewport, opts);
1143
+ }
1144
+
1145
+ if (!this.isPicking) {
1146
+ this._pruneTerrainCovers();
1147
+ }
1148
+ }
1149
+
1150
+ _updateTerrainCover(terrainLayer, drapeLayers, viewport, opts) {
1151
+ const renderPass = this.isPicking ? this.terrainPickingPass : this.terrainPass;
1152
+ let terrainCover = this.terrainCovers.get(terrainLayer.id);
1153
+
1154
+ if (!terrainCover) {
1155
+ terrainCover = new TerrainCover(terrainLayer);
1156
+ this.terrainCovers.set(terrainLayer.id, terrainCover);
1157
+ }
1158
+
1159
+ try {
1160
+ const isDirty = terrainCover.shouldUpdate({
1161
+ targetLayer: terrainLayer,
1162
+ viewport,
1163
+ layers: drapeLayers
1164
+ });
1165
+
1166
+ if (this.isPicking || terrainCover.isDirty || isDirty) {
1167
+ renderPass.renderTerrainCover(terrainCover, { ...opts,
1168
+ layers: drapeLayers,
1169
+ moduleParameters: {
1170
+ dummyHeightMap: this.dummyHeightMap,
1171
+ terrainSkipRender: false,
1172
+ devicePixelRatio: 1
1173
+ }
1174
+ });
1175
+ terrainCover.isDirty = false;
1176
+ }
1177
+ } catch (err) {
1178
+ terrainLayer.raiseError(err, "Error rendering terrain cover ".concat(terrainCover.id));
1179
+ }
1180
+ }
1181
+
1182
+ _pruneTerrainCovers() {
1183
+ const idsToRemove = [];
1184
+
1185
+ for (const [id, terrainCover] of this.terrainCovers) {
1186
+ if (!terrainCover.isActive) {
1187
+ idsToRemove.push(id);
1188
+ }
1189
+ }
1190
+
1191
+ for (const id of idsToRemove) {
1192
+ this.terrainCovers.delete(id);
1193
+ }
1194
+ }
1195
+
1196
+ }
1197
+
1198
+ const defaultProps = {
1199
+ terrainDrawMode: undefined
1200
+ };
1201
+ class TerrainExtension extends core.LayerExtension {
1202
+ getShaders() {
1203
+ return {
1204
+ modules: [terrainModule]
1205
+ };
1206
+ }
1207
+
1208
+ initializeState() {
1209
+ var _this$context$deck;
1210
+
1211
+ (_this$context$deck = this.context.deck) === null || _this$context$deck === void 0 ? void 0 : _this$context$deck._addDefaultEffect(new TerrainEffect());
1212
+ }
1213
+
1214
+ updateState(params) {
1215
+ const {
1216
+ props,
1217
+ oldProps
1218
+ } = params;
1219
+
1220
+ if (this.state.terrainDrawMode && props.terrainDrawMode === oldProps.terrainDrawMode && props.extruded === oldProps.extruded) {
1221
+ return;
1222
+ }
1223
+
1224
+ let {
1225
+ terrainDrawMode
1226
+ } = props;
1227
+
1228
+ if (!terrainDrawMode) {
1229
+ var _this$getAttributeMan;
1230
+
1231
+ const is3d = this.props.extruded;
1232
+ const attributes = (_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 ? void 0 : _this$getAttributeMan.attributes;
1233
+ const hasAnchor = attributes && 'instancePositions' in attributes;
1234
+ terrainDrawMode = is3d || hasAnchor ? 'offset' : 'drape';
1235
+ }
1236
+
1237
+ this.setState({
1238
+ terrainDrawMode
1239
+ });
1240
+ }
1241
+
1242
+ onNeedsRedraw() {
1243
+ const state = this.state;
1244
+
1245
+ if (state.terrainDrawMode === 'drape') {
1246
+ state.terrainCoverNeedsRedraw = true;
1247
+ }
1248
+ }
1249
+
1250
+ }
1251
+
1252
+ _defineProperty(TerrainExtension, "defaultProps", defaultProps);
1253
+
1254
+ _defineProperty(TerrainExtension, "extensionName", 'TerrainExtension');
1255
+
35
1256
  /**
36
1257
  * MimeType conversion for common tif image types
37
1258
  */
@@ -10458,227 +11679,6 @@ var jpegJs = {
10458
11679
 
10459
11680
  var jpeg$1 = /*@__PURE__*/getDefaultExportFromCjs(jpegJs);
10460
11681
 
10461
- /**
10462
- * Common utilities
10463
- * @module glMatrix
10464
- */
10465
- // Configuration Constants
10466
- var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;
10467
- if (!Math.hypot) Math.hypot = function () {
10468
- var y = 0,
10469
- i = arguments.length;
10470
-
10471
- while (i--) {
10472
- y += arguments[i] * arguments[i];
10473
- }
10474
-
10475
- return Math.sqrt(y);
10476
- };
10477
-
10478
- /**
10479
- * 4 Dimensional Vector
10480
- * @module vec4
10481
- */
10482
-
10483
- /**
10484
- * Creates a new, empty vec4
10485
- *
10486
- * @returns {vec4} a new 4D vector
10487
- */
10488
-
10489
- function create$2() {
10490
- var out = new ARRAY_TYPE(4);
10491
-
10492
- if (ARRAY_TYPE != Float32Array) {
10493
- out[0] = 0;
10494
- out[1] = 0;
10495
- out[2] = 0;
10496
- out[3] = 0;
10497
- }
10498
-
10499
- return out;
10500
- }
10501
- /**
10502
- * Perform some operation over an array of vec4s.
10503
- *
10504
- * @param {Array} a the array of vectors to iterate over
10505
- * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed
10506
- * @param {Number} offset Number of elements to skip at the beginning of the array
10507
- * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array
10508
- * @param {Function} fn Function to call for each vector in the array
10509
- * @param {Object} [arg] additional argument to pass to fn
10510
- * @returns {Array} a
10511
- * @function
10512
- */
10513
-
10514
- (function () {
10515
- var vec = create$2();
10516
- return function (a, stride, offset, count, fn, arg) {
10517
- var i, l;
10518
-
10519
- if (!stride) {
10520
- stride = 4;
10521
- }
10522
-
10523
- if (!offset) {
10524
- offset = 0;
10525
- }
10526
-
10527
- if (count) {
10528
- l = Math.min(count * stride + offset, a.length);
10529
- } else {
10530
- l = a.length;
10531
- }
10532
-
10533
- for (i = offset; i < l; i += stride) {
10534
- vec[0] = a[i];
10535
- vec[1] = a[i + 1];
10536
- vec[2] = a[i + 2];
10537
- vec[3] = a[i + 3];
10538
- fn(vec, vec, arg);
10539
- a[i] = vec[0];
10540
- a[i + 1] = vec[1];
10541
- a[i + 2] = vec[2];
10542
- a[i + 3] = vec[3];
10543
- }
10544
-
10545
- return a;
10546
- };
10547
- })();
10548
-
10549
- /**
10550
- * 2 Dimensional Vector
10551
- * @module vec2
10552
- */
10553
-
10554
- /**
10555
- * Creates a new, empty vec2
10556
- *
10557
- * @returns {vec2} a new 2D vector
10558
- */
10559
-
10560
- function create$1() {
10561
- var out = new ARRAY_TYPE(2);
10562
-
10563
- if (ARRAY_TYPE != Float32Array) {
10564
- out[0] = 0;
10565
- out[1] = 0;
10566
- }
10567
-
10568
- return out;
10569
- }
10570
- /**
10571
- * Perform some operation over an array of vec2s.
10572
- *
10573
- * @param {Array} a the array of vectors to iterate over
10574
- * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed
10575
- * @param {Number} offset Number of elements to skip at the beginning of the array
10576
- * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array
10577
- * @param {Function} fn Function to call for each vector in the array
10578
- * @param {Object} [arg] additional argument to pass to fn
10579
- * @returns {Array} a
10580
- * @function
10581
- */
10582
-
10583
- (function () {
10584
- var vec = create$1();
10585
- return function (a, stride, offset, count, fn, arg) {
10586
- var i, l;
10587
-
10588
- if (!stride) {
10589
- stride = 2;
10590
- }
10591
-
10592
- if (!offset) {
10593
- offset = 0;
10594
- }
10595
-
10596
- if (count) {
10597
- l = Math.min(count * stride + offset, a.length);
10598
- } else {
10599
- l = a.length;
10600
- }
10601
-
10602
- for (i = offset; i < l; i += stride) {
10603
- vec[0] = a[i];
10604
- vec[1] = a[i + 1];
10605
- fn(vec, vec, arg);
10606
- a[i] = vec[0];
10607
- a[i + 1] = vec[1];
10608
- }
10609
-
10610
- return a;
10611
- };
10612
- })();
10613
-
10614
- /**
10615
- * 3 Dimensional Vector
10616
- * @module vec3
10617
- */
10618
-
10619
- /**
10620
- * Creates a new, empty vec3
10621
- *
10622
- * @returns {vec3} a new 3D vector
10623
- */
10624
-
10625
- function create() {
10626
- var out = new ARRAY_TYPE(3);
10627
-
10628
- if (ARRAY_TYPE != Float32Array) {
10629
- out[0] = 0;
10630
- out[1] = 0;
10631
- out[2] = 0;
10632
- }
10633
-
10634
- return out;
10635
- }
10636
- /**
10637
- * Perform some operation over an array of vec3s.
10638
- *
10639
- * @param {Array} a the array of vectors to iterate over
10640
- * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed
10641
- * @param {Number} offset Number of elements to skip at the beginning of the array
10642
- * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array
10643
- * @param {Function} fn Function to call for each vector in the array
10644
- * @param {Object} [arg] additional argument to pass to fn
10645
- * @returns {Array} a
10646
- * @function
10647
- */
10648
-
10649
- (function () {
10650
- var vec = create();
10651
- return function (a, stride, offset, count, fn, arg) {
10652
- var i, l;
10653
-
10654
- if (!stride) {
10655
- stride = 3;
10656
- }
10657
-
10658
- if (!offset) {
10659
- offset = 0;
10660
- }
10661
-
10662
- if (count) {
10663
- l = Math.min(count * stride + offset, a.length);
10664
- } else {
10665
- l = a.length;
10666
- }
10667
-
10668
- for (i = offset; i < l; i += stride) {
10669
- vec[0] = a[i];
10670
- vec[1] = a[i + 1];
10671
- vec[2] = a[i + 2];
10672
- fn(vec, vec, arg);
10673
- a[i] = vec[0];
10674
- a[i + 1] = vec[1];
10675
- a[i + 2] = vec[2];
10676
- }
10677
-
10678
- return a;
10679
- };
10680
- })();
10681
-
10682
11682
  const PI = Math.PI;
10683
11683
  const PI_4 = PI / 4;
10684
11684
  const RADIANS_TO_DEGREES = 180 / PI;
@@ -14604,13 +15604,11 @@ class CogBitmapLayer extends core.CompositeLayer {
14604
15604
  maxRequests: 6,
14605
15605
  extent: this.cogTiles.cog ? this.cogTiles.getBoundsAsLatLon(this.cogTiles.cog) : null,
14606
15606
  renderSubLayers: (props) => {
15607
+ var _a, _b, _c, _d, _e, _f, _g;
14607
15608
  const { bbox: { west, south, east, north, }, } = props.tile;
14608
- return new layers.BitmapLayer(props, {
14609
- data: null,
14610
- image: props.data,
14611
- bounds: [west, south, east, north],
14612
- opacity: 1, // 0.6
14613
- });
15609
+ return new layers.BitmapLayer(props, Object.assign({ data: null, image: props.data, bounds: [west, south, east, north], opacity: 1, extensions: ((_b = (_a = this.cogTiles) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.clampToTerrain) ? [new TerrainExtension()] : [] }, (((_e = (_d = (_c = this.cogTiles) === null || _c === void 0 ? void 0 : _c.options) === null || _d === void 0 ? void 0 : _d.clampToTerrain) === null || _e === void 0 ? void 0 : _e.terrainDrawMode)
15610
+ ? { terrainDrawMode: (_g = (_f = this.cogTiles) === null || _f === void 0 ? void 0 : _f.options) === null || _g === void 0 ? void 0 : _g.clampToTerrain.terrainDrawMode }
15611
+ : {})));
14614
15612
  },
14615
15613
  });
14616
15614
  return layer;