@deck.gl/geo-layers 8.6.0-alpha.2 → 8.6.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.
Files changed (43) hide show
  1. package/dist/dist.dev.js +5981 -2029
  2. package/dist/es5/h3-layers/h3-hexagon-layer.js +61 -46
  3. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  4. package/dist/es5/mvt-layer/mvt-layer.js +2 -2
  5. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  6. package/dist/es5/tile-3d-layer/tile-3d-layer.js +1 -1
  7. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  8. package/dist/es5/tile-layer/tile-2d-header.js +70 -55
  9. package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
  10. package/dist/es5/tile-layer/tile-2d-traversal.js +42 -4
  11. package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
  12. package/dist/es5/tile-layer/tile-layer.js +31 -33
  13. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  14. package/dist/es5/tile-layer/tileset-2d.js +102 -67
  15. package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
  16. package/dist/es5/tile-layer/utils.js +1 -1
  17. package/dist/es5/tile-layer/utils.js.map +1 -1
  18. package/dist/esm/h3-layers/h3-hexagon-layer.js +52 -38
  19. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  20. package/dist/esm/mvt-layer/mvt-layer.js +2 -4
  21. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  22. package/dist/esm/tile-3d-layer/tile-3d-layer.js +1 -1
  23. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  24. package/dist/esm/tile-layer/tile-2d-header.js +43 -31
  25. package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
  26. package/dist/esm/tile-layer/tile-2d-traversal.js +23 -1
  27. package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
  28. package/dist/esm/tile-layer/tile-layer.js +29 -33
  29. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  30. package/dist/esm/tile-layer/tileset-2d.js +34 -11
  31. package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
  32. package/dist/esm/tile-layer/utils.js +1 -1
  33. package/dist/esm/tile-layer/utils.js.map +1 -1
  34. package/dist.min.js +2 -2
  35. package/package.json +3 -3
  36. package/src/h3-layers/h3-hexagon-layer.js +47 -37
  37. package/src/mvt-layer/mvt-layer.js +2 -2
  38. package/src/tile-3d-layer/tile-3d-layer.js +1 -1
  39. package/src/tile-layer/tile-2d-header.js +43 -32
  40. package/src/tile-layer/tile-2d-traversal.js +28 -2
  41. package/src/tile-layer/tile-layer.js +33 -34
  42. package/src/tile-layer/tileset-2d.js +29 -15
  43. package/src/tile-layer/utils.js +1 -1
@@ -21,9 +21,7 @@ var Tile2DHeader = function () {
21
21
  function Tile2DHeader(_ref) {
22
22
  var x = _ref.x,
23
23
  y = _ref.y,
24
- z = _ref.z,
25
- onTileLoad = _ref.onTileLoad,
26
- onTileError = _ref.onTileError;
24
+ z = _ref.z;
27
25
  (0, _classCallCheck2.default)(this, Tile2DHeader);
28
26
  this.x = x;
29
27
  this.y = y;
@@ -33,53 +31,56 @@ var Tile2DHeader = function () {
33
31
  this.parent = null;
34
32
  this.children = [];
35
33
  this.content = null;
34
+ this._loaderId = 0;
36
35
  this._isLoaded = false;
37
36
  this._isCancelled = false;
38
- this.onTileLoad = onTileLoad;
39
- this.onTileError = onTileError;
37
+ this._needsReload = false;
40
38
  }
41
39
 
42
40
  (0, _createClass2.default)(Tile2DHeader, [{
43
41
  key: "_loadData",
44
42
  value: function () {
45
- var _loadData2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(getTileData, requestScheduler) {
46
- var x, y, z, bbox, signal, requestToken, tileData, error;
43
+ var _loadData2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(_ref2) {
44
+ var getData, requestScheduler, onLoad, onError, x, y, z, bbox, loaderId, signal, requestToken, tileData, error;
47
45
  return _regenerator.default.wrap(function _callee$(_context) {
48
46
  while (1) {
49
47
  switch (_context.prev = _context.next) {
50
48
  case 0:
49
+ getData = _ref2.getData, requestScheduler = _ref2.requestScheduler, onLoad = _ref2.onLoad, onError = _ref2.onError;
51
50
  x = this.x, y = this.y, z = this.z, bbox = this.bbox;
51
+ loaderId = this._loaderId;
52
52
  this._abortController = new AbortController();
53
53
  signal = this._abortController.signal;
54
- _context.next = 5;
54
+ _context.next = 7;
55
55
  return requestScheduler.scheduleRequest(this, function (tile) {
56
56
  return tile.isSelected ? 1 : -1;
57
57
  });
58
58
 
59
- case 5:
59
+ case 7:
60
60
  requestToken = _context.sent;
61
61
 
62
62
  if (requestToken) {
63
- _context.next = 9;
63
+ _context.next = 11;
64
64
  break;
65
65
  }
66
66
 
67
67
  this._isCancelled = true;
68
68
  return _context.abrupt("return");
69
69
 
70
- case 9:
70
+ case 11:
71
71
  if (!this._isCancelled) {
72
- _context.next = 12;
72
+ _context.next = 14;
73
73
  break;
74
74
  }
75
75
 
76
76
  requestToken.done();
77
77
  return _context.abrupt("return");
78
78
 
79
- case 12:
80
- _context.prev = 12;
81
- _context.next = 15;
82
- return getTileData({
79
+ case 14:
80
+ tileData = null;
81
+ _context.prev = 15;
82
+ _context.next = 18;
83
+ return getData({
83
84
  x: x,
84
85
  y: y,
85
86
  z: z,
@@ -87,54 +88,60 @@ var Tile2DHeader = function () {
87
88
  signal: signal
88
89
  });
89
90
 
90
- case 15:
91
+ case 18:
91
92
  tileData = _context.sent;
92
- _context.next = 21;
93
+ _context.next = 24;
93
94
  break;
94
95
 
95
- case 18:
96
- _context.prev = 18;
97
- _context.t0 = _context["catch"](12);
98
- error = _context.t0 || true;
99
-
100
96
  case 21:
101
97
  _context.prev = 21;
98
+ _context.t0 = _context["catch"](15);
99
+ error = _context.t0 || true;
100
+
101
+ case 24:
102
+ _context.prev = 24;
102
103
  requestToken.done();
104
+ return _context.finish(24);
103
105
 
104
- if (this._isCancelled && !tileData) {
105
- this._isLoaded = false;
106
- } else {
107
- this._isLoaded = true;
108
- this._isCancelled = false;
106
+ case 27:
107
+ if (!(loaderId !== this._loaderId)) {
108
+ _context.next = 29;
109
+ break;
109
110
  }
110
111
 
111
- return _context.finish(21);
112
+ return _context.abrupt("return");
113
+
114
+ case 29:
115
+ this._loader = undefined;
116
+ this.content = tileData;
112
117
 
113
- case 25:
114
- if (this._isLoaded) {
115
- _context.next = 27;
118
+ if (!(this._isCancelled && !tileData)) {
119
+ _context.next = 34;
116
120
  break;
117
121
  }
118
122
 
123
+ this._isLoaded = false;
119
124
  return _context.abrupt("return");
120
125
 
121
- case 27:
126
+ case 34:
127
+ this._isLoaded = true;
128
+ this._isCancelled = false;
129
+
122
130
  if (error) {
123
- this.onTileError(error, this);
131
+ onError(error, this);
124
132
  } else {
125
- this.content = tileData;
126
- this.onTileLoad(this);
133
+ onLoad(this);
127
134
  }
128
135
 
129
- case 28:
136
+ case 37:
130
137
  case "end":
131
138
  return _context.stop();
132
139
  }
133
140
  }
134
- }, _callee, this, [[12, 18, 21, 25]]);
141
+ }, _callee, this, [[15, 21, 24, 27]]);
135
142
  }));
136
143
 
137
- function _loadData(_x, _x2) {
144
+ function _loadData(_x) {
138
145
  return _loadData2.apply(this, arguments);
139
146
  }
140
147
 
@@ -142,19 +149,23 @@ var Tile2DHeader = function () {
142
149
  }()
143
150
  }, {
144
151
  key: "loadData",
145
- value: function loadData(getTileData, requestScheduler) {
146
- var _this = this;
147
-
148
- if (!getTileData) {
149
- return;
150
- }
151
-
152
+ value: function loadData(opts) {
153
+ this._isLoaded = false;
152
154
  this._isCancelled = false;
153
- this._loader = this._loadData(getTileData, requestScheduler);
155
+ this._needsReload = false;
156
+ this._loaderId++;
157
+ this._loader = this._loadData(opts);
158
+ return this._loader;
159
+ }
160
+ }, {
161
+ key: "setNeedsReload",
162
+ value: function setNeedsReload() {
163
+ if (this.isLoading) {
164
+ this.abort();
165
+ this._loader = undefined;
166
+ }
154
167
 
155
- this._loader.finally(function () {
156
- _this._loader = undefined;
157
- });
168
+ this._needsReload = true;
158
169
  }
159
170
  }, {
160
171
  key: "abort",
@@ -170,22 +181,26 @@ var Tile2DHeader = function () {
170
181
  }, {
171
182
  key: "data",
172
183
  get: function get() {
173
- return this._isLoaded ? this.content : this._loader;
184
+ var _this = this;
185
+
186
+ return this.isLoading ? this._loader.then(function () {
187
+ return _this.data;
188
+ }) : this.content;
174
189
  }
175
190
  }, {
176
191
  key: "isLoaded",
177
192
  get: function get() {
178
- return this._isLoaded;
193
+ return this._isLoaded && !this._needsReload;
179
194
  }
180
195
  }, {
181
196
  key: "isLoading",
182
197
  get: function get() {
183
- return Boolean(this._loader);
198
+ return Boolean(this._loader) && !this._isCancelled;
184
199
  }
185
200
  }, {
186
- key: "isCancelled",
201
+ key: "needsReload",
187
202
  get: function get() {
188
- return this._isCancelled;
203
+ return this._needsReload || this._isCancelled;
189
204
  }
190
205
  }, {
191
206
  key: "byteLength",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tile-2d-header.js"],"names":["Tile2DHeader","x","y","z","onTileLoad","onTileError","isVisible","isSelected","parent","children","content","_isLoaded","_isCancelled","getTileData","requestScheduler","bbox","_abortController","AbortController","signal","scheduleRequest","tile","requestToken","done","tileData","error","_loader","_loadData","finally","undefined","isLoaded","abort","Boolean","result","byteLength","Number","isFinite","log"],"mappings":"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","sourcesContent":["/* eslint-env browser */\nimport {log} from '@deck.gl/core';\n\nexport default class Tile2DHeader {\n constructor({x, y, z, onTileLoad, onTileError}) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n this._isLoaded = false;\n this._isCancelled = false;\n\n this.onTileLoad = onTileLoad;\n this.onTileError = onTileError;\n }\n\n get data() {\n return this._isLoaded ? this.content : this._loader;\n }\n\n get isLoaded() {\n return this._isLoaded;\n }\n\n get isLoading() {\n return Boolean(this._loader);\n }\n\n get isCancelled() {\n return this._isCancelled;\n }\n\n get byteLength() {\n const result = this.content ? this.content.byteLength : 0;\n if (!Number.isFinite(result)) {\n log.error('byteLength not defined in tile data')();\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n async _loadData(getTileData, requestScheduler) {\n const {x, y, z, bbox} = this;\n\n this._abortController = new AbortController(); // eslint-disable-line no-undef\n const {signal} = this._abortController;\n\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData;\n let error;\n try {\n tileData = await getTileData({x, y, z, bbox, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n } else {\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n this._isLoaded = true;\n this._isCancelled = false;\n }\n }\n\n if (!this._isLoaded) {\n return;\n }\n\n if (error) {\n this.onTileError(error, this);\n } else {\n this.content = tileData;\n this.onTileLoad(this);\n }\n }\n /* eslint-enable max-statements */\n\n loadData(getTileData, requestScheduler) {\n if (!getTileData) {\n return;\n }\n\n this._isCancelled = false;\n this._loader = this._loadData(getTileData, requestScheduler);\n this._loader.finally(() => {\n this._loader = undefined;\n });\n }\n\n abort() {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController.abort();\n }\n}\n"],"file":"tile-2d-header.js"}
1
+ {"version":3,"sources":["../../../src/tile-layer/tile-2d-header.js"],"names":["Tile2DHeader","x","y","z","isVisible","isSelected","parent","children","content","_loaderId","_isLoaded","_isCancelled","_needsReload","getData","requestScheduler","onLoad","onError","bbox","loaderId","_abortController","AbortController","signal","scheduleRequest","tile","requestToken","done","tileData","error","_loader","undefined","opts","_loadData","isLoading","abort","isLoaded","then","data","Boolean","result","byteLength","Number","isFinite","log"],"mappings":"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","sourcesContent":["/* eslint-env browser */\nimport {log} from '@deck.gl/core';\n\nexport default class Tile2DHeader {\n constructor({x, y, z}) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n get data() {\n return this.isLoading ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded() {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading() {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload() {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength() {\n const result = this.content ? this.content.byteLength : 0;\n if (!Number.isFinite(result)) {\n log.error('byteLength not defined in tile data')();\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n async _loadData({getData, requestScheduler, onLoad, onError}) {\n const {x, y, z, bbox} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController(); // eslint-disable-line no-undef\n const {signal} = this._abortController;\n\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData = null;\n let error;\n try {\n tileData = await getData({x, y, z, bbox, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n // If loadData has been called with a newer version, discard the result from this operation\n if (loaderId !== this._loaderId) {\n return;\n }\n // Clear the `isLoading` flag\n this._loader = undefined;\n // Rewrite tile content with the result of getTileData if successful, or `null` in case of\n // error or cancellation\n this.content = tileData;\n // If cancelled, do not invoke the callbacks\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n } else {\n onLoad(this);\n }\n }\n /* eslint-enable max-statements */\n\n loadData(opts) {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n setNeedsReload() {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n abort() {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController.abort();\n }\n}\n"],"file":"tile-2d-header.js"}
@@ -7,12 +7,16 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.getOSMTileIndices = getOSMTileIndices;
9
9
 
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
13
 
12
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
15
 
14
16
  var _culling = require("@math.gl/culling");
15
17
 
18
+ var _webMercator = require("@math.gl/web-mercator");
19
+
16
20
  var _utils = require("./utils");
17
21
 
18
22
  function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
@@ -43,9 +47,15 @@ var OSMNode = function () {
43
47
  elevationBounds = params.elevationBounds,
44
48
  minZ = params.minZ,
45
49
  maxZ = params.maxZ,
50
+ bounds = params.bounds,
46
51
  offset = params.offset,
47
52
  project = params.project;
48
53
  var boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);
54
+
55
+ if (bounds && !this.insideBounds(bounds)) {
56
+ return false;
57
+ }
58
+
49
59
  var isInside = cullingVolume.computeVisibility(boundingVolume);
50
60
 
51
61
  if (isInside < 0) {
@@ -112,6 +122,19 @@ var OSMNode = function () {
112
122
 
113
123
  return result;
114
124
  }
125
+ }, {
126
+ key: "insideBounds",
127
+ value: function insideBounds(_ref) {
128
+ var _ref2 = (0, _slicedToArray2.default)(_ref, 4),
129
+ minX = _ref2[0],
130
+ minY = _ref2[1],
131
+ maxX = _ref2[2],
132
+ maxY = _ref2[3];
133
+
134
+ var scale = Math.pow(2, this.z);
135
+ var extent = TILE_SIZE / scale;
136
+ return this.x * extent < maxX && this.y * extent < maxY && (this.x + 1) * extent > minX && (this.y + 1) * extent > minY;
137
+ }
115
138
  }, {
116
139
  key: "getBoundingVolume",
117
140
  value: function getBoundingVolume(zRange, worldOffset, project) {
@@ -165,11 +188,11 @@ var OSMNode = function () {
165
188
  return OSMNode;
166
189
  }();
167
190
 
168
- function getOSMTileIndices(viewport, maxZ, zRange) {
191
+ function getOSMTileIndices(viewport, maxZ, zRange, bounds) {
169
192
  var project = viewport.resolution ? viewport.projectPosition : null;
170
- var planes = Object.values(viewport.getFrustumPlanes()).map(function (_ref) {
171
- var normal = _ref.normal,
172
- distance = _ref.distance;
193
+ var planes = Object.values(viewport.getFrustumPlanes()).map(function (_ref3) {
194
+ var normal = _ref3.normal,
195
+ distance = _ref3.distance;
173
196
  return new _culling.Plane(normal.clone().negate(), distance);
174
197
  });
175
198
  var cullingVolume = new _culling.CullingVolume(planes);
@@ -177,6 +200,20 @@ function getOSMTileIndices(viewport, maxZ, zRange) {
177
200
  var elevationMin = zRange && zRange[0] * unitsPerMeter || 0;
178
201
  var elevationMax = zRange && zRange[1] * unitsPerMeter || 0;
179
202
  var minZ = viewport.pitch <= 60 ? maxZ : 0;
203
+
204
+ if (bounds) {
205
+ var _bounds = bounds,
206
+ _bounds2 = (0, _slicedToArray2.default)(_bounds, 4),
207
+ minLng = _bounds2[0],
208
+ minLat = _bounds2[1],
209
+ maxLng = _bounds2[2],
210
+ maxLat = _bounds2[3];
211
+
212
+ var topLeft = (0, _webMercator.lngLatToWorld)([minLng, maxLat]);
213
+ var bottomRight = (0, _webMercator.lngLatToWorld)([maxLng, minLat]);
214
+ bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];
215
+ }
216
+
180
217
  var root = new OSMNode(0, 0, 0);
181
218
  var traversalParams = {
182
219
  viewport: viewport,
@@ -185,6 +222,7 @@ function getOSMTileIndices(viewport, maxZ, zRange) {
185
222
  elevationBounds: [elevationMin, elevationMax],
186
223
  minZ: minZ,
187
224
  maxZ: maxZ,
225
+ bounds: bounds,
188
226
  offset: 0
189
227
  };
190
228
  root.update(traversalParams);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tile-2d-traversal.js"],"names":["TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","x","y","z","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","offset","project","boundingVolume","getBoundingVolume","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","children","child","update","result","push","_children","node","getSelected","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","pow","extent","originX","originY","AxisAlignedBoundingBox","getOSMTileIndices","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","Plane","clone","negate","CullingVolume","unitsPerMeter","distanceScales","elevationMin","elevationMax","pitch","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [[0.5, 0.5], [0, 0], [0, 1], [1, 0], [1, 1]]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([[0, 0.5], [0.5, 0], [1, 0.5], [0.5, 1]]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([[0.25, 0.5], [0.75, 0.5]]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n update(params) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result = []) {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n getBoundingVolume(zRange, worldOffset, project) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions = [];\n for (const p of refPoints) {\n const lngLat = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\nexport function getOSMTileIndices(viewport, maxZ, zRange) {\n const project = viewport.resolution ? viewport.projectPosition : null;\n\n // Get the culling volume of the current camera\n const planes = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport.pitch <= 60 ? maxZ : 0;\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax],\n minZ,\n maxZ,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (viewport.subViewports && viewport.subViewports.length > 1) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n"],"file":"tile-2d-traversal.js"}
1
+ {"version":3,"sources":["../../../src/tile-layer/tile-2d-traversal.js"],"names":["TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","x","y","z","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","children","child","update","result","push","_children","node","getSelected","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","AxisAlignedBoundingBox","getOSMTileIndices","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","Plane","clone","negate","CullingVolume","unitsPerMeter","distanceScales","elevationMin","elevationMax","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [[0.5, 0.5], [0, 0], [0, 1], [1, 0], [1, 1]]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([[0, 0.5], [0.5, 0], [1, 0.5], [0.5, 1]]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([[0.25, 0.5], [0.75, 0.5]]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n update(params) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result = []) {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]) {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(zRange, worldOffset, project) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions = [];\n for (const p of refPoints) {\n const lngLat = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\nexport function getOSMTileIndices(viewport, maxZ, zRange, bounds) {\n const project = viewport.resolution ? viewport.projectPosition : null;\n\n // Get the culling volume of the current camera\n const planes = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax],\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (viewport.subViewports && viewport.subViewports.length > 1) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n"],"file":"tile-2d-traversal.js"}
@@ -130,27 +130,24 @@ var TileLayer = function (_CompositeLayer) {
130
130
  var props = _ref2.props,
131
131
  changeFlags = _ref2.changeFlags;
132
132
  var tileset = this.state.tileset;
133
- var createTileCache = !tileset || changeFlags.dataChanged || changeFlags.updateTriggersChanged && (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData);
133
+ var propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;
134
+ var dataChanged = changeFlags.dataChanged || changeFlags.updateTriggersChanged && (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData);
134
135
 
135
- if (createTileCache) {
136
- if (tileset) {
137
- tileset.finalize();
138
- }
139
-
140
- tileset = new _tileset2d.default(_objectSpread(_objectSpread({}, this._getTilesetOptions(props)), {}, {
141
- getTileData: this.getTileData.bind(this),
142
- onTileLoad: this._onTileLoad.bind(this),
143
- onTileError: this._onTileError.bind(this),
144
- onTileUnload: this._onTileUnload.bind(this)
145
- }));
136
+ if (!tileset) {
137
+ tileset = new _tileset2d.default(this._getTilesetOptions(props));
146
138
  this.setState({
147
139
  tileset: tileset
148
140
  });
149
- } else if (changeFlags.propsChanged || changeFlags.updateTriggersChanged) {
141
+ } else if (propsChanged) {
150
142
  tileset.setOptions(this._getTilesetOptions(props));
151
- this.state.tileset.tiles.forEach(function (tile) {
152
- tile.layers = null;
153
- });
143
+
144
+ if (dataChanged) {
145
+ tileset.reloadAll();
146
+ } else {
147
+ this.state.tileset.tiles.forEach(function (tile) {
148
+ tile.layers = null;
149
+ });
150
+ }
154
151
  }
155
152
 
156
153
  this._updateTileset();
@@ -176,7 +173,11 @@ var TileLayer = function (_CompositeLayer) {
176
173
  refinementStrategy: refinementStrategy,
177
174
  extent: extent,
178
175
  maxRequests: maxRequests,
179
- zoomOffset: zoomOffset
176
+ zoomOffset: zoomOffset,
177
+ getTileData: this.getTileData.bind(this),
178
+ onTileLoad: this._onTileLoad.bind(this),
179
+ onTileError: this._onTileError.bind(this),
180
+ onTileUnload: this._onTileUnload.bind(this)
180
181
  };
181
182
  }
182
183
  }, {
@@ -219,8 +220,8 @@ var TileLayer = function (_CompositeLayer) {
219
220
  }, {
220
221
  key: "_onTileLoad",
221
222
  value: function _onTileLoad(tile) {
222
- var layer = this.getCurrentLayer();
223
- layer.props.onTileLoad(tile);
223
+ this.props.onTileLoad(tile);
224
+ tile.layers = null;
224
225
 
225
226
  if (tile.isVisible) {
226
227
  this.setNeedsUpdate();
@@ -229,10 +230,8 @@ var TileLayer = function (_CompositeLayer) {
229
230
  }, {
230
231
  key: "_onTileError",
231
232
  value: function _onTileError(error, tile) {
232
- var layer = this.getCurrentLayer();
233
- layer.props.onTileError(error);
234
-
235
- layer._updateTileset();
233
+ this.props.onTileError(error);
234
+ tile.layers = null;
236
235
 
237
236
  if (tile.isVisible) {
238
237
  this.setNeedsUpdate();
@@ -241,16 +240,15 @@ var TileLayer = function (_CompositeLayer) {
241
240
  }, {
242
241
  key: "_onTileUnload",
243
242
  value: function _onTileUnload(tile) {
244
- var layer = this.getCurrentLayer();
245
- layer.props.onTileUnload(tile);
243
+ this.props.onTileUnload(tile);
246
244
  }
247
245
  }, {
248
246
  key: "getTileData",
249
247
  value: function getTileData(tile) {
250
- var data = this.props.data;
251
- var _this$getCurrentLayer = this.getCurrentLayer().props,
252
- getTileData = _this$getCurrentLayer.getTileData,
253
- fetch = _this$getCurrentLayer.fetch;
248
+ var _this$props2 = this.props,
249
+ data = _this$props2.data,
250
+ getTileData = _this$props2.getTileData,
251
+ fetch = _this$props2.fetch;
254
252
  var signal = tile.signal;
255
253
  tile.url = (0, _utils.getURLFromTemplate)(data, tile);
256
254
 
@@ -301,10 +299,10 @@ var TileLayer = function (_CompositeLayer) {
301
299
  return this.state.tileset.tiles.map(function (tile) {
302
300
  var highlightedObjectIndex = _this.getHighlightedObjectIndex(tile);
303
301
 
304
- if (!tile.isLoaded) {} else if (!tile.layers) {
302
+ if (!tile.isLoaded && !tile.content) {} else if (!tile.layers) {
305
303
  var layers = _this.renderSubLayers(_objectSpread(_objectSpread({}, _this.props), {}, {
306
304
  id: "".concat(_this.id, "-").concat(tile.x, "-").concat(tile.y, "-").concat(tile.z),
307
- data: tile.data,
305
+ data: tile.content,
308
306
  _offset: 0,
309
307
  tile: tile
310
308
  }));
@@ -330,14 +328,14 @@ var TileLayer = function (_CompositeLayer) {
330
328
  key: "filterSubLayer",
331
329
  value: function filterSubLayer(_ref4) {
332
330
  var layer = _ref4.layer;
333
- return this.props.visible && layer.props.tile.isVisible;
331
+ return layer.props.tile.isVisible;
334
332
  }
335
333
  }, {
336
334
  key: "isLoaded",
337
335
  get: function get() {
338
336
  var tileset = this.state.tileset;
339
337
  return tileset.selectedTiles.every(function (tile) {
340
- return tile.layers && tile.layers.every(function (layer) {
338
+ return tile.isLoaded && tile.layers && tile.layers.every(function (layer) {
341
339
  return layer.isLoaded;
342
340
  });
343
341
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tile-layer.js"],"names":["defaultProps","data","dataComparator","urlType","equals","renderSubLayers","type","value","props","GeoJsonLayer","compare","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","STRATEGY_DEFAULT","zRange","maxRequests","zoomOffset","TileLayer","state","tileset","isLoaded","finalize","changeFlags","somethingChanged","createTileCache","dataChanged","updateTriggersChanged","all","Tileset2D","_getTilesetOptions","bind","_onTileLoad","_onTileError","_onTileUnload","setState","propsChanged","setOptions","tiles","forEach","layers","_updateTileset","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","selectedTiles","layer","getCurrentLayer","isVisible","setNeedsUpdate","fetch","signal","url","propName","info","sourceLayer","updateAutoHighlight","map","highlightedObjectIndex","getHighlightedObjectIndex","id","x","y","z","_offset","Boolean","clone","visible","every","CompositeLayer","layerName"],"mappings":"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","sourcesContent":["import {CompositeLayer, _flatten as flatten} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\n\nimport Tileset2D, {STRATEGY_DEFAULT} from './tileset-2d';\nimport {urlType, getURLFromTemplate} from './utils';\n\nconst defaultProps = {\n data: [],\n dataComparator: urlType.equals,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\nexport default class TileLayer extends CompositeLayer {\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state.tileset?.finalize();\n }\n\n get isLoaded() {\n const {tileset} = this.state;\n return tileset.selectedTiles.every(\n tile => tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}) {\n return changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}) {\n let {tileset} = this.state;\n const createTileCache =\n !tileset ||\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (createTileCache) {\n if (tileset) {\n tileset.finalize();\n }\n tileset = new Tileset2D({\n ...this._getTilesetOptions(props),\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n });\n this.setState({tileset});\n } else if (changeFlags.propsChanged || changeFlags.updateTriggersChanged) {\n tileset.setOptions(this._getTilesetOptions(props));\n // if any props changed, delete the cached layers\n this.state.tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(props) {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n zoomOffset\n };\n }\n\n _updateTileset() {\n const {tileset} = this.state;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad() {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile) {\n const layer = this.getCurrentLayer();\n layer.props.onTileLoad(tile);\n\n if (tile.isVisible) {\n this.setNeedsUpdate();\n }\n }\n\n _onTileError(error, tile) {\n const layer = this.getCurrentLayer();\n layer.props.onTileError(error);\n // errorred tiles should not block rendering, are considered \"loaded\" with empty data\n layer._updateTileset();\n\n if (tile.isVisible) {\n this.setNeedsUpdate();\n }\n }\n\n _onTileUnload(tile) {\n const layer = this.getCurrentLayer();\n layer.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile) {\n const {data} = this.props;\n const {getTileData, fetch} = this.getCurrentLayer().props;\n const {signal} = tile;\n\n tile.url = getURLFromTemplate(data, tile);\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(props) {\n return this.props.renderSubLayers(props);\n }\n\n getHighlightedObjectIndex() {\n return -1;\n }\n\n getPickingInfo({info, sourceLayer}) {\n info.tile = sourceLayer.props.tile;\n return info;\n }\n\n _updateAutoHighlight(info) {\n if (info.sourceLayer) {\n info.sourceLayer.updateAutoHighlight(info);\n }\n }\n\n renderLayers() {\n return this.state.tileset.tiles.map(tile => {\n const highlightedObjectIndex = this.getHighlightedObjectIndex(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded) {\n // no op\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n id: `${this.id}-${tile.x}-${tile.y}-${tile.z}`,\n data: tile.data,\n _offset: 0,\n tile\n });\n tile.layers = flatten(layers, Boolean).map(layer =>\n layer.clone({\n tile,\n highlightedObjectIndex\n })\n );\n } else if (\n tile.layers[0] &&\n tile.layers[0].props.highlightedObjectIndex !== highlightedObjectIndex\n ) {\n tile.layers = tile.layers.map(layer => layer.clone({highlightedObjectIndex}));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer}) {\n return this.props.visible && layer.props.tile.isVisible;\n }\n}\n\nTileLayer.layerName = 'TileLayer';\nTileLayer.defaultProps = defaultProps;\n"],"file":"tile-layer.js"}
1
+ {"version":3,"sources":["../../../src/tile-layer/tile-layer.js"],"names":["defaultProps","data","dataComparator","urlType","equals","renderSubLayers","type","value","props","GeoJsonLayer","compare","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","STRATEGY_DEFAULT","zRange","maxRequests","zoomOffset","TileLayer","state","tileset","isLoaded","finalize","changeFlags","somethingChanged","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","Tileset2D","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","layers","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","selectedTiles","isVisible","setNeedsUpdate","fetch","signal","url","propName","layer","info","sourceLayer","updateAutoHighlight","map","highlightedObjectIndex","getHighlightedObjectIndex","content","id","x","y","z","_offset","Boolean","clone","every","CompositeLayer","layerName"],"mappings":"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","sourcesContent":["import {CompositeLayer, _flatten as flatten} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\n\nimport Tileset2D, {STRATEGY_DEFAULT} from './tileset-2d';\nimport {urlType, getURLFromTemplate} from './utils';\n\nconst defaultProps = {\n data: [],\n dataComparator: urlType.equals,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\nexport default class TileLayer extends CompositeLayer {\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state.tileset?.finalize();\n }\n\n get isLoaded() {\n const {tileset} = this.state;\n return tileset.selectedTiles.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}) {\n return changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}) {\n let {tileset} = this.state;\n const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (!tileset) {\n tileset = new Tileset2D(this._getTilesetOptions(props));\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions(props));\n\n if (dataChanged) {\n // reload all tiles\n // use cached layers until new content is loaded\n tileset.reloadAll();\n } else {\n // some render options changed, regenerate sub layers now\n this.state.tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(props) {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n zoomOffset,\n\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n };\n }\n\n _updateTileset() {\n const {tileset} = this.state;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad() {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile) {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n if (tile.isVisible) {\n this.setNeedsUpdate();\n }\n }\n\n _onTileError(error, tile) {\n this.props.onTileError(error);\n tile.layers = null;\n\n if (tile.isVisible) {\n this.setNeedsUpdate();\n }\n }\n\n _onTileUnload(tile) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile) {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url = getURLFromTemplate(data, tile);\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(props) {\n return this.props.renderSubLayers(props);\n }\n\n getHighlightedObjectIndex() {\n return -1;\n }\n\n getPickingInfo({info, sourceLayer}) {\n info.tile = sourceLayer.props.tile;\n return info;\n }\n\n _updateAutoHighlight(info) {\n if (info.sourceLayer) {\n info.sourceLayer.updateAutoHighlight(info);\n }\n }\n\n renderLayers() {\n return this.state.tileset.tiles.map(tile => {\n const highlightedObjectIndex = this.getHighlightedObjectIndex(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n id: `${this.id}-${tile.x}-${tile.y}-${tile.z}`,\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = flatten(layers, Boolean).map(layer =>\n layer.clone({\n tile,\n highlightedObjectIndex\n })\n );\n } else if (\n tile.layers[0] &&\n tile.layers[0].props.highlightedObjectIndex !== highlightedObjectIndex\n ) {\n tile.layers = tile.layers.map(layer => layer.clone({highlightedObjectIndex}));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer}) {\n return layer.props.tile.isVisible;\n }\n}\n\nTileLayer.layerName = 'TileLayer';\nTileLayer.defaultProps = defaultProps;\n"],"file":"tile-layer.js"}