@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.
- package/dist/dist.dev.js +5981 -2029
- package/dist/es5/h3-layers/h3-hexagon-layer.js +61 -46
- package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/es5/mvt-layer/mvt-layer.js +2 -2
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-header.js +70 -55
- package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-traversal.js +42 -4
- package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/es5/tile-layer/tile-layer.js +31 -33
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/tile-layer/tileset-2d.js +102 -67
- package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
- package/dist/es5/tile-layer/utils.js +1 -1
- package/dist/es5/tile-layer/utils.js.map +1 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js +52 -38
- package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/esm/mvt-layer/mvt-layer.js +2 -4
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-header.js +43 -31
- package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-traversal.js +23 -1
- package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/esm/tile-layer/tile-layer.js +29 -33
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/tile-layer/tileset-2d.js +34 -11
- package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
- package/dist/esm/tile-layer/utils.js +1 -1
- package/dist/esm/tile-layer/utils.js.map +1 -1
- package/dist.min.js +2 -2
- package/package.json +3 -3
- package/src/h3-layers/h3-hexagon-layer.js +47 -37
- package/src/mvt-layer/mvt-layer.js +2 -2
- package/src/tile-3d-layer/tile-3d-layer.js +1 -1
- package/src/tile-layer/tile-2d-header.js +43 -32
- package/src/tile-layer/tile-2d-traversal.js +28 -2
- package/src/tile-layer/tile-layer.js +33 -34
- package/src/tile-layer/tileset-2d.js +29 -15
- 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.
|
|
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(
|
|
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 =
|
|
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
|
|
59
|
+
case 7:
|
|
60
60
|
requestToken = _context.sent;
|
|
61
61
|
|
|
62
62
|
if (requestToken) {
|
|
63
|
-
_context.next =
|
|
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
|
|
70
|
+
case 11:
|
|
71
71
|
if (!this._isCancelled) {
|
|
72
|
-
_context.next =
|
|
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
|
|
80
|
-
|
|
81
|
-
_context.
|
|
82
|
-
|
|
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
|
|
91
|
+
case 18:
|
|
91
92
|
tileData = _context.sent;
|
|
92
|
-
_context.next =
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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.
|
|
112
|
+
return _context.abrupt("return");
|
|
113
|
+
|
|
114
|
+
case 29:
|
|
115
|
+
this._loader = undefined;
|
|
116
|
+
this.content = tileData;
|
|
112
117
|
|
|
113
|
-
|
|
114
|
-
|
|
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
|
|
126
|
+
case 34:
|
|
127
|
+
this._isLoaded = true;
|
|
128
|
+
this._isCancelled = false;
|
|
129
|
+
|
|
122
130
|
if (error) {
|
|
123
|
-
|
|
131
|
+
onError(error, this);
|
|
124
132
|
} else {
|
|
125
|
-
this
|
|
126
|
-
this.onTileLoad(this);
|
|
133
|
+
onLoad(this);
|
|
127
134
|
}
|
|
128
135
|
|
|
129
|
-
case
|
|
136
|
+
case 37:
|
|
130
137
|
case "end":
|
|
131
138
|
return _context.stop();
|
|
132
139
|
}
|
|
133
140
|
}
|
|
134
|
-
}, _callee, this, [[
|
|
141
|
+
}, _callee, this, [[15, 21, 24, 27]]);
|
|
135
142
|
}));
|
|
136
143
|
|
|
137
|
-
function _loadData(_x
|
|
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(
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (!getTileData) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
+
value: function loadData(opts) {
|
|
153
|
+
this._isLoaded = false;
|
|
152
154
|
this._isCancelled = false;
|
|
153
|
-
this.
|
|
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.
|
|
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
|
-
|
|
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: "
|
|
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","
|
|
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 (
|
|
171
|
-
var normal =
|
|
172
|
-
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
|
|
133
|
+
var propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;
|
|
134
|
+
var dataChanged = changeFlags.dataChanged || changeFlags.updateTriggersChanged && (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData);
|
|
134
135
|
|
|
135
|
-
if (
|
|
136
|
-
|
|
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 (
|
|
141
|
+
} else if (propsChanged) {
|
|
150
142
|
tileset.setOptions(this._getTilesetOptions(props));
|
|
151
|
-
|
|
152
|
-
|
|
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
|
-
|
|
223
|
-
|
|
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
|
-
|
|
233
|
-
|
|
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
|
-
|
|
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
|
|
251
|
-
|
|
252
|
-
getTileData = _this$
|
|
253
|
-
fetch = _this$
|
|
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.
|
|
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
|
|
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"}
|