@deck.gl/aggregation-layers 8.6.3 → 8.7.0-alpha.1

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 (59) hide show
  1. package/dist/dist.dev.js +243 -243
  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 +106 -181
  9. package/dist/es5/contour-layer/marching-squares-codes.js.map +1 -1
  10. package/dist/es5/contour-layer/marching-squares.js +59 -56
  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 +59 -24
  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 +77 -59
  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 +12 -12
  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 +31 -16
  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 +18 -20
  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 +545 -545
  50. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
  51. package/dist/es5/utils/grid-aggregation-utils.js +44 -50
  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 +39 -32
  56. package/dist/es5/utils/resource-utils.js.map +1 -1
  57. package/dist/es5/utils/scale-utils.js +66 -36
  58. package/dist/es5/utils/scale-utils.js.map +1 -1
  59. package/package.json +2 -2
@@ -20,41 +20,59 @@ exports.getScaleFunctionByScaleType = getScaleFunctionByScaleType;
20
20
 
21
21
  var _core = require("@deck.gl/core");
22
22
 
23
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@deck.gl/aggregation-layers",
3
3
  "description": "deck.gl layers that aggregate the input data into alternative representations",
4
4
  "license": "MIT",
5
- "version": "8.6.3",
5
+ "version": "8.7.0-alpha.1",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -37,5 +37,5 @@
37
37
  "@deck.gl/core": "^8.0.0",
38
38
  "@deck.gl/layers": "^8.0.0"
39
39
  },
40
- "gitHead": "938ee03697eecbaced24c9df637d53ab42375df1"
40
+ "gitHead": "dbaa3941a41f3ddceecad4d2d2879515d97d2510"
41
41
  }