@deck.gl/aggregation-layers 8.6.4 → 8.6.5

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 (61) hide show
  1. package/dist/es5/aggregation-layer.js +163 -109
  2. package/dist/es5/aggregation-layer.js.map +1 -1
  3. package/dist/es5/contour-layer/contour-layer.js +260 -240
  4. package/dist/es5/contour-layer/contour-layer.js.map +1 -1
  5. package/dist/es5/contour-layer/contour-utils.js +86 -65
  6. package/dist/es5/contour-layer/contour-utils.js.map +1 -1
  7. package/dist/es5/contour-layer/marching-squares-codes.js +106 -181
  8. package/dist/es5/contour-layer/marching-squares-codes.js.map +1 -1
  9. package/dist/es5/contour-layer/marching-squares.js +59 -56
  10. package/dist/es5/contour-layer/marching-squares.js.map +1 -1
  11. package/dist/es5/cpu-grid-layer/cpu-grid-layer.js +121 -85
  12. package/dist/es5/cpu-grid-layer/cpu-grid-layer.js.map +1 -1
  13. package/dist/es5/cpu-grid-layer/grid-aggregator.js +119 -93
  14. package/dist/es5/cpu-grid-layer/grid-aggregator.js.map +1 -1
  15. package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer.js +167 -131
  16. package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer.js.map +1 -1
  17. package/dist/es5/gpu-grid-layer/gpu-grid-layer.js +322 -319
  18. package/dist/es5/gpu-grid-layer/gpu-grid-layer.js.map +1 -1
  19. package/dist/es5/grid-aggregation-layer.js +230 -202
  20. package/dist/es5/grid-aggregation-layer.js.map +1 -1
  21. package/dist/es5/grid-layer/grid-layer.js +91 -61
  22. package/dist/es5/grid-layer/grid-layer.js.map +1 -1
  23. package/dist/es5/heatmap-layer/heatmap-layer-utils.js +59 -24
  24. package/dist/es5/heatmap-layer/heatmap-layer-utils.js.map +1 -1
  25. package/dist/es5/heatmap-layer/heatmap-layer.js +533 -515
  26. package/dist/es5/heatmap-layer/heatmap-layer.js.map +1 -1
  27. package/dist/es5/heatmap-layer/triangle-layer.js +91 -64
  28. package/dist/es5/heatmap-layer/triangle-layer.js.map +1 -1
  29. package/dist/es5/hexagon-layer/hexagon-aggregator.js +77 -59
  30. package/dist/es5/hexagon-layer/hexagon-aggregator.js.map +1 -1
  31. package/dist/es5/hexagon-layer/hexagon-layer.js +164 -121
  32. package/dist/es5/hexagon-layer/hexagon-layer.js.map +1 -1
  33. package/dist/es5/index.js +12 -12
  34. package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js +193 -168
  35. package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
  36. package/dist/es5/screen-grid-layer/screen-grid-layer.js +250 -235
  37. package/dist/es5/screen-grid-layer/screen-grid-layer.js.map +1 -1
  38. package/dist/es5/utils/aggregation-operation-utils.js +31 -16
  39. package/dist/es5/utils/aggregation-operation-utils.js.map +1 -1
  40. package/dist/es5/utils/bin-sorter.js +198 -118
  41. package/dist/es5/utils/bin-sorter.js.map +1 -1
  42. package/dist/es5/utils/color-utils.js +10 -8
  43. package/dist/es5/utils/color-utils.js.map +1 -1
  44. package/dist/es5/utils/cpu-aggregator.js +342 -323
  45. package/dist/es5/utils/cpu-aggregator.js.map +1 -1
  46. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js +18 -20
  47. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js.map +1 -1
  48. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +545 -545
  49. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
  50. package/dist/es5/utils/grid-aggregation-utils.js +44 -50
  51. package/dist/es5/utils/grid-aggregation-utils.js.map +1 -1
  52. package/dist/es5/utils/prop-utils.js +2 -2
  53. package/dist/es5/utils/prop-utils.js.map +1 -1
  54. package/dist/es5/utils/resource-utils.js +39 -32
  55. package/dist/es5/utils/resource-utils.js.map +1 -1
  56. package/dist/es5/utils/scale-utils.js +66 -36
  57. package/dist/es5/utils/scale-utils.js.map +1 -1
  58. package/dist/esm/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
  59. package/dist/esm/utils/cpu-aggregator.js.map +1 -1
  60. package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
  61. package/package.json +2 -2
@@ -7,6 +7,20 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
 
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
16
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
17
+
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+
20
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
+
22
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
+
10
24
  var _layers = require("@deck.gl/layers");
11
25
 
12
26
  var _contourUtils = require("./contour-utils");
@@ -21,10 +35,14 @@ var _gridAggregationUtils = require("../utils/grid-aggregation-utils");
21
35
 
22
36
  var _gridAggregationLayer = _interopRequireDefault(require("../grid-aggregation-layer"));
23
37
 
24
- const DEFAULT_COLOR = [255, 255, 255, 255];
25
- const DEFAULT_STROKE_WIDTH = 1;
26
- const DEFAULT_THRESHOLD = 1;
27
- const defaultProps = {
38
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
39
+
40
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
41
+
42
+ var DEFAULT_COLOR = [255, 255, 255, 255];
43
+ var DEFAULT_STROKE_WIDTH = 1;
44
+ var DEFAULT_THRESHOLD = 1;
45
+ var defaultProps = {
28
46
  cellSize: {
29
47
  type: 'number',
30
48
  min: 1,
@@ -33,7 +51,9 @@ const defaultProps = {
33
51
  },
34
52
  getPosition: {
35
53
  type: 'accessor',
36
- value: x => x.position
54
+ value: function value(x) {
55
+ return x.position;
56
+ }
37
57
  },
38
58
  getWeight: {
39
59
  type: 'accessor',
@@ -46,8 +66,8 @@ const defaultProps = {
46
66
  }],
47
67
  zOffset: 0.005
48
68
  };
49
- const POSITION_ATTRIBUTE_NAME = 'positions';
50
- const DIMENSIONS = {
69
+ var POSITION_ATTRIBUTE_NAME = 'positions';
70
+ var DIMENSIONS = {
51
71
  data: {
52
72
  props: ['cellSize']
53
73
  },
@@ -57,268 +77,268 @@ const DIMENSIONS = {
57
77
  }
58
78
  };
59
79
 
60
- class ContourLayer extends _gridAggregationLayer.default {
61
- initializeState() {
62
- super.initializeState({
63
- dimensions: DIMENSIONS
64
- });
65
- this.setState({
66
- contourData: {},
67
- projectPoints: false,
68
- weights: {
69
- count: {
70
- size: 1,
71
- operation: _aggregationOperationUtils.AGGREGATION_OPERATION.SUM
80
+ var ContourLayer = function (_GridAggregationLayer) {
81
+ (0, _inherits2.default)(ContourLayer, _GridAggregationLayer);
82
+
83
+ var _super = _createSuper(ContourLayer);
84
+
85
+ function ContourLayer() {
86
+ (0, _classCallCheck2.default)(this, ContourLayer);
87
+ return _super.apply(this, arguments);
88
+ }
89
+
90
+ (0, _createClass2.default)(ContourLayer, [{
91
+ key: "initializeState",
92
+ value: function initializeState() {
93
+ var _attributeManager$add;
94
+
95
+ (0, _get2.default)((0, _getPrototypeOf2.default)(ContourLayer.prototype), "initializeState", this).call(this, {
96
+ dimensions: DIMENSIONS
97
+ });
98
+ this.setState({
99
+ contourData: {},
100
+ projectPoints: false,
101
+ weights: {
102
+ count: {
103
+ size: 1,
104
+ operation: _aggregationOperationUtils.AGGREGATION_OPERATION.SUM
105
+ }
72
106
  }
73
- }
74
- });
75
- const attributeManager = this.getAttributeManager();
76
- attributeManager.add({
77
- [POSITION_ATTRIBUTE_NAME]: {
107
+ });
108
+ var attributeManager = this.getAttributeManager();
109
+ attributeManager.add((_attributeManager$add = {}, (0, _defineProperty2.default)(_attributeManager$add, POSITION_ATTRIBUTE_NAME, {
78
110
  size: 3,
79
111
  accessor: 'getPosition',
80
112
  type: 5130,
81
113
  fp64: this.use64bitPositions()
82
- },
83
- count: {
114
+ }), (0, _defineProperty2.default)(_attributeManager$add, "count", {
84
115
  size: 3,
85
116
  accessor: 'getWeight'
86
- }
87
- });
88
- }
89
-
90
- updateState(opts) {
91
- super.updateState(opts);
92
- let contoursChanged = false;
93
- const {
94
- oldProps,
95
- props
96
- } = opts;
97
- const {
98
- aggregationDirty
99
- } = this.state;
100
-
101
- if (oldProps.contours !== props.contours || oldProps.zOffset !== props.zOffset) {
102
- contoursChanged = true;
103
-
104
- this._updateThresholdData(opts.props);
117
+ }), _attributeManager$add));
105
118
  }
119
+ }, {
120
+ key: "updateState",
121
+ value: function updateState(opts) {
122
+ (0, _get2.default)((0, _getPrototypeOf2.default)(ContourLayer.prototype), "updateState", this).call(this, opts);
123
+ var contoursChanged = false;
124
+ var oldProps = opts.oldProps,
125
+ props = opts.props;
126
+ var aggregationDirty = this.state.aggregationDirty;
127
+
128
+ if (oldProps.contours !== props.contours || oldProps.zOffset !== props.zOffset) {
129
+ contoursChanged = true;
130
+
131
+ this._updateThresholdData(opts.props);
132
+ }
106
133
 
107
- if (this.getNumInstances() > 0 && (aggregationDirty || contoursChanged)) {
108
- this._generateContours();
109
- }
110
- }
111
-
112
- renderLayers() {
113
- const {
114
- contourSegments,
115
- contourPolygons
116
- } = this.state.contourData;
117
- const LinesSubLayerClass = this.getSubLayerClass('lines', _layers.LineLayer);
118
- const BandsSubLayerClass = this.getSubLayerClass('bands', _layers.SolidPolygonLayer);
119
- const lineLayer = contourSegments && contourSegments.length > 0 && new LinesSubLayerClass(this.getSubLayerProps({
120
- id: 'lines'
121
- }), {
122
- data: this.state.contourData.contourSegments,
123
- getSourcePosition: d => d.start,
124
- getTargetPosition: d => d.end,
125
- getColor: d => d.contour.color || DEFAULT_COLOR,
126
- getWidth: d => d.contour.strokeWidth || DEFAULT_STROKE_WIDTH
127
- });
128
- const bandsLayer = contourPolygons && contourPolygons.length > 0 && new BandsSubLayerClass(this.getSubLayerProps({
129
- id: 'bands'
130
- }), {
131
- data: this.state.contourData.contourPolygons,
132
- getPolygon: d => d.vertices,
133
- getFillColor: d => d.contour.color || DEFAULT_COLOR
134
- });
135
- return [lineLayer, bandsLayer];
136
- }
137
-
138
- updateAggregationState(opts) {
139
- const {
140
- props,
141
- oldProps
142
- } = opts;
143
- const {
144
- cellSize,
145
- coordinateSystem
146
- } = props;
147
- const {
148
- viewport
149
- } = this.context;
150
- const cellSizeChanged = oldProps.cellSize !== cellSize;
151
- let gpuAggregation = props.gpuAggregation;
152
-
153
- if (this.state.gpuAggregation !== props.gpuAggregation) {
154
- if (gpuAggregation && !_gpuGridAggregator.default.isSupported(this.context.gl)) {
155
- _core.log.warn('GPU Grid Aggregation not supported, falling back to CPU')();
156
-
157
- gpuAggregation = false;
134
+ if (this.getNumInstances() > 0 && (aggregationDirty || contoursChanged)) {
135
+ this._generateContours();
158
136
  }
159
137
  }
160
-
161
- const gpuAggregationChanged = gpuAggregation !== this.state.gpuAggregation;
162
- this.setState({
163
- gpuAggregation
164
- });
165
- const {
166
- dimensions
167
- } = this.state;
168
- const positionsChanged = this.isAttributeChanged(POSITION_ATTRIBUTE_NAME);
169
- const {
170
- data,
171
- weights
172
- } = dimensions;
173
- let {
174
- boundingBox
175
- } = this.state;
176
-
177
- if (positionsChanged) {
178
- boundingBox = (0, _gridAggregationUtils.getBoundingBox)(this.getAttributes(), this.getNumInstances());
179
- this.setState({
180
- boundingBox
138
+ }, {
139
+ key: "renderLayers",
140
+ value: function renderLayers() {
141
+ var _this$state$contourDa = this.state.contourData,
142
+ contourSegments = _this$state$contourDa.contourSegments,
143
+ contourPolygons = _this$state$contourDa.contourPolygons;
144
+ var LinesSubLayerClass = this.getSubLayerClass('lines', _layers.LineLayer);
145
+ var BandsSubLayerClass = this.getSubLayerClass('bands', _layers.SolidPolygonLayer);
146
+ var lineLayer = contourSegments && contourSegments.length > 0 && new LinesSubLayerClass(this.getSubLayerProps({
147
+ id: 'lines'
148
+ }), {
149
+ data: this.state.contourData.contourSegments,
150
+ getSourcePosition: function getSourcePosition(d) {
151
+ return d.start;
152
+ },
153
+ getTargetPosition: function getTargetPosition(d) {
154
+ return d.end;
155
+ },
156
+ getColor: function getColor(d) {
157
+ return d.contour.color || DEFAULT_COLOR;
158
+ },
159
+ getWidth: function getWidth(d) {
160
+ return d.contour.strokeWidth || DEFAULT_STROKE_WIDTH;
161
+ }
162
+ });
163
+ var bandsLayer = contourPolygons && contourPolygons.length > 0 && new BandsSubLayerClass(this.getSubLayerProps({
164
+ id: 'bands'
165
+ }), {
166
+ data: this.state.contourData.contourPolygons,
167
+ getPolygon: function getPolygon(d) {
168
+ return d.vertices;
169
+ },
170
+ getFillColor: function getFillColor(d) {
171
+ return d.contour.color || DEFAULT_COLOR;
172
+ }
181
173
  });
174
+ return [lineLayer, bandsLayer];
182
175
  }
176
+ }, {
177
+ key: "updateAggregationState",
178
+ value: function updateAggregationState(opts) {
179
+ var props = opts.props,
180
+ oldProps = opts.oldProps;
181
+ var cellSize = props.cellSize,
182
+ coordinateSystem = props.coordinateSystem;
183
+ var viewport = this.context.viewport;
184
+ var cellSizeChanged = oldProps.cellSize !== cellSize;
185
+ var gpuAggregation = props.gpuAggregation;
186
+
187
+ if (this.state.gpuAggregation !== props.gpuAggregation) {
188
+ if (gpuAggregation && !_gpuGridAggregator.default.isSupported(this.context.gl)) {
189
+ _core.log.warn('GPU Grid Aggregation not supported, falling back to CPU')();
190
+
191
+ gpuAggregation = false;
192
+ }
193
+ }
183
194
 
184
- if (positionsChanged || cellSizeChanged) {
185
- const {
186
- gridOffset,
187
- translation,
188
- width,
189
- height,
190
- numCol,
191
- numRow
192
- } = (0, _gridAggregationUtils.getGridParams)(boundingBox, cellSize, viewport, coordinateSystem);
193
- this.allocateResources(numRow, numCol);
195
+ var gpuAggregationChanged = gpuAggregation !== this.state.gpuAggregation;
194
196
  this.setState({
195
- gridOffset,
196
- boundingBox,
197
- translation,
198
- posOffset: translation.slice(),
199
- gridOrigin: [-1 * translation[0], -1 * translation[1]],
200
- width,
201
- height,
202
- numCol,
203
- numRow
197
+ gpuAggregation: gpuAggregation
204
198
  });
205
- }
199
+ var dimensions = this.state.dimensions;
200
+ var positionsChanged = this.isAttributeChanged(POSITION_ATTRIBUTE_NAME);
201
+ var data = dimensions.data,
202
+ weights = dimensions.weights;
203
+ var boundingBox = this.state.boundingBox;
204
+
205
+ if (positionsChanged) {
206
+ boundingBox = (0, _gridAggregationUtils.getBoundingBox)(this.getAttributes(), this.getNumInstances());
207
+ this.setState({
208
+ boundingBox: boundingBox
209
+ });
210
+ }
206
211
 
207
- const aggregationDataDirty = positionsChanged || gpuAggregationChanged || this.isAggregationDirty(opts, {
208
- dimension: data,
209
- compareAll: gpuAggregation
210
- });
211
- const aggregationWeightsDirty = this.isAggregationDirty(opts, {
212
- dimension: weights
213
- });
212
+ if (positionsChanged || cellSizeChanged) {
213
+ var _getGridParams = (0, _gridAggregationUtils.getGridParams)(boundingBox, cellSize, viewport, coordinateSystem),
214
+ gridOffset = _getGridParams.gridOffset,
215
+ translation = _getGridParams.translation,
216
+ width = _getGridParams.width,
217
+ height = _getGridParams.height,
218
+ numCol = _getGridParams.numCol,
219
+ numRow = _getGridParams.numRow;
220
+
221
+ this.allocateResources(numRow, numCol);
222
+ this.setState({
223
+ gridOffset: gridOffset,
224
+ boundingBox: boundingBox,
225
+ translation: translation,
226
+ posOffset: translation.slice(),
227
+ gridOrigin: [-1 * translation[0], -1 * translation[1]],
228
+ width: width,
229
+ height: height,
230
+ numCol: numCol,
231
+ numRow: numRow
232
+ });
233
+ }
214
234
 
215
- if (aggregationWeightsDirty) {
216
- this._updateAccessors(opts);
217
- }
235
+ var aggregationDataDirty = positionsChanged || gpuAggregationChanged || this.isAggregationDirty(opts, {
236
+ dimension: data,
237
+ compareAll: gpuAggregation
238
+ });
239
+ var aggregationWeightsDirty = this.isAggregationDirty(opts, {
240
+ dimension: weights
241
+ });
218
242
 
219
- if (aggregationDataDirty || aggregationWeightsDirty) {
220
- this._resetResults();
221
- }
243
+ if (aggregationWeightsDirty) {
244
+ this._updateAccessors(opts);
245
+ }
222
246
 
223
- this.setState({
224
- aggregationDataDirty,
225
- aggregationWeightsDirty
226
- });
227
- }
247
+ if (aggregationDataDirty || aggregationWeightsDirty) {
248
+ this._resetResults();
249
+ }
228
250
 
229
- _updateAccessors(opts) {
230
- const {
231
- getWeight,
232
- aggregation,
233
- data
234
- } = opts.props;
235
- const {
236
- count
237
- } = this.state.weights;
238
-
239
- if (count) {
240
- count.getWeight = getWeight;
241
- count.operation = _aggregationOperationUtils.AGGREGATION_OPERATION[aggregation];
251
+ this.setState({
252
+ aggregationDataDirty: aggregationDataDirty,
253
+ aggregationWeightsDirty: aggregationWeightsDirty
254
+ });
242
255
  }
256
+ }, {
257
+ key: "_updateAccessors",
258
+ value: function _updateAccessors(opts) {
259
+ var _opts$props = opts.props,
260
+ getWeight = _opts$props.getWeight,
261
+ aggregation = _opts$props.aggregation,
262
+ data = _opts$props.data;
263
+ var count = this.state.weights.count;
264
+
265
+ if (count) {
266
+ count.getWeight = getWeight;
267
+ count.operation = _aggregationOperationUtils.AGGREGATION_OPERATION[aggregation];
268
+ }
243
269
 
244
- this.setState({
245
- getValue: (0, _aggregationOperationUtils.getValueFunc)(aggregation, getWeight, {
246
- data
247
- })
248
- });
249
- }
250
-
251
- _resetResults() {
252
- const {
253
- count
254
- } = this.state.weights;
255
-
256
- if (count) {
257
- count.aggregationData = null;
270
+ this.setState({
271
+ getValue: (0, _aggregationOperationUtils.getValueFunc)(aggregation, getWeight, {
272
+ data: data
273
+ })
274
+ });
258
275
  }
259
- }
276
+ }, {
277
+ key: "_resetResults",
278
+ value: function _resetResults() {
279
+ var count = this.state.weights.count;
260
280
 
261
- _generateContours() {
262
- const {
263
- numCol,
264
- numRow,
265
- gridOrigin,
266
- gridOffset,
267
- thresholdData
268
- } = this.state;
269
- const {
270
- count
271
- } = this.state.weights;
272
- let {
273
- aggregationData
274
- } = count;
275
-
276
- if (!aggregationData) {
277
- aggregationData = count.aggregationBuffer.getData();
278
- count.aggregationData = aggregationData;
281
+ if (count) {
282
+ count.aggregationData = null;
283
+ }
279
284
  }
285
+ }, {
286
+ key: "_generateContours",
287
+ value: function _generateContours() {
288
+ var _this$state = this.state,
289
+ numCol = _this$state.numCol,
290
+ numRow = _this$state.numRow,
291
+ gridOrigin = _this$state.gridOrigin,
292
+ gridOffset = _this$state.gridOffset,
293
+ thresholdData = _this$state.thresholdData;
294
+ var count = this.state.weights.count;
295
+ var aggregationData = count.aggregationData;
296
+
297
+ if (!aggregationData) {
298
+ aggregationData = count.aggregationBuffer.getData();
299
+ count.aggregationData = aggregationData;
300
+ }
280
301
 
281
- const {
282
- cellWeights
283
- } = _gpuGridAggregator.default.getCellData({
284
- countsData: aggregationData
285
- });
286
-
287
- const contourData = (0, _contourUtils.generateContours)({
288
- thresholdData,
289
- cellWeights,
290
- gridSize: [numCol, numRow],
291
- gridOrigin,
292
- cellSize: [gridOffset.xOffset, gridOffset.yOffset]
293
- });
294
- this.setState({
295
- contourData
296
- });
297
- }
298
-
299
- _updateThresholdData(props) {
300
- const {
301
- contours,
302
- zOffset
303
- } = props;
304
- const count = contours.length;
305
- const thresholdData = new Array(count);
306
-
307
- for (let i = 0; i < count; i++) {
308
- const contour = contours[i];
309
- thresholdData[i] = {
310
- contour,
311
- zIndex: contour.zIndex || i,
312
- zOffset
313
- };
302
+ var _GPUGridAggregator$ge = _gpuGridAggregator.default.getCellData({
303
+ countsData: aggregationData
304
+ }),
305
+ cellWeights = _GPUGridAggregator$ge.cellWeights;
306
+
307
+ var contourData = (0, _contourUtils.generateContours)({
308
+ thresholdData: thresholdData,
309
+ cellWeights: cellWeights,
310
+ gridSize: [numCol, numRow],
311
+ gridOrigin: gridOrigin,
312
+ cellSize: [gridOffset.xOffset, gridOffset.yOffset]
313
+ });
314
+ this.setState({
315
+ contourData: contourData
316
+ });
314
317
  }
318
+ }, {
319
+ key: "_updateThresholdData",
320
+ value: function _updateThresholdData(props) {
321
+ var contours = props.contours,
322
+ zOffset = props.zOffset;
323
+ var count = contours.length;
324
+ var thresholdData = new Array(count);
325
+
326
+ for (var i = 0; i < count; i++) {
327
+ var contour = contours[i];
328
+ thresholdData[i] = {
329
+ contour: contour,
330
+ zIndex: contour.zIndex || i,
331
+ zOffset: zOffset
332
+ };
333
+ }
315
334
 
316
- this.setState({
317
- thresholdData
318
- });
319
- }
320
-
321
- }
335
+ this.setState({
336
+ thresholdData: thresholdData
337
+ });
338
+ }
339
+ }]);
340
+ return ContourLayer;
341
+ }(_gridAggregationLayer.default);
322
342
 
323
343
  exports.default = ContourLayer;
324
344
  ContourLayer.layerName = 'ContourLayer';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/contour-layer/contour-layer.js"],"names":["DEFAULT_COLOR","DEFAULT_STROKE_WIDTH","DEFAULT_THRESHOLD","defaultProps","cellSize","type","min","max","value","getPosition","x","position","getWeight","gpuAggregation","aggregation","contours","threshold","zOffset","POSITION_ATTRIBUTE_NAME","DIMENSIONS","data","props","weights","accessors","ContourLayer","GridAggregationLayer","initializeState","dimensions","setState","contourData","projectPoints","count","size","operation","AGGREGATION_OPERATION","SUM","attributeManager","getAttributeManager","add","accessor","fp64","use64bitPositions","updateState","opts","contoursChanged","oldProps","aggregationDirty","state","_updateThresholdData","getNumInstances","_generateContours","renderLayers","contourSegments","contourPolygons","LinesSubLayerClass","getSubLayerClass","LineLayer","BandsSubLayerClass","SolidPolygonLayer","lineLayer","length","getSubLayerProps","id","getSourcePosition","d","start","getTargetPosition","end","getColor","contour","color","getWidth","strokeWidth","bandsLayer","getPolygon","vertices","getFillColor","updateAggregationState","coordinateSystem","viewport","context","cellSizeChanged","GPUGridAggregator","isSupported","gl","log","warn","gpuAggregationChanged","positionsChanged","isAttributeChanged","boundingBox","getAttributes","gridOffset","translation","width","height","numCol","numRow","allocateResources","posOffset","slice","gridOrigin","aggregationDataDirty","isAggregationDirty","dimension","compareAll","aggregationWeightsDirty","_updateAccessors","_resetResults","getValue","aggregationData","thresholdData","aggregationBuffer","getData","cellWeights","getCellData","countsData","gridSize","xOffset","yOffset","Array","i","zIndex","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {LineLayer, SolidPolygonLayer} from '@deck.gl/layers';\nimport {generateContours} from './contour-utils';\nimport {log} from '@deck.gl/core';\n\nimport GPUGridAggregator from '../utils/gpu-grid-aggregation/gpu-grid-aggregator';\nimport {AGGREGATION_OPERATION, getValueFunc} from '../utils/aggregation-operation-utils';\nimport {getBoundingBox, getGridParams} from '../utils/grid-aggregation-utils';\nimport GridAggregationLayer from '../grid-aggregation-layer';\n\nconst DEFAULT_COLOR = [255, 255, 255, 255];\nconst DEFAULT_STROKE_WIDTH = 1;\nconst DEFAULT_THRESHOLD = 1;\n\nconst defaultProps = {\n // grid aggregation\n cellSize: {type: 'number', min: 1, max: 1000, value: 1000},\n getPosition: {type: 'accessor', value: x => x.position},\n getWeight: {type: 'accessor', value: 1},\n gpuAggregation: true,\n aggregation: 'SUM',\n\n // contour lines\n contours: [{threshold: DEFAULT_THRESHOLD}],\n\n zOffset: 0.005\n};\n\nconst POSITION_ATTRIBUTE_NAME = 'positions';\n\nconst DIMENSIONS = {\n data: {\n props: ['cellSize']\n },\n weights: {\n props: ['aggregation'],\n accessors: ['getWeight']\n }\n};\n\nexport default class ContourLayer extends GridAggregationLayer {\n initializeState() {\n super.initializeState({\n dimensions: DIMENSIONS\n });\n this.setState({\n contourData: {},\n projectPoints: false,\n weights: {\n count: {\n size: 1,\n operation: AGGREGATION_OPERATION.SUM\n }\n }\n });\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n [POSITION_ATTRIBUTE_NAME]: {\n size: 3,\n accessor: 'getPosition',\n type: GL.DOUBLE,\n fp64: this.use64bitPositions()\n },\n // this attribute is used in gpu aggregation path only\n count: {size: 3, accessor: 'getWeight'}\n });\n }\n\n updateState(opts) {\n super.updateState(opts);\n let contoursChanged = false;\n const {oldProps, props} = opts;\n const {aggregationDirty} = this.state;\n\n if (oldProps.contours !== props.contours || oldProps.zOffset !== props.zOffset) {\n contoursChanged = true;\n this._updateThresholdData(opts.props);\n }\n\n if (this.getNumInstances() > 0 && (aggregationDirty || contoursChanged)) {\n this._generateContours();\n }\n }\n\n renderLayers() {\n const {contourSegments, contourPolygons} = this.state.contourData;\n\n const LinesSubLayerClass = this.getSubLayerClass('lines', LineLayer);\n const BandsSubLayerClass = this.getSubLayerClass('bands', SolidPolygonLayer);\n\n // Contour lines layer\n const lineLayer =\n contourSegments &&\n contourSegments.length > 0 &&\n new LinesSubLayerClass(\n this.getSubLayerProps({\n id: 'lines'\n }),\n {\n data: this.state.contourData.contourSegments,\n getSourcePosition: d => d.start,\n getTargetPosition: d => d.end,\n getColor: d => d.contour.color || DEFAULT_COLOR,\n getWidth: d => d.contour.strokeWidth || DEFAULT_STROKE_WIDTH\n }\n );\n\n // Contour bands layer\n const bandsLayer =\n contourPolygons &&\n contourPolygons.length > 0 &&\n new BandsSubLayerClass(\n this.getSubLayerProps({\n id: 'bands'\n }),\n {\n data: this.state.contourData.contourPolygons,\n getPolygon: d => d.vertices,\n getFillColor: d => d.contour.color || DEFAULT_COLOR\n }\n );\n\n return [lineLayer, bandsLayer];\n }\n\n // Aggregation Overrides\n\n /* eslint-disable max-statements, complexity */\n updateAggregationState(opts) {\n const {props, oldProps} = opts;\n const {cellSize, coordinateSystem} = props;\n const {viewport} = this.context;\n const cellSizeChanged = oldProps.cellSize !== cellSize;\n let gpuAggregation = props.gpuAggregation;\n if (this.state.gpuAggregation !== props.gpuAggregation) {\n if (gpuAggregation && !GPUGridAggregator.isSupported(this.context.gl)) {\n log.warn('GPU Grid Aggregation not supported, falling back to CPU')();\n gpuAggregation = false;\n }\n }\n const gpuAggregationChanged = gpuAggregation !== this.state.gpuAggregation;\n this.setState({\n gpuAggregation\n });\n\n const {dimensions} = this.state;\n const positionsChanged = this.isAttributeChanged(POSITION_ATTRIBUTE_NAME);\n const {data, weights} = dimensions;\n\n let {boundingBox} = this.state;\n if (positionsChanged) {\n boundingBox = getBoundingBox(this.getAttributes(), this.getNumInstances());\n this.setState({boundingBox});\n }\n if (positionsChanged || cellSizeChanged) {\n const {gridOffset, translation, width, height, numCol, numRow} = getGridParams(\n boundingBox,\n cellSize,\n viewport,\n coordinateSystem\n );\n this.allocateResources(numRow, numCol);\n this.setState({\n gridOffset,\n boundingBox,\n translation,\n posOffset: translation.slice(), // Used for CPU aggregation, to offset points\n gridOrigin: [-1 * translation[0], -1 * translation[1]],\n width,\n height,\n numCol,\n numRow\n });\n }\n\n const aggregationDataDirty =\n positionsChanged ||\n gpuAggregationChanged ||\n this.isAggregationDirty(opts, {\n dimension: data,\n compareAll: gpuAggregation // check for all (including extentions props) when using gpu aggregation\n });\n const aggregationWeightsDirty = this.isAggregationDirty(opts, {\n dimension: weights\n });\n\n if (aggregationWeightsDirty) {\n this._updateAccessors(opts);\n }\n if (aggregationDataDirty || aggregationWeightsDirty) {\n this._resetResults();\n }\n this.setState({\n aggregationDataDirty,\n aggregationWeightsDirty\n });\n }\n /* eslint-enable max-statements, complexity */\n\n // Private (Aggregation)\n\n _updateAccessors(opts) {\n const {getWeight, aggregation, data} = opts.props;\n const {count} = this.state.weights;\n if (count) {\n count.getWeight = getWeight;\n count.operation = AGGREGATION_OPERATION[aggregation];\n }\n this.setState({getValue: getValueFunc(aggregation, getWeight, {data})});\n }\n\n _resetResults() {\n const {count} = this.state.weights;\n if (count) {\n count.aggregationData = null;\n }\n }\n\n // Private (Contours)\n\n _generateContours() {\n const {numCol, numRow, gridOrigin, gridOffset, thresholdData} = this.state;\n const {count} = this.state.weights;\n let {aggregationData} = count;\n if (!aggregationData) {\n aggregationData = count.aggregationBuffer.getData();\n count.aggregationData = aggregationData;\n }\n\n const {cellWeights} = GPUGridAggregator.getCellData({countsData: aggregationData});\n const contourData = generateContours({\n thresholdData,\n cellWeights,\n gridSize: [numCol, numRow],\n gridOrigin,\n cellSize: [gridOffset.xOffset, gridOffset.yOffset]\n });\n\n // contourData contains both iso-lines and iso-bands if requested.\n this.setState({contourData});\n }\n\n _updateThresholdData(props) {\n const {contours, zOffset} = props;\n const count = contours.length;\n const thresholdData = new Array(count);\n for (let i = 0; i < count; i++) {\n const contour = contours[i];\n thresholdData[i] = {\n contour,\n zIndex: contour.zIndex || i,\n zOffset\n };\n }\n this.setState({thresholdData});\n }\n}\n\nContourLayer.layerName = 'ContourLayer';\nContourLayer.defaultProps = defaultProps;\n"],"file":"contour-layer.js"}
1
+ {"version":3,"sources":["../../../src/contour-layer/contour-layer.js"],"names":["DEFAULT_COLOR","DEFAULT_STROKE_WIDTH","DEFAULT_THRESHOLD","defaultProps","cellSize","type","min","max","value","getPosition","x","position","getWeight","gpuAggregation","aggregation","contours","threshold","zOffset","POSITION_ATTRIBUTE_NAME","DIMENSIONS","data","props","weights","accessors","ContourLayer","dimensions","setState","contourData","projectPoints","count","size","operation","AGGREGATION_OPERATION","SUM","attributeManager","getAttributeManager","add","accessor","fp64","use64bitPositions","opts","contoursChanged","oldProps","aggregationDirty","state","_updateThresholdData","getNumInstances","_generateContours","contourSegments","contourPolygons","LinesSubLayerClass","getSubLayerClass","LineLayer","BandsSubLayerClass","SolidPolygonLayer","lineLayer","length","getSubLayerProps","id","getSourcePosition","d","start","getTargetPosition","end","getColor","contour","color","getWidth","strokeWidth","bandsLayer","getPolygon","vertices","getFillColor","coordinateSystem","viewport","context","cellSizeChanged","GPUGridAggregator","isSupported","gl","log","warn","gpuAggregationChanged","positionsChanged","isAttributeChanged","boundingBox","getAttributes","gridOffset","translation","width","height","numCol","numRow","allocateResources","posOffset","slice","gridOrigin","aggregationDataDirty","isAggregationDirty","dimension","compareAll","aggregationWeightsDirty","_updateAccessors","_resetResults","getValue","aggregationData","thresholdData","aggregationBuffer","getData","getCellData","countsData","cellWeights","gridSize","xOffset","yOffset","Array","i","zIndex","GridAggregationLayer","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {LineLayer, SolidPolygonLayer} from '@deck.gl/layers';\nimport {generateContours} from './contour-utils';\nimport {log} from '@deck.gl/core';\n\nimport GPUGridAggregator from '../utils/gpu-grid-aggregation/gpu-grid-aggregator';\nimport {AGGREGATION_OPERATION, getValueFunc} from '../utils/aggregation-operation-utils';\nimport {getBoundingBox, getGridParams} from '../utils/grid-aggregation-utils';\nimport GridAggregationLayer from '../grid-aggregation-layer';\n\nconst DEFAULT_COLOR = [255, 255, 255, 255];\nconst DEFAULT_STROKE_WIDTH = 1;\nconst DEFAULT_THRESHOLD = 1;\n\nconst defaultProps = {\n // grid aggregation\n cellSize: {type: 'number', min: 1, max: 1000, value: 1000},\n getPosition: {type: 'accessor', value: x => x.position},\n getWeight: {type: 'accessor', value: 1},\n gpuAggregation: true,\n aggregation: 'SUM',\n\n // contour lines\n contours: [{threshold: DEFAULT_THRESHOLD}],\n\n zOffset: 0.005\n};\n\nconst POSITION_ATTRIBUTE_NAME = 'positions';\n\nconst DIMENSIONS = {\n data: {\n props: ['cellSize']\n },\n weights: {\n props: ['aggregation'],\n accessors: ['getWeight']\n }\n};\n\nexport default class ContourLayer extends GridAggregationLayer {\n initializeState() {\n super.initializeState({\n dimensions: DIMENSIONS\n });\n this.setState({\n contourData: {},\n projectPoints: false,\n weights: {\n count: {\n size: 1,\n operation: AGGREGATION_OPERATION.SUM\n }\n }\n });\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n [POSITION_ATTRIBUTE_NAME]: {\n size: 3,\n accessor: 'getPosition',\n type: GL.DOUBLE,\n fp64: this.use64bitPositions()\n },\n // this attribute is used in gpu aggregation path only\n count: {size: 3, accessor: 'getWeight'}\n });\n }\n\n updateState(opts) {\n super.updateState(opts);\n let contoursChanged = false;\n const {oldProps, props} = opts;\n const {aggregationDirty} = this.state;\n\n if (oldProps.contours !== props.contours || oldProps.zOffset !== props.zOffset) {\n contoursChanged = true;\n this._updateThresholdData(opts.props);\n }\n\n if (this.getNumInstances() > 0 && (aggregationDirty || contoursChanged)) {\n this._generateContours();\n }\n }\n\n renderLayers() {\n const {contourSegments, contourPolygons} = this.state.contourData;\n\n const LinesSubLayerClass = this.getSubLayerClass('lines', LineLayer);\n const BandsSubLayerClass = this.getSubLayerClass('bands', SolidPolygonLayer);\n\n // Contour lines layer\n const lineLayer =\n contourSegments &&\n contourSegments.length > 0 &&\n new LinesSubLayerClass(\n this.getSubLayerProps({\n id: 'lines'\n }),\n {\n data: this.state.contourData.contourSegments,\n getSourcePosition: d => d.start,\n getTargetPosition: d => d.end,\n getColor: d => d.contour.color || DEFAULT_COLOR,\n getWidth: d => d.contour.strokeWidth || DEFAULT_STROKE_WIDTH\n }\n );\n\n // Contour bands layer\n const bandsLayer =\n contourPolygons &&\n contourPolygons.length > 0 &&\n new BandsSubLayerClass(\n this.getSubLayerProps({\n id: 'bands'\n }),\n {\n data: this.state.contourData.contourPolygons,\n getPolygon: d => d.vertices,\n getFillColor: d => d.contour.color || DEFAULT_COLOR\n }\n );\n\n return [lineLayer, bandsLayer];\n }\n\n // Aggregation Overrides\n\n /* eslint-disable max-statements, complexity */\n updateAggregationState(opts) {\n const {props, oldProps} = opts;\n const {cellSize, coordinateSystem} = props;\n const {viewport} = this.context;\n const cellSizeChanged = oldProps.cellSize !== cellSize;\n let gpuAggregation = props.gpuAggregation;\n if (this.state.gpuAggregation !== props.gpuAggregation) {\n if (gpuAggregation && !GPUGridAggregator.isSupported(this.context.gl)) {\n log.warn('GPU Grid Aggregation not supported, falling back to CPU')();\n gpuAggregation = false;\n }\n }\n const gpuAggregationChanged = gpuAggregation !== this.state.gpuAggregation;\n this.setState({\n gpuAggregation\n });\n\n const {dimensions} = this.state;\n const positionsChanged = this.isAttributeChanged(POSITION_ATTRIBUTE_NAME);\n const {data, weights} = dimensions;\n\n let {boundingBox} = this.state;\n if (positionsChanged) {\n boundingBox = getBoundingBox(this.getAttributes(), this.getNumInstances());\n this.setState({boundingBox});\n }\n if (positionsChanged || cellSizeChanged) {\n const {gridOffset, translation, width, height, numCol, numRow} = getGridParams(\n boundingBox,\n cellSize,\n viewport,\n coordinateSystem\n );\n this.allocateResources(numRow, numCol);\n this.setState({\n gridOffset,\n boundingBox,\n translation,\n posOffset: translation.slice(), // Used for CPU aggregation, to offset points\n gridOrigin: [-1 * translation[0], -1 * translation[1]],\n width,\n height,\n numCol,\n numRow\n });\n }\n\n const aggregationDataDirty =\n positionsChanged ||\n gpuAggregationChanged ||\n this.isAggregationDirty(opts, {\n dimension: data,\n compareAll: gpuAggregation // check for all (including extentions props) when using gpu aggregation\n });\n const aggregationWeightsDirty = this.isAggregationDirty(opts, {\n dimension: weights\n });\n\n if (aggregationWeightsDirty) {\n this._updateAccessors(opts);\n }\n if (aggregationDataDirty || aggregationWeightsDirty) {\n this._resetResults();\n }\n this.setState({\n aggregationDataDirty,\n aggregationWeightsDirty\n });\n }\n /* eslint-enable max-statements, complexity */\n\n // Private (Aggregation)\n\n _updateAccessors(opts) {\n const {getWeight, aggregation, data} = opts.props;\n const {count} = this.state.weights;\n if (count) {\n count.getWeight = getWeight;\n count.operation = AGGREGATION_OPERATION[aggregation];\n }\n this.setState({getValue: getValueFunc(aggregation, getWeight, {data})});\n }\n\n _resetResults() {\n const {count} = this.state.weights;\n if (count) {\n count.aggregationData = null;\n }\n }\n\n // Private (Contours)\n\n _generateContours() {\n const {numCol, numRow, gridOrigin, gridOffset, thresholdData} = this.state;\n const {count} = this.state.weights;\n let {aggregationData} = count;\n if (!aggregationData) {\n aggregationData = count.aggregationBuffer.getData();\n count.aggregationData = aggregationData;\n }\n\n const {cellWeights} = GPUGridAggregator.getCellData({countsData: aggregationData});\n const contourData = generateContours({\n thresholdData,\n cellWeights,\n gridSize: [numCol, numRow],\n gridOrigin,\n cellSize: [gridOffset.xOffset, gridOffset.yOffset]\n });\n\n // contourData contains both iso-lines and iso-bands if requested.\n this.setState({contourData});\n }\n\n _updateThresholdData(props) {\n const {contours, zOffset} = props;\n const count = contours.length;\n const thresholdData = new Array(count);\n for (let i = 0; i < count; i++) {\n const contour = contours[i];\n thresholdData[i] = {\n contour,\n zIndex: contour.zIndex || i,\n zOffset\n };\n }\n this.setState({thresholdData});\n }\n}\n\nContourLayer.layerName = 'ContourLayer';\nContourLayer.defaultProps = defaultProps;\n"],"file":"contour-layer.js"}