ol 7.3.0 → 7.3.1-dev.1678058258888

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ol",
3
- "version": "7.3.0",
3
+ "version": "7.3.1-dev.1678058258888",
4
4
  "description": "OpenLayers mapping library",
5
5
  "keywords": [
6
6
  "map",
@@ -1,3 +1,12 @@
1
+ /**
2
+ * @typedef {Object} TileTextureLookup
3
+ * @property {Set<string>} tileIds The set of tile ids in the lookup.
4
+ * @property {Object<number, Set<TileTexture>>} texturesByZ Tile textures by zoom level.
5
+ */
6
+ /**
7
+ * @return {TileTextureLookup} A new tile texture lookup.
8
+ */
9
+ export function newTileTextureLookup(): TileTextureLookup;
1
10
  export namespace Uniforms {
2
11
  const TILE_TEXTURE_ARRAY: string;
3
12
  const TILE_TRANSFORM: string;
@@ -16,6 +25,18 @@ export namespace Attributes {
16
25
  const TEXTURE_COORD: string;
17
26
  }
18
27
  export default WebGLTileLayerRenderer;
28
+ export type TileTextureLookup = {
29
+ /**
30
+ * The set of tile ids in the lookup.
31
+ */
32
+ tileIds: Set<string>;
33
+ /**
34
+ * Tile textures by zoom level.
35
+ */
36
+ texturesByZ: {
37
+ [x: number]: Set<TileTexture>;
38
+ };
39
+ };
19
40
  export type Options = {
20
41
  /**
21
42
  * Vertex shader source.
@@ -162,12 +183,10 @@ declare class WebGLTileLayerRenderer extends WebGLLayerRenderer<import("../../la
162
183
  * @param {import("../../Map.js").FrameState} frameState Frame state.
163
184
  * @param {import("../../extent.js").Extent} extent The extent to be rendered.
164
185
  * @param {number} initialZ The zoom level.
165
- * @param {Object<number, Array<TileTexture>>} tileTexturesByZ The zoom level.
186
+ * @param {TileTextureLookup} tileTextureLookup The zoom level.
166
187
  * @param {number} preload Number of additional levels to load.
167
188
  */
168
- enqueueTiles(frameState: import("../../Map.js").FrameState, extent: import("../../extent.js").Extent, initialZ: number, tileTexturesByZ: {
169
- [x: number]: Array<TileTexture>;
170
- }, preload: number): void;
189
+ enqueueTiles(frameState: import("../../Map.js").FrameState, extent: import("../../extent.js").Extent, initialZ: number, tileTextureLookup: TileTextureLookup, preload: number): void;
171
190
  /**
172
191
  * Render the layer.
173
192
  * @param {import("../../Map.js").FrameState} frameState Frame state.
@@ -185,7 +204,7 @@ declare class WebGLTileLayerRenderer extends WebGLLayerRenderer<import("../../la
185
204
  * @param {import("../../tilegrid/TileGrid.js").default} tileGrid The tile grid.
186
205
  * @param {import("../../tilecoord.js").TileCoord} tileCoord The target tile coordinate.
187
206
  * @param {number} altZ The alternate zoom level.
188
- * @param {Object<number, Array<import("../../webgl/TileTexture.js").default>>} tileTexturesByZ Lookup of
207
+ * @param {TileTextureLookup} tileTextureLookup Lookup of
189
208
  * tile textures by zoom level.
190
209
  * @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.
191
210
  * @private
@@ -193,6 +212,6 @@ declare class WebGLTileLayerRenderer extends WebGLLayerRenderer<import("../../la
193
212
  private findAltTiles_;
194
213
  clearCache(): void;
195
214
  }
196
- import WebGLLayerRenderer from "./Layer.js";
197
215
  import TileTexture from "../../webgl/TileTexture.js";
216
+ import WebGLLayerRenderer from "./Layer.js";
198
217
  //# sourceMappingURL=TileLayer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TileLayer.d.ts","sourceRoot":"","sources":["TileLayer.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;kBAmIc,MAAM;;;;oBACN,MAAM;;;;;;;;;;;;;;;;;wBAQP,OAAO,0BAA0B,EAAE,OAAO;AAXvD;;;;;;;;GAQG;AAEH;;GAEG;AAEH;;;;;GAKG;AACH;IACE;;;OAGG;IACH,uBAHW,SAAS,WACT,OAAO,EAyGjB;IAlGC;;;OAGG;IACH,gBAFU,OAAO,CAEU;IAE3B;;;;OAIG;IACH,uBAAuC;IAEvC;;;OAGG;IACH,kBAA6B;IAE7B;;;OAGG;IACH,uBAA+C;IAE/C;;;OAGG;IACH,uBAA8C;IAE9C;;;OAGG;IACH,kBAAuB;IAEvB;;;OAGG;IACH,iBAAa;IAEb;;OAEG;IACH,sBAAyC;IAEzC;;OAEG;IACH,wBAA6C;IAE7C;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAuE;IAKvE;;;OAGG;IACH,0BAAgD;IAEhD;;;OAGG;IACH,yBAAqD;IAErD;;;OAGG;IACH,oBAAuB;IAEvB;;;OAGG;IACH,oBAA4B;IAG9B;;OAEG;IACH,eAFW,OAAO,QAgBjB;IAWD;;;;OAIG;IACH,wBASC;IA2BD;;;;;;OAMG;IACH,yBANW,OAAO,cAAc,EAAE,UAAU,UACjC,OAAO,iBAAiB,EAAE,MAAM,YAChC,MAAM;YACC,MAAM,GAAE,MAAM,WAAW,CAAC;gBACjC,MAAM,QAwGhB;IAED;;;;OAIG;IACH,wBAHW,OAAO,cAAc,EAAE,UAAU,GAChC,WAAW,CAmStB;IAED;;;OAGG;IACH,eAHW,OAAO,gBAAgB,EAAE,KAAK,GAC7B,iBAAiB,GAAC,UAAU,GAAC,YAAY,GAAC,QAAQ,CA4F7D;IAED;;;;;;;;;;OAUG;IACH,sBA+BC;IAED,mBAIC;CA6BF"}
1
+ {"version":3,"file":"TileLayer.d.ts","sourceRoot":"","sources":["TileLayer.js"],"names":[],"mappings":"AAoFA;;;;GAIG;AAEH;;GAEG;AACH,wCAFY,iBAAiB,CAI5B;;;;;;;;;;;;;;;;;;;;;;;aATa,IAAI,MAAM,CAAC;;;;;YACJ,MAAM,GAAE,IAAI,WAAW,CAAC;;;;;;;kBAoE/B,MAAM;;;;oBACN,MAAM;;;;;;;;;;;;;;;;;wBAQP,OAAO,0BAA0B,EAAE,OAAO;AAXvD;;;;;;;;GAQG;AAEH;;GAEG;AAEH;;;;;GAKG;AACH;IACE;;;OAGG;IACH,uBAHW,SAAS,WACT,OAAO,EAyGjB;IAlGC;;;OAGG;IACH,gBAFU,OAAO,CAEU;IAE3B;;;;OAIG;IACH,uBAAuC;IAEvC;;;OAGG;IACH,kBAA6B;IAE7B;;;OAGG;IACH,uBAA+C;IAE/C;;;OAGG;IACH,uBAA8C;IAE9C;;;OAGG;IACH,kBAAuB;IAEvB;;;OAGG;IACH,iBAAa;IAEb;;OAEG;IACH,sBAAyC;IAEzC;;OAEG;IACH,wBAA6C;IAE7C;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAuE;IAKvE;;;OAGG;IACH,0BAAgD;IAEhD;;;OAGG;IACH,yBAAqD;IAErD;;;OAGG;IACH,oBAAuB;IAEvB;;;OAGG;IACH,oBAA4B;IAG9B;;OAEG;IACH,eAFW,OAAO,QAgBjB;IAWD;;;;OAIG;IACH,wBASC;IA2BD;;;;;;OAMG;IACH,yBANW,OAAO,cAAc,EAAE,UAAU,UACjC,OAAO,iBAAiB,EAAE,MAAM,YAChC,MAAM,qBACN,iBAAiB,WACjB,MAAM,QA6GhB;IAED;;;;OAIG;IACH,wBAHW,OAAO,cAAc,EAAE,UAAU,GAChC,WAAW,CAgStB;IAED;;;OAGG;IACH,eAHW,OAAO,gBAAgB,EAAE,KAAK,GAC7B,iBAAiB,GAAC,UAAU,GAAC,YAAY,GAAC,QAAQ,CA4F7D;IAED;;;;;;;;;;OAUG;IACH,sBAkCC;IAED,mBAIC;CA6BF"}
@@ -82,18 +82,42 @@ function depthForZ(z) {
82
82
  return 2 * (1 - 1 / (z + 1)) - 1;
83
83
  }
84
84
 
85
+ /**
86
+ * @typedef {Object} TileTextureLookup
87
+ * @property {Set<string>} tileIds The set of tile ids in the lookup.
88
+ * @property {Object<number, Set<TileTexture>>} texturesByZ Tile textures by zoom level.
89
+ */
90
+
91
+ /**
92
+ * @return {TileTextureLookup} A new tile texture lookup.
93
+ */
94
+ export function newTileTextureLookup() {
95
+ return {tileIds: new Set(), texturesByZ: {}};
96
+ }
97
+
98
+ /**
99
+ * Check if a tile is already in the tile texture lookup.
100
+ * @param {TileTextureLookup} tileTextureLookup Lookup of tile textures by zoom level.
101
+ * @param {import("../../Tile.js").default} tile A tile.
102
+ * @return {boolean} The tile is already in the lookup.
103
+ */
104
+ function lookupHasTile(tileTextureLookup, tile) {
105
+ return tileTextureLookup.tileIds.has(getUid(tile));
106
+ }
107
+
85
108
  /**
86
109
  * Add a tile texture to the lookup.
87
- * @param {Object<number, Array<import("../../webgl/TileTexture.js").default>>} tileTexturesByZ Lookup of
88
- * tile textures by zoom level.
89
- * @param {import("../../webgl/TileTexture.js").default} tileTexture A tile texture.
110
+ * @param {TileTextureLookup} tileTextureLookup Lookup of tile textures by zoom level.
111
+ * @param {TileTexture} tileTexture A tile texture.
90
112
  * @param {number} z The zoom level.
91
113
  */
92
- function addTileTextureToLookup(tileTexturesByZ, tileTexture, z) {
93
- if (!(z in tileTexturesByZ)) {
94
- tileTexturesByZ[z] = [];
114
+ function addTileTextureToLookup(tileTextureLookup, tileTexture, z) {
115
+ const texturesByZ = tileTextureLookup.texturesByZ;
116
+ if (!(z in texturesByZ)) {
117
+ texturesByZ[z] = new Set();
95
118
  }
96
- tileTexturesByZ[z].push(tileTexture);
119
+ texturesByZ[z].add(tileTexture);
120
+ tileTextureLookup.tileIds.add(getUid(tileTexture.tile));
97
121
  }
98
122
 
99
123
  /**
@@ -330,10 +354,10 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
330
354
  * @param {import("../../Map.js").FrameState} frameState Frame state.
331
355
  * @param {import("../../extent.js").Extent} extent The extent to be rendered.
332
356
  * @param {number} initialZ The zoom level.
333
- * @param {Object<number, Array<TileTexture>>} tileTexturesByZ The zoom level.
357
+ * @param {TileTextureLookup} tileTextureLookup The zoom level.
334
358
  * @param {number} preload Number of additional levels to load.
335
359
  */
336
- enqueueTiles(frameState, extent, initialZ, tileTexturesByZ, preload) {
360
+ enqueueTiles(frameState, extent, initialZ, tileTextureLookup, preload) {
337
361
  const viewState = frameState.viewState;
338
362
  const tileLayer = this.getLayer();
339
363
  const tileSource = tileLayer.getRenderSource();
@@ -396,28 +420,33 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
396
420
  frameState.pixelRatio,
397
421
  viewState.projection
398
422
  );
399
- if (!tileTexture) {
400
- tileTexture = new TileTexture({
401
- tile: tile,
402
- grid: tileGrid,
403
- helper: this.helper,
404
- gutter: gutter,
405
- });
406
- tileTextureCache.set(cacheKey, tileTexture);
423
+ }
424
+
425
+ if (lookupHasTile(tileTextureLookup, tile)) {
426
+ continue;
427
+ }
428
+
429
+ if (!tileTexture) {
430
+ tileTexture = new TileTexture({
431
+ tile: tile,
432
+ grid: tileGrid,
433
+ helper: this.helper,
434
+ gutter: gutter,
435
+ });
436
+ tileTextureCache.set(cacheKey, tileTexture);
437
+ } else {
438
+ if (this.isDrawableTile_(tile)) {
439
+ tileTexture.setTile(tile);
407
440
  } else {
408
- if (this.isDrawableTile_(tile)) {
409
- tileTexture.setTile(tile);
410
- } else {
411
- const interimTile =
412
- /** @type {import("../../webgl/TileTexture").TileType} */ (
413
- tile.getInterimTile()
414
- );
415
- tileTexture.setTile(interimTile);
416
- }
441
+ const interimTile =
442
+ /** @type {import("../../webgl/TileTexture").TileType} */ (
443
+ tile.getInterimTile()
444
+ );
445
+ tileTexture.setTile(interimTile);
417
446
  }
418
447
  }
419
448
 
420
- addTileTextureToLookup(tileTexturesByZ, tileTexture, z);
449
+ addTileTextureToLookup(tileTextureLookup, tileTexture, z);
421
450
 
422
451
  const tileQueueKey = tile.getKey();
423
452
  wantedTiles[tileQueueKey] = true;
@@ -460,9 +489,9 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
460
489
  );
461
490
 
462
491
  /**
463
- * @type {Object<number, Array<import("../../webgl/TileTexture.js").default>>}
492
+ * @type {TileTextureLookup}
464
493
  */
465
- const tileTexturesByZ = {};
494
+ const tileTextureLookup = newTileTextureLookup();
466
495
 
467
496
  const preload = tileLayer.getPreload();
468
497
  if (frameState.nextExtent) {
@@ -475,19 +504,19 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
475
504
  frameState,
476
505
  nextExtent,
477
506
  targetZ,
478
- tileTexturesByZ,
507
+ tileTextureLookup,
479
508
  preload
480
509
  );
481
510
  }
482
511
 
483
- this.enqueueTiles(frameState, extent, z, tileTexturesByZ, 0);
512
+ this.enqueueTiles(frameState, extent, z, tileTextureLookup, 0);
484
513
  if (preload > 0) {
485
514
  setTimeout(() => {
486
515
  this.enqueueTiles(
487
516
  frameState,
488
517
  extent,
489
518
  z - 1,
490
- tileTexturesByZ,
519
+ tileTextureLookup,
491
520
  preload - 1
492
521
  );
493
522
  }, 0);
@@ -506,9 +535,7 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
506
535
  let blend = false;
507
536
 
508
537
  // look for cached tiles to use if a target tile is not ready
509
- const tileTextures = tileTexturesByZ[z];
510
- for (let i = 0, ii = tileTextures.length; i < ii; ++i) {
511
- const tileTexture = tileTextures[i];
538
+ for (const tileTexture of tileTextureLookup.texturesByZ[z]) {
512
539
  const tile = tileTexture.tile;
513
540
  if (
514
541
  (tile instanceof ReprojTile || tile instanceof ReprojDataTile) &&
@@ -536,7 +563,7 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
536
563
  tileGrid,
537
564
  tileCoord,
538
565
  z + 1,
539
- tileTexturesByZ
566
+ tileTextureLookup
540
567
  );
541
568
 
542
569
  if (coveredByChildren) {
@@ -550,7 +577,7 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
550
577
  tileGrid,
551
578
  tileCoord,
552
579
  parentZ,
553
- tileTexturesByZ
580
+ tileTextureLookup
554
581
  );
555
582
 
556
583
  if (coveredByParent) {
@@ -562,7 +589,8 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
562
589
  this.helper.useProgram(this.program_, frameState);
563
590
  this.helper.prepareDraw(frameState, !blend);
564
591
 
565
- const zs = Object.keys(tileTexturesByZ).map(Number).sort(ascending);
592
+ const texturesByZ = tileTextureLookup.texturesByZ;
593
+ const zs = Object.keys(texturesByZ).map(Number).sort(ascending);
566
594
 
567
595
  const centerX = viewState.center[0];
568
596
  const centerY = viewState.center[1];
@@ -585,9 +613,7 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
585
613
  const tileScale = viewState.resolution / tileResolution;
586
614
 
587
615
  const depth = depthForZ(tileZ);
588
- const tileTextures = tileTexturesByZ[tileZ];
589
- for (let i = 0, ii = tileTextures.length; i < ii; ++i) {
590
- const tileTexture = tileTextures[i];
616
+ for (const tileTexture of texturesByZ[tileZ]) {
591
617
  if (!tileTexture.loaded) {
592
618
  continue;
593
619
  }
@@ -835,12 +861,12 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
835
861
  * @param {import("../../tilegrid/TileGrid.js").default} tileGrid The tile grid.
836
862
  * @param {import("../../tilecoord.js").TileCoord} tileCoord The target tile coordinate.
837
863
  * @param {number} altZ The alternate zoom level.
838
- * @param {Object<number, Array<import("../../webgl/TileTexture.js").default>>} tileTexturesByZ Lookup of
864
+ * @param {TileTextureLookup} tileTextureLookup Lookup of
839
865
  * tile textures by zoom level.
840
866
  * @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.
841
867
  * @private
842
868
  */
843
- findAltTiles_(tileGrid, tileCoord, altZ, tileTexturesByZ) {
869
+ findAltTiles_(tileGrid, tileCoord, altZ, tileTextureLookup) {
844
870
  const tileRange = tileGrid.getTileRangeForTileCoordAndZ(
845
871
  tileCoord,
846
872
  altZ,
@@ -860,8 +886,11 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
860
886
  let loaded = false;
861
887
  if (tileTextureCache.containsKey(cacheKey)) {
862
888
  const tileTexture = tileTextureCache.get(cacheKey);
863
- if (tileTexture.loaded) {
864
- addTileTextureToLookup(tileTexturesByZ, tileTexture, altZ);
889
+ if (
890
+ tileTexture.loaded &&
891
+ !lookupHasTile(tileTextureLookup, tileTexture.tile)
892
+ ) {
893
+ addTileTextureToLookup(tileTextureLookup, tileTexture, altZ);
865
894
  loaded = true;
866
895
  }
867
896
  }
package/util.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["util.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,4BAFY,KAAK,CAIhB;AASD;;;;;;;;GAQG;AACH,kCAHY,MAAM,CAKjB;AAED;;;GAGG;AACH,sBAFU,MAAM,CAEe"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["util.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,4BAFY,KAAK,CAIhB;AASD;;;;;;;;GAQG;AACH,kCAHY,MAAM,CAKjB;AAED;;;GAGG;AACH,sBAFU,MAAM,CAEiC"}
package/util.js CHANGED
@@ -33,4 +33,4 @@ export function getUid(obj) {
33
33
  * OpenLayers version.
34
34
  * @type {string}
35
35
  */
36
- export const VERSION = '7.3.0';
36
+ export const VERSION = '7.3.1-dev.1678058258888';