ol 9.1.1-dev.1715763426986 → 9.1.1-dev.1715779213254

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/extent.d.ts CHANGED
@@ -373,9 +373,10 @@ export function wrapX(extent: Extent, projection: import("./proj/Projection.js")
373
373
  *
374
374
  * @param {Extent} extent Extent.
375
375
  * @param {import("./proj/Projection.js").default} projection Projection
376
+ * @param {boolean} [multiWorld] Return all worlds
376
377
  * @return {Array<Extent>} The extent within the real world extent.
377
378
  */
378
- export function wrapAndSliceX(extent: Extent, projection: import("./proj/Projection.js").default): Array<Extent>;
379
+ export function wrapAndSliceX(extent: Extent, projection: import("./proj/Projection.js").default, multiWorld?: boolean | undefined): Array<Extent>;
379
380
  /**
380
381
  * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.
381
382
  */
package/extent.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"extent.d.ts","sourceRoot":"","sources":["extent.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extent.d.ts","sourceRoot":"","sources":["extent.js"],"names":[],"mappings":"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"}
package/extent.js CHANGED
@@ -885,9 +885,10 @@ export function wrapX(extent, projection) {
885
885
  *
886
886
  * @param {Extent} extent Extent.
887
887
  * @param {import("./proj/Projection.js").default} projection Projection
888
+ * @param {boolean} [multiWorld] Return all worlds
888
889
  * @return {Array<Extent>} The extent within the real world extent.
889
890
  */
890
- export function wrapAndSliceX(extent, projection) {
891
+ export function wrapAndSliceX(extent, projection, multiWorld) {
891
892
  if (projection.canWrapX()) {
892
893
  const projectionExtent = projection.getExtent();
893
894
 
@@ -898,7 +899,7 @@ export function wrapAndSliceX(extent, projection) {
898
899
  wrapX(extent, projection);
899
900
  const worldWidth = getWidth(projectionExtent);
900
901
 
901
- if (getWidth(extent) > worldWidth) {
902
+ if (getWidth(extent) > worldWidth && !multiWorld) {
902
903
  // the extent wraps around on itself
903
904
  return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];
904
905
  }
@@ -134,7 +134,7 @@ declare class BaseVectorLayer<VectorSourceType extends import("../source/VectorT
134
134
  private renderBuffer_;
135
135
  /**
136
136
  * User provided style.
137
- * @type {import("../style/Style.js").StyleLike}
137
+ * @type {import("../style/Style.js").StyleLike|import("../style/flat.js").FlatStyleLike}
138
138
  * @private
139
139
  */
140
140
  private style_;
@@ -166,10 +166,10 @@ declare class BaseVectorLayer<VectorSourceType extends import("../source/VectorT
166
166
  /**
167
167
  * Get the style for features. This returns whatever was passed to the `style`
168
168
  * option at construction or to the `setStyle` method.
169
- * @return {import("../style/Style.js").StyleLike|null|undefined} Layer style.
169
+ * @return {import("../style/Style.js").StyleLike|import("../style/flat.js").FlatStyleLike|null|undefined} Layer style.
170
170
  * @api
171
171
  */
172
- getStyle(): import("../style/Style.js").StyleLike | null | undefined;
172
+ getStyle(): import("../style/Style.js").StyleLike | import("../style/flat.js").FlatStyleLike | null | undefined;
173
173
  /**
174
174
  * Get the style function.
175
175
  * @return {import("../style/Style.js").StyleFunction|undefined} Layer style function.
@@ -1 +1 @@
1
- {"version":3,"file":"BaseVector.d.ts","sourceRoot":"","sources":["BaseVector.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwEA;;;;;;;;;;;GAWG;AACH;IACE;;OAEG;IACH,6DAyDC;IA9CC;;;OAGG;IACH,mBAA2E;IAE3E;;;OAGG;IACH,sBACiE;IAEjE;;;;OAIG;IACH,eAAkB;IAElB;;;;OAIG;IACH,uBAA+B;IAI/B;;;OAGG;IACH,8BAGW;IAEX;;;OAGG;IACH,gCAGW;IA4Bb;;OAEG;IACH,mBAFY,MAAM,GAAC,SAAS,CAI3B;IAED;;;OAGG;IACH,yBAHqB,OAAO,eAAe,EAAE,OAAO,QAAE,OAAO,eAAe,EAAE,OAAO,KAAG,MAAM,GAAC,IAAI,GAAC,SAAS,CAO5G;IAED;;;;;OAKG;IACH,YAHY,OAAO,mBAAmB,EAAE,SAAS,GAAC,IAAI,GAAC,SAAS,CAK/D;IAED;;;;OAIG;IACH,oBAHY,OAAO,mBAAmB,EAAE,aAAa,GAAC,SAAS,CAK9D;IAED;;;OAGG;IACH,2BAHY,OAAO,CAKlB;IAED;;;OAGG;IACH,6BAHY,OAAO,CAKlB;IAeD;;;OAGG;IACH,4BAHW,OAAO,cAAc,EAAE,aAAa,GAAC,IAAI,GAAC,SAAS,QAK7D;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,4HAKC;CACF;kBA7QiB,YAAY"}
1
+ {"version":3,"file":"BaseVector.d.ts","sourceRoot":"","sources":["BaseVector.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwEA;;;;;;;;;;;GAWG;AACH;IACE;;OAEG;IACH,6DAyDC;IA9CC;;;OAGG;IACH,mBAA2E;IAE3E;;;OAGG;IACH,sBACiE;IAEjE;;;;OAIG;IACH,eAAkB;IAElB;;;;OAIG;IACH,uBAA+B;IAI/B;;;OAGG;IACH,8BAGW;IAEX;;;OAGG;IACH,gCAGW;IA4Bb;;OAEG;IACH,mBAFY,MAAM,GAAC,SAAS,CAI3B;IAED;;;OAGG;IACH,yBAHqB,OAAO,eAAe,EAAE,OAAO,QAAE,OAAO,eAAe,EAAE,OAAO,KAAG,MAAM,GAAC,IAAI,GAAC,SAAS,CAO5G;IAED;;;;;OAKG;IACH,YAHY,OAAO,mBAAmB,EAAE,SAAS,GAAC,OAAO,kBAAkB,EAAE,aAAa,GAAC,IAAI,GAAC,SAAS,CAKxG;IAED;;;;OAIG;IACH,oBAHY,OAAO,mBAAmB,EAAE,aAAa,GAAC,SAAS,CAK9D;IAED;;;OAGG;IACH,2BAHY,OAAO,CAKlB;IAED;;;OAGG;IACH,6BAHY,OAAO,CAKlB;IAeD;;;OAGG;IACH,4BAHW,OAAO,cAAc,EAAE,aAAa,GAAC,IAAI,GAAC,SAAS,QAK7D;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,4HAMC;CACF;kBA9QiB,YAAY"}
@@ -112,7 +112,7 @@ class BaseVectorLayer extends Layer {
112
112
 
113
113
  /**
114
114
  * User provided style.
115
- * @type {import("../style/Style.js").StyleLike}
115
+ * @type {import("../style/Style.js").StyleLike|import("../style/flat.js").FlatStyleLike}
116
116
  * @private
117
117
  */
118
118
  this.style_ = null;
@@ -190,7 +190,7 @@ class BaseVectorLayer extends Layer {
190
190
  /**
191
191
  * Get the style for features. This returns whatever was passed to the `style`
192
192
  * option at construction or to the `setStyle` method.
193
- * @return {import("../style/Style.js").StyleLike|null|undefined} Layer style.
193
+ * @return {import("../style/Style.js").StyleLike|import("../style/flat.js").FlatStyleLike|null|undefined} Layer style.
194
194
  * @api
195
195
  */
196
196
  getStyle() {
@@ -265,9 +265,10 @@ class BaseVectorLayer extends Layer {
265
265
  * @api
266
266
  */
267
267
  setStyle(style) {
268
- this.style_ = toStyleLike(style);
268
+ this.style_ = style === undefined ? createDefaultStyle : style;
269
+ const styleLike = toStyleLike(style);
269
270
  this.styleFunction_ =
270
- style === null ? undefined : toStyleFunction(this.style_);
271
+ style === null ? undefined : toStyleFunction(styleLike);
271
272
  this.changed();
272
273
  }
273
274
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ol",
3
- "version": "9.1.1-dev.1715763426986",
3
+ "version": "9.1.1-dev.1715779213254",
4
4
  "description": "OpenLayers mapping library",
5
5
  "keywords": [
6
6
  "map",
@@ -1,5 +1,15 @@
1
1
  export default ReprojDataTile;
2
2
  export type TileGetter = (arg0: number, arg1: number, arg2: number, arg3: number) => import("../DataTile.js").default;
3
+ export type TileOffset = {
4
+ /**
5
+ * Tile.
6
+ */
7
+ tile: DataTile;
8
+ /**
9
+ * Offset.
10
+ */
11
+ offset: number;
12
+ };
3
13
  export type Options = {
4
14
  /**
5
15
  * Source projection.
@@ -55,6 +65,11 @@ export type Options = {
55
65
  /**
56
66
  * @typedef {function(number, number, number, number) : import("../DataTile.js").default} TileGetter
57
67
  */
68
+ /**
69
+ * @typedef {Object} TileOffset
70
+ * @property {DataTile} tile Tile.
71
+ * @property {number} offset Offset.
72
+ */
58
73
  /**
59
74
  * @typedef {Object} Options
60
75
  * @property {import("../proj/Projection.js").default} sourceProj Source projection.
@@ -125,7 +140,7 @@ declare class ReprojDataTile extends DataTile {
125
140
  private wrappedTileCoord_;
126
141
  /**
127
142
  * @private
128
- * @type {!Array<DataTile>}
143
+ * @type {!Array<TileOffset>}
129
144
  */
130
145
  private sourceTiles_;
131
146
  /**
@@ -138,6 +153,11 @@ declare class ReprojDataTile extends DataTile {
138
153
  * @type {number}
139
154
  */
140
155
  private sourceZ_;
156
+ /**
157
+ * @private
158
+ * @type {import("../extent.js").Extent}
159
+ */
160
+ private clipExtent_;
141
161
  /**
142
162
  * @private
143
163
  * @type {!import("./Triangulation.js").default}
@@ -1 +1 @@
1
- {"version":3,"file":"DataTile.d.ts","sourceRoot":"","sources":["DataTile.js"],"names":[],"mappings":";gCAoBsB,MAAM,QAAE,MAAM,QAAE,MAAM,QAAE,MAAM,KAAI,OAAO,gBAAgB,EAAE,OAAO;;;;;gBAK1E,OAAO,uBAAuB,EAAE,OAAO;;;;oBACvC,OAAO,yBAAyB,EAAE,OAAO;;;;gBACzC,OAAO,uBAAuB,EAAE,OAAO;;;;oBACvC,OAAO,yBAAyB,EAAE,OAAO;;;;eACzC,OAAO,iBAAiB,EAAE,SAAS;;;;;;;;gBAEnC,MAAM;;;;YACN,MAAM;;;;qBACN,UAAU;;;;;;;;;;;;;;;;AAdxB;;GAEG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;GAKG;AACH;IACE;;OAEG;IACH,qBAFW,OAAO,EA2LjB;IAjLC;;;OAGG;IACH,oBAAqC;IAErC;;;OAGG;IACH,gBAA6B;IAE7B;;;OAGG;IACH,oBAAuB;IAEvB;;;OAGG;IACH,qBAAwB;IAExB;;;OAGG;IACH,oBAA4B;IAE5B;;;OAGG;IACH,wBAA6C;IAE7C;;;OAGG;IACH,wBAA6C;IAE7C;;;OAGG;IACH,0BAAsE;IAEtE;;;OAGG;IACH,qBAAsB;IAEtB;;;OAGG;IACH,6BAAgC;IAEhC;;;OAGG;IACH,iBAAiB;IAqDjB;;;OAGG;IACH,uBAOC;IA2EH;;OAEG;IACH,mBAsKC;IAyDD;;OAEG;IACH,yBAGC;CACF;qBA1eyD,gBAAgB"}
1
+ {"version":3,"file":"DataTile.d.ts","sourceRoot":"","sources":["DataTile.js"],"names":[],"mappings":";gCAoBsB,MAAM,QAAE,MAAM,QAAE,MAAM,QAAE,MAAM,KAAI,OAAO,gBAAgB,EAAE,OAAO;;;;;UAK1E,QAAQ;;;;YACR,MAAM;;;;;;gBAKN,OAAO,uBAAuB,EAAE,OAAO;;;;oBACvC,OAAO,yBAAyB,EAAE,OAAO;;;;gBACzC,OAAO,uBAAuB,EAAE,OAAO;;;;oBACvC,OAAO,yBAAyB,EAAE,OAAO;;;;eACzC,OAAO,iBAAiB,EAAE,SAAS;;;;;;;;gBAEnC,MAAM;;;;YACN,MAAM;;;;qBACN,UAAU;;;;;;;;;;;;;;;;AApBxB;;GAEG;AAEH;;;;GAIG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;GAKG;AACH;IACE;;OAEG;IACH,qBAFW,OAAO,EAyNjB;IA/MC;;;OAGG;IACH,oBAAqC;IAErC;;;OAGG;IACH,gBAA6B;IAE7B;;;OAGG;IACH,oBAAuB;IAEvB;;;OAGG;IACH,qBAAwB;IAExB;;;OAGG;IACH,oBAA4B;IAE5B;;;OAGG;IACH,wBAA6C;IAE7C;;;OAGG;IACH,wBAA6C;IAE7C;;;OAGG;IACH,0BAAsE;IAEtE;;;OAGG;IACH,qBAAsB;IAEtB;;;OAGG;IACH,6BAAgC;IAEhC;;;OAGG;IACH,iBAAiB;IAMjB;;;OAGG;IACH,oBAIwB;IAmDxB;;;OAGG;IACH,uBAOC;IA6FH;;OAEG;IACH,mBAiLC;IAyDD;;OAEG;IACH,yBAGC;CACF;qBAzhByD,gBAAgB"}
@@ -14,13 +14,19 @@ import {
14
14
  } from '../reproj.js';
15
15
  import {clamp} from '../math.js';
16
16
  import {createCanvasContext2D, releaseCanvas} from '../dom.js';
17
- import {getArea, getIntersection} from '../extent.js';
17
+ import {getArea, getIntersection, getWidth, wrapAndSliceX} from '../extent.js';
18
18
  import {listen, unlistenByKey} from '../events.js';
19
19
 
20
20
  /**
21
21
  * @typedef {function(number, number, number, number) : import("../DataTile.js").default} TileGetter
22
22
  */
23
23
 
24
+ /**
25
+ * @typedef {Object} TileOffset
26
+ * @property {DataTile} tile Tile.
27
+ * @property {number} offset Offset.
28
+ */
29
+
24
30
  /**
25
31
  * @typedef {Object} Options
26
32
  * @property {import("../proj/Projection.js").default} sourceProj Source projection.
@@ -107,7 +113,7 @@ class ReprojDataTile extends DataTile {
107
113
 
108
114
  /**
109
115
  * @private
110
- * @type {!Array<DataTile>}
116
+ * @type {!Array<TileOffset>}
111
117
  */
112
118
  this.sourceTiles_ = [];
113
119
 
@@ -123,6 +129,20 @@ class ReprojDataTile extends DataTile {
123
129
  */
124
130
  this.sourceZ_ = 0;
125
131
 
132
+ const sourceProj = options.sourceProj;
133
+ const sourceProjExtent = sourceProj.getExtent();
134
+ const sourceTileGridExtent = options.sourceTileGrid.getExtent();
135
+
136
+ /**
137
+ * @private
138
+ * @type {import("../extent.js").Extent}
139
+ */
140
+ this.clipExtent_ = sourceProj.canWrapX()
141
+ ? sourceTileGridExtent
142
+ ? getIntersection(sourceProjExtent, sourceTileGridExtent)
143
+ : sourceProjExtent
144
+ : sourceTileGridExtent;
145
+
126
146
  const targetExtent = this.targetTileGrid_.getTileCoordExtent(
127
147
  this.wrappedTileCoord_,
128
148
  );
@@ -140,8 +160,6 @@ class ReprojDataTile extends DataTile {
140
160
  return;
141
161
  }
142
162
 
143
- const sourceProj = options.sourceProj;
144
- const sourceProjExtent = sourceProj.getExtent();
145
163
  if (sourceProjExtent) {
146
164
  if (!maxSourceExtent) {
147
165
  maxSourceExtent = sourceProjExtent;
@@ -216,19 +234,37 @@ class ReprojDataTile extends DataTile {
216
234
  if (!getArea(sourceExtent)) {
217
235
  this.state = TileState.EMPTY;
218
236
  } else {
219
- const sourceRange = this.sourceTileGrid_.getTileRangeForExtentAndZ(
220
- sourceExtent,
221
- this.sourceZ_,
237
+ let worldWidth = 0;
238
+ let worldsAway = 0;
239
+ if (sourceProj.canWrapX()) {
240
+ worldWidth = getWidth(sourceProjExtent);
241
+ worldsAway = Math.floor(
242
+ (sourceExtent[0] - sourceProjExtent[0]) / worldWidth,
243
+ );
244
+ }
245
+
246
+ const sourceExtents = wrapAndSliceX(
247
+ sourceExtent.slice(),
248
+ sourceProj,
249
+ true,
222
250
  );
223
- const getTile = options.getTileFunction;
224
- for (let srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {
225
- for (let srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {
226
- const tile = getTile(this.sourceZ_, srcX, srcY, this.pixelRatio_);
227
- if (tile) {
228
- this.sourceTiles_.push(tile);
251
+ sourceExtents.forEach((extent) => {
252
+ const sourceRange = this.sourceTileGrid_.getTileRangeForExtentAndZ(
253
+ extent,
254
+ this.sourceZ_,
255
+ );
256
+ const getTile = options.getTileFunction;
257
+ for (let srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {
258
+ for (let srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {
259
+ const tile = getTile(this.sourceZ_, srcX, srcY, this.pixelRatio_);
260
+ if (tile) {
261
+ const offset = worldsAway * worldWidth;
262
+ this.sourceTiles_.push({tile, offset});
263
+ }
229
264
  }
230
265
  }
231
- }
266
+ ++worldsAway;
267
+ });
232
268
 
233
269
  if (this.sourceTiles_.length === 0) {
234
270
  this.state = TileState.EMPTY;
@@ -265,7 +301,8 @@ class ReprojDataTile extends DataTile {
265
301
  */
266
302
  reproject_() {
267
303
  const dataSources = [];
268
- this.sourceTiles_.forEach((tile) => {
304
+ this.sourceTiles_.forEach((source) => {
305
+ const tile = source.tile;
269
306
  if (!tile || tile.getState() !== TileState.LOADED) {
270
307
  return;
271
308
  }
@@ -306,8 +343,17 @@ class ReprojDataTile extends DataTile {
306
343
  rowOffset += bytesPerRow / bytesPerElement;
307
344
  }
308
345
  }
346
+ const extent = this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord);
347
+ extent[0] += source.offset;
348
+ extent[2] += source.offset;
349
+ const clipExtent = this.clipExtent_?.slice();
350
+ if (clipExtent) {
351
+ clipExtent[0] += source.offset;
352
+ clipExtent[2] += source.offset;
353
+ }
309
354
  dataSources.push({
310
- extent: this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord),
355
+ extent: extent,
356
+ clipExtent: clipExtent,
311
357
  data: new Uint8Array(packedData.buffer),
312
358
  dataType: DataType,
313
359
  bytesPerPixel: bytesPerPixel,
@@ -359,6 +405,7 @@ class ReprojDataTile extends DataTile {
359
405
  context.putImageData(imageData, 0, 0);
360
406
  sources.push({
361
407
  extent: dataSource.extent,
408
+ clipExtent: dataSource.clipExtent,
362
409
  image: context.canvas,
363
410
  });
364
411
  }
@@ -377,7 +424,7 @@ class ReprojDataTile extends DataTile {
377
424
  false,
378
425
  false,
379
426
  false,
380
- true,
427
+ //true,
381
428
  );
382
429
 
383
430
  for (let i = 0, len = sources.length; i < len; ++i) {
@@ -444,7 +491,7 @@ class ReprojDataTile extends DataTile {
444
491
  let leftToLoad = 0;
445
492
 
446
493
  this.sourcesListenerKeys_ = [];
447
- this.sourceTiles_.forEach((tile) => {
494
+ this.sourceTiles_.forEach(({tile}) => {
448
495
  const state = tile.getState();
449
496
  if (state !== TileState.IDLE && state !== TileState.LOADING) {
450
497
  return;
@@ -477,7 +524,7 @@ class ReprojDataTile extends DataTile {
477
524
  if (leftToLoad === 0) {
478
525
  setTimeout(this.reproject_.bind(this), 0);
479
526
  } else {
480
- this.sourceTiles_.forEach(function (tile) {
527
+ this.sourceTiles_.forEach(function ({tile}) {
481
528
  const state = tile.getState();
482
529
  if (state == TileState.IDLE) {
483
530
  tile.load();
package/reproj/Tile.d.ts CHANGED
@@ -1,8 +1,23 @@
1
1
  export default ReprojTile;
2
2
  export type FunctionType = (arg0: number, arg1: number, arg2: number, arg3: number) => (import("../ImageTile.js").default);
3
+ export type TileOffset = {
4
+ /**
5
+ * Tile.
6
+ */
7
+ tile: import("../ImageTile.js").default;
8
+ /**
9
+ * Offset.
10
+ */
11
+ offset: number;
12
+ };
3
13
  /**
4
14
  * @typedef {function(number, number, number, number) : (import("../ImageTile.js").default)} FunctionType
5
15
  */
16
+ /**
17
+ * @typedef {Object} TileOffset
18
+ * @property {import("../ImageTile.js").default} tile Tile.
19
+ * @property {number} offset Offset.
20
+ */
6
21
  /**
7
22
  * @classdesc
8
23
  * Class encapsulating single reprojected tile.
@@ -63,7 +78,7 @@ declare class ReprojTile extends Tile {
63
78
  private wrappedTileCoord_;
64
79
  /**
65
80
  * @private
66
- * @type {!Array<import("../ImageTile.js").default>}
81
+ * @type {!Array<TileOffset>}
67
82
  */
68
83
  private sourceTiles_;
69
84
  /**
@@ -76,6 +91,11 @@ declare class ReprojTile extends Tile {
76
91
  * @type {number}
77
92
  */
78
93
  private sourceZ_;
94
+ /**
95
+ * @private
96
+ * @type {import("../extent.js").Extent}
97
+ */
98
+ private clipExtent_;
79
99
  /**
80
100
  * @private
81
101
  * @type {!import("./Triangulation.js").default}
@@ -1 +1 @@
1
- {"version":3,"file":"Tile.d.ts","sourceRoot":"","sources":["Tile.js"],"names":[],"mappings":";kCAoBsB,MAAM,QAAE,MAAM,QAAE,MAAM,QAAE,MAAM,KAAI,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC;AAD3F;;GAEG;AAEH;;;;;GAKG;AACH;IACE;;;;;;;;;;;;;;OAcG;IACH,wBAdW,OAAO,uBAAuB,EAAE,OAAO,kBACvC,OAAO,yBAAyB,EAAE,OAAO,cACzC,OAAO,uBAAuB,EAAE,OAAO,kBACvC,OAAO,yBAAyB,EAAE,OAAO,aACzC,OAAO,iBAAiB,EAAE,SAAS,oBACnC,OAAO,iBAAiB,EAAE,SAAS,cACnC,MAAM,UACN,MAAM,mBACN,YAAY,8HA6LtB;IAvKC;;;OAGG;IACH,qBAAmE;IAEnE;;;OAGG;IACH,oBAA6B;IAE7B;;;OAGG;IACH,gBAAqB;IAErB;;;OAGG;IACH,gBAAmB;IAEnB;;;OAGG;IACH,wBAAqC;IAErC;;;OAGG;IACH,wBAAqC;IAErC;;;OAGG;IACH,0BAAwE;IAExE;;;OAGG;IACH,qBAAsB;IAEtB;;;OAGG;IACH,6BAAgC;IAEhC;;;OAGG;IACH,iBAAiB;IAiDjB;;;OAGG;IACH,uBAOC;IAmDH;;;OAGG;IACH,YAFY,iBAAiB,CAI5B;IAED;;OAEG;IACH,mBA8CC;IAuDD;;OAEG;IACH,yBAGC;CAaF;iBAnWgB,YAAY"}
1
+ {"version":3,"file":"Tile.d.ts","sourceRoot":"","sources":["Tile.js"],"names":[],"mappings":";kCAoBsB,MAAM,QAAE,MAAM,QAAE,MAAM,QAAE,MAAM,KAAI,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC;;;;;UAK7E,OAAO,iBAAiB,EAAE,OAAO;;;;YACjC,MAAM;;AAPpB;;GAEG;AAEH;;;;GAIG;AAEH;;;;;GAKG;AACH;IACE;;;;;;;;;;;;;;OAcG;IACH,wBAdW,OAAO,uBAAuB,EAAE,OAAO,kBACvC,OAAO,yBAAyB,EAAE,OAAO,cACzC,OAAO,uBAAuB,EAAE,OAAO,kBACvC,OAAO,yBAAyB,EAAE,OAAO,aACzC,OAAO,iBAAiB,EAAE,SAAS,oBACnC,OAAO,iBAAiB,EAAE,SAAS,cACnC,MAAM,UACN,MAAM,mBACN,YAAY,8HAuNtB;IAjMC;;;OAGG;IACH,qBAAmE;IAEnE;;;OAGG;IACH,oBAA6B;IAE7B;;;OAGG;IACH,gBAAqB;IAErB;;;OAGG;IACH,gBAAmB;IAEnB;;;OAGG;IACH,wBAAqC;IAErC;;;OAGG;IACH,wBAAqC;IAErC;;;OAGG;IACH,0BAAwE;IAExE;;;OAGG;IACH,qBAAsB;IAEtB;;;OAGG;IACH,6BAAgC;IAEhC;;;OAGG;IACH,iBAAiB;IAEjB;;;OAGG;IACH,oBAEa;IAiDb;;;OAGG;IACH,uBAOC;IAqEH;;;OAGG;IACH,YAFY,iBAAiB,CAI5B;IAED;;OAEG;IACH,mBAwDC;IAuDD;;OAEG;IACH,yBAGC;CAaF;iBA7YgB,YAAY"}
package/reproj/Tile.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  render as renderReprojected,
14
14
  } from '../reproj.js';
15
15
  import {clamp} from '../math.js';
16
- import {getArea, getIntersection} from '../extent.js';
16
+ import {getArea, getIntersection, getWidth, wrapAndSliceX} from '../extent.js';
17
17
  import {listen, unlistenByKey} from '../events.js';
18
18
  import {releaseCanvas} from '../dom.js';
19
19
 
@@ -21,6 +21,12 @@ import {releaseCanvas} from '../dom.js';
21
21
  * @typedef {function(number, number, number, number) : (import("../ImageTile.js").default)} FunctionType
22
22
  */
23
23
 
24
+ /**
25
+ * @typedef {Object} TileOffset
26
+ * @property {import("../ImageTile.js").default} tile Tile.
27
+ * @property {number} offset Offset.
28
+ */
29
+
24
30
  /**
25
31
  * @classdesc
26
32
  * Class encapsulating single reprojected tile.
@@ -103,7 +109,7 @@ class ReprojTile extends Tile {
103
109
 
104
110
  /**
105
111
  * @private
106
- * @type {!Array<import("../ImageTile.js").default>}
112
+ * @type {!Array<TileOffset>}
107
113
  */
108
114
  this.sourceTiles_ = [];
109
115
 
@@ -119,6 +125,14 @@ class ReprojTile extends Tile {
119
125
  */
120
126
  this.sourceZ_ = 0;
121
127
 
128
+ /**
129
+ * @private
130
+ * @type {import("../extent.js").Extent}
131
+ */
132
+ this.clipExtent_ = sourceProj.canWrapX()
133
+ ? sourceProj.getExtent()
134
+ : undefined;
135
+
122
136
  const targetExtent = targetTileGrid.getTileCoordExtent(
123
137
  this.wrappedTileCoord_,
124
138
  );
@@ -208,19 +222,37 @@ class ReprojTile extends Tile {
208
222
  if (!getArea(sourceExtent)) {
209
223
  this.state = TileState.EMPTY;
210
224
  } else {
211
- const sourceRange = sourceTileGrid.getTileRangeForExtentAndZ(
212
- sourceExtent,
213
- this.sourceZ_,
225
+ let worldWidth = 0;
226
+ let worldsAway = 0;
227
+ if (sourceProj.canWrapX()) {
228
+ worldWidth = getWidth(sourceProjExtent);
229
+ worldsAway = Math.floor(
230
+ (sourceExtent[0] - sourceProjExtent[0]) / worldWidth,
231
+ );
232
+ }
233
+
234
+ const sourceExtents = wrapAndSliceX(
235
+ sourceExtent.slice(),
236
+ sourceProj,
237
+ true,
214
238
  );
239
+ sourceExtents.forEach((extent) => {
240
+ const sourceRange = sourceTileGrid.getTileRangeForExtentAndZ(
241
+ extent,
242
+ this.sourceZ_,
243
+ );
215
244
 
216
- for (let srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {
217
- for (let srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {
218
- const tile = getTileFunction(this.sourceZ_, srcX, srcY, pixelRatio);
219
- if (tile) {
220
- this.sourceTiles_.push(tile);
245
+ for (let srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {
246
+ for (let srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {
247
+ const tile = getTileFunction(this.sourceZ_, srcX, srcY, pixelRatio);
248
+ if (tile) {
249
+ const offset = worldsAway * worldWidth;
250
+ this.sourceTiles_.push({tile, offset});
251
+ }
221
252
  }
222
253
  }
223
- }
254
+ ++worldsAway;
255
+ });
224
256
 
225
257
  if (this.sourceTiles_.length === 0) {
226
258
  this.state = TileState.EMPTY;
@@ -241,10 +273,20 @@ class ReprojTile extends Tile {
241
273
  */
242
274
  reproject_() {
243
275
  const sources = [];
244
- this.sourceTiles_.forEach((tile) => {
276
+ this.sourceTiles_.forEach((source) => {
277
+ const tile = source.tile;
245
278
  if (tile && tile.getState() == TileState.LOADED) {
279
+ const extent = this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord);
280
+ extent[0] += source.offset;
281
+ extent[2] += source.offset;
282
+ const clipExtent = this.clipExtent_?.slice();
283
+ if (clipExtent) {
284
+ clipExtent[0] += source.offset;
285
+ clipExtent[2] += source.offset;
286
+ }
246
287
  sources.push({
247
- extent: this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord),
288
+ extent: extent,
289
+ clipExtent: clipExtent,
248
290
  image: tile.getImage(),
249
291
  });
250
292
  }
@@ -298,7 +340,7 @@ class ReprojTile extends Tile {
298
340
  let leftToLoad = 0;
299
341
 
300
342
  this.sourcesListenerKeys_ = [];
301
- this.sourceTiles_.forEach((tile) => {
343
+ this.sourceTiles_.forEach(({tile}) => {
302
344
  const state = tile.getState();
303
345
  if (state == TileState.IDLE || state == TileState.LOADING) {
304
346
  leftToLoad++;
@@ -330,7 +372,7 @@ class ReprojTile extends Tile {
330
372
  if (leftToLoad === 0) {
331
373
  setTimeout(this.reproject_.bind(this), 0);
332
374
  } else {
333
- this.sourceTiles_.forEach(function (tile, i, arr) {
375
+ this.sourceTiles_.forEach(function ({tile}, i, arr) {
334
376
  const state = tile.getState();
335
377
  if (state == TileState.IDLE) {
336
378
  tile.load();
package/reproj.d.ts CHANGED
@@ -27,6 +27,7 @@ export function calculateSourceExtentResolution(sourceProj: import("./proj/Proje
27
27
  /**
28
28
  * @typedef {Object} ImageExtent
29
29
  * @property {import("./extent.js").Extent} extent Extent.
30
+ * @property {import("./extent.js").Extent} [clipExtent] Clip extent.
30
31
  * @property {import('./DataTile.js').ImageLike} image Image.
31
32
  */
32
33
  /**
@@ -58,6 +59,10 @@ export type ImageExtent = {
58
59
  * Extent.
59
60
  */
60
61
  extent: import("./extent.js").Extent;
62
+ /**
63
+ * Clip extent.
64
+ */
65
+ clipExtent?: import("./extent.js").Extent | undefined;
61
66
  /**
62
67
  * Image.
63
68
  */
package/reproj.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"reproj.d.ts","sourceRoot":"","sources":["reproj.js"],"names":[],"mappings":"AA2FA;;;;;;;;;;;GAWG;AACH,sDANW,OAAO,sBAAsB,EAAE,OAAO,cACtC,OAAO,sBAAsB,EAAE,OAAO,gBACtC,OAAO,iBAAiB,EAAE,UAAU,oBACpC,MAAM,GACL,MAAM,CAyCjB;AAED;;;;;;;;;;;GAWG;AACH,4DANW,OAAO,sBAAsB,EAAE,OAAO,cACtC,OAAO,sBAAsB,EAAE,OAAO,gBACtC,OAAO,aAAa,EAAE,MAAM,oBAC5B,MAAM,GACL,MAAM,CA6BjB;AAED;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAhBW,MAAM,UACN,MAAM,cACN,MAAM,oBACN,MAAM,gBACN,OAAO,aAAa,EAAE,MAAM,oBAC5B,MAAM,gBACN,OAAO,aAAa,EAAE,MAAM,iBAC5B,OAAO,2BAA2B,EAAE,OAAO,WAC3C,MAAM,WAAW,CAAC,UAClB,MAAM,6IAKL,iBAAiB,CAqQ5B;AAlcD;;GAEG;AACH,yBAFU,MAAM,iBAAiB,CAAC,CAEL;;;;;YAqKf,OAAO,aAAa,EAAE,MAAM;;;;WAC5B,OAAO,eAAe,EAAE,SAAS"}
1
+ {"version":3,"file":"reproj.d.ts","sourceRoot":"","sources":["reproj.js"],"names":[],"mappings":"AA2FA;;;;;;;;;;;GAWG;AACH,sDANW,OAAO,sBAAsB,EAAE,OAAO,cACtC,OAAO,sBAAsB,EAAE,OAAO,gBACtC,OAAO,iBAAiB,EAAE,UAAU,oBACpC,MAAM,GACL,MAAM,CAyCjB;AAED;;;;;;;;;;;GAWG;AACH,4DANW,OAAO,sBAAsB,EAAE,OAAO,cACtC,OAAO,sBAAsB,EAAE,OAAO,gBACtC,OAAO,aAAa,EAAE,MAAM,oBAC5B,MAAM,GACL,MAAM,CA6BjB;AAED;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAhBW,MAAM,UACN,MAAM,cACN,MAAM,oBACN,MAAM,gBACN,OAAO,aAAa,EAAE,MAAM,oBAC5B,MAAM,gBACN,OAAO,aAAa,EAAE,MAAM,iBAC5B,OAAO,2BAA2B,EAAE,OAAO,WAC3C,MAAM,WAAW,CAAC,UAClB,MAAM,6IAKL,iBAAiB,CAuR5B;AArdD;;GAEG;AACH,yBAFU,MAAM,iBAAiB,CAAC,CAEL;;;;;YAqKf,OAAO,aAAa,EAAE,MAAM;;;;;;;;WAE5B,OAAO,eAAe,EAAE,SAAS"}
package/reproj.js CHANGED
@@ -186,6 +186,7 @@ export function calculateSourceExtentResolution(
186
186
  /**
187
187
  * @typedef {Object} ImageExtent
188
188
  * @property {import("./extent.js").Extent} extent Extent.
189
+ * @property {import("./extent.js").Extent} [clipExtent] Clip extent.
189
190
  * @property {import('./DataTile.js').ImageLike} image Image.
190
191
  */
191
192
 
@@ -276,13 +277,27 @@ export function render(
276
277
  }
277
278
 
278
279
  sources.forEach(function (src, i, arr) {
279
- const xPos = (src.extent[0] - sourceDataExtent[0]) * stitchScale;
280
- const yPos = -(src.extent[3] - sourceDataExtent[3]) * stitchScale;
281
- const srcWidth = getWidth(src.extent) * stitchScale;
282
- const srcHeight = getHeight(src.extent) * stitchScale;
283
-
284
280
  // This test should never fail -- but it does. Need to find a fix the upstream condition
285
281
  if (src.image.width > 0 && src.image.height > 0) {
282
+ if (src.clipExtent) {
283
+ stitchContext.save();
284
+ const xPos = (src.clipExtent[0] - sourceDataExtent[0]) * stitchScale;
285
+ const yPos = -(src.clipExtent[3] - sourceDataExtent[3]) * stitchScale;
286
+ const width = getWidth(src.clipExtent) * stitchScale;
287
+ const height = getHeight(src.clipExtent) * stitchScale;
288
+ stitchContext.rect(
289
+ interpolate ? xPos : Math.round(xPos),
290
+ interpolate ? yPos : Math.round(yPos),
291
+ interpolate ? width : Math.round(xPos + width) - Math.round(xPos),
292
+ interpolate ? height : Math.round(yPos + height) - Math.round(yPos),
293
+ );
294
+ stitchContext.clip();
295
+ }
296
+
297
+ const xPos = (src.extent[0] - sourceDataExtent[0]) * stitchScale;
298
+ const yPos = -(src.extent[3] - sourceDataExtent[3]) * stitchScale;
299
+ const srcWidth = getWidth(src.extent) * stitchScale;
300
+ const srcHeight = getHeight(src.extent) * stitchScale;
286
301
  stitchContext.drawImage(
287
302
  src.image,
288
303
  gutter,
@@ -298,6 +313,10 @@ export function render(
298
313
  ? srcHeight
299
314
  : Math.round(yPos + srcHeight) - Math.round(yPos),
300
315
  );
316
+
317
+ if (src.clipExtent) {
318
+ stitchContext.restore();
319
+ }
301
320
  }
302
321
  });
303
322
  }
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 = '9.1.1-dev.1715763426986';
36
+ export const VERSION = '9.1.1-dev.1715779213254';