@deck.gl/aggregation-layers 8.6.3 → 8.6.7

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 (102) hide show
  1. package/dist/dist.dev.js +11 -12
  2. package/dist/es5/aggregation-layer.js +163 -109
  3. package/dist/es5/aggregation-layer.js.map +1 -1
  4. package/dist/es5/contour-layer/contour-layer.js +260 -240
  5. package/dist/es5/contour-layer/contour-layer.js.map +1 -1
  6. package/dist/es5/contour-layer/contour-utils.js +86 -65
  7. package/dist/es5/contour-layer/contour-utils.js.map +1 -1
  8. package/dist/es5/contour-layer/marching-squares-codes.js +107 -182
  9. package/dist/es5/contour-layer/marching-squares-codes.js.map +1 -1
  10. package/dist/es5/contour-layer/marching-squares.js +60 -57
  11. package/dist/es5/contour-layer/marching-squares.js.map +1 -1
  12. package/dist/es5/cpu-grid-layer/cpu-grid-layer.js +121 -85
  13. package/dist/es5/cpu-grid-layer/cpu-grid-layer.js.map +1 -1
  14. package/dist/es5/cpu-grid-layer/grid-aggregator.js +119 -93
  15. package/dist/es5/cpu-grid-layer/grid-aggregator.js.map +1 -1
  16. package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer.js +167 -131
  17. package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer.js.map +1 -1
  18. package/dist/es5/gpu-grid-layer/gpu-grid-layer.js +322 -319
  19. package/dist/es5/gpu-grid-layer/gpu-grid-layer.js.map +1 -1
  20. package/dist/es5/grid-aggregation-layer.js +230 -202
  21. package/dist/es5/grid-aggregation-layer.js.map +1 -1
  22. package/dist/es5/grid-layer/grid-layer.js +91 -61
  23. package/dist/es5/grid-layer/grid-layer.js.map +1 -1
  24. package/dist/es5/heatmap-layer/heatmap-layer-utils.js +62 -27
  25. package/dist/es5/heatmap-layer/heatmap-layer-utils.js.map +1 -1
  26. package/dist/es5/heatmap-layer/heatmap-layer.js +533 -515
  27. package/dist/es5/heatmap-layer/heatmap-layer.js.map +1 -1
  28. package/dist/es5/heatmap-layer/triangle-layer.js +91 -64
  29. package/dist/es5/heatmap-layer/triangle-layer.js.map +1 -1
  30. package/dist/es5/hexagon-layer/hexagon-aggregator.js +78 -60
  31. package/dist/es5/hexagon-layer/hexagon-aggregator.js.map +1 -1
  32. package/dist/es5/hexagon-layer/hexagon-layer.js +164 -121
  33. package/dist/es5/hexagon-layer/hexagon-layer.js.map +1 -1
  34. package/dist/es5/index.js +30 -30
  35. package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js +193 -168
  36. package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
  37. package/dist/es5/screen-grid-layer/screen-grid-layer.js +250 -235
  38. package/dist/es5/screen-grid-layer/screen-grid-layer.js.map +1 -1
  39. package/dist/es5/utils/aggregation-operation-utils.js +34 -19
  40. package/dist/es5/utils/aggregation-operation-utils.js.map +1 -1
  41. package/dist/es5/utils/bin-sorter.js +198 -118
  42. package/dist/es5/utils/bin-sorter.js.map +1 -1
  43. package/dist/es5/utils/color-utils.js +10 -8
  44. package/dist/es5/utils/color-utils.js.map +1 -1
  45. package/dist/es5/utils/cpu-aggregator.js +342 -323
  46. package/dist/es5/utils/cpu-aggregator.js.map +1 -1
  47. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js +19 -21
  48. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js.map +1 -1
  49. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +547 -549
  50. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
  51. package/dist/es5/utils/grid-aggregation-utils.js +45 -51
  52. package/dist/es5/utils/grid-aggregation-utils.js.map +1 -1
  53. package/dist/es5/utils/prop-utils.js +2 -2
  54. package/dist/es5/utils/prop-utils.js.map +1 -1
  55. package/dist/es5/utils/resource-utils.js +40 -33
  56. package/dist/es5/utils/resource-utils.js.map +1 -1
  57. package/dist/es5/utils/scale-utils.js +75 -45
  58. package/dist/es5/utils/scale-utils.js.map +1 -1
  59. package/dist/esm/aggregation-layer.js +2 -1
  60. package/dist/esm/aggregation-layer.js.map +1 -1
  61. package/dist/esm/contour-layer/contour-utils.js +9 -8
  62. package/dist/esm/contour-layer/contour-utils.js.map +1 -1
  63. package/dist/esm/cpu-grid-layer/cpu-grid-layer.js +4 -3
  64. package/dist/esm/cpu-grid-layer/cpu-grid-layer.js.map +1 -1
  65. package/dist/esm/cpu-grid-layer/grid-aggregator.js +6 -5
  66. package/dist/esm/cpu-grid-layer/grid-aggregator.js.map +1 -1
  67. package/dist/esm/gpu-grid-layer/gpu-grid-cell-layer.js +4 -3
  68. package/dist/esm/gpu-grid-layer/gpu-grid-cell-layer.js.map +1 -1
  69. package/dist/esm/gpu-grid-layer/gpu-grid-layer.js +5 -4
  70. package/dist/esm/gpu-grid-layer/gpu-grid-layer.js.map +1 -1
  71. package/dist/esm/grid-aggregation-layer.js +11 -9
  72. package/dist/esm/grid-aggregation-layer.js.map +1 -1
  73. package/dist/esm/grid-layer/grid-layer.js +6 -5
  74. package/dist/esm/grid-layer/grid-layer.js.map +1 -1
  75. package/dist/esm/heatmap-layer/heatmap-layer-utils.js +7 -5
  76. package/dist/esm/heatmap-layer/heatmap-layer-utils.js.map +1 -1
  77. package/dist/esm/heatmap-layer/heatmap-layer.js +12 -7
  78. package/dist/esm/heatmap-layer/heatmap-layer.js.map +1 -1
  79. package/dist/esm/heatmap-layer/triangle-layer.js +4 -3
  80. package/dist/esm/heatmap-layer/triangle-layer.js.map +1 -1
  81. package/dist/esm/hexagon-layer/hexagon-layer.js +4 -3
  82. package/dist/esm/hexagon-layer/hexagon-layer.js.map +1 -1
  83. package/dist/esm/screen-grid-layer/screen-grid-cell-layer.js +18 -14
  84. package/dist/esm/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
  85. package/dist/esm/screen-grid-layer/screen-grid-layer.js +14 -11
  86. package/dist/esm/screen-grid-layer/screen-grid-layer.js.map +1 -1
  87. package/dist/esm/utils/aggregation-operation-utils.js +5 -2
  88. package/dist/esm/utils/aggregation-operation-utils.js.map +1 -1
  89. package/dist/esm/utils/bin-sorter.js +8 -3
  90. package/dist/esm/utils/bin-sorter.js.map +1 -1
  91. package/dist/esm/utils/color-utils.js +3 -1
  92. package/dist/esm/utils/color-utils.js.map +1 -1
  93. package/dist/esm/utils/cpu-aggregator.js +25 -18
  94. package/dist/esm/utils/cpu-aggregator.js.map +1 -1
  95. package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +24 -18
  96. package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
  97. package/dist/esm/utils/grid-aggregation-utils.js +3 -1
  98. package/dist/esm/utils/grid-aggregation-utils.js.map +1 -1
  99. package/dist/esm/utils/resource-utils.js +5 -2
  100. package/dist/esm/utils/resource-utils.js.map +1 -1
  101. package/dist.min.js +1 -1
  102. package/package.json +2 -2
@@ -3,58 +3,76 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getScale = getScale;
7
- exports.getQuantizeScale = getQuantizeScale;
6
+ exports.clamp = clamp;
7
+ exports.getLinearDomain = getLinearDomain;
8
8
  exports.getLinearScale = getLinearScale;
9
- exports.getQuantileScale = getQuantileScale;
9
+ exports.getOrdinalDomain = getOrdinalDomain;
10
10
  exports.getOrdinalScale = getOrdinalScale;
11
- exports.quantizeScale = quantizeScale;
12
- exports.linearScale = linearScale;
13
- exports.unique = unique;
14
- exports.getLinearDomain = getLinearDomain;
15
11
  exports.getQuantileDomain = getQuantileDomain;
16
- exports.getOrdinalDomain = getOrdinalDomain;
12
+ exports.getQuantileScale = getQuantileScale;
13
+ exports.getQuantizeScale = getQuantizeScale;
14
+ exports.getScale = getScale;
17
15
  exports.getScaleDomain = getScaleDomain;
18
- exports.clamp = clamp;
19
16
  exports.getScaleFunctionByScaleType = getScaleFunctionByScaleType;
17
+ exports.linearScale = linearScale;
18
+ exports.quantizeScale = quantizeScale;
19
+ exports.unique = unique;
20
20
 
21
21
  var _core = require("@deck.gl/core");
22
22
 
23
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { 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 = it.call(o); }, 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; } } }; }
24
+
25
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
26
+
27
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
28
+
23
29
  function getScale(domain, range, scaleFunction) {
24
- const scale = scaleFunction;
30
+ var scale = scaleFunction;
25
31
 
26
- scale.domain = () => domain;
32
+ scale.domain = function () {
33
+ return domain;
34
+ };
27
35
 
28
- scale.range = () => range;
36
+ scale.range = function () {
37
+ return range;
38
+ };
29
39
 
30
40
  return scale;
31
41
  }
32
42
 
33
43
  function getQuantizeScale(domain, range) {
34
- const scaleFunction = value => quantizeScale(domain, range, value);
44
+ var scaleFunction = function scaleFunction(value) {
45
+ return quantizeScale(domain, range, value);
46
+ };
35
47
 
36
48
  return getScale(domain, range, scaleFunction);
37
49
  }
38
50
 
39
51
  function getLinearScale(domain, range) {
40
- const scaleFunction = value => linearScale(domain, range, value);
52
+ var scaleFunction = function scaleFunction(value) {
53
+ return linearScale(domain, range, value);
54
+ };
41
55
 
42
56
  return getScale(domain, range, scaleFunction);
43
57
  }
44
58
 
45
59
  function getQuantileScale(domain, range) {
46
- const sortedDomain = domain.sort(ascending);
47
- let i = 0;
48
- const n = Math.max(1, range.length);
49
- const thresholds = new Array(n - 1);
60
+ var sortedDomain = domain.sort(ascending);
61
+ var i = 0;
62
+ var n = Math.max(1, range.length);
63
+ var thresholds = new Array(n - 1);
50
64
 
51
65
  while (++i < n) {
52
66
  thresholds[i - 1] = threshold(sortedDomain, i / n);
53
67
  }
54
68
 
55
- const scaleFunction = value => thresholdsScale(thresholds, range, value);
69
+ var scaleFunction = function scaleFunction(value) {
70
+ return thresholdsScale(thresholds, range, value);
71
+ };
56
72
 
57
- scaleFunction.thresholds = () => thresholds;
73
+ scaleFunction.thresholds = function () {
74
+ return thresholds;
75
+ };
58
76
 
59
77
  return getScale(domain, range, scaleFunction);
60
78
  }
@@ -64,7 +82,7 @@ function ascending(a, b) {
64
82
  }
65
83
 
66
84
  function threshold(domain, fraction) {
67
- const domainLength = domain.length;
85
+ var domainLength = domain.length;
68
86
 
69
87
  if (fraction <= 0 || domainLength < 2) {
70
88
  return domain[0];
@@ -74,19 +92,19 @@ function threshold(domain, fraction) {
74
92
  return domain[domainLength - 1];
75
93
  }
76
94
 
77
- const domainFraction = (domainLength - 1) * fraction;
78
- const lowIndex = Math.floor(domainFraction);
79
- const low = domain[lowIndex];
80
- const high = domain[lowIndex + 1];
95
+ var domainFraction = (domainLength - 1) * fraction;
96
+ var lowIndex = Math.floor(domainFraction);
97
+ var low = domain[lowIndex];
98
+ var high = domain[lowIndex + 1];
81
99
  return low + (high - low) * (domainFraction - lowIndex);
82
100
  }
83
101
 
84
102
  function bisectRight(a, x) {
85
- let lo = 0;
86
- let hi = a.length;
103
+ var lo = 0;
104
+ var hi = a.length;
87
105
 
88
106
  while (lo < hi) {
89
- const mid = lo + hi >>> 1;
107
+ var mid = lo + hi >>> 1;
90
108
 
91
109
  if (ascending(a[mid], x) > 0) {
92
110
  hi = mid;
@@ -103,8 +121,8 @@ function thresholdsScale(thresholds, range, value) {
103
121
  }
104
122
 
105
123
  function ordinalScale(domain, domainMap, range, value) {
106
- const key = "".concat(value);
107
- let d = domainMap.get(key);
124
+ var key = "".concat(value);
125
+ var d = domainMap.get(key);
108
126
 
109
127
  if (d === undefined) {
110
128
  d = domain.push(value);
@@ -115,24 +133,36 @@ function ordinalScale(domain, domainMap, range, value) {
115
133
  }
116
134
 
117
135
  function getOrdinalScale(domain, range) {
118
- const domainMap = new Map();
119
- const uniqueDomain = [];
136
+ var domainMap = new Map();
137
+ var uniqueDomain = [];
138
+
139
+ var _iterator = _createForOfIteratorHelper(domain),
140
+ _step;
120
141
 
121
- for (const d of domain) {
122
- const key = "".concat(d);
142
+ try {
143
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
144
+ var d = _step.value;
145
+ var key = "".concat(d);
123
146
 
124
- if (!domainMap.has(key)) {
125
- domainMap.set(key, uniqueDomain.push(d));
147
+ if (!domainMap.has(key)) {
148
+ domainMap.set(key, uniqueDomain.push(d));
149
+ }
126
150
  }
151
+ } catch (err) {
152
+ _iterator.e(err);
153
+ } finally {
154
+ _iterator.f();
127
155
  }
128
156
 
129
- const scaleFunction = value => ordinalScale(uniqueDomain, domainMap, range, value);
157
+ var scaleFunction = function scaleFunction(value) {
158
+ return ordinalScale(uniqueDomain, domainMap, range, value);
159
+ };
130
160
 
131
161
  return getScale(domain, range, scaleFunction);
132
162
  }
133
163
 
134
164
  function quantizeScale(domain, range, value) {
135
- const domainRange = domain[1] - domain[0];
165
+ var domainRange = domain[1] - domain[0];
136
166
 
137
167
  if (domainRange <= 0) {
138
168
  _core.log.warn('quantizeScale: invalid domain, returning range[0]')();
@@ -140,9 +170,9 @@ function quantizeScale(domain, range, value) {
140
170
  return range[0];
141
171
  }
142
172
 
143
- const step = domainRange / range.length;
144
- const idx = Math.floor((value - domain[0]) / step);
145
- const clampIdx = Math.max(Math.min(idx, range.length - 1), 0);
173
+ var step = domainRange / range.length;
174
+ var idx = Math.floor((value - domain[0]) / step);
175
+ var clampIdx = Math.max(Math.min(idx, range.length - 1), 0);
146
176
  return range[clampIdx];
147
177
  }
148
178
 
@@ -155,8 +185,8 @@ function notNullOrUndefined(d) {
155
185
  }
156
186
 
157
187
  function unique(values) {
158
- const results = [];
159
- values.forEach(v => {
188
+ var results = [];
189
+ values.forEach(function (v) {
160
190
  if (!results.includes(v) && notNullOrUndefined(v)) {
161
191
  results.push(v);
162
192
  }
@@ -165,12 +195,12 @@ function unique(values) {
165
195
  }
166
196
 
167
197
  function getTruthyValues(data, valueAccessor) {
168
- const values = typeof valueAccessor === 'function' ? data.map(valueAccessor) : data;
198
+ var values = typeof valueAccessor === 'function' ? data.map(valueAccessor) : data;
169
199
  return values.filter(notNullOrUndefined);
170
200
  }
171
201
 
172
202
  function getLinearDomain(data, valueAccessor) {
173
- const sorted = getTruthyValues(data, valueAccessor).sort();
203
+ var sorted = getTruthyValues(data, valueAccessor).sort();
174
204
  return sorted.length ? [sorted[0], sorted[sorted.length - 1]] : [0, 0];
175
205
  }
176
206
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/scale-utils.js"],"names":["getScale","domain","range","scaleFunction","scale","getQuantizeScale","value","quantizeScale","getLinearScale","linearScale","getQuantileScale","sortedDomain","sort","ascending","i","n","Math","max","length","thresholds","Array","threshold","thresholdsScale","a","b","fraction","domainLength","domainFraction","lowIndex","floor","low","high","bisectRight","x","lo","hi","mid","ordinalScale","domainMap","key","d","get","undefined","push","set","getOrdinalScale","Map","uniqueDomain","has","domainRange","log","warn","step","idx","clampIdx","min","notNullOrUndefined","unique","values","results","forEach","v","includes","getTruthyValues","data","valueAccessor","map","filter","getLinearDomain","sorted","getQuantileDomain","getOrdinalDomain","getScaleDomain","scaleType","clamp","getScaleFunctionByScaleType"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 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 {log} from '@deck.gl/core';\n\n// a scale function wrapper just like d3-scales\nexport function getScale(domain, range, scaleFunction) {\n const scale = scaleFunction;\n scale.domain = () => domain;\n scale.range = () => range;\n\n return scale;\n}\n\n// Quantize scale is similar to linear scales,\n// except it uses a discrete rather than continuous range\n// return a quantize scale function\nexport function getQuantizeScale(domain, range) {\n const scaleFunction = value => quantizeScale(domain, range, value);\n\n return getScale(domain, range, scaleFunction);\n}\n\n// return a linear scale function\nexport function getLinearScale(domain, range) {\n const scaleFunction = value => linearScale(domain, range, value);\n\n return getScale(domain, range, scaleFunction);\n}\n\nexport function getQuantileScale(domain, range) {\n // calculate threshold\n const sortedDomain = domain.sort(ascending);\n let i = 0;\n const n = Math.max(1, range.length);\n const thresholds = new Array(n - 1);\n while (++i < n) {\n thresholds[i - 1] = threshold(sortedDomain, i / n);\n }\n\n const scaleFunction = value => thresholdsScale(thresholds, range, value);\n scaleFunction.thresholds = () => thresholds;\n\n return getScale(domain, range, scaleFunction);\n}\n\nfunction ascending(a, b) {\n return a - b;\n}\n\nfunction threshold(domain, fraction) {\n const domainLength = domain.length;\n if (fraction <= 0 || domainLength < 2) {\n return domain[0];\n }\n if (fraction >= 1) {\n return domain[domainLength - 1];\n }\n\n const domainFraction = (domainLength - 1) * fraction;\n const lowIndex = Math.floor(domainFraction);\n const low = domain[lowIndex];\n const high = domain[lowIndex + 1];\n return low + (high - low) * (domainFraction - lowIndex);\n}\n\nfunction bisectRight(a, x) {\n let lo = 0;\n let hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (ascending(a[mid], x) > 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return lo;\n}\n\n// return a quantize scale function\nfunction thresholdsScale(thresholds, range, value) {\n return range[bisectRight(thresholds, value)];\n}\n\n// ordinal Scale\nfunction ordinalScale(domain, domainMap, range, value) {\n const key = `${value}`;\n let d = domainMap.get(key);\n if (d === undefined) {\n // update the domain\n d = domain.push(value);\n domainMap.set(key, d);\n }\n return range[(d - 1) % range.length];\n}\n\nexport function getOrdinalScale(domain, range) {\n const domainMap = new Map();\n const uniqueDomain = [];\n for (const d of domain) {\n const key = `${d}`;\n if (!domainMap.has(key)) {\n domainMap.set(key, uniqueDomain.push(d));\n }\n }\n\n const scaleFunction = value => ordinalScale(uniqueDomain, domainMap, range, value);\n\n return getScale(domain, range, scaleFunction);\n}\n\n// Quantize scale is similar to linear scales,\n// except it uses a discrete rather than continuous range\nexport function quantizeScale(domain, range, value) {\n const domainRange = domain[1] - domain[0];\n if (domainRange <= 0) {\n log.warn('quantizeScale: invalid domain, returning range[0]')();\n return range[0];\n }\n const step = domainRange / range.length;\n const idx = Math.floor((value - domain[0]) / step);\n const clampIdx = Math.max(Math.min(idx, range.length - 1), 0);\n\n return range[clampIdx];\n}\n\n// Linear scale maps continuous domain to continuous range\nexport function linearScale(domain, range, value) {\n return ((value - domain[0]) / (domain[1] - domain[0])) * (range[1] - range[0]) + range[0];\n}\n\n// get scale domains\nfunction notNullOrUndefined(d) {\n return d !== undefined && d !== null;\n}\n\nexport function unique(values) {\n const results = [];\n values.forEach(v => {\n if (!results.includes(v) && notNullOrUndefined(v)) {\n results.push(v);\n }\n });\n\n return results;\n}\n\nfunction getTruthyValues(data, valueAccessor) {\n const values = typeof valueAccessor === 'function' ? data.map(valueAccessor) : data;\n return values.filter(notNullOrUndefined);\n}\n\nexport function getLinearDomain(data, valueAccessor) {\n const sorted = getTruthyValues(data, valueAccessor).sort();\n return sorted.length ? [sorted[0], sorted[sorted.length - 1]] : [0, 0];\n}\n\nexport function getQuantileDomain(data, valueAccessor) {\n return getTruthyValues(data, valueAccessor);\n}\n\nexport function getOrdinalDomain(data, valueAccessor) {\n return unique(getTruthyValues(data, valueAccessor));\n}\n\nexport function getScaleDomain(scaleType, data, valueAccessor) {\n switch (scaleType) {\n case 'quantize':\n case 'linear':\n return getLinearDomain(data, valueAccessor);\n\n case 'quantile':\n return getQuantileDomain(data, valueAccessor);\n\n case 'ordinal':\n return getOrdinalDomain(data, valueAccessor);\n\n default:\n return getLinearDomain(data, valueAccessor);\n }\n}\n\nexport function clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n\nexport function getScaleFunctionByScaleType(scaleType) {\n switch (scaleType) {\n case 'quantize':\n return getQuantizeScale;\n case 'linear':\n return getLinearScale;\n case 'quantile':\n return getQuantileScale;\n case 'ordinal':\n return getOrdinalScale;\n\n default:\n return getQuantizeScale;\n }\n}\n"],"file":"scale-utils.js"}
1
+ {"version":3,"sources":["../../../src/utils/scale-utils.js"],"names":["getScale","domain","range","scaleFunction","scale","getQuantizeScale","value","quantizeScale","getLinearScale","linearScale","getQuantileScale","sortedDomain","sort","ascending","i","n","Math","max","length","thresholds","Array","threshold","thresholdsScale","a","b","fraction","domainLength","domainFraction","lowIndex","floor","low","high","bisectRight","x","lo","hi","mid","ordinalScale","domainMap","key","d","get","undefined","push","set","getOrdinalScale","Map","uniqueDomain","has","domainRange","log","warn","step","idx","clampIdx","min","notNullOrUndefined","unique","values","results","forEach","v","includes","getTruthyValues","data","valueAccessor","map","filter","getLinearDomain","sorted","getQuantileDomain","getOrdinalDomain","getScaleDomain","scaleType","clamp","getScaleFunctionByScaleType"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 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 {log} from '@deck.gl/core';\n\n// a scale function wrapper just like d3-scales\nexport function getScale(domain, range, scaleFunction) {\n const scale = scaleFunction;\n scale.domain = () => domain;\n scale.range = () => range;\n\n return scale;\n}\n\n// Quantize scale is similar to linear scales,\n// except it uses a discrete rather than continuous range\n// return a quantize scale function\nexport function getQuantizeScale(domain, range) {\n const scaleFunction = value => quantizeScale(domain, range, value);\n\n return getScale(domain, range, scaleFunction);\n}\n\n// return a linear scale function\nexport function getLinearScale(domain, range) {\n const scaleFunction = value => linearScale(domain, range, value);\n\n return getScale(domain, range, scaleFunction);\n}\n\nexport function getQuantileScale(domain, range) {\n // calculate threshold\n const sortedDomain = domain.sort(ascending);\n let i = 0;\n const n = Math.max(1, range.length);\n const thresholds = new Array(n - 1);\n while (++i < n) {\n thresholds[i - 1] = threshold(sortedDomain, i / n);\n }\n\n const scaleFunction = value => thresholdsScale(thresholds, range, value);\n scaleFunction.thresholds = () => thresholds;\n\n return getScale(domain, range, scaleFunction);\n}\n\nfunction ascending(a, b) {\n return a - b;\n}\n\nfunction threshold(domain, fraction) {\n const domainLength = domain.length;\n if (fraction <= 0 || domainLength < 2) {\n return domain[0];\n }\n if (fraction >= 1) {\n return domain[domainLength - 1];\n }\n\n const domainFraction = (domainLength - 1) * fraction;\n const lowIndex = Math.floor(domainFraction);\n const low = domain[lowIndex];\n const high = domain[lowIndex + 1];\n return low + (high - low) * (domainFraction - lowIndex);\n}\n\nfunction bisectRight(a, x) {\n let lo = 0;\n let hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (ascending(a[mid], x) > 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return lo;\n}\n\n// return a quantize scale function\nfunction thresholdsScale(thresholds, range, value) {\n return range[bisectRight(thresholds, value)];\n}\n\n// ordinal Scale\nfunction ordinalScale(domain, domainMap, range, value) {\n const key = `${value}`;\n let d = domainMap.get(key);\n if (d === undefined) {\n // update the domain\n d = domain.push(value);\n domainMap.set(key, d);\n }\n return range[(d - 1) % range.length];\n}\n\nexport function getOrdinalScale(domain, range) {\n const domainMap = new Map();\n const uniqueDomain = [];\n for (const d of domain) {\n const key = `${d}`;\n if (!domainMap.has(key)) {\n domainMap.set(key, uniqueDomain.push(d));\n }\n }\n\n const scaleFunction = value => ordinalScale(uniqueDomain, domainMap, range, value);\n\n return getScale(domain, range, scaleFunction);\n}\n\n// Quantize scale is similar to linear scales,\n// except it uses a discrete rather than continuous range\nexport function quantizeScale(domain, range, value) {\n const domainRange = domain[1] - domain[0];\n if (domainRange <= 0) {\n log.warn('quantizeScale: invalid domain, returning range[0]')();\n return range[0];\n }\n const step = domainRange / range.length;\n const idx = Math.floor((value - domain[0]) / step);\n const clampIdx = Math.max(Math.min(idx, range.length - 1), 0);\n\n return range[clampIdx];\n}\n\n// Linear scale maps continuous domain to continuous range\nexport function linearScale(domain, range, value) {\n return ((value - domain[0]) / (domain[1] - domain[0])) * (range[1] - range[0]) + range[0];\n}\n\n// get scale domains\nfunction notNullOrUndefined(d) {\n return d !== undefined && d !== null;\n}\n\nexport function unique(values) {\n const results = [];\n values.forEach(v => {\n if (!results.includes(v) && notNullOrUndefined(v)) {\n results.push(v);\n }\n });\n\n return results;\n}\n\nfunction getTruthyValues(data, valueAccessor) {\n const values = typeof valueAccessor === 'function' ? data.map(valueAccessor) : data;\n return values.filter(notNullOrUndefined);\n}\n\nexport function getLinearDomain(data, valueAccessor) {\n const sorted = getTruthyValues(data, valueAccessor).sort();\n return sorted.length ? [sorted[0], sorted[sorted.length - 1]] : [0, 0];\n}\n\nexport function getQuantileDomain(data, valueAccessor) {\n return getTruthyValues(data, valueAccessor);\n}\n\nexport function getOrdinalDomain(data, valueAccessor) {\n return unique(getTruthyValues(data, valueAccessor));\n}\n\nexport function getScaleDomain(scaleType, data, valueAccessor) {\n switch (scaleType) {\n case 'quantize':\n case 'linear':\n return getLinearDomain(data, valueAccessor);\n\n case 'quantile':\n return getQuantileDomain(data, valueAccessor);\n\n case 'ordinal':\n return getOrdinalDomain(data, valueAccessor);\n\n default:\n return getLinearDomain(data, valueAccessor);\n }\n}\n\nexport function clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n\nexport function getScaleFunctionByScaleType(scaleType) {\n switch (scaleType) {\n case 'quantize':\n return getQuantizeScale;\n case 'linear':\n return getLinearScale;\n case 'quantile':\n return getQuantileScale;\n case 'ordinal':\n return getOrdinalScale;\n\n default:\n return getQuantizeScale;\n }\n}\n"],"file":"scale-utils.js"}
@@ -56,7 +56,8 @@ export default class AggregationLayer extends CompositeLayer {
56
56
 
57
57
  updateShaders(shaders) {}
58
58
 
59
- isAggregationDirty(updateOpts, params = {}) {
59
+ isAggregationDirty(updateOpts) {
60
+ let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
60
61
  const {
61
62
  props,
62
63
  oldProps,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/aggregation-layer.js"],"names":["CompositeLayer","AttributeManager","_compareProps","compareProps","cssToDeviceRatio","filterProps","AggregationLayer","initializeState","dimensions","setState","ignoreProps","constructor","_propTypes","data","props","updateState","opts","changeFlags","extensionsChanged","shaders","getShaders","defines","NON_INSTANCED_MODEL","updateShaders","_updateAttributes","updateAttributes","changedAttributes","getAttributes","getAttributeManager","getShaderAttributes","getModuleSettings","viewport","mousePosition","gl","context","moduleSettings","Object","assign","create","pickingActive","devicePixelRatio","isAggregationDirty","updateOpts","params","oldProps","compareAll","dimension","state","dataProps","accessors","updateTriggersChanged","dataChanged","all","accessor","newProps","propTypes","name","isAttributeChanged","isObjectEmpty","undefined","_getAttributeManager","id","stats","obj","isEmpty","key","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 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 {CompositeLayer, AttributeManager, _compareProps as compareProps} from '@deck.gl/core';\nimport {cssToDeviceRatio} from '@luma.gl/core';\nimport {filterProps} from './utils/prop-utils';\n\nexport default class AggregationLayer extends CompositeLayer {\n initializeState(dimensions) {\n super.initializeState();\n\n this.setState({\n // Layer props , when changed doesn't require updating aggregation\n ignoreProps: filterProps(this.constructor._propTypes, dimensions.data.props),\n dimensions\n });\n }\n\n updateState(opts) {\n super.updateState(opts);\n const {changeFlags} = opts;\n if (changeFlags.extensionsChanged) {\n const shaders = this.getShaders({});\n if (shaders && shaders.defines) {\n shaders.defines.NON_INSTANCED_MODEL = 1;\n }\n this.updateShaders(shaders);\n }\n\n // Explictly call to update attributes as 'CompositeLayer' doesn't call this\n this._updateAttributes(opts.props);\n }\n\n updateAttributes(changedAttributes) {\n // Super classes, can refer to state.changedAttributes to determine what\n // attributes changed\n this.setState({changedAttributes});\n }\n\n getAttributes() {\n return this.getAttributeManager().getShaderAttributes();\n }\n\n getModuleSettings() {\n // For regular layer draw this happens during draw cycle (_drawLayersInViewport) not during update cycle\n // For aggregation layers this is called during updateState to update aggregation data\n // NOTE: it is similar to LayerPass._getModuleParameters() but doesn't inlcude `effects` it is not needed for aggregation\n const {viewport, mousePosition, gl} = this.context;\n const moduleSettings = Object.assign(Object.create(this.props), {\n viewport,\n mousePosition,\n pickingActive: 0,\n devicePixelRatio: cssToDeviceRatio(gl)\n });\n return moduleSettings;\n }\n\n updateShaders(shaders) {\n // Default implemention is empty, subclasses can update their Model objects if needed\n }\n\n /**\n * Checks if aggregation is dirty\n * @param {Object} updateOpts - object {props, oldProps, changeFlags}\n * @param {Object} params - object {dimension, compareAll}\n * @param {Object} params.dimension - {props, accessors} array of props and/or accessors\n * @param {Boolean} params.compareAll - when `true` it will include non layer props for comparision\n * @returns {Boolean} - returns true if dimensions' prop or accessor is changed\n **/\n isAggregationDirty(updateOpts, params = {}) {\n const {props, oldProps, changeFlags} = updateOpts;\n const {compareAll = false, dimension} = params;\n const {ignoreProps} = this.state;\n const {props: dataProps, accessors = []} = dimension;\n const {updateTriggersChanged} = changeFlags;\n if (changeFlags.dataChanged) {\n return true;\n }\n if (updateTriggersChanged) {\n if (updateTriggersChanged.all) {\n return true;\n }\n for (const accessor of accessors) {\n if (updateTriggersChanged[accessor]) {\n return true;\n }\n }\n }\n if (compareAll) {\n if (changeFlags.extensionsChanged) {\n return true;\n }\n // Compare non layer props too (like extension props)\n // ignoreprops refers to all Layer props other than aggregation props that need to be comapred\n return compareProps({\n oldProps,\n newProps: props,\n ignoreProps,\n propTypes: this.constructor._propTypes\n });\n }\n // Compare props of the dimension\n for (const name of dataProps) {\n if (props[name] !== oldProps[name]) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Checks if an attribute is changed\n * @param {String} name - name of the attribute\n * @returns {Boolean} - `true` if attribute `name` is changed, `false` otherwise,\n * If `name` is not passed or `undefiend`, `true` if any attribute is changed, `false` otherwise\n **/\n isAttributeChanged(name) {\n const {changedAttributes} = this.state;\n if (!name) {\n // if name not specified return true if any attribute is changed\n return !isObjectEmpty(changedAttributes);\n }\n return changedAttributes && changedAttributes[name] !== undefined;\n }\n\n // Private\n\n // override Composite layer private method to create AttributeManager instance\n _getAttributeManager() {\n return new AttributeManager(this.context.gl, {\n id: this.props.id,\n stats: this.context.stats\n });\n }\n}\n\n// Helper methods\n\n// Returns true if given object is empty, false otherwise.\nfunction isObjectEmpty(obj) {\n let isEmpty = true;\n /* eslint-disable no-unused-vars */\n for (const key in obj) {\n isEmpty = false;\n break;\n }\n /* eslint-enable no-unused-vars */\n return isEmpty;\n}\n\nAggregationLayer.layerName = 'AggregationLayer';\n"],"file":"aggregation-layer.js"}
1
+ {"version":3,"sources":["../../src/aggregation-layer.js"],"names":["CompositeLayer","AttributeManager","_compareProps","compareProps","cssToDeviceRatio","filterProps","AggregationLayer","initializeState","dimensions","setState","ignoreProps","constructor","_propTypes","data","props","updateState","opts","changeFlags","extensionsChanged","shaders","getShaders","defines","NON_INSTANCED_MODEL","updateShaders","_updateAttributes","updateAttributes","changedAttributes","getAttributes","getAttributeManager","getShaderAttributes","getModuleSettings","viewport","mousePosition","gl","context","moduleSettings","Object","assign","create","pickingActive","devicePixelRatio","isAggregationDirty","updateOpts","params","oldProps","compareAll","dimension","state","dataProps","accessors","updateTriggersChanged","dataChanged","all","accessor","newProps","propTypes","name","isAttributeChanged","isObjectEmpty","undefined","_getAttributeManager","id","stats","obj","isEmpty","key","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 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 {CompositeLayer, AttributeManager, _compareProps as compareProps} from '@deck.gl/core';\nimport {cssToDeviceRatio} from '@luma.gl/core';\nimport {filterProps} from './utils/prop-utils';\n\nexport default class AggregationLayer extends CompositeLayer {\n initializeState(dimensions) {\n super.initializeState();\n\n this.setState({\n // Layer props , when changed doesn't require updating aggregation\n ignoreProps: filterProps(this.constructor._propTypes, dimensions.data.props),\n dimensions\n });\n }\n\n updateState(opts) {\n super.updateState(opts);\n const {changeFlags} = opts;\n if (changeFlags.extensionsChanged) {\n const shaders = this.getShaders({});\n if (shaders && shaders.defines) {\n shaders.defines.NON_INSTANCED_MODEL = 1;\n }\n this.updateShaders(shaders);\n }\n\n // Explictly call to update attributes as 'CompositeLayer' doesn't call this\n this._updateAttributes(opts.props);\n }\n\n updateAttributes(changedAttributes) {\n // Super classes, can refer to state.changedAttributes to determine what\n // attributes changed\n this.setState({changedAttributes});\n }\n\n getAttributes() {\n return this.getAttributeManager().getShaderAttributes();\n }\n\n getModuleSettings() {\n // For regular layer draw this happens during draw cycle (_drawLayersInViewport) not during update cycle\n // For aggregation layers this is called during updateState to update aggregation data\n // NOTE: it is similar to LayerPass._getModuleParameters() but doesn't inlcude `effects` it is not needed for aggregation\n const {viewport, mousePosition, gl} = this.context;\n const moduleSettings = Object.assign(Object.create(this.props), {\n viewport,\n mousePosition,\n pickingActive: 0,\n devicePixelRatio: cssToDeviceRatio(gl)\n });\n return moduleSettings;\n }\n\n updateShaders(shaders) {\n // Default implemention is empty, subclasses can update their Model objects if needed\n }\n\n /**\n * Checks if aggregation is dirty\n * @param {Object} updateOpts - object {props, oldProps, changeFlags}\n * @param {Object} params - object {dimension, compareAll}\n * @param {Object} params.dimension - {props, accessors} array of props and/or accessors\n * @param {Boolean} params.compareAll - when `true` it will include non layer props for comparision\n * @returns {Boolean} - returns true if dimensions' prop or accessor is changed\n **/\n isAggregationDirty(updateOpts, params = {}) {\n const {props, oldProps, changeFlags} = updateOpts;\n const {compareAll = false, dimension} = params;\n const {ignoreProps} = this.state;\n const {props: dataProps, accessors = []} = dimension;\n const {updateTriggersChanged} = changeFlags;\n if (changeFlags.dataChanged) {\n return true;\n }\n if (updateTriggersChanged) {\n if (updateTriggersChanged.all) {\n return true;\n }\n for (const accessor of accessors) {\n if (updateTriggersChanged[accessor]) {\n return true;\n }\n }\n }\n if (compareAll) {\n if (changeFlags.extensionsChanged) {\n return true;\n }\n // Compare non layer props too (like extension props)\n // ignoreprops refers to all Layer props other than aggregation props that need to be comapred\n return compareProps({\n oldProps,\n newProps: props,\n ignoreProps,\n propTypes: this.constructor._propTypes\n });\n }\n // Compare props of the dimension\n for (const name of dataProps) {\n if (props[name] !== oldProps[name]) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Checks if an attribute is changed\n * @param {String} name - name of the attribute\n * @returns {Boolean} - `true` if attribute `name` is changed, `false` otherwise,\n * If `name` is not passed or `undefiend`, `true` if any attribute is changed, `false` otherwise\n **/\n isAttributeChanged(name) {\n const {changedAttributes} = this.state;\n if (!name) {\n // if name not specified return true if any attribute is changed\n return !isObjectEmpty(changedAttributes);\n }\n return changedAttributes && changedAttributes[name] !== undefined;\n }\n\n // Private\n\n // override Composite layer private method to create AttributeManager instance\n _getAttributeManager() {\n return new AttributeManager(this.context.gl, {\n id: this.props.id,\n stats: this.context.stats\n });\n }\n}\n\n// Helper methods\n\n// Returns true if given object is empty, false otherwise.\nfunction isObjectEmpty(obj) {\n let isEmpty = true;\n /* eslint-disable no-unused-vars */\n for (const key in obj) {\n isEmpty = false;\n break;\n }\n /* eslint-enable no-unused-vars */\n return isEmpty;\n}\n\nAggregationLayer.layerName = 'AggregationLayer';\n"],"file":"aggregation-layer.js"}
@@ -1,12 +1,13 @@
1
1
  import { getCode, getVertices, CONTOUR_TYPE } from './marching-squares';
2
- export function generateContours({
3
- thresholdData,
4
- colors,
5
- cellWeights,
6
- gridSize,
7
- gridOrigin,
8
- cellSize
9
- }) {
2
+ export function generateContours(_ref) {
3
+ let {
4
+ thresholdData,
5
+ colors,
6
+ cellWeights,
7
+ gridSize,
8
+ gridOrigin,
9
+ cellSize
10
+ } = _ref;
10
11
  const contourSegments = [];
11
12
  const contourPolygons = [];
12
13
  const width = gridSize[0];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/contour-layer/contour-utils.js"],"names":["getCode","getVertices","CONTOUR_TYPE","generateContours","thresholdData","colors","cellWeights","gridSize","gridOrigin","cellSize","contourSegments","contourPolygons","width","height","segmentIndex","polygonIndex","data","contour","threshold","x","y","code","meanCode","opts","Array","isArray","type","ISO_BANDS","polygons","polygon","vertices","ISO_LINES","i","length","start","end"],"mappings":"AAAA,SAAQA,OAAR,EAAiBC,WAAjB,EAA8BC,YAA9B,QAAiD,oBAAjD;AAIA,OAAO,SAASC,gBAAT,CAA0B;AAC/BC,EAAAA,aAD+B;AAE/BC,EAAAA,MAF+B;AAG/BC,EAAAA,WAH+B;AAI/BC,EAAAA,QAJ+B;AAK/BC,EAAAA,UAL+B;AAM/BC,EAAAA;AAN+B,CAA1B,EAOJ;AACD,QAAMC,eAAe,GAAG,EAAxB;AACA,QAAMC,eAAe,GAAG,EAAxB;AACA,QAAMC,KAAK,GAAGL,QAAQ,CAAC,CAAD,CAAtB;AACA,QAAMM,MAAM,GAAGN,QAAQ,CAAC,CAAD,CAAvB;AACA,MAAIO,YAAY,GAAG,CAAnB;AACA,MAAIC,YAAY,GAAG,CAAnB;;AAEA,OAAK,MAAMC,IAAX,IAAmBZ,aAAnB,EAAkC;AAChC,UAAM;AAACa,MAAAA;AAAD,QAAYD,IAAlB;AACA,UAAM;AAACE,MAAAA;AAAD,QAAcD,OAApB;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAC,CAAd,EAAiBA,CAAC,GAAGP,KAArB,EAA4BO,CAAC,EAA7B,EAAiC;AAC/B,WAAK,IAAIC,CAAC,GAAG,CAAC,CAAd,EAAiBA,CAAC,GAAGP,MAArB,EAA6BO,CAAC,EAA9B,EAAkC;AAEhC,cAAM;AAACC,UAAAA,IAAD;AAAOC,UAAAA;AAAP,YAAmBtB,OAAO,CAAC;AAC/BM,UAAAA,WAD+B;AAE/BY,UAAAA,SAF+B;AAG/BC,UAAAA,CAH+B;AAI/BC,UAAAA,CAJ+B;AAK/BR,UAAAA,KAL+B;AAM/BC,UAAAA;AAN+B,SAAD,CAAhC;AAQA,cAAMU,IAAI,GAAG;AACXf,UAAAA,UADW;AAEXC,UAAAA,QAFW;AAGXU,UAAAA,CAHW;AAIXC,UAAAA,CAJW;AAKXR,UAAAA,KALW;AAMXC,UAAAA,MANW;AAOXQ,UAAAA,IAPW;AAQXC,UAAAA,QARW;AASXlB,UAAAA,aAAa,EAAEY;AATJ,SAAb;;AAWA,YAAIQ,KAAK,CAACC,OAAN,CAAcP,SAAd,CAAJ,EAA8B;AAC5BK,UAAAA,IAAI,CAACG,IAAL,GAAYxB,YAAY,CAACyB,SAAzB;AACA,gBAAMC,QAAQ,GAAG3B,WAAW,CAACsB,IAAD,CAA5B;;AACA,eAAK,MAAMM,OAAX,IAAsBD,QAAtB,EAAgC;AAC9BjB,YAAAA,eAAe,CAACI,YAAY,EAAb,CAAf,GAAkC;AAChCe,cAAAA,QAAQ,EAAED,OADsB;AAEhCZ,cAAAA;AAFgC,aAAlC;AAID;AACF,SATD,MASO;AAELM,UAAAA,IAAI,CAACG,IAAL,GAAYxB,YAAY,CAAC6B,SAAzB;AACA,gBAAMD,QAAQ,GAAG7B,WAAW,CAACsB,IAAD,CAA5B;;AACA,eAAK,IAAIS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,QAAQ,CAACG,MAA7B,EAAqCD,CAAC,IAAI,CAA1C,EAA6C;AAC3CtB,YAAAA,eAAe,CAACI,YAAY,EAAb,CAAf,GAAkC;AAChCoB,cAAAA,KAAK,EAAEJ,QAAQ,CAACE,CAAD,CADiB;AAEhCG,cAAAA,GAAG,EAAEL,QAAQ,CAACE,CAAC,GAAG,CAAL,CAFmB;AAGhCf,cAAAA;AAHgC,aAAlC;AAKD;AACF;AACF;AACF;AACF;;AACD,SAAO;AAACP,IAAAA,eAAD;AAAkBC,IAAAA;AAAlB,GAAP;AACD","sourcesContent":["import {getCode, getVertices, CONTOUR_TYPE} from './marching-squares';\n\n// Given all the cell weights, generates contours for each threshold.\n/* eslint-disable max-depth */\nexport function generateContours({\n thresholdData,\n colors,\n cellWeights,\n gridSize,\n gridOrigin,\n cellSize\n}) {\n const contourSegments = [];\n const contourPolygons = [];\n const width = gridSize[0];\n const height = gridSize[1];\n let segmentIndex = 0;\n let polygonIndex = 0;\n\n for (const data of thresholdData) {\n const {contour} = data;\n const {threshold} = contour;\n for (let x = -1; x < width; x++) {\n for (let y = -1; y < height; y++) {\n // Get the MarchingSquares code based on neighbor cell weights.\n const {code, meanCode} = getCode({\n cellWeights,\n threshold,\n x,\n y,\n width,\n height\n });\n const opts = {\n gridOrigin,\n cellSize,\n x,\n y,\n width,\n height,\n code,\n meanCode,\n thresholdData: data\n };\n if (Array.isArray(threshold)) {\n opts.type = CONTOUR_TYPE.ISO_BANDS;\n const polygons = getVertices(opts);\n for (const polygon of polygons) {\n contourPolygons[polygonIndex++] = {\n vertices: polygon,\n contour\n };\n }\n } else {\n // Get the intersection vertices based on MarchingSquares code.\n opts.type = CONTOUR_TYPE.ISO_LINES;\n const vertices = getVertices(opts);\n for (let i = 0; i < vertices.length; i += 2) {\n contourSegments[segmentIndex++] = {\n start: vertices[i],\n end: vertices[i + 1],\n contour\n };\n }\n }\n }\n }\n }\n return {contourSegments, contourPolygons};\n}\n/* eslint-enable max-depth */\n"],"file":"contour-utils.js"}
1
+ {"version":3,"sources":["../../../src/contour-layer/contour-utils.js"],"names":["getCode","getVertices","CONTOUR_TYPE","generateContours","thresholdData","colors","cellWeights","gridSize","gridOrigin","cellSize","contourSegments","contourPolygons","width","height","segmentIndex","polygonIndex","data","contour","threshold","x","y","code","meanCode","opts","Array","isArray","type","ISO_BANDS","polygons","polygon","vertices","ISO_LINES","i","length","start","end"],"mappings":"AAAA,SAAQA,OAAR,EAAiBC,WAAjB,EAA8BC,YAA9B,QAAiD,oBAAjD;AAIA,OAAO,SAASC,gBAAT,OAOJ;AAAA,MAP8B;AAC/BC,IAAAA,aAD+B;AAE/BC,IAAAA,MAF+B;AAG/BC,IAAAA,WAH+B;AAI/BC,IAAAA,QAJ+B;AAK/BC,IAAAA,UAL+B;AAM/BC,IAAAA;AAN+B,GAO9B;AACD,QAAMC,eAAe,GAAG,EAAxB;AACA,QAAMC,eAAe,GAAG,EAAxB;AACA,QAAMC,KAAK,GAAGL,QAAQ,CAAC,CAAD,CAAtB;AACA,QAAMM,MAAM,GAAGN,QAAQ,CAAC,CAAD,CAAvB;AACA,MAAIO,YAAY,GAAG,CAAnB;AACA,MAAIC,YAAY,GAAG,CAAnB;;AAEA,OAAK,MAAMC,IAAX,IAAmBZ,aAAnB,EAAkC;AAChC,UAAM;AAACa,MAAAA;AAAD,QAAYD,IAAlB;AACA,UAAM;AAACE,MAAAA;AAAD,QAAcD,OAApB;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAC,CAAd,EAAiBA,CAAC,GAAGP,KAArB,EAA4BO,CAAC,EAA7B,EAAiC;AAC/B,WAAK,IAAIC,CAAC,GAAG,CAAC,CAAd,EAAiBA,CAAC,GAAGP,MAArB,EAA6BO,CAAC,EAA9B,EAAkC;AAEhC,cAAM;AAACC,UAAAA,IAAD;AAAOC,UAAAA;AAAP,YAAmBtB,OAAO,CAAC;AAC/BM,UAAAA,WAD+B;AAE/BY,UAAAA,SAF+B;AAG/BC,UAAAA,CAH+B;AAI/BC,UAAAA,CAJ+B;AAK/BR,UAAAA,KAL+B;AAM/BC,UAAAA;AAN+B,SAAD,CAAhC;AAQA,cAAMU,IAAI,GAAG;AACXf,UAAAA,UADW;AAEXC,UAAAA,QAFW;AAGXU,UAAAA,CAHW;AAIXC,UAAAA,CAJW;AAKXR,UAAAA,KALW;AAMXC,UAAAA,MANW;AAOXQ,UAAAA,IAPW;AAQXC,UAAAA,QARW;AASXlB,UAAAA,aAAa,EAAEY;AATJ,SAAb;;AAWA,YAAIQ,KAAK,CAACC,OAAN,CAAcP,SAAd,CAAJ,EAA8B;AAC5BK,UAAAA,IAAI,CAACG,IAAL,GAAYxB,YAAY,CAACyB,SAAzB;AACA,gBAAMC,QAAQ,GAAG3B,WAAW,CAACsB,IAAD,CAA5B;;AACA,eAAK,MAAMM,OAAX,IAAsBD,QAAtB,EAAgC;AAC9BjB,YAAAA,eAAe,CAACI,YAAY,EAAb,CAAf,GAAkC;AAChCe,cAAAA,QAAQ,EAAED,OADsB;AAEhCZ,cAAAA;AAFgC,aAAlC;AAID;AACF,SATD,MASO;AAELM,UAAAA,IAAI,CAACG,IAAL,GAAYxB,YAAY,CAAC6B,SAAzB;AACA,gBAAMD,QAAQ,GAAG7B,WAAW,CAACsB,IAAD,CAA5B;;AACA,eAAK,IAAIS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,QAAQ,CAACG,MAA7B,EAAqCD,CAAC,IAAI,CAA1C,EAA6C;AAC3CtB,YAAAA,eAAe,CAACI,YAAY,EAAb,CAAf,GAAkC;AAChCoB,cAAAA,KAAK,EAAEJ,QAAQ,CAACE,CAAD,CADiB;AAEhCG,cAAAA,GAAG,EAAEL,QAAQ,CAACE,CAAC,GAAG,CAAL,CAFmB;AAGhCf,cAAAA;AAHgC,aAAlC;AAKD;AACF;AACF;AACF;AACF;;AACD,SAAO;AAACP,IAAAA,eAAD;AAAkBC,IAAAA;AAAlB,GAAP;AACD","sourcesContent":["import {getCode, getVertices, CONTOUR_TYPE} from './marching-squares';\n\n// Given all the cell weights, generates contours for each threshold.\n/* eslint-disable max-depth */\nexport function generateContours({\n thresholdData,\n colors,\n cellWeights,\n gridSize,\n gridOrigin,\n cellSize\n}) {\n const contourSegments = [];\n const contourPolygons = [];\n const width = gridSize[0];\n const height = gridSize[1];\n let segmentIndex = 0;\n let polygonIndex = 0;\n\n for (const data of thresholdData) {\n const {contour} = data;\n const {threshold} = contour;\n for (let x = -1; x < width; x++) {\n for (let y = -1; y < height; y++) {\n // Get the MarchingSquares code based on neighbor cell weights.\n const {code, meanCode} = getCode({\n cellWeights,\n threshold,\n x,\n y,\n width,\n height\n });\n const opts = {\n gridOrigin,\n cellSize,\n x,\n y,\n width,\n height,\n code,\n meanCode,\n thresholdData: data\n };\n if (Array.isArray(threshold)) {\n opts.type = CONTOUR_TYPE.ISO_BANDS;\n const polygons = getVertices(opts);\n for (const polygon of polygons) {\n contourPolygons[polygonIndex++] = {\n vertices: polygon,\n contour\n };\n }\n } else {\n // Get the intersection vertices based on MarchingSquares code.\n opts.type = CONTOUR_TYPE.ISO_LINES;\n const vertices = getVertices(opts);\n for (let i = 0; i < vertices.length; i += 2) {\n contourSegments[segmentIndex++] = {\n start: vertices[i],\n end: vertices[i + 1],\n contour\n };\n }\n }\n }\n }\n }\n return {contourSegments, contourPolygons};\n}\n/* eslint-enable max-depth */\n"],"file":"contour-utils.js"}
@@ -117,9 +117,10 @@ export default class CPUGridLayer extends AggregationLayer {
117
117
  });
118
118
  }
119
119
 
120
- getPickingInfo({
121
- info
122
- }) {
120
+ getPickingInfo(_ref) {
121
+ let {
122
+ info
123
+ } = _ref;
123
124
  return this.state.cpuAggregator.getPickingInfo({
124
125
  info
125
126
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cpu-grid-layer/cpu-grid-layer.js"],"names":["GridCellLayer","defaultColorRange","pointToDensityGridDataCPU","CPUAggregator","AggregationLayer","nop","defaultProps","colorDomain","colorRange","getColorValue","type","value","getColorWeight","colorAggregation","lowerPercentile","min","max","upperPercentile","colorScaleType","onSetColorDomain","elevationDomain","elevationRange","getElevationValue","getElevationWeight","elevationAggregation","elevationLowerPercentile","elevationUpperPercentile","elevationScale","elevationScaleType","onSetElevationDomain","gridAggregator","cellSize","coverage","getPosition","x","position","extruded","material","_filterData","optional","CPUGridLayer","initializeState","cpuAggregator","getAggregator","props","getCellSize","state","aggregatorState","attributeManager","getAttributeManager","add","positions","size","accessor","updateState","opts","setState","viewport","context","attributes","getAttributes","numInstances","getNumInstances","getPickingInfo","info","_onGetSublayerColor","cell","getAccessor","_onGetSublayerElevation","_getSublayerUpdateTriggers","getUpdateTriggers","renderLayers","transitions","SubLayerClass","getSubLayerClass","updateTriggers","getFillColor","bind","getElevation","getSubLayerProps","id","data","layerData","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 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 {GridCellLayer} from '@deck.gl/layers';\n\nimport {defaultColorRange} from '../utils/color-utils';\nimport {pointToDensityGridDataCPU} from './grid-aggregator';\nimport CPUAggregator from '../utils/cpu-aggregator';\nimport AggregationLayer from '../aggregation-layer';\n\nfunction nop() {}\n\nconst defaultProps = {\n // color\n colorDomain: null,\n colorRange: defaultColorRange,\n getColorValue: {type: 'accessor', value: null}, // default value is calculated from `getColorWeight` and `colorAggregation`\n getColorWeight: {type: 'accessor', value: 1},\n colorAggregation: 'SUM',\n lowerPercentile: {type: 'number', min: 0, max: 100, value: 0},\n upperPercentile: {type: 'number', min: 0, max: 100, value: 100},\n colorScaleType: 'quantize',\n onSetColorDomain: nop,\n\n // elevation\n elevationDomain: null,\n elevationRange: [0, 1000],\n getElevationValue: {type: 'accessor', value: null}, // default value is calculated from `getElevationWeight` and `elevationAggregation`\n getElevationWeight: {type: 'accessor', value: 1},\n elevationAggregation: 'SUM',\n elevationLowerPercentile: {type: 'number', min: 0, max: 100, value: 0},\n elevationUpperPercentile: {type: 'number', min: 0, max: 100, value: 100},\n elevationScale: {type: 'number', min: 0, value: 1},\n elevationScaleType: 'linear',\n onSetElevationDomain: nop,\n\n gridAggregator: pointToDensityGridDataCPU,\n\n // grid\n cellSize: {type: 'number', min: 0, max: 1000, value: 1000},\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n getPosition: {type: 'accessor', value: x => x.position},\n extruded: false,\n\n // Optional material for 'lighting' shader module\n material: true,\n\n // data filter\n _filterData: {type: 'function', value: null, optional: true}\n};\n\nexport default class CPUGridLayer extends AggregationLayer {\n initializeState() {\n const cpuAggregator = new CPUAggregator({\n getAggregator: props => props.gridAggregator,\n getCellSize: props => props.cellSize\n });\n\n this.state = {\n cpuAggregator,\n aggregatorState: cpuAggregator.state\n };\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n positions: {size: 3, accessor: 'getPosition'}\n });\n // color and elevation attributes can't be added as attributes\n // they are calcualted using 'getValue' accessor that takes an array of pints.\n }\n\n updateState(opts) {\n super.updateState(opts);\n this.setState({\n // make a copy of the internal state of cpuAggregator for testing\n aggregatorState: this.state.cpuAggregator.updateState(opts, {\n viewport: this.context.viewport,\n attributes: this.getAttributes(),\n numInstances: this.getNumInstances(opts.props)\n })\n });\n }\n\n getPickingInfo({info}) {\n return this.state.cpuAggregator.getPickingInfo({info});\n }\n\n // create a method for testing\n _onGetSublayerColor(cell) {\n return this.state.cpuAggregator.getAccessor('fillColor')(cell);\n }\n\n // create a method for testing\n _onGetSublayerElevation(cell) {\n return this.state.cpuAggregator.getAccessor('elevation')(cell);\n }\n\n _getSublayerUpdateTriggers() {\n return this.state.cpuAggregator.getUpdateTriggers(this.props);\n }\n\n renderLayers() {\n const {elevationScale, extruded, cellSize, coverage, material, transitions} = this.props;\n const {cpuAggregator} = this.state;\n const SubLayerClass = this.getSubLayerClass('grid-cell', GridCellLayer);\n const updateTriggers = this._getSublayerUpdateTriggers();\n\n return new SubLayerClass(\n {\n cellSize,\n coverage,\n material,\n elevationScale,\n extruded,\n\n getFillColor: this._onGetSublayerColor.bind(this),\n getElevation: this._onGetSublayerElevation.bind(this),\n transitions: transitions && {\n getFillColor: transitions.getColorValue || transitions.getColorWeight,\n getElevation: transitions.getElevationValue || transitions.getElevationWeight\n }\n },\n this.getSubLayerProps({\n id: 'grid-cell',\n updateTriggers\n }),\n {\n data: cpuAggregator.state.layerData.data\n }\n );\n }\n}\n\nCPUGridLayer.layerName = 'CPUGridLayer';\nCPUGridLayer.defaultProps = defaultProps;\n"],"file":"cpu-grid-layer.js"}
1
+ {"version":3,"sources":["../../../src/cpu-grid-layer/cpu-grid-layer.js"],"names":["GridCellLayer","defaultColorRange","pointToDensityGridDataCPU","CPUAggregator","AggregationLayer","nop","defaultProps","colorDomain","colorRange","getColorValue","type","value","getColorWeight","colorAggregation","lowerPercentile","min","max","upperPercentile","colorScaleType","onSetColorDomain","elevationDomain","elevationRange","getElevationValue","getElevationWeight","elevationAggregation","elevationLowerPercentile","elevationUpperPercentile","elevationScale","elevationScaleType","onSetElevationDomain","gridAggregator","cellSize","coverage","getPosition","x","position","extruded","material","_filterData","optional","CPUGridLayer","initializeState","cpuAggregator","getAggregator","props","getCellSize","state","aggregatorState","attributeManager","getAttributeManager","add","positions","size","accessor","updateState","opts","setState","viewport","context","attributes","getAttributes","numInstances","getNumInstances","getPickingInfo","info","_onGetSublayerColor","cell","getAccessor","_onGetSublayerElevation","_getSublayerUpdateTriggers","getUpdateTriggers","renderLayers","transitions","SubLayerClass","getSubLayerClass","updateTriggers","getFillColor","bind","getElevation","getSubLayerProps","id","data","layerData","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 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 {GridCellLayer} from '@deck.gl/layers';\n\nimport {defaultColorRange} from '../utils/color-utils';\nimport {pointToDensityGridDataCPU} from './grid-aggregator';\nimport CPUAggregator from '../utils/cpu-aggregator';\nimport AggregationLayer from '../aggregation-layer';\n\nfunction nop() {}\n\nconst defaultProps = {\n // color\n colorDomain: null,\n colorRange: defaultColorRange,\n getColorValue: {type: 'accessor', value: null}, // default value is calculated from `getColorWeight` and `colorAggregation`\n getColorWeight: {type: 'accessor', value: 1},\n colorAggregation: 'SUM',\n lowerPercentile: {type: 'number', min: 0, max: 100, value: 0},\n upperPercentile: {type: 'number', min: 0, max: 100, value: 100},\n colorScaleType: 'quantize',\n onSetColorDomain: nop,\n\n // elevation\n elevationDomain: null,\n elevationRange: [0, 1000],\n getElevationValue: {type: 'accessor', value: null}, // default value is calculated from `getElevationWeight` and `elevationAggregation`\n getElevationWeight: {type: 'accessor', value: 1},\n elevationAggregation: 'SUM',\n elevationLowerPercentile: {type: 'number', min: 0, max: 100, value: 0},\n elevationUpperPercentile: {type: 'number', min: 0, max: 100, value: 100},\n elevationScale: {type: 'number', min: 0, value: 1},\n elevationScaleType: 'linear',\n onSetElevationDomain: nop,\n\n gridAggregator: pointToDensityGridDataCPU,\n\n // grid\n cellSize: {type: 'number', min: 0, max: 1000, value: 1000},\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n getPosition: {type: 'accessor', value: x => x.position},\n extruded: false,\n\n // Optional material for 'lighting' shader module\n material: true,\n\n // data filter\n _filterData: {type: 'function', value: null, optional: true}\n};\n\nexport default class CPUGridLayer extends AggregationLayer {\n initializeState() {\n const cpuAggregator = new CPUAggregator({\n getAggregator: props => props.gridAggregator,\n getCellSize: props => props.cellSize\n });\n\n this.state = {\n cpuAggregator,\n aggregatorState: cpuAggregator.state\n };\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n positions: {size: 3, accessor: 'getPosition'}\n });\n // color and elevation attributes can't be added as attributes\n // they are calcualted using 'getValue' accessor that takes an array of pints.\n }\n\n updateState(opts) {\n super.updateState(opts);\n this.setState({\n // make a copy of the internal state of cpuAggregator for testing\n aggregatorState: this.state.cpuAggregator.updateState(opts, {\n viewport: this.context.viewport,\n attributes: this.getAttributes(),\n numInstances: this.getNumInstances(opts.props)\n })\n });\n }\n\n getPickingInfo({info}) {\n return this.state.cpuAggregator.getPickingInfo({info});\n }\n\n // create a method for testing\n _onGetSublayerColor(cell) {\n return this.state.cpuAggregator.getAccessor('fillColor')(cell);\n }\n\n // create a method for testing\n _onGetSublayerElevation(cell) {\n return this.state.cpuAggregator.getAccessor('elevation')(cell);\n }\n\n _getSublayerUpdateTriggers() {\n return this.state.cpuAggregator.getUpdateTriggers(this.props);\n }\n\n renderLayers() {\n const {elevationScale, extruded, cellSize, coverage, material, transitions} = this.props;\n const {cpuAggregator} = this.state;\n const SubLayerClass = this.getSubLayerClass('grid-cell', GridCellLayer);\n const updateTriggers = this._getSublayerUpdateTriggers();\n\n return new SubLayerClass(\n {\n cellSize,\n coverage,\n material,\n elevationScale,\n extruded,\n\n getFillColor: this._onGetSublayerColor.bind(this),\n getElevation: this._onGetSublayerElevation.bind(this),\n transitions: transitions && {\n getFillColor: transitions.getColorValue || transitions.getColorWeight,\n getElevation: transitions.getElevationValue || transitions.getElevationWeight\n }\n },\n this.getSubLayerProps({\n id: 'grid-cell',\n updateTriggers\n }),\n {\n data: cpuAggregator.state.layerData.data\n }\n );\n }\n}\n\nCPUGridLayer.layerName = 'CPUGridLayer';\nCPUGridLayer.defaultProps = defaultProps;\n"],"file":"cpu-grid-layer.js"}
@@ -84,11 +84,12 @@ function pointsToGridHashing(props, aggregationParams) {
84
84
  };
85
85
  }
86
86
 
87
- function getGridLayerDataFromGridHash({
88
- gridHash,
89
- gridOffset,
90
- offsets
91
- }) {
87
+ function getGridLayerDataFromGridHash(_ref) {
88
+ let {
89
+ gridHash,
90
+ gridOffset,
91
+ offsets
92
+ } = _ref;
92
93
  const data = new Array(Object.keys(gridHash).length);
93
94
  let i = 0;
94
95
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cpu-grid-layer/grid-aggregator.js"],"names":["createIterable","getGridOffset","pointToDensityGridDataCPU","props","aggregationParams","hashInfo","pointsToGridHashing","result","getGridLayerDataFromGridHash","gridHash","gridOffset","data","cellSize","attributes","viewport","projectPoints","numInstances","positions","value","size","getAccessor","boundingBox","getPositionBoundingBox","offsets","posOffset","xOffset","yOffset","width","height","numCol","Math","ceil","numRow","iterable","objectInfo","position","Array","pt","index","x","y","project","Number","isFinite","yIndex","floor","xIndex","key","count","points","lonIdx","latIdx","push","source","Object","keys","length","i","idxs","split","parseInt","positionAttribute","numInstance","yMin","Infinity","yMax","xMin","xMax"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 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 {createIterable} from '@deck.gl/core';\nimport {getGridOffset} from '../utils/grid-aggregation-utils';\n\n/**\n * Calculate density grid from an array of points\n * @param {Object} props - object containing :\n * @param {Iterable} [props.data] - data objects to be aggregated\n * @param {Integer} [props.cellSize] - size of the grid cell\n *\n * @param {Object} aggregationParams - object containing :\n * @param {Object} gridOffset - {xOffset, yOffset} cell size in meters\n * @param {Integer} width - width of the grid\n * @param {Integer} height - height of the grid\n * @param {Boolean} projectPoints - `true` if doing screen space projection, `false` otherwise\n * @param {Array} attributes - attributes array containing position values\n * @param {Viewport} viewport - viewport to be used for projection\n * @param {Array} posOffset - [xOffset, yOffset] offset to be applied to positions to get cell index\n * @param {Object} boundingBox - {xMin, yMin, xMax, yMax} bounding box of input data\n *\n * @returns {object} - grid data, cell dimension\n */\nexport function pointToDensityGridDataCPU(props, aggregationParams) {\n const hashInfo = pointsToGridHashing(props, aggregationParams);\n const result = getGridLayerDataFromGridHash(hashInfo);\n\n return {\n gridHash: hashInfo.gridHash,\n gridOffset: hashInfo.gridOffset,\n data: result\n };\n}\n\n/**\n * Project points into each cell, return a hash table of cells\n * @param {Iterable} points\n * @param {number} cellSize - unit size in meters\n * @param {function} getPosition - position accessor\n * @returns {object} - grid hash and cell dimension\n */\n/* eslint-disable max-statements, complexity */\nfunction pointsToGridHashing(props, aggregationParams) {\n const {data = [], cellSize} = props;\n const {attributes, viewport, projectPoints, numInstances} = aggregationParams;\n const positions = attributes.positions.value;\n const {size} = attributes.positions.getAccessor();\n const boundingBox =\n aggregationParams.boundingBox || getPositionBoundingBox(attributes.positions, numInstances);\n const offsets = aggregationParams.posOffset || [180, 90];\n const gridOffset = aggregationParams.gridOffset || getGridOffset(boundingBox, cellSize);\n\n if (gridOffset.xOffset <= 0 || gridOffset.yOffset <= 0) {\n return {gridHash: {}, gridOffset};\n }\n\n const {width, height} = viewport;\n const numCol = Math.ceil(width / gridOffset.xOffset);\n const numRow = Math.ceil(height / gridOffset.yOffset);\n\n // calculate count per cell\n const gridHash = {};\n\n const {iterable, objectInfo} = createIterable(data);\n const position = new Array(3);\n for (const pt of iterable) {\n objectInfo.index++;\n position[0] = positions[objectInfo.index * size];\n position[1] = positions[objectInfo.index * size + 1];\n position[2] = size >= 3 ? positions[objectInfo.index * size + 2] : 0;\n const [x, y] = projectPoints ? viewport.project(position) : position;\n if (Number.isFinite(x) && Number.isFinite(y)) {\n const yIndex = Math.floor((y + offsets[1]) / gridOffset.yOffset);\n const xIndex = Math.floor((x + offsets[0]) / gridOffset.xOffset);\n if (\n !projectPoints ||\n // when doing screen space agggregation (projectPoints = true), filter points outside of the viewport range.\n (xIndex >= 0 && xIndex < numCol && yIndex >= 0 && yIndex < numRow)\n ) {\n const key = `${yIndex}-${xIndex}`;\n\n gridHash[key] = gridHash[key] || {count: 0, points: [], lonIdx: xIndex, latIdx: yIndex};\n gridHash[key].count += 1;\n gridHash[key].points.push({\n source: pt,\n index: objectInfo.index\n });\n }\n }\n }\n\n return {gridHash, gridOffset, offsets: [offsets[0] * -1, offsets[1] * -1]};\n}\n/* eslint-enable max-statements, complexity */\n\nfunction getGridLayerDataFromGridHash({gridHash, gridOffset, offsets}) {\n const data = new Array(Object.keys(gridHash).length);\n let i = 0;\n for (const key in gridHash) {\n const idxs = key.split('-');\n const latIdx = parseInt(idxs[0], 10);\n const lonIdx = parseInt(idxs[1], 10);\n const index = i++;\n\n data[index] = {\n index,\n position: [\n offsets[0] + gridOffset.xOffset * lonIdx,\n offsets[1] + gridOffset.yOffset * latIdx\n ],\n ...gridHash[key]\n };\n }\n return data;\n}\n\n// Calculate bounding box of position attribute\nfunction getPositionBoundingBox(positionAttribute, numInstance) {\n // TODO - value might not exist (e.g. attribute transition)\n const positions = positionAttribute.value;\n const {size} = positionAttribute.getAccessor();\n\n let yMin = Infinity;\n let yMax = -Infinity;\n let xMin = Infinity;\n let xMax = -Infinity;\n let y;\n let x;\n\n for (let i = 0; i < numInstance; i++) {\n x = positions[i * size];\n y = positions[i * size + 1];\n if (Number.isFinite(x) && Number.isFinite(y)) {\n yMin = y < yMin ? y : yMin;\n yMax = y > yMax ? y : yMax;\n xMin = x < xMin ? x : xMin;\n xMax = x > xMax ? x : xMax;\n }\n }\n\n return {xMin, xMax, yMin, yMax};\n}\n"],"file":"grid-aggregator.js"}
1
+ {"version":3,"sources":["../../../src/cpu-grid-layer/grid-aggregator.js"],"names":["createIterable","getGridOffset","pointToDensityGridDataCPU","props","aggregationParams","hashInfo","pointsToGridHashing","result","getGridLayerDataFromGridHash","gridHash","gridOffset","data","cellSize","attributes","viewport","projectPoints","numInstances","positions","value","size","getAccessor","boundingBox","getPositionBoundingBox","offsets","posOffset","xOffset","yOffset","width","height","numCol","Math","ceil","numRow","iterable","objectInfo","position","Array","pt","index","x","y","project","Number","isFinite","yIndex","floor","xIndex","key","count","points","lonIdx","latIdx","push","source","Object","keys","length","i","idxs","split","parseInt","positionAttribute","numInstance","yMin","Infinity","yMax","xMin","xMax"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 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 {createIterable} from '@deck.gl/core';\nimport {getGridOffset} from '../utils/grid-aggregation-utils';\n\n/**\n * Calculate density grid from an array of points\n * @param {Object} props - object containing :\n * @param {Iterable} [props.data] - data objects to be aggregated\n * @param {Integer} [props.cellSize] - size of the grid cell\n *\n * @param {Object} aggregationParams - object containing :\n * @param {Object} gridOffset - {xOffset, yOffset} cell size in meters\n * @param {Integer} width - width of the grid\n * @param {Integer} height - height of the grid\n * @param {Boolean} projectPoints - `true` if doing screen space projection, `false` otherwise\n * @param {Array} attributes - attributes array containing position values\n * @param {Viewport} viewport - viewport to be used for projection\n * @param {Array} posOffset - [xOffset, yOffset] offset to be applied to positions to get cell index\n * @param {Object} boundingBox - {xMin, yMin, xMax, yMax} bounding box of input data\n *\n * @returns {object} - grid data, cell dimension\n */\nexport function pointToDensityGridDataCPU(props, aggregationParams) {\n const hashInfo = pointsToGridHashing(props, aggregationParams);\n const result = getGridLayerDataFromGridHash(hashInfo);\n\n return {\n gridHash: hashInfo.gridHash,\n gridOffset: hashInfo.gridOffset,\n data: result\n };\n}\n\n/**\n * Project points into each cell, return a hash table of cells\n * @param {Iterable} points\n * @param {number} cellSize - unit size in meters\n * @param {function} getPosition - position accessor\n * @returns {object} - grid hash and cell dimension\n */\n/* eslint-disable max-statements, complexity */\nfunction pointsToGridHashing(props, aggregationParams) {\n const {data = [], cellSize} = props;\n const {attributes, viewport, projectPoints, numInstances} = aggregationParams;\n const positions = attributes.positions.value;\n const {size} = attributes.positions.getAccessor();\n const boundingBox =\n aggregationParams.boundingBox || getPositionBoundingBox(attributes.positions, numInstances);\n const offsets = aggregationParams.posOffset || [180, 90];\n const gridOffset = aggregationParams.gridOffset || getGridOffset(boundingBox, cellSize);\n\n if (gridOffset.xOffset <= 0 || gridOffset.yOffset <= 0) {\n return {gridHash: {}, gridOffset};\n }\n\n const {width, height} = viewport;\n const numCol = Math.ceil(width / gridOffset.xOffset);\n const numRow = Math.ceil(height / gridOffset.yOffset);\n\n // calculate count per cell\n const gridHash = {};\n\n const {iterable, objectInfo} = createIterable(data);\n const position = new Array(3);\n for (const pt of iterable) {\n objectInfo.index++;\n position[0] = positions[objectInfo.index * size];\n position[1] = positions[objectInfo.index * size + 1];\n position[2] = size >= 3 ? positions[objectInfo.index * size + 2] : 0;\n const [x, y] = projectPoints ? viewport.project(position) : position;\n if (Number.isFinite(x) && Number.isFinite(y)) {\n const yIndex = Math.floor((y + offsets[1]) / gridOffset.yOffset);\n const xIndex = Math.floor((x + offsets[0]) / gridOffset.xOffset);\n if (\n !projectPoints ||\n // when doing screen space agggregation (projectPoints = true), filter points outside of the viewport range.\n (xIndex >= 0 && xIndex < numCol && yIndex >= 0 && yIndex < numRow)\n ) {\n const key = `${yIndex}-${xIndex}`;\n\n gridHash[key] = gridHash[key] || {count: 0, points: [], lonIdx: xIndex, latIdx: yIndex};\n gridHash[key].count += 1;\n gridHash[key].points.push({\n source: pt,\n index: objectInfo.index\n });\n }\n }\n }\n\n return {gridHash, gridOffset, offsets: [offsets[0] * -1, offsets[1] * -1]};\n}\n/* eslint-enable max-statements, complexity */\n\nfunction getGridLayerDataFromGridHash({gridHash, gridOffset, offsets}) {\n const data = new Array(Object.keys(gridHash).length);\n let i = 0;\n for (const key in gridHash) {\n const idxs = key.split('-');\n const latIdx = parseInt(idxs[0], 10);\n const lonIdx = parseInt(idxs[1], 10);\n const index = i++;\n\n data[index] = {\n index,\n position: [\n offsets[0] + gridOffset.xOffset * lonIdx,\n offsets[1] + gridOffset.yOffset * latIdx\n ],\n ...gridHash[key]\n };\n }\n return data;\n}\n\n// Calculate bounding box of position attribute\nfunction getPositionBoundingBox(positionAttribute, numInstance) {\n // TODO - value might not exist (e.g. attribute transition)\n const positions = positionAttribute.value;\n const {size} = positionAttribute.getAccessor();\n\n let yMin = Infinity;\n let yMax = -Infinity;\n let xMin = Infinity;\n let xMax = -Infinity;\n let y;\n let x;\n\n for (let i = 0; i < numInstance; i++) {\n x = positions[i * size];\n y = positions[i * size + 1];\n if (Number.isFinite(x) && Number.isFinite(y)) {\n yMin = y < yMin ? y : yMin;\n yMax = y > yMax ? y : yMax;\n xMin = x < xMin ? x : xMin;\n xMax = x > xMax ? x : xMax;\n }\n }\n\n return {xMin, xMax, yMin, yMax};\n}\n"],"file":"grid-aggregator.js"}
@@ -93,9 +93,10 @@ export default class GPUGridCellLayer extends Layer {
93
93
  });
94
94
  }
95
95
 
96
- draw({
97
- uniforms
98
- }) {
96
+ draw(_ref) {
97
+ let {
98
+ uniforms
99
+ } = _ref;
99
100
  const {
100
101
  cellSize,
101
102
  offset,