@deck.gl/aggregation-layers 8.7.0-alpha.2 → 8.7.0-alpha.9

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 (70) hide show
  1. package/dist/dist.dev.js +2512 -1759
  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-vertex.glsl.js +1 -1
  17. package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer.js +167 -131
  18. package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer.js.map +1 -1
  19. package/dist/es5/gpu-grid-layer/gpu-grid-layer.js +322 -319
  20. package/dist/es5/gpu-grid-layer/gpu-grid-layer.js.map +1 -1
  21. package/dist/es5/grid-aggregation-layer.js +230 -202
  22. package/dist/es5/grid-aggregation-layer.js.map +1 -1
  23. package/dist/es5/grid-layer/grid-layer.js +91 -61
  24. package/dist/es5/grid-layer/grid-layer.js.map +1 -1
  25. package/dist/es5/heatmap-layer/heatmap-layer-utils.js +59 -24
  26. package/dist/es5/heatmap-layer/heatmap-layer-utils.js.map +1 -1
  27. package/dist/es5/heatmap-layer/heatmap-layer.js +536 -515
  28. package/dist/es5/heatmap-layer/heatmap-layer.js.map +1 -1
  29. package/dist/es5/heatmap-layer/triangle-layer.js +91 -64
  30. package/dist/es5/heatmap-layer/triangle-layer.js.map +1 -1
  31. package/dist/es5/hexagon-layer/hexagon-aggregator.js +77 -59
  32. package/dist/es5/hexagon-layer/hexagon-aggregator.js.map +1 -1
  33. package/dist/es5/hexagon-layer/hexagon-layer.js +164 -121
  34. package/dist/es5/hexagon-layer/hexagon-layer.js.map +1 -1
  35. package/dist/es5/index.js +12 -12
  36. package/dist/es5/index.js.map +1 -1
  37. package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js +193 -168
  38. package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
  39. package/dist/es5/screen-grid-layer/screen-grid-layer.js +250 -235
  40. package/dist/es5/screen-grid-layer/screen-grid-layer.js.map +1 -1
  41. package/dist/es5/utils/aggregation-operation-utils.js +31 -16
  42. package/dist/es5/utils/aggregation-operation-utils.js.map +1 -1
  43. package/dist/es5/utils/bin-sorter.js +198 -118
  44. package/dist/es5/utils/bin-sorter.js.map +1 -1
  45. package/dist/es5/utils/color-utils.js +10 -8
  46. package/dist/es5/utils/color-utils.js.map +1 -1
  47. package/dist/es5/utils/cpu-aggregator.js +342 -323
  48. package/dist/es5/utils/cpu-aggregator.js.map +1 -1
  49. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js +18 -20
  50. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js.map +1 -1
  51. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +547 -549
  52. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
  53. package/dist/es5/utils/grid-aggregation-utils.js +44 -50
  54. package/dist/es5/utils/grid-aggregation-utils.js.map +1 -1
  55. package/dist/es5/utils/prop-utils.js +2 -2
  56. package/dist/es5/utils/prop-utils.js.map +1 -1
  57. package/dist/es5/utils/resource-utils.js +39 -32
  58. package/dist/es5/utils/resource-utils.js.map +1 -1
  59. package/dist/es5/utils/scale-utils.js +66 -36
  60. package/dist/es5/utils/scale-utils.js.map +1 -1
  61. package/dist/esm/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.js +1 -1
  62. package/dist/esm/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.js.map +1 -1
  63. package/dist/esm/heatmap-layer/heatmap-layer.js +4 -1
  64. package/dist/esm/heatmap-layer/heatmap-layer.js.map +1 -1
  65. package/dist/esm/index.js.map +1 -1
  66. package/dist.min.js +1 -1
  67. package/package.json +3 -3
  68. package/src/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.js +2 -3
  69. package/src/heatmap-layer/heatmap-layer.js +3 -1
  70. /package/src/{index.js → index.ts} +0 -0
@@ -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 = 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"}
@@ -1,2 +1,2 @@
1
- export default "#version 300 es\n#define SHADER_NAME gpu-grid-cell-layer-vertex-shader\n#define RANGE_COUNT 6\n\nin vec3 positions;\nin vec3 normals;\n\nin vec4 colors;\nin vec4 elevations;\nin vec3 instancePickingColors;\nuniform vec2 offset;\nuniform bool extruded;\nuniform float cellSize;\nuniform float coverage;\nuniform float opacity;\nuniform float elevationScale;\n\nuniform ivec2 gridSize;\nuniform vec2 gridOrigin;\nuniform vec2 gridOriginLow;\nuniform vec2 gridOffset;\nuniform vec2 gridOffsetLow;\nuniform vec4 colorRange[RANGE_COUNT];\nuniform vec2 elevationRange;\nuniform vec2 colorDomain;\nuniform bool colorDomainValid;\nuniform vec2 elevationDomain;\nuniform bool elevationDomainValid;\n\nlayout(std140) uniform;\nuniform ColorData\n{\n vec4 maxMinCount;\n} colorData;\nuniform ElevationData\n{\n vec4 maxMinCount;\n} elevationData;\n\n#define EPSILON 0.00001\nout vec4 vColor;\n\nvec4 quantizeScale(vec2 domain, vec4 range[RANGE_COUNT], float value) {\n vec4 outColor = vec4(0., 0., 0., 0.);\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n float domainRange = domain.y - domain.x;\n if (domainRange <= 0.) {\n outColor = colorRange[0];\n } else {\n float rangeCount = float(RANGE_COUNT);\n float rangeStep = domainRange / rangeCount;\n float idx = floor((value - domain.x) / rangeStep);\n idx = clamp(idx, 0., rangeCount - 1.);\n int intIdx = int(idx);\n outColor = colorRange[intIdx];\n }\n }\n return outColor;\n}\n\nfloat linearScale(vec2 domain, vec2 range, float value) {\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n return ((value - domain.x) / (domain.y - domain.x)) * (range.y - range.x) + range.x;\n }\n return -1.;\n}\n\nvoid main(void) {\n vec2 clrDomain = colorDomainValid ? colorDomain : vec2(colorData.maxMinCount.a, colorData.maxMinCount.r);\n vec4 color = quantizeScale(clrDomain, colorRange, colors.r);\n\n float elevation = 0.0;\n\n if (extruded) {\n vec2 elvDomain = elevationDomainValid ? elevationDomain : vec2(elevationData.maxMinCount.a, elevationData.maxMinCount.r);\n elevation = linearScale(elvDomain, elevationRange, elevations.r);\n elevation = elevation * (positions.z + 1.0) / 2.0 * elevationScale;\n }\n float shouldRender = float(color.r > 0.0 && elevations.r >= 0.0);\n float dotRadius = cellSize / 2. * coverage * shouldRender;\n\n int yIndex = (gl_InstanceID / gridSize[0]);\n int xIndex = gl_InstanceID - (yIndex * gridSize[0]);\n\n vec2 instancePositionXFP64 = mul_fp64(vec2(gridOffset[0], gridOffsetLow[0]), vec2(float(xIndex), 0.));\n instancePositionXFP64 = sum_fp64(instancePositionXFP64, vec2(gridOrigin[0], gridOriginLow[0]));\n vec2 instancePositionYFP64 = mul_fp64(vec2(gridOffset[1], gridOffsetLow[1]), vec2(float(yIndex), 0.));\n instancePositionYFP64 = sum_fp64(instancePositionYFP64, vec2(gridOrigin[1], gridOriginLow[1]));\n\n vec3 centroidPosition = vec3(instancePositionXFP64[0], instancePositionYFP64[0], elevation);\n vec3 centroidPosition64Low = vec3(instancePositionXFP64[1], instancePositionYFP64[1], 0.0);\n geometry.worldPosition = centroidPosition;\n vec3 pos = vec3(project_size(positions.xy + offset) * dotRadius, 0.);\n picking_setPickingColor(instancePickingColors);\n\n vec4 position_commonspace;\n gl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, position_commonspace);\n\n vec3 normals_commonspace = project_normal(normals);\n\n if (extruded) {\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, position_commonspace.xyz, normals_commonspace);\n vColor = vec4(lightColor, color.a * opacity) / 255.;\n } else {\n vColor = vec4(color.rgb, color.a * opacity) / 255.;\n }\n}\n";
1
+ export default "#version 300 es\n#define SHADER_NAME gpu-grid-cell-layer-vertex-shader\n#define RANGE_COUNT 6\n\nin vec3 positions;\nin vec3 normals;\n\nin vec4 colors;\nin vec4 elevations;\nin vec3 instancePickingColors;\nuniform vec2 offset;\nuniform bool extruded;\nuniform float cellSize;\nuniform float coverage;\nuniform float opacity;\nuniform float elevationScale;\n\nuniform ivec2 gridSize;\nuniform vec2 gridOrigin;\nuniform vec2 gridOriginLow;\nuniform vec2 gridOffset;\nuniform vec2 gridOffsetLow;\nuniform vec4 colorRange[RANGE_COUNT];\nuniform vec2 elevationRange;\nuniform vec2 colorDomain;\nuniform bool colorDomainValid;\nuniform vec2 elevationDomain;\nuniform bool elevationDomainValid;\n\nlayout(std140) uniform;\nuniform ColorData\n{\n vec4 maxMinCount;\n} colorData;\nuniform ElevationData\n{\n vec4 maxMinCount;\n} elevationData;\n\n#define EPSILON 0.00001\nout vec4 vColor;\n\nvec4 quantizeScale(vec2 domain, vec4 range[RANGE_COUNT], float value) {\n vec4 outColor = vec4(0., 0., 0., 0.);\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n float domainRange = domain.y - domain.x;\n if (domainRange <= 0.) {\n outColor = colorRange[0];\n } else {\n float rangeCount = float(RANGE_COUNT);\n float rangeStep = domainRange / rangeCount;\n float idx = floor((value - domain.x) / rangeStep);\n idx = clamp(idx, 0., rangeCount - 1.);\n int intIdx = int(idx);\n outColor = colorRange[intIdx];\n }\n }\n return outColor;\n}\n\nfloat linearScale(vec2 domain, vec2 range, float value) {\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n return ((value - domain.x) / (domain.y - domain.x)) * (range.y - range.x) + range.x;\n }\n return -1.;\n}\n\nvoid main(void) {\n vec2 clrDomain = colorDomainValid ? colorDomain : vec2(colorData.maxMinCount.a, colorData.maxMinCount.r);\n vec4 color = quantizeScale(clrDomain, colorRange, colors.r);\n\n float elevation = 0.0;\n\n if (extruded) {\n vec2 elvDomain = elevationDomainValid ? elevationDomain : vec2(elevationData.maxMinCount.a, elevationData.maxMinCount.r);\n elevation = linearScale(elvDomain, elevationRange, elevations.r);\n elevation = elevation * (positions.z + 1.0) / 2.0 * elevationScale;\n }\n float shouldRender = float(color.r > 0.0 && elevations.r >= 0.0);\n float dotRadius = cellSize / 2. * coverage * shouldRender;\n\n int yIndex = (gl_InstanceID / gridSize[0]);\n int xIndex = gl_InstanceID - (yIndex * gridSize[0]);\n\n vec2 instancePositionXFP64 = mul_fp64(vec2(gridOffset[0], gridOffsetLow[0]), vec2(float(xIndex), 0.));\n instancePositionXFP64 = sum_fp64(instancePositionXFP64, vec2(gridOrigin[0], gridOriginLow[0]));\n vec2 instancePositionYFP64 = mul_fp64(vec2(gridOffset[1], gridOffsetLow[1]), vec2(float(yIndex), 0.));\n instancePositionYFP64 = sum_fp64(instancePositionYFP64, vec2(gridOrigin[1], gridOriginLow[1]));\n\n vec3 centroidPosition = vec3(instancePositionXFP64[0], instancePositionYFP64[0], elevation);\n vec3 centroidPosition64Low = vec3(instancePositionXFP64[1], instancePositionYFP64[1], 0.0);\n geometry.worldPosition = centroidPosition;\n vec3 pos = vec3(project_size(positions.xy + offset) * dotRadius, 0.);\n picking_setPickingColor(instancePickingColors);\n\n gl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, geometry.position);\n\n vec3 normals_commonspace = project_normal(normals);\n\n if (extruded) {\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, normals_commonspace);\n vColor = vec4(lightColor, color.a * opacity) / 255.;\n } else {\n vColor = vec4(color.rgb, color.a * opacity) / 255.;\n }\n}\n";
2
2
  //# sourceMappingURL=gpu-grid-cell-layer-vertex.glsl.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.js"],"names":[],"mappings":"AAsBA","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\n// Inspired by screen-grid-layer vertex shader in deck.gl\n\nexport default `\\\n#version 300 es\n#define SHADER_NAME gpu-grid-cell-layer-vertex-shader\n#define RANGE_COUNT 6\n\nin vec3 positions;\nin vec3 normals;\n\nin vec4 colors;\nin vec4 elevations;\nin vec3 instancePickingColors;\n\n// Custom uniforms\nuniform vec2 offset;\nuniform bool extruded;\nuniform float cellSize;\nuniform float coverage;\nuniform float opacity;\nuniform float elevationScale;\n\nuniform ivec2 gridSize;\nuniform vec2 gridOrigin;\nuniform vec2 gridOriginLow;\nuniform vec2 gridOffset;\nuniform vec2 gridOffsetLow;\nuniform vec4 colorRange[RANGE_COUNT];\nuniform vec2 elevationRange;\n\n// Domain uniforms\nuniform vec2 colorDomain;\nuniform bool colorDomainValid;\nuniform vec2 elevationDomain;\nuniform bool elevationDomainValid;\n\nlayout(std140) uniform;\nuniform ColorData\n{\n vec4 maxMinCount;\n} colorData;\nuniform ElevationData\n{\n vec4 maxMinCount;\n} elevationData;\n\n#define EPSILON 0.00001\n\n// Result\nout vec4 vColor;\n\nvec4 quantizeScale(vec2 domain, vec4 range[RANGE_COUNT], float value) {\n vec4 outColor = vec4(0., 0., 0., 0.);\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n float domainRange = domain.y - domain.x;\n if (domainRange <= 0.) {\n outColor = colorRange[0];\n } else {\n float rangeCount = float(RANGE_COUNT);\n float rangeStep = domainRange / rangeCount;\n float idx = floor((value - domain.x) / rangeStep);\n idx = clamp(idx, 0., rangeCount - 1.);\n int intIdx = int(idx);\n outColor = colorRange[intIdx];\n }\n }\n return outColor;\n}\n\nfloat linearScale(vec2 domain, vec2 range, float value) {\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n return ((value - domain.x) / (domain.y - domain.x)) * (range.y - range.x) + range.x;\n }\n return -1.;\n}\n\nvoid main(void) {\n vec2 clrDomain = colorDomainValid ? colorDomain : vec2(colorData.maxMinCount.a, colorData.maxMinCount.r);\n vec4 color = quantizeScale(clrDomain, colorRange, colors.r);\n\n float elevation = 0.0;\n\n if (extruded) {\n vec2 elvDomain = elevationDomainValid ? elevationDomain : vec2(elevationData.maxMinCount.a, elevationData.maxMinCount.r);\n elevation = linearScale(elvDomain, elevationRange, elevations.r);\n elevation = elevation * (positions.z + 1.0) / 2.0 * elevationScale;\n }\n\n // if aggregated color or elevation is 0 do not render\n float shouldRender = float(color.r > 0.0 && elevations.r >= 0.0);\n float dotRadius = cellSize / 2. * coverage * shouldRender;\n\n int yIndex = (gl_InstanceID / gridSize[0]);\n int xIndex = gl_InstanceID - (yIndex * gridSize[0]);\n\n vec2 instancePositionXFP64 = mul_fp64(vec2(gridOffset[0], gridOffsetLow[0]), vec2(float(xIndex), 0.));\n instancePositionXFP64 = sum_fp64(instancePositionXFP64, vec2(gridOrigin[0], gridOriginLow[0]));\n vec2 instancePositionYFP64 = mul_fp64(vec2(gridOffset[1], gridOffsetLow[1]), vec2(float(yIndex), 0.));\n instancePositionYFP64 = sum_fp64(instancePositionYFP64, vec2(gridOrigin[1], gridOriginLow[1]));\n\n vec3 centroidPosition = vec3(instancePositionXFP64[0], instancePositionYFP64[0], elevation);\n vec3 centroidPosition64Low = vec3(instancePositionXFP64[1], instancePositionYFP64[1], 0.0);\n geometry.worldPosition = centroidPosition;\n vec3 pos = vec3(project_size(positions.xy + offset) * dotRadius, 0.);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n vec4 position_commonspace;\n gl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, position_commonspace);\n\n // Light calculations\n // Worldspace is the linear space after Mercator projection\n\n vec3 normals_commonspace = project_normal(normals);\n\n if (extruded) {\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, position_commonspace.xyz, normals_commonspace);\n vColor = vec4(lightColor, color.a * opacity) / 255.;\n } else {\n vColor = vec4(color.rgb, color.a * opacity) / 255.;\n }\n}\n`;\n"],"file":"gpu-grid-cell-layer-vertex.glsl.js"}
1
+ {"version":3,"sources":["../../../src/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.js"],"names":[],"mappings":"AAsBA","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\n// Inspired by screen-grid-layer vertex shader in deck.gl\n\nexport default `\\\n#version 300 es\n#define SHADER_NAME gpu-grid-cell-layer-vertex-shader\n#define RANGE_COUNT 6\n\nin vec3 positions;\nin vec3 normals;\n\nin vec4 colors;\nin vec4 elevations;\nin vec3 instancePickingColors;\n\n// Custom uniforms\nuniform vec2 offset;\nuniform bool extruded;\nuniform float cellSize;\nuniform float coverage;\nuniform float opacity;\nuniform float elevationScale;\n\nuniform ivec2 gridSize;\nuniform vec2 gridOrigin;\nuniform vec2 gridOriginLow;\nuniform vec2 gridOffset;\nuniform vec2 gridOffsetLow;\nuniform vec4 colorRange[RANGE_COUNT];\nuniform vec2 elevationRange;\n\n// Domain uniforms\nuniform vec2 colorDomain;\nuniform bool colorDomainValid;\nuniform vec2 elevationDomain;\nuniform bool elevationDomainValid;\n\nlayout(std140) uniform;\nuniform ColorData\n{\n vec4 maxMinCount;\n} colorData;\nuniform ElevationData\n{\n vec4 maxMinCount;\n} elevationData;\n\n#define EPSILON 0.00001\n\n// Result\nout vec4 vColor;\n\nvec4 quantizeScale(vec2 domain, vec4 range[RANGE_COUNT], float value) {\n vec4 outColor = vec4(0., 0., 0., 0.);\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n float domainRange = domain.y - domain.x;\n if (domainRange <= 0.) {\n outColor = colorRange[0];\n } else {\n float rangeCount = float(RANGE_COUNT);\n float rangeStep = domainRange / rangeCount;\n float idx = floor((value - domain.x) / rangeStep);\n idx = clamp(idx, 0., rangeCount - 1.);\n int intIdx = int(idx);\n outColor = colorRange[intIdx];\n }\n }\n return outColor;\n}\n\nfloat linearScale(vec2 domain, vec2 range, float value) {\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n return ((value - domain.x) / (domain.y - domain.x)) * (range.y - range.x) + range.x;\n }\n return -1.;\n}\n\nvoid main(void) {\n vec2 clrDomain = colorDomainValid ? colorDomain : vec2(colorData.maxMinCount.a, colorData.maxMinCount.r);\n vec4 color = quantizeScale(clrDomain, colorRange, colors.r);\n\n float elevation = 0.0;\n\n if (extruded) {\n vec2 elvDomain = elevationDomainValid ? elevationDomain : vec2(elevationData.maxMinCount.a, elevationData.maxMinCount.r);\n elevation = linearScale(elvDomain, elevationRange, elevations.r);\n elevation = elevation * (positions.z + 1.0) / 2.0 * elevationScale;\n }\n\n // if aggregated color or elevation is 0 do not render\n float shouldRender = float(color.r > 0.0 && elevations.r >= 0.0);\n float dotRadius = cellSize / 2. * coverage * shouldRender;\n\n int yIndex = (gl_InstanceID / gridSize[0]);\n int xIndex = gl_InstanceID - (yIndex * gridSize[0]);\n\n vec2 instancePositionXFP64 = mul_fp64(vec2(gridOffset[0], gridOffsetLow[0]), vec2(float(xIndex), 0.));\n instancePositionXFP64 = sum_fp64(instancePositionXFP64, vec2(gridOrigin[0], gridOriginLow[0]));\n vec2 instancePositionYFP64 = mul_fp64(vec2(gridOffset[1], gridOffsetLow[1]), vec2(float(yIndex), 0.));\n instancePositionYFP64 = sum_fp64(instancePositionYFP64, vec2(gridOrigin[1], gridOriginLow[1]));\n\n vec3 centroidPosition = vec3(instancePositionXFP64[0], instancePositionYFP64[0], elevation);\n vec3 centroidPosition64Low = vec3(instancePositionXFP64[1], instancePositionYFP64[1], 0.0);\n geometry.worldPosition = centroidPosition;\n vec3 pos = vec3(project_size(positions.xy + offset) * dotRadius, 0.);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n gl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, geometry.position);\n\n // Light calculations\n // Worldspace is the linear space after Mercator projection\n\n vec3 normals_commonspace = project_normal(normals);\n\n if (extruded) {\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, normals_commonspace);\n vColor = vec4(lightColor, color.a * opacity) / 255.;\n } else {\n vColor = vec4(color.rgb, color.a * opacity) / 255.;\n }\n}\n`;\n"],"file":"gpu-grid-cell-layer-vertex.glsl.js"}
@@ -216,7 +216,10 @@ export default class HeatmapLayer extends AggregationLayer {
216
216
  triPositionBuffer === null || triPositionBuffer === void 0 ? void 0 : triPositionBuffer.delete();
217
217
  triTexCoordBuffer === null || triTexCoordBuffer === void 0 ? void 0 : triTexCoordBuffer.delete();
218
218
  colorTexture === null || colorTexture === void 0 ? void 0 : colorTexture.delete();
219
- updateTimer && clearTimeout(updateTimer);
219
+
220
+ if (updateTimer) {
221
+ clearTimeout(updateTimer);
222
+ }
220
223
  }
221
224
 
222
225
  _getAttributeManager() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/heatmap-layer/heatmap-layer.js"],"names":["getBounds","boundsContain","packVertices","scaleToAspectRatio","getTextureCoordinates","getTextureParams","Buffer","Texture2D","Transform","getParameters","FEATURES","hasFeatures","AttributeManager","COORDINATE_SYSTEM","log","TriangleLayer","AggregationLayer","defaultColorRange","colorRangeToFlatArray","weights_vs","weights_fs","vs_max","fs_max","RESOLUTION","TEXTURE_OPTIONS","mipmaps","parameters","dataFormat","DEFAULT_COLOR_DOMAIN","AGGREGATION_MODE","SUM","MEAN","defaultProps","getPosition","type","value","x","position","getWeight","intensity","min","radiusPixels","max","colorRange","threshold","colorDomain","optional","aggregation","weightsTextureSize","debounceTimeout","REQUIRED_FEATURES","BLEND_EQUATION_MINMAX","TEXTURE_FLOAT","DIMENSIONS","data","props","HeatmapLayer","initializeState","gl","context","setState","supported","error","id","_setupTextureParams","_setupAttributes","_setupResources","shouldUpdateState","changeFlags","somethingChanged","updateState","opts","state","_updateHeatmapState","oldProps","_getChangeFlags","dataChanged","viewportChanged","boundsChanged","_updateBounds","_updateTextureRenderingBounds","clearTimeout","updateTimer","isWeightMapDirty","viewportZoomChanged","_debouncedUpdateWeightmap","_updateColorTexture","_updateWeightmap","zoom","viewport","renderLayers","weightsTexture","triPositionBuffer","triTexCoordBuffer","maxWeightsTexture","colorTexture","updateTriggers","TriangleLayerClass","getSubLayerClass","getSubLayerProps","coordinateSystem","DEFAULT","attributes","positions","texCoords","vertexCount","maxTexture","aggregationMode","texture","finalizeState","weightsTransform","maxWeightTransform","delete","_getAttributeManager","stats","dimensions","isAttributeChanged","isAggregationDirty","compareAll","dimension","_createTextures","textureSize","format","width","height","attributeManager","getAttributeManager","add","size","accessor","weights","positionAttributeName","Math","floatTargetSupport","COLOR_ATTACHMENT_RGBA32F","weightsScale","warn","getShaders","vs","_fs","_createWeightsTransform","shaders","elementCount","_targetTexture","_targetTextureVarying","weightsTransformShaders","maxWeightsTransformShaders","_sourceTextures","inTexture","byteLength","updateShaders","shaderOptions","_updateMaxWeightValue","run","blend","depthTest","blendFunc","blendEquation","forceUpdate","viewportCorners","unproject","map","p","fround","visibleWorldBounds","newState","worldBounds","scaledCommonBounds","_worldToCommonBounds","_commonToWorldBounds","LNGLAT","normalizedCommonBounds","subData","textureBounds","projectPosition","colors","Uint8Array","setImageData","length","commonBounds","useLayerCoordinateSystem","metersPerPixel","distanceScales","metersPerUnit","uniforms","textureWidth","update","getNumInstances","clearRenderTarget","getAttributes","moduleSettings","getModuleSettings","setParameters","fromTimer","setTimeout","bind","minLong","minLat","maxLong","maxLat","offsetMode","LNGLAT_OFFSETS","METER_OFFSETS","offsetOriginCommon","coordinateOrigin","scale","bottomLeftCommon","topRightCommon","xMin","yMin","xMax","yMax","bottomLeftWorld","unprojectPosition","topRightWorld","slice","concat","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2019 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\n/* global setTimeout clearTimeout */\nimport GL from '@luma.gl/constants';\nimport {\n getBounds,\n boundsContain,\n packVertices,\n scaleToAspectRatio,\n getTextureCoordinates,\n getTextureParams\n} from './heatmap-layer-utils';\nimport {Buffer, Texture2D, Transform, getParameters, FEATURES, hasFeatures} from '@luma.gl/core';\nimport {AttributeManager, COORDINATE_SYSTEM, log} from '@deck.gl/core';\nimport TriangleLayer from './triangle-layer';\nimport AggregationLayer from '../aggregation-layer';\nimport {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils';\nimport weights_vs from './weights-vs.glsl';\nimport weights_fs from './weights-fs.glsl';\nimport vs_max from './max-vs.glsl';\nimport fs_max from './max-fs.glsl';\n\nconst RESOLUTION = 2; // (number of common space pixels) / (number texels)\nconst TEXTURE_OPTIONS = {\n mipmaps: false,\n parameters: {\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n },\n dataFormat: GL.RGBA\n};\nconst DEFAULT_COLOR_DOMAIN = [0, 0];\nconst AGGREGATION_MODE = {\n SUM: 0,\n MEAN: 1\n};\n\nconst defaultProps = {\n getPosition: {type: 'accessor', value: x => x.position},\n getWeight: {type: 'accessor', value: 1},\n intensity: {type: 'number', min: 0, value: 1},\n radiusPixels: {type: 'number', min: 1, max: 100, value: 50},\n colorRange: defaultColorRange,\n threshold: {type: 'number', min: 0, max: 1, value: 0.05},\n colorDomain: {type: 'array', value: null, optional: true},\n // 'SUM' or 'MEAN'\n aggregation: 'SUM',\n weightsTextureSize: {type: 'number', min: 128, max: 2048, value: 2048},\n debounceTimeout: {type: 'number', min: 0, max: 1000, value: 500}\n};\n\nconst REQUIRED_FEATURES = [\n FEATURES.BLEND_EQUATION_MINMAX, // max weight calculation\n FEATURES.TEXTURE_FLOAT // weight-map as texture\n // FEATURES.FLOAT_BLEND, // implictly supported when TEXTURE_FLOAT is supported\n];\n\nconst DIMENSIONS = {\n data: {\n props: ['radiusPixels']\n }\n};\n\nexport default class HeatmapLayer extends AggregationLayer {\n initializeState() {\n const {gl} = this.context;\n if (!hasFeatures(gl, REQUIRED_FEATURES)) {\n this.setState({supported: false});\n log.error(`HeatmapLayer: ${this.id} is not supported on this browser`)();\n return;\n }\n super.initializeState(DIMENSIONS);\n this.setState({supported: true, colorDomain: DEFAULT_COLOR_DOMAIN});\n this._setupTextureParams();\n this._setupAttributes();\n this._setupResources();\n }\n\n shouldUpdateState({changeFlags}) {\n // Need to be updated when viewport changes\n return changeFlags.somethingChanged;\n }\n\n /* eslint-disable max-statements,complexity */\n updateState(opts) {\n if (!this.state.supported) {\n return;\n }\n super.updateState(opts);\n this._updateHeatmapState(opts);\n }\n\n _updateHeatmapState(opts) {\n const {props, oldProps} = opts;\n const changeFlags = this._getChangeFlags(opts);\n\n if (changeFlags.dataChanged || changeFlags.viewportChanged) {\n // if data is changed, do not debounce and immediately update the weight map\n changeFlags.boundsChanged = this._updateBounds(changeFlags.dataChanged);\n this._updateTextureRenderingBounds();\n }\n\n if (changeFlags.dataChanged || changeFlags.boundsChanged) {\n // Update weight map immediately\n clearTimeout(this.state.updateTimer);\n this.setState({isWeightMapDirty: true});\n } else if (changeFlags.viewportZoomChanged) {\n // Update weight map when zoom stops\n this._debouncedUpdateWeightmap();\n }\n\n if (props.colorRange !== oldProps.colorRange) {\n this._updateColorTexture(opts);\n }\n\n if (this.state.isWeightMapDirty) {\n this._updateWeightmap();\n }\n\n this.setState({zoom: opts.context.viewport.zoom});\n }\n\n renderLayers() {\n if (!this.state.supported) {\n return [];\n }\n const {\n weightsTexture,\n triPositionBuffer,\n triTexCoordBuffer,\n maxWeightsTexture,\n colorTexture,\n colorDomain\n } = this.state;\n const {updateTriggers, intensity, threshold, aggregation} = this.props;\n\n const TriangleLayerClass = this.getSubLayerClass('triangle', TriangleLayer);\n\n return new TriangleLayerClass(\n this.getSubLayerProps({\n id: 'triangle-layer',\n updateTriggers\n }),\n {\n // position buffer is filled with world coordinates generated from viewport.unproject\n // i.e. LNGLAT if geospatial, CARTESIAN otherwise\n coordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n data: {\n attributes: {\n positions: triPositionBuffer,\n texCoords: triTexCoordBuffer\n }\n },\n vertexCount: 4,\n maxTexture: maxWeightsTexture,\n colorTexture,\n aggregationMode: AGGREGATION_MODE[aggregation] || 0,\n texture: weightsTexture,\n intensity,\n threshold,\n colorDomain\n }\n );\n }\n\n finalizeState() {\n super.finalizeState();\n const {\n weightsTransform,\n weightsTexture,\n maxWeightTransform,\n maxWeightsTexture,\n triPositionBuffer,\n triTexCoordBuffer,\n colorTexture,\n updateTimer\n } = this.state;\n weightsTransform?.delete();\n weightsTexture?.delete();\n maxWeightTransform?.delete();\n maxWeightsTexture?.delete();\n triPositionBuffer?.delete();\n triTexCoordBuffer?.delete();\n colorTexture?.delete();\n updateTimer && clearTimeout(updateTimer);\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 _getChangeFlags(opts) {\n const changeFlags = {};\n const {dimensions} = this.state;\n changeFlags.dataChanged =\n this.isAttributeChanged() || // if any attribute is changed\n this.isAggregationDirty(opts, {\n compareAll: true,\n dimension: dimensions.data\n });\n changeFlags.viewportChanged = opts.changeFlags.viewportChanged;\n\n const {zoom} = this.state;\n if (!opts.context.viewport || opts.context.viewport.zoom !== zoom) {\n changeFlags.viewportZoomChanged = true;\n }\n\n return changeFlags;\n }\n\n _createTextures() {\n const {gl} = this.context;\n const {textureSize, format, type} = this.state;\n\n this.setState({\n weightsTexture: new Texture2D(gl, {\n width: textureSize,\n height: textureSize,\n format,\n type,\n ...TEXTURE_OPTIONS\n }),\n maxWeightsTexture: new Texture2D(gl, {format, type, ...TEXTURE_OPTIONS}) // 1 X 1 texture,\n });\n }\n\n _setupAttributes() {\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n positions: {size: 3, type: GL.DOUBLE, accessor: 'getPosition'},\n weights: {size: 1, accessor: 'getWeight'}\n });\n this.setState({positionAttributeName: 'positions'});\n }\n\n _setupTextureParams() {\n const {gl} = this.context;\n const {weightsTextureSize} = this.props;\n\n const textureSize = Math.min(weightsTextureSize, getParameters(gl, gl.MAX_TEXTURE_SIZE));\n const floatTargetSupport = hasFeatures(gl, FEATURES.COLOR_ATTACHMENT_RGBA32F);\n const {format, type} = getTextureParams({gl, floatTargetSupport});\n const weightsScale = floatTargetSupport ? 1 : 1 / 255;\n this.setState({textureSize, format, type, weightsScale});\n if (!floatTargetSupport) {\n log.warn(\n `HeatmapLayer: ${this.id} rendering to float texture not supported, fallingback to low precession format`\n )();\n }\n }\n\n getShaders(type) {\n return super.getShaders(\n type === 'max-weights-transform'\n ? {\n vs: vs_max,\n _fs: fs_max\n }\n : {\n vs: weights_vs,\n _fs: weights_fs\n }\n );\n }\n\n _createWeightsTransform(shaders = {}) {\n const {gl} = this.context;\n let {weightsTransform} = this.state;\n const {weightsTexture} = this.state;\n weightsTransform?.delete();\n\n weightsTransform = new Transform(gl, {\n id: `${this.id}-weights-transform`,\n elementCount: 1,\n _targetTexture: weightsTexture,\n _targetTextureVarying: 'weightsTexture',\n ...shaders\n });\n this.setState({weightsTransform});\n }\n\n _setupResources() {\n const {gl} = this.context;\n this._createTextures();\n const {textureSize, weightsTexture, maxWeightsTexture} = this.state;\n\n const weightsTransformShaders = this.getShaders('weights-transform');\n this._createWeightsTransform(weightsTransformShaders);\n\n const maxWeightsTransformShaders = this.getShaders('max-weights-transform');\n const maxWeightTransform = new Transform(gl, {\n id: `${this.id}-max-weights-transform`,\n _sourceTextures: {\n inTexture: weightsTexture\n },\n _targetTexture: maxWeightsTexture,\n _targetTextureVarying: 'outTexture',\n ...maxWeightsTransformShaders,\n elementCount: textureSize * textureSize\n });\n\n this.setState({\n weightsTexture,\n maxWeightsTexture,\n maxWeightTransform,\n zoom: null,\n triPositionBuffer: new Buffer(gl, {\n byteLength: 48,\n accessor: {size: 3}\n }),\n triTexCoordBuffer: new Buffer(gl, {\n byteLength: 48,\n accessor: {size: 2}\n })\n });\n }\n\n // overwrite super class method to update transform model\n updateShaders(shaderOptions) {\n // sahder params (modules, injects) changed, update model object\n this._createWeightsTransform(shaderOptions);\n }\n\n _updateMaxWeightValue() {\n const {maxWeightTransform} = this.state;\n maxWeightTransform.run({\n parameters: {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.MAX\n }\n });\n }\n\n // Computes world bounds area that needs to be processed for generate heatmap\n _updateBounds(forceUpdate = false) {\n const {viewport} = this.context;\n\n // Unproject all 4 corners of the current screen coordinates into world coordinates (lng/lat)\n // Takes care of viewport has non zero bearing/pitch (i.e axis not aligned with world coordiante system)\n const viewportCorners = [\n viewport.unproject([0, 0]),\n viewport.unproject([viewport.width, 0]),\n viewport.unproject([viewport.width, viewport.height]),\n viewport.unproject([0, viewport.height])\n ].map(p => p.map(Math.fround));\n\n // #1: get world bounds for current viewport extends\n const visibleWorldBounds = getBounds(viewportCorners); // TODO: Change to visible bounds\n\n const newState = {visibleWorldBounds, viewportCorners};\n let boundsChanged = false;\n\n if (\n forceUpdate ||\n !this.state.worldBounds ||\n !boundsContain(this.state.worldBounds, visibleWorldBounds)\n ) {\n // #2 : convert world bounds to common (Flat) bounds\n // #3 : extend common bounds to match aspect ratio with viewport\n const scaledCommonBounds = this._worldToCommonBounds(visibleWorldBounds);\n\n // #4 :convert aligned common bounds to world bounds\n const worldBounds = this._commonToWorldBounds(scaledCommonBounds);\n\n // Clip webmercator projection limits\n if (this.props.coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {\n worldBounds[1] = Math.max(worldBounds[1], -85.051129);\n worldBounds[3] = Math.min(worldBounds[3], 85.051129);\n worldBounds[0] = Math.max(worldBounds[0], -360);\n worldBounds[2] = Math.min(worldBounds[2], 360);\n }\n\n // #5: now convert world bounds to common using Layer's coordiante system and origin\n const normalizedCommonBounds = this._worldToCommonBounds(worldBounds);\n\n newState.worldBounds = worldBounds;\n newState.normalizedCommonBounds = normalizedCommonBounds;\n\n boundsChanged = true;\n }\n this.setState(newState);\n return boundsChanged;\n }\n\n _updateTextureRenderingBounds() {\n // Just render visible portion of the texture\n const {triPositionBuffer, triTexCoordBuffer, normalizedCommonBounds, viewportCorners} =\n this.state;\n\n const {viewport} = this.context;\n\n triPositionBuffer.subData(packVertices(viewportCorners, 3));\n\n const textureBounds = viewportCorners.map(p =>\n getTextureCoordinates(viewport.projectPosition(p), normalizedCommonBounds)\n );\n triTexCoordBuffer.subData(packVertices(textureBounds, 2));\n }\n\n _updateColorTexture(opts) {\n const {colorRange} = opts.props;\n let {colorTexture} = this.state;\n const colors = colorRangeToFlatArray(colorRange, false, Uint8Array);\n\n if (colorTexture) {\n colorTexture.setImageData({\n data: colors,\n width: colorRange.length\n });\n } else {\n colorTexture = new Texture2D(this.context.gl, {\n data: colors,\n width: colorRange.length,\n height: 1,\n ...TEXTURE_OPTIONS\n });\n }\n this.setState({colorTexture});\n }\n\n _updateWeightmap() {\n const {radiusPixels, colorDomain, aggregation} = this.props;\n const {weightsTransform, worldBounds, textureSize, weightsTexture, weightsScale} = this.state;\n this.state.isWeightMapDirty = false;\n\n // convert world bounds to common using Layer's coordiante system and origin\n const commonBounds = this._worldToCommonBounds(worldBounds, {\n useLayerCoordinateSystem: true\n });\n\n if (colorDomain && aggregation === 'SUM') {\n // scale color domain to weight per pixel\n const {viewport} = this.context;\n const metersPerPixel =\n (viewport.distanceScales.metersPerUnit[2] * (commonBounds[2] - commonBounds[0])) /\n textureSize;\n this.state.colorDomain = colorDomain.map(x => x * metersPerPixel * weightsScale);\n } else {\n this.state.colorDomain = colorDomain || DEFAULT_COLOR_DOMAIN;\n }\n\n const uniforms = {\n radiusPixels,\n commonBounds,\n textureWidth: textureSize,\n weightsScale\n };\n // Attribute manager sets data array count as instaceCount on model\n // we need to set that as elementCount on 'weightsTransform'\n weightsTransform.update({\n elementCount: this.getNumInstances()\n });\n weightsTransform.run({\n uniforms,\n parameters: {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.FUNC_ADD\n },\n clearRenderTarget: true,\n attributes: this.getAttributes(),\n moduleSettings: this.getModuleSettings()\n });\n this._updateMaxWeightValue();\n\n // reset filtering parameters (TODO: remove once luma issue#1193 is fixed)\n weightsTexture.setParameters({\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR\n });\n }\n\n _debouncedUpdateWeightmap(fromTimer = false) {\n let {updateTimer} = this.state;\n const {debounceTimeout} = this.props;\n\n if (fromTimer) {\n updateTimer = null;\n // update\n this._updateBounds(true);\n this._updateTextureRenderingBounds();\n this.setState({isWeightMapDirty: true});\n } else {\n this.setState({isWeightMapDirty: false});\n clearTimeout(updateTimer);\n updateTimer = setTimeout(this._debouncedUpdateWeightmap.bind(this, true), debounceTimeout);\n }\n\n this.setState({updateTimer});\n }\n\n // input: worldBounds: [minLong, minLat, maxLong, maxLat]\n // input: opts.useLayerCoordinateSystem : layers coordiante system is used\n // optput: commonBounds: [minX, minY, maxX, maxY] scaled to fit the current texture\n _worldToCommonBounds(worldBounds, opts = {}) {\n const {useLayerCoordinateSystem = false} = opts;\n const [minLong, minLat, maxLong, maxLat] = worldBounds;\n const {viewport} = this.context;\n const {textureSize} = this.state;\n const {coordinateSystem} = this.props;\n\n const offsetMode =\n useLayerCoordinateSystem &&\n (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS ||\n coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS);\n const offsetOriginCommon = offsetMode\n ? viewport.projectPosition(this.props.coordinateOrigin)\n : [0, 0];\n const size = (textureSize * RESOLUTION) / viewport.scale;\n\n let bottomLeftCommon;\n let topRightCommon;\n\n // Y-axis is flipped between World and Common bounds\n if (useLayerCoordinateSystem && !offsetMode) {\n bottomLeftCommon = this.projectPosition([minLong, minLat, 0]);\n topRightCommon = this.projectPosition([maxLong, maxLat, 0]);\n } else {\n bottomLeftCommon = viewport.projectPosition([minLong, minLat, 0]);\n topRightCommon = viewport.projectPosition([maxLong, maxLat, 0]);\n }\n // Ignore z component\n return scaleToAspectRatio(\n [\n bottomLeftCommon[0] - offsetOriginCommon[0],\n bottomLeftCommon[1] - offsetOriginCommon[1],\n topRightCommon[0] - offsetOriginCommon[0],\n topRightCommon[1] - offsetOriginCommon[1]\n ],\n size,\n size\n );\n }\n\n // input commonBounds: [xMin, yMin, xMax, yMax]\n // output worldBounds: [minLong, minLat, maxLong, maxLat]\n _commonToWorldBounds(commonBounds) {\n const [xMin, yMin, xMax, yMax] = commonBounds;\n const {viewport} = this.context;\n const bottomLeftWorld = viewport.unprojectPosition([xMin, yMin]);\n const topRightWorld = viewport.unprojectPosition([xMax, yMax]);\n\n return bottomLeftWorld.slice(0, 2).concat(topRightWorld.slice(0, 2));\n }\n}\n\nHeatmapLayer.layerName = 'HeatmapLayer';\nHeatmapLayer.defaultProps = defaultProps;\n"],"file":"heatmap-layer.js"}
1
+ {"version":3,"sources":["../../../src/heatmap-layer/heatmap-layer.js"],"names":["getBounds","boundsContain","packVertices","scaleToAspectRatio","getTextureCoordinates","getTextureParams","Buffer","Texture2D","Transform","getParameters","FEATURES","hasFeatures","AttributeManager","COORDINATE_SYSTEM","log","TriangleLayer","AggregationLayer","defaultColorRange","colorRangeToFlatArray","weights_vs","weights_fs","vs_max","fs_max","RESOLUTION","TEXTURE_OPTIONS","mipmaps","parameters","dataFormat","DEFAULT_COLOR_DOMAIN","AGGREGATION_MODE","SUM","MEAN","defaultProps","getPosition","type","value","x","position","getWeight","intensity","min","radiusPixels","max","colorRange","threshold","colorDomain","optional","aggregation","weightsTextureSize","debounceTimeout","REQUIRED_FEATURES","BLEND_EQUATION_MINMAX","TEXTURE_FLOAT","DIMENSIONS","data","props","HeatmapLayer","initializeState","gl","context","setState","supported","error","id","_setupTextureParams","_setupAttributes","_setupResources","shouldUpdateState","changeFlags","somethingChanged","updateState","opts","state","_updateHeatmapState","oldProps","_getChangeFlags","dataChanged","viewportChanged","boundsChanged","_updateBounds","_updateTextureRenderingBounds","clearTimeout","updateTimer","isWeightMapDirty","viewportZoomChanged","_debouncedUpdateWeightmap","_updateColorTexture","_updateWeightmap","zoom","viewport","renderLayers","weightsTexture","triPositionBuffer","triTexCoordBuffer","maxWeightsTexture","colorTexture","updateTriggers","TriangleLayerClass","getSubLayerClass","getSubLayerProps","coordinateSystem","DEFAULT","attributes","positions","texCoords","vertexCount","maxTexture","aggregationMode","texture","finalizeState","weightsTransform","maxWeightTransform","delete","_getAttributeManager","stats","dimensions","isAttributeChanged","isAggregationDirty","compareAll","dimension","_createTextures","textureSize","format","width","height","attributeManager","getAttributeManager","add","size","accessor","weights","positionAttributeName","Math","floatTargetSupport","COLOR_ATTACHMENT_RGBA32F","weightsScale","warn","getShaders","vs","_fs","_createWeightsTransform","shaders","elementCount","_targetTexture","_targetTextureVarying","weightsTransformShaders","maxWeightsTransformShaders","_sourceTextures","inTexture","byteLength","updateShaders","shaderOptions","_updateMaxWeightValue","run","blend","depthTest","blendFunc","blendEquation","forceUpdate","viewportCorners","unproject","map","p","fround","visibleWorldBounds","newState","worldBounds","scaledCommonBounds","_worldToCommonBounds","_commonToWorldBounds","LNGLAT","normalizedCommonBounds","subData","textureBounds","projectPosition","colors","Uint8Array","setImageData","length","commonBounds","useLayerCoordinateSystem","metersPerPixel","distanceScales","metersPerUnit","uniforms","textureWidth","update","getNumInstances","clearRenderTarget","getAttributes","moduleSettings","getModuleSettings","setParameters","fromTimer","setTimeout","bind","minLong","minLat","maxLong","maxLat","offsetMode","LNGLAT_OFFSETS","METER_OFFSETS","offsetOriginCommon","coordinateOrigin","scale","bottomLeftCommon","topRightCommon","xMin","yMin","xMax","yMax","bottomLeftWorld","unprojectPosition","topRightWorld","slice","concat","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2019 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\n/* global setTimeout clearTimeout */\nimport GL from '@luma.gl/constants';\nimport {\n getBounds,\n boundsContain,\n packVertices,\n scaleToAspectRatio,\n getTextureCoordinates,\n getTextureParams\n} from './heatmap-layer-utils';\nimport {Buffer, Texture2D, Transform, getParameters, FEATURES, hasFeatures} from '@luma.gl/core';\nimport {AttributeManager, COORDINATE_SYSTEM, log} from '@deck.gl/core';\nimport TriangleLayer from './triangle-layer';\nimport AggregationLayer from '../aggregation-layer';\nimport {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils';\nimport weights_vs from './weights-vs.glsl';\nimport weights_fs from './weights-fs.glsl';\nimport vs_max from './max-vs.glsl';\nimport fs_max from './max-fs.glsl';\n\nconst RESOLUTION = 2; // (number of common space pixels) / (number texels)\nconst TEXTURE_OPTIONS = {\n mipmaps: false,\n parameters: {\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n },\n dataFormat: GL.RGBA\n};\nconst DEFAULT_COLOR_DOMAIN = [0, 0];\nconst AGGREGATION_MODE = {\n SUM: 0,\n MEAN: 1\n};\n\nconst defaultProps = {\n getPosition: {type: 'accessor', value: x => x.position},\n getWeight: {type: 'accessor', value: 1},\n intensity: {type: 'number', min: 0, value: 1},\n radiusPixels: {type: 'number', min: 1, max: 100, value: 50},\n colorRange: defaultColorRange,\n threshold: {type: 'number', min: 0, max: 1, value: 0.05},\n colorDomain: {type: 'array', value: null, optional: true},\n // 'SUM' or 'MEAN'\n aggregation: 'SUM',\n weightsTextureSize: {type: 'number', min: 128, max: 2048, value: 2048},\n debounceTimeout: {type: 'number', min: 0, max: 1000, value: 500}\n};\n\nconst REQUIRED_FEATURES = [\n FEATURES.BLEND_EQUATION_MINMAX, // max weight calculation\n FEATURES.TEXTURE_FLOAT // weight-map as texture\n // FEATURES.FLOAT_BLEND, // implictly supported when TEXTURE_FLOAT is supported\n];\n\nconst DIMENSIONS = {\n data: {\n props: ['radiusPixels']\n }\n};\n\nexport default class HeatmapLayer extends AggregationLayer {\n initializeState() {\n const {gl} = this.context;\n if (!hasFeatures(gl, REQUIRED_FEATURES)) {\n this.setState({supported: false});\n log.error(`HeatmapLayer: ${this.id} is not supported on this browser`)();\n return;\n }\n super.initializeState(DIMENSIONS);\n this.setState({supported: true, colorDomain: DEFAULT_COLOR_DOMAIN});\n this._setupTextureParams();\n this._setupAttributes();\n this._setupResources();\n }\n\n shouldUpdateState({changeFlags}) {\n // Need to be updated when viewport changes\n return changeFlags.somethingChanged;\n }\n\n /* eslint-disable max-statements,complexity */\n updateState(opts) {\n if (!this.state.supported) {\n return;\n }\n super.updateState(opts);\n this._updateHeatmapState(opts);\n }\n\n _updateHeatmapState(opts) {\n const {props, oldProps} = opts;\n const changeFlags = this._getChangeFlags(opts);\n\n if (changeFlags.dataChanged || changeFlags.viewportChanged) {\n // if data is changed, do not debounce and immediately update the weight map\n changeFlags.boundsChanged = this._updateBounds(changeFlags.dataChanged);\n this._updateTextureRenderingBounds();\n }\n\n if (changeFlags.dataChanged || changeFlags.boundsChanged) {\n // Update weight map immediately\n clearTimeout(this.state.updateTimer);\n this.setState({isWeightMapDirty: true});\n } else if (changeFlags.viewportZoomChanged) {\n // Update weight map when zoom stops\n this._debouncedUpdateWeightmap();\n }\n\n if (props.colorRange !== oldProps.colorRange) {\n this._updateColorTexture(opts);\n }\n\n if (this.state.isWeightMapDirty) {\n this._updateWeightmap();\n }\n\n this.setState({zoom: opts.context.viewport.zoom});\n }\n\n renderLayers() {\n if (!this.state.supported) {\n return [];\n }\n const {\n weightsTexture,\n triPositionBuffer,\n triTexCoordBuffer,\n maxWeightsTexture,\n colorTexture,\n colorDomain\n } = this.state;\n const {updateTriggers, intensity, threshold, aggregation} = this.props;\n\n const TriangleLayerClass = this.getSubLayerClass('triangle', TriangleLayer);\n\n return new TriangleLayerClass(\n this.getSubLayerProps({\n id: 'triangle-layer',\n updateTriggers\n }),\n {\n // position buffer is filled with world coordinates generated from viewport.unproject\n // i.e. LNGLAT if geospatial, CARTESIAN otherwise\n coordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n data: {\n attributes: {\n positions: triPositionBuffer,\n texCoords: triTexCoordBuffer\n }\n },\n vertexCount: 4,\n maxTexture: maxWeightsTexture,\n colorTexture,\n aggregationMode: AGGREGATION_MODE[aggregation] || 0,\n texture: weightsTexture,\n intensity,\n threshold,\n colorDomain\n }\n );\n }\n\n finalizeState() {\n super.finalizeState();\n const {\n weightsTransform,\n weightsTexture,\n maxWeightTransform,\n maxWeightsTexture,\n triPositionBuffer,\n triTexCoordBuffer,\n colorTexture,\n updateTimer\n } = this.state;\n weightsTransform?.delete();\n weightsTexture?.delete();\n maxWeightTransform?.delete();\n maxWeightsTexture?.delete();\n triPositionBuffer?.delete();\n triTexCoordBuffer?.delete();\n colorTexture?.delete();\n if (updateTimer) {\n clearTimeout(updateTimer);\n }\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 _getChangeFlags(opts) {\n const changeFlags = {};\n const {dimensions} = this.state;\n changeFlags.dataChanged =\n this.isAttributeChanged() || // if any attribute is changed\n this.isAggregationDirty(opts, {\n compareAll: true,\n dimension: dimensions.data\n });\n changeFlags.viewportChanged = opts.changeFlags.viewportChanged;\n\n const {zoom} = this.state;\n if (!opts.context.viewport || opts.context.viewport.zoom !== zoom) {\n changeFlags.viewportZoomChanged = true;\n }\n\n return changeFlags;\n }\n\n _createTextures() {\n const {gl} = this.context;\n const {textureSize, format, type} = this.state;\n\n this.setState({\n weightsTexture: new Texture2D(gl, {\n width: textureSize,\n height: textureSize,\n format,\n type,\n ...TEXTURE_OPTIONS\n }),\n maxWeightsTexture: new Texture2D(gl, {format, type, ...TEXTURE_OPTIONS}) // 1 X 1 texture,\n });\n }\n\n _setupAttributes() {\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n positions: {size: 3, type: GL.DOUBLE, accessor: 'getPosition'},\n weights: {size: 1, accessor: 'getWeight'}\n });\n this.setState({positionAttributeName: 'positions'});\n }\n\n _setupTextureParams() {\n const {gl} = this.context;\n const {weightsTextureSize} = this.props;\n\n const textureSize = Math.min(weightsTextureSize, getParameters(gl, gl.MAX_TEXTURE_SIZE));\n const floatTargetSupport = hasFeatures(gl, FEATURES.COLOR_ATTACHMENT_RGBA32F);\n const {format, type} = getTextureParams({gl, floatTargetSupport});\n const weightsScale = floatTargetSupport ? 1 : 1 / 255;\n this.setState({textureSize, format, type, weightsScale});\n if (!floatTargetSupport) {\n log.warn(\n `HeatmapLayer: ${this.id} rendering to float texture not supported, fallingback to low precession format`\n )();\n }\n }\n\n getShaders(type) {\n return super.getShaders(\n type === 'max-weights-transform'\n ? {\n vs: vs_max,\n _fs: fs_max\n }\n : {\n vs: weights_vs,\n _fs: weights_fs\n }\n );\n }\n\n _createWeightsTransform(shaders = {}) {\n const {gl} = this.context;\n let {weightsTransform} = this.state;\n const {weightsTexture} = this.state;\n weightsTransform?.delete();\n\n weightsTransform = new Transform(gl, {\n id: `${this.id}-weights-transform`,\n elementCount: 1,\n _targetTexture: weightsTexture,\n _targetTextureVarying: 'weightsTexture',\n ...shaders\n });\n this.setState({weightsTransform});\n }\n\n _setupResources() {\n const {gl} = this.context;\n this._createTextures();\n const {textureSize, weightsTexture, maxWeightsTexture} = this.state;\n\n const weightsTransformShaders = this.getShaders('weights-transform');\n this._createWeightsTransform(weightsTransformShaders);\n\n const maxWeightsTransformShaders = this.getShaders('max-weights-transform');\n const maxWeightTransform = new Transform(gl, {\n id: `${this.id}-max-weights-transform`,\n _sourceTextures: {\n inTexture: weightsTexture\n },\n _targetTexture: maxWeightsTexture,\n _targetTextureVarying: 'outTexture',\n ...maxWeightsTransformShaders,\n elementCount: textureSize * textureSize\n });\n\n this.setState({\n weightsTexture,\n maxWeightsTexture,\n maxWeightTransform,\n zoom: null,\n triPositionBuffer: new Buffer(gl, {\n byteLength: 48,\n accessor: {size: 3}\n }),\n triTexCoordBuffer: new Buffer(gl, {\n byteLength: 48,\n accessor: {size: 2}\n })\n });\n }\n\n // overwrite super class method to update transform model\n updateShaders(shaderOptions) {\n // sahder params (modules, injects) changed, update model object\n this._createWeightsTransform(shaderOptions);\n }\n\n _updateMaxWeightValue() {\n const {maxWeightTransform} = this.state;\n maxWeightTransform.run({\n parameters: {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.MAX\n }\n });\n }\n\n // Computes world bounds area that needs to be processed for generate heatmap\n _updateBounds(forceUpdate = false) {\n const {viewport} = this.context;\n\n // Unproject all 4 corners of the current screen coordinates into world coordinates (lng/lat)\n // Takes care of viewport has non zero bearing/pitch (i.e axis not aligned with world coordiante system)\n const viewportCorners = [\n viewport.unproject([0, 0]),\n viewport.unproject([viewport.width, 0]),\n viewport.unproject([viewport.width, viewport.height]),\n viewport.unproject([0, viewport.height])\n ].map(p => p.map(Math.fround));\n\n // #1: get world bounds for current viewport extends\n const visibleWorldBounds = getBounds(viewportCorners); // TODO: Change to visible bounds\n\n const newState = {visibleWorldBounds, viewportCorners};\n let boundsChanged = false;\n\n if (\n forceUpdate ||\n !this.state.worldBounds ||\n !boundsContain(this.state.worldBounds, visibleWorldBounds)\n ) {\n // #2 : convert world bounds to common (Flat) bounds\n // #3 : extend common bounds to match aspect ratio with viewport\n const scaledCommonBounds = this._worldToCommonBounds(visibleWorldBounds);\n\n // #4 :convert aligned common bounds to world bounds\n const worldBounds = this._commonToWorldBounds(scaledCommonBounds);\n\n // Clip webmercator projection limits\n if (this.props.coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {\n worldBounds[1] = Math.max(worldBounds[1], -85.051129);\n worldBounds[3] = Math.min(worldBounds[3], 85.051129);\n worldBounds[0] = Math.max(worldBounds[0], -360);\n worldBounds[2] = Math.min(worldBounds[2], 360);\n }\n\n // #5: now convert world bounds to common using Layer's coordiante system and origin\n const normalizedCommonBounds = this._worldToCommonBounds(worldBounds);\n\n newState.worldBounds = worldBounds;\n newState.normalizedCommonBounds = normalizedCommonBounds;\n\n boundsChanged = true;\n }\n this.setState(newState);\n return boundsChanged;\n }\n\n _updateTextureRenderingBounds() {\n // Just render visible portion of the texture\n const {triPositionBuffer, triTexCoordBuffer, normalizedCommonBounds, viewportCorners} =\n this.state;\n\n const {viewport} = this.context;\n\n triPositionBuffer.subData(packVertices(viewportCorners, 3));\n\n const textureBounds = viewportCorners.map(p =>\n getTextureCoordinates(viewport.projectPosition(p), normalizedCommonBounds)\n );\n triTexCoordBuffer.subData(packVertices(textureBounds, 2));\n }\n\n _updateColorTexture(opts) {\n const {colorRange} = opts.props;\n let {colorTexture} = this.state;\n const colors = colorRangeToFlatArray(colorRange, false, Uint8Array);\n\n if (colorTexture) {\n colorTexture.setImageData({\n data: colors,\n width: colorRange.length\n });\n } else {\n colorTexture = new Texture2D(this.context.gl, {\n data: colors,\n width: colorRange.length,\n height: 1,\n ...TEXTURE_OPTIONS\n });\n }\n this.setState({colorTexture});\n }\n\n _updateWeightmap() {\n const {radiusPixels, colorDomain, aggregation} = this.props;\n const {weightsTransform, worldBounds, textureSize, weightsTexture, weightsScale} = this.state;\n this.state.isWeightMapDirty = false;\n\n // convert world bounds to common using Layer's coordiante system and origin\n const commonBounds = this._worldToCommonBounds(worldBounds, {\n useLayerCoordinateSystem: true\n });\n\n if (colorDomain && aggregation === 'SUM') {\n // scale color domain to weight per pixel\n const {viewport} = this.context;\n const metersPerPixel =\n (viewport.distanceScales.metersPerUnit[2] * (commonBounds[2] - commonBounds[0])) /\n textureSize;\n this.state.colorDomain = colorDomain.map(x => x * metersPerPixel * weightsScale);\n } else {\n this.state.colorDomain = colorDomain || DEFAULT_COLOR_DOMAIN;\n }\n\n const uniforms = {\n radiusPixels,\n commonBounds,\n textureWidth: textureSize,\n weightsScale\n };\n // Attribute manager sets data array count as instaceCount on model\n // we need to set that as elementCount on 'weightsTransform'\n weightsTransform.update({\n elementCount: this.getNumInstances()\n });\n weightsTransform.run({\n uniforms,\n parameters: {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.FUNC_ADD\n },\n clearRenderTarget: true,\n attributes: this.getAttributes(),\n moduleSettings: this.getModuleSettings()\n });\n this._updateMaxWeightValue();\n\n // reset filtering parameters (TODO: remove once luma issue#1193 is fixed)\n weightsTexture.setParameters({\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR\n });\n }\n\n _debouncedUpdateWeightmap(fromTimer = false) {\n let {updateTimer} = this.state;\n const {debounceTimeout} = this.props;\n\n if (fromTimer) {\n updateTimer = null;\n // update\n this._updateBounds(true);\n this._updateTextureRenderingBounds();\n this.setState({isWeightMapDirty: true});\n } else {\n this.setState({isWeightMapDirty: false});\n clearTimeout(updateTimer);\n updateTimer = setTimeout(this._debouncedUpdateWeightmap.bind(this, true), debounceTimeout);\n }\n\n this.setState({updateTimer});\n }\n\n // input: worldBounds: [minLong, minLat, maxLong, maxLat]\n // input: opts.useLayerCoordinateSystem : layers coordiante system is used\n // optput: commonBounds: [minX, minY, maxX, maxY] scaled to fit the current texture\n _worldToCommonBounds(worldBounds, opts = {}) {\n const {useLayerCoordinateSystem = false} = opts;\n const [minLong, minLat, maxLong, maxLat] = worldBounds;\n const {viewport} = this.context;\n const {textureSize} = this.state;\n const {coordinateSystem} = this.props;\n\n const offsetMode =\n useLayerCoordinateSystem &&\n (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS ||\n coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS);\n const offsetOriginCommon = offsetMode\n ? viewport.projectPosition(this.props.coordinateOrigin)\n : [0, 0];\n const size = (textureSize * RESOLUTION) / viewport.scale;\n\n let bottomLeftCommon;\n let topRightCommon;\n\n // Y-axis is flipped between World and Common bounds\n if (useLayerCoordinateSystem && !offsetMode) {\n bottomLeftCommon = this.projectPosition([minLong, minLat, 0]);\n topRightCommon = this.projectPosition([maxLong, maxLat, 0]);\n } else {\n bottomLeftCommon = viewport.projectPosition([minLong, minLat, 0]);\n topRightCommon = viewport.projectPosition([maxLong, maxLat, 0]);\n }\n // Ignore z component\n return scaleToAspectRatio(\n [\n bottomLeftCommon[0] - offsetOriginCommon[0],\n bottomLeftCommon[1] - offsetOriginCommon[1],\n topRightCommon[0] - offsetOriginCommon[0],\n topRightCommon[1] - offsetOriginCommon[1]\n ],\n size,\n size\n );\n }\n\n // input commonBounds: [xMin, yMin, xMax, yMax]\n // output worldBounds: [minLong, minLat, maxLong, maxLat]\n _commonToWorldBounds(commonBounds) {\n const [xMin, yMin, xMax, yMax] = commonBounds;\n const {viewport} = this.context;\n const bottomLeftWorld = viewport.unprojectPosition([xMin, yMin]);\n const topRightWorld = viewport.unprojectPosition([xMax, yMax]);\n\n return bottomLeftWorld.slice(0, 2).concat(topRightWorld.slice(0, 2));\n }\n}\n\nHeatmapLayer.layerName = 'HeatmapLayer';\nHeatmapLayer.defaultProps = defaultProps;\n"],"file":"heatmap-layer.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.js"],"names":["default","ScreenGridLayer","CPUGridLayer","HexagonLayer","ContourLayer","GridLayer","GPUGridLayer","AGGREGATION_OPERATION","HeatmapLayer","_GPUGridAggregator","_CPUAggregator","_AggregationLayer","_BinSorter"],"mappings":"AAqBA,SAAQA,OAAO,IAAIC,eAAnB,QAAyC,uCAAzC;AACA,SAAQD,OAAO,IAAIE,YAAnB,QAAsC,iCAAtC;AACA,SAAQF,OAAO,IAAIG,YAAnB,QAAsC,+BAAtC;AACA,SAAQH,OAAO,IAAII,YAAnB,QAAsC,+BAAtC;AACA,SAAQJ,OAAO,IAAIK,SAAnB,QAAmC,yBAAnC;AACA,SAAQL,OAAO,IAAIM,YAAnB,QAAsC,iCAAtC;AACA,SAAQC,qBAAR,QAAoC,qCAApC;AAGA,SAAQP,OAAO,IAAIQ,YAAnB,QAAsC,+BAAtC;AACA,SAAQR,OAAO,IAAIS,kBAAnB,QAA4C,kDAA5C;AACA,SAAQT,OAAO,IAAIU,cAAnB,QAAwC,wBAAxC;AACA,SAAQV,OAAO,IAAIW,iBAAnB,QAA2C,qBAA3C;AACA,SAAQX,OAAO,IAAIY,UAAnB,QAAoC,oBAApC","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/* eslint-disable max-len */\n\nexport {default as ScreenGridLayer} from './screen-grid-layer/screen-grid-layer';\nexport {default as CPUGridLayer} from './cpu-grid-layer/cpu-grid-layer';\nexport {default as HexagonLayer} from './hexagon-layer/hexagon-layer';\nexport {default as ContourLayer} from './contour-layer/contour-layer';\nexport {default as GridLayer} from './grid-layer/grid-layer';\nexport {default as GPUGridLayer} from './gpu-grid-layer/gpu-grid-layer';\nexport {AGGREGATION_OPERATION} from './utils/aggregation-operation-utils';\n\n// experimental export\nexport {default as HeatmapLayer} from './heatmap-layer/heatmap-layer';\nexport {default as _GPUGridAggregator} from './utils/gpu-grid-aggregation/gpu-grid-aggregator';\nexport {default as _CPUAggregator} from './utils/cpu-aggregator';\nexport {default as _AggregationLayer} from './aggregation-layer';\nexport {default as _BinSorter} from './utils/bin-sorter';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/index.ts"],"names":["default","ScreenGridLayer","CPUGridLayer","HexagonLayer","ContourLayer","GridLayer","GPUGridLayer","AGGREGATION_OPERATION","HeatmapLayer","_GPUGridAggregator","_CPUAggregator","_AggregationLayer","_BinSorter"],"mappings":"AAqBA,SAAQA,OAAO,IAAIC,eAAnB,QAAyC,uCAAzC;AACA,SAAQD,OAAO,IAAIE,YAAnB,QAAsC,iCAAtC;AACA,SAAQF,OAAO,IAAIG,YAAnB,QAAsC,+BAAtC;AACA,SAAQH,OAAO,IAAII,YAAnB,QAAsC,+BAAtC;AACA,SAAQJ,OAAO,IAAIK,SAAnB,QAAmC,yBAAnC;AACA,SAAQL,OAAO,IAAIM,YAAnB,QAAsC,iCAAtC;AACA,SAAQC,qBAAR,QAAoC,qCAApC;AAGA,SAAQP,OAAO,IAAIQ,YAAnB,QAAsC,+BAAtC;AACA,SAAQR,OAAO,IAAIS,kBAAnB,QAA4C,kDAA5C;AACA,SAAQT,OAAO,IAAIU,cAAnB,QAAwC,wBAAxC;AACA,SAAQV,OAAO,IAAIW,iBAAnB,QAA2C,qBAA3C;AACA,SAAQX,OAAO,IAAIY,UAAnB,QAAoC,oBAApC","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/* eslint-disable max-len */\n\nexport {default as ScreenGridLayer} from './screen-grid-layer/screen-grid-layer';\nexport {default as CPUGridLayer} from './cpu-grid-layer/cpu-grid-layer';\nexport {default as HexagonLayer} from './hexagon-layer/hexagon-layer';\nexport {default as ContourLayer} from './contour-layer/contour-layer';\nexport {default as GridLayer} from './grid-layer/grid-layer';\nexport {default as GPUGridLayer} from './gpu-grid-layer/gpu-grid-layer';\nexport {AGGREGATION_OPERATION} from './utils/aggregation-operation-utils';\n\n// experimental export\nexport {default as HeatmapLayer} from './heatmap-layer/heatmap-layer';\nexport {default as _GPUGridAggregator} from './utils/gpu-grid-aggregation/gpu-grid-aggregator';\nexport {default as _CPUAggregator} from './utils/cpu-aggregator';\nexport {default as _AggregationLayer} from './aggregation-layer';\nexport {default as _BinSorter} from './utils/bin-sorter';\n"],"file":"index.js"}