@kepler.gl/deckgl-layers 3.3.0-alpha.5 → 3.3.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/cjs/3d-building-layer/3d-building-layer.js +66 -0
  2. package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
  3. package/dist/cjs/3d-building-layer/types.js +6 -0
  4. package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
  5. package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
  6. package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
  7. package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
  8. package/dist/cjs/globe/atmosphere-layer.js +341 -0
  9. package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
  10. package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
  11. package/dist/cjs/globe/globe-layers.js +574 -0
  12. package/dist/cjs/globe/globe-stars-layer.js +99 -0
  13. package/dist/cjs/globe/globe-stars-layer.spec.js +42 -0
  14. package/dist/cjs/globe/globe-view.js +404 -0
  15. package/dist/{globe → cjs/globe}/index.js +19 -1
  16. package/dist/cjs/globe/mvt-label-layer.js +190 -0
  17. package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
  18. package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
  19. package/dist/{index.js → cjs/index.js} +1 -1
  20. package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
  21. package/dist/cjs/layer-utils/cluster-utils.js +93 -0
  22. package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
  23. package/dist/cjs/layer-utils/globe-cell-utils.js +173 -0
  24. package/dist/cjs/layer-utils/shader-utils.js +38 -0
  25. package/dist/cjs/line-layer/line-layer.js +95 -0
  26. package/dist/cjs/raster/images.js +271 -0
  27. package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
  28. package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
  29. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
  30. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
  31. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
  32. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
  33. package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
  34. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  35. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
  36. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
  37. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
  38. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
  39. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
  40. package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
  41. package/dist/cjs/raster/types.js +6 -0
  42. package/dist/cjs/raster/util.js +139 -0
  43. package/dist/cjs/raster/webgl/color/colormap.js +45 -0
  44. package/dist/cjs/raster/webgl/color/filter.js +58 -0
  45. package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
  46. package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
  47. package/dist/cjs/raster/webgl/color/saturation.js +42 -0
  48. package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
  49. package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
  50. package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
  51. package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
  52. package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
  53. package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
  54. package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
  55. package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
  56. package/dist/cjs/raster/webgl/texture/mask.js +50 -0
  57. package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
  58. package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
  59. package/dist/cjs/raster/webgl/types.js +6 -0
  60. package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
  61. package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
  62. package/dist/cjs/wms/wms-layer.js +624 -0
  63. package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
  64. package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
  65. package/dist/esm/3d-building-layer/types.js +3 -0
  66. package/dist/esm/cluster-layer/cluster-layer.js +286 -0
  67. package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
  68. package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
  69. package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
  70. package/dist/esm/globe/atmosphere-layer.js +335 -0
  71. package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
  72. package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
  73. package/dist/esm/globe/globe-layers.js +566 -0
  74. package/dist/esm/globe/globe-stars-layer.js +92 -0
  75. package/dist/esm/globe/globe-stars-layer.spec.js +40 -0
  76. package/dist/esm/globe/globe-view.js +398 -0
  77. package/dist/esm/globe/index.js +26 -0
  78. package/dist/esm/globe/mvt-label-layer.js +187 -0
  79. package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
  80. package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
  81. package/dist/esm/index.js +22 -0
  82. package/dist/esm/layer-utils/aggregation-utils.js +172 -0
  83. package/dist/esm/layer-utils/cluster-utils.js +86 -0
  84. package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
  85. package/dist/esm/layer-utils/globe-cell-utils.js +167 -0
  86. package/dist/esm/layer-utils/shader-utils.js +32 -0
  87. package/dist/esm/line-layer/line-layer.js +91 -0
  88. package/dist/esm/raster/images.js +267 -0
  89. package/dist/esm/raster/pipeline-validation-patch.js +94 -0
  90. package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
  91. package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
  92. package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
  93. package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
  94. package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
  95. package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
  96. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
  97. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
  98. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
  99. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
  100. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
  101. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
  102. package/dist/esm/raster/raster-processing-uniforms.js +118 -0
  103. package/dist/esm/raster/types.js +3 -0
  104. package/dist/esm/raster/util.js +134 -0
  105. package/dist/esm/raster/webgl/color/colormap.js +39 -0
  106. package/dist/esm/raster/webgl/color/filter.js +52 -0
  107. package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
  108. package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
  109. package/dist/esm/raster/webgl/color/saturation.js +36 -0
  110. package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
  111. package/dist/esm/raster/webgl/index.js +26 -0
  112. package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
  113. package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
  114. package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
  115. package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
  116. package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
  117. package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
  118. package/dist/esm/raster/webgl/texture/mask.js +44 -0
  119. package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
  120. package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
  121. package/dist/esm/raster/webgl/types.js +3 -0
  122. package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
  123. package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
  124. package/dist/esm/wms/wms-layer.js +619 -0
  125. package/dist/globe/atmosphere-layer.d.ts +22 -1
  126. package/dist/globe/globe-stars-layer.d.ts +5 -0
  127. package/dist/globe/globe-stars-layer.spec.d.ts +1 -0
  128. package/dist/globe/index.d.ts +2 -2
  129. package/dist/wms/wms-layer.d.ts +8 -0
  130. package/package.json +19 -10
  131. package/dist/3d-building-layer/3d-building-layer.js +0 -66
  132. package/dist/3d-building-layer/3d-building-utils.js +0 -166
  133. package/dist/3d-building-layer/types.js +0 -6
  134. package/dist/cluster-layer/cluster-layer.js +0 -292
  135. package/dist/column-layer/enhanced-column-layer.js +0 -160
  136. package/dist/deckgl-extensions/filter-shader-module.js +0 -26
  137. package/dist/globe/atmosphere-layer.js +0 -220
  138. package/dist/globe/enhanced-multi-icon-layer.js +0 -63
  139. package/dist/globe/globe-depth-disk-layer.js +0 -145
  140. package/dist/globe/globe-layers.js +0 -569
  141. package/dist/globe/globe-stars-layer.js +0 -69
  142. package/dist/globe/globe-view.js +0 -404
  143. package/dist/globe/mvt-label-layer.js +0 -190
  144. package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -116
  145. package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -134
  146. package/dist/layer-utils/aggregation-utils.js +0 -181
  147. package/dist/layer-utils/cluster-utils.js +0 -93
  148. package/dist/layer-utils/cpu-aggregator.js +0 -798
  149. package/dist/layer-utils/globe-cell-utils.js +0 -173
  150. package/dist/layer-utils/shader-utils.js +0 -38
  151. package/dist/line-layer/line-layer.js +0 -95
  152. package/dist/raster/images.js +0 -271
  153. package/dist/raster/pipeline-validation-patch.js +0 -101
  154. package/dist/raster/raster-layer/raster-layer-shaders.js +0 -163
  155. package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
  156. package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
  157. package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
  158. package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
  159. package/dist/raster/raster-layer/raster-layer.js +0 -287
  160. package/dist/raster/raster-mesh-layer/matrix.d.ts +0 -4
  161. package/dist/raster/raster-mesh-layer/matrix.js +0 -18
  162. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
  163. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
  164. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
  165. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
  166. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
  167. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -321
  168. package/dist/raster/raster-processing-uniforms.js +0 -124
  169. package/dist/raster/types.js +0 -6
  170. package/dist/raster/util.js +0 -139
  171. package/dist/raster/webgl/color/colormap.js +0 -45
  172. package/dist/raster/webgl/color/filter.js +0 -58
  173. package/dist/raster/webgl/color/gamma-contrast.js +0 -68
  174. package/dist/raster/webgl/color/linear-rescale.js +0 -35
  175. package/dist/raster/webgl/color/saturation.js +0 -42
  176. package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
  177. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
  178. package/dist/raster/webgl/spectral-indices/evi.js +0 -26
  179. package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
  180. package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
  181. package/dist/raster/webgl/spectral-indices/savi.js +0 -21
  182. package/dist/raster/webgl/texture/combine-bands.js +0 -65
  183. package/dist/raster/webgl/texture/mask.js +0 -50
  184. package/dist/raster/webgl/texture/reorder-bands.js +0 -72
  185. package/dist/raster/webgl/texture/rgba-image.js +0 -34
  186. package/dist/raster/webgl/types.js +0 -6
  187. package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -88
  188. package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
  189. package/dist/wms/wms-layer.js +0 -594
@@ -0,0 +1,172 @@
1
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, 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 o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
2
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
3
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
4
+ // SPDX-License-Identifier: MIT
5
+ // Copyright contributors to the kepler.gl project
6
+
7
+ /**
8
+ * Build a Record<index, AggregatedBin> from the raw Float32Array of per-bin
9
+ * aggregated values returned by deck.gl 9's CPUAggregator/WebGLAggregator.
10
+ * The resulting map is compatible with the format kepler.gl expects for
11
+ * histogram rendering and color-scale selector.
12
+ */
13
+ export function buildAggregatedBinMap(binValues, binCount, aggregator) {
14
+ var bins = {};
15
+ for (var i = 0; i < binCount; i++) {
16
+ var _aggregator$getBin$co, _aggregator$getBin;
17
+ var val = binValues[i];
18
+ var count = (_aggregator$getBin$co = aggregator === null || aggregator === void 0 || (_aggregator$getBin = aggregator.getBin) === null || _aggregator$getBin === void 0 || (_aggregator$getBin = _aggregator$getBin.call(aggregator, i)) === null || _aggregator$getBin === void 0 ? void 0 : _aggregator$getBin.count) !== null && _aggregator$getBin$co !== void 0 ? _aggregator$getBin$co : 0;
19
+ bins[i] = {
20
+ i: i,
21
+ value: val,
22
+ counts: count
23
+ };
24
+ }
25
+ return bins;
26
+ }
27
+
28
+ /**
29
+ * Classify raw per-bin aggregated values into break indices according to
30
+ * a custom colorMap, and patch the deck.gl internal `state.colors` so the
31
+ * GPU shader renders the correct color for each bin.
32
+ *
33
+ * Custom breaks define thresholds [t0, t1, …, t_{N-2}] for N colors:
34
+ * color 0: value < t0
35
+ * color i: t_{i-1} <= value < t_i
36
+ * color N-1: value >= t_{N-2}
37
+ *
38
+ * We replace the values in `state.colors.attribute` / `state.colors.input`
39
+ * with integer break indices [0 … N-1]. Combined with `colorScaleType: 'quantize'`
40
+ * and `colorDomain: [0, N-1]`, the shader's linear interpolation maps each index
41
+ * to the correct color texture pixel.
42
+ *
43
+ * `rawValues` must be the original aggregated values (not previously classified).
44
+ */
45
+ export function classifyBinsByCustomBreaks(stateColors, binCount, colorMap, rawValues) {
46
+ if (!rawValues || binCount === 0) return;
47
+ var thresholds = [];
48
+ var _iterator = _createForOfIteratorHelper(colorMap),
49
+ _step;
50
+ try {
51
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
52
+ var entry = _step.value;
53
+ if (typeof entry[0] === 'number' && Number.isFinite(entry[0])) {
54
+ thresholds.push(entry[0]);
55
+ }
56
+ }
57
+ } catch (err) {
58
+ _iterator.e(err);
59
+ } finally {
60
+ _iterator.f();
61
+ }
62
+ thresholds.sort(function (a, b) {
63
+ return a - b;
64
+ });
65
+ var numColors = colorMap.length;
66
+ var classified = new Float32Array(rawValues.length);
67
+ for (var i = 0; i < binCount; i++) {
68
+ var v = rawValues[i];
69
+ if (!Number.isFinite(v)) {
70
+ classified[i] = NaN;
71
+ continue;
72
+ }
73
+ var idx = numColors - 1;
74
+ for (var t = 0; t < thresholds.length; t++) {
75
+ if (v < thresholds[t]) {
76
+ idx = t;
77
+ break;
78
+ }
79
+ }
80
+ classified[i] = idx;
81
+ }
82
+ for (var _i = binCount; _i < classified.length; _i++) {
83
+ classified[_i] = NaN;
84
+ }
85
+ var classifiedAttr = {
86
+ value: classified,
87
+ type: 'float32',
88
+ size: 1
89
+ };
90
+ stateColors.input = classifiedAttr;
91
+ stateColors.attribute = classifiedAttr;
92
+ }
93
+
94
+ // ---------------------------------------------------------------------------
95
+ // Shared _onAggregationUpdate / renderLayers logic for ScaleEnhanced* layers
96
+ // ---------------------------------------------------------------------------
97
+ //
98
+ // deck.gl 9's _onAggregationUpdate is private and its onSetColorDomain
99
+ // callback only provides [min, max]. That is sufficient for quantize/linear
100
+ // scales but d3.scaleQuantile needs the *full sorted array* of bin values to
101
+ // compute correct break points — without it the legend labels are wrong
102
+ // (see https://github.com/keplergl/kepler.gl/issues/3381).
103
+ //
104
+ // deck.gl does not expose a public hook for post-aggregation data, and props
105
+ // are Object.freeze()'d so we cannot suppress the parent's callback. Instead
106
+ // we let the parent fire its [min, max] call, then immediately fire a second
107
+ // enriched call with per-bin values (aggregatedBins) and, for quantile scale,
108
+ // the full sorted domain. The second call overwrites the first downstream in
109
+ // _onLayerSetDomain.
110
+ //
111
+ // This can be removed once deck.gl exposes a richer post-aggregation callback
112
+ // or makes _onAggregationUpdate / AttributeWithScale part of the public API.
113
+
114
+ /**
115
+ * Enriched _onAggregationUpdate implementation shared by ScaleEnhancedHexagonLayer
116
+ * and ScaleEnhancedGridLayer.
117
+ *
118
+ * @param layer The enhanced layer instance (`this`)
119
+ * @param ParentClass The deck.gl parent class (HexagonLayer or GridLayer)
120
+ * @param channel The aggregation channel index passed by deck.gl
121
+ */
122
+ export function enrichedAggregationUpdate(layer, ParentClass, channel) {
123
+ var _props$onSetColorDoma;
124
+ ParentClass.prototype._onAggregationUpdate.call(layer, {
125
+ channel: channel
126
+ });
127
+ if (channel !== 0) return;
128
+ var props = layer.getCurrentLayer().props;
129
+ var aggregator = layer.state.aggregator;
130
+ var result = aggregator.getResult(0);
131
+ var binValues = result === null || result === void 0 ? void 0 : result.value;
132
+ if (!binValues || aggregator.binCount <= 0) return;
133
+ layer.setState({
134
+ rawColorBinValues: Float32Array.from(binValues.subarray(0, aggregator.binCount))
135
+ });
136
+ var domain = aggregator.getResultDomain(0);
137
+ var aggregatedBins = buildAggregatedBinMap(binValues, aggregator.binCount, aggregator);
138
+ if (props.colorMap) {
139
+ classifyBinsByCustomBreaks(layer.state.colors, aggregator.binCount, props.colorMap, binValues);
140
+ }
141
+ var enrichedDomain = domain;
142
+ if (props.colorScaleType === 'quantile') {
143
+ enrichedDomain = Array.from(binValues).slice(0, aggregator.binCount).filter(Number.isFinite).sort(function (a, b) {
144
+ return a - b;
145
+ });
146
+ }
147
+ (_props$onSetColorDoma = props.onSetColorDomain) === null || _props$onSetColorDoma === void 0 || _props$onSetColorDoma.call(props, {
148
+ domain: enrichedDomain,
149
+ aggregatedBins: aggregatedBins
150
+ });
151
+ }
152
+
153
+ /**
154
+ * Shared renderLayers() wrapper that re-classifies bins when custom colorMap
155
+ * changes between renders without triggering a full re-aggregation.
156
+ *
157
+ * @param layer The enhanced layer instance (`this`)
158
+ * @param ParentClass The deck.gl parent class (HexagonLayer or GridLayer)
159
+ * @returns The sublayers returned by the parent's renderLayers()
160
+ */
161
+ export function enrichedRenderLayers(layer, ParentClass) {
162
+ var props = layer.getCurrentLayer().props;
163
+ var _layer$state = layer.state,
164
+ colors = _layer$state.colors,
165
+ rawColorBinValues = _layer$state.rawColorBinValues,
166
+ aggregator = _layer$state.aggregator;
167
+ if (props.colorMap && colors && rawColorBinValues && (aggregator === null || aggregator === void 0 ? void 0 : aggregator.binCount) > 0) {
168
+ classifyBinsByCustomBreaks(colors, aggregator.binCount, props.colorMap, rawColorBinValues);
169
+ }
170
+ return ParentClass.prototype.renderLayers.call(layer);
171
+ }
172
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZEFnZ3JlZ2F0ZWRCaW5NYXAiLCJiaW5WYWx1ZXMiLCJiaW5Db3VudCIsImFnZ3JlZ2F0b3IiLCJiaW5zIiwiaSIsIl9hZ2dyZWdhdG9yJGdldEJpbiRjbyIsIl9hZ2dyZWdhdG9yJGdldEJpbiIsInZhbCIsImNvdW50IiwiZ2V0QmluIiwiY2FsbCIsInZhbHVlIiwiY291bnRzIiwiY2xhc3NpZnlCaW5zQnlDdXN0b21CcmVha3MiLCJzdGF0ZUNvbG9ycyIsImNvbG9yTWFwIiwicmF3VmFsdWVzIiwidGhyZXNob2xkcyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJlbnRyeSIsIk51bWJlciIsImlzRmluaXRlIiwicHVzaCIsImVyciIsImUiLCJmIiwic29ydCIsImEiLCJiIiwibnVtQ29sb3JzIiwibGVuZ3RoIiwiY2xhc3NpZmllZCIsIkZsb2F0MzJBcnJheSIsInYiLCJOYU4iLCJpZHgiLCJ0IiwiY2xhc3NpZmllZEF0dHIiLCJ0eXBlIiwic2l6ZSIsImlucHV0IiwiYXR0cmlidXRlIiwiZW5yaWNoZWRBZ2dyZWdhdGlvblVwZGF0ZSIsImxheWVyIiwiUGFyZW50Q2xhc3MiLCJjaGFubmVsIiwiX3Byb3BzJG9uU2V0Q29sb3JEb21hIiwicHJvdG90eXBlIiwiX29uQWdncmVnYXRpb25VcGRhdGUiLCJwcm9wcyIsImdldEN1cnJlbnRMYXllciIsInN0YXRlIiwicmVzdWx0IiwiZ2V0UmVzdWx0Iiwic2V0U3RhdGUiLCJyYXdDb2xvckJpblZhbHVlcyIsImZyb20iLCJzdWJhcnJheSIsImRvbWFpbiIsImdldFJlc3VsdERvbWFpbiIsImFnZ3JlZ2F0ZWRCaW5zIiwiY29sb3JzIiwiZW5yaWNoZWREb21haW4iLCJjb2xvclNjYWxlVHlwZSIsIkFycmF5Iiwic2xpY2UiLCJmaWx0ZXIiLCJvblNldENvbG9yRG9tYWluIiwiZW5yaWNoZWRSZW5kZXJMYXllcnMiLCJfbGF5ZXIkc3RhdGUiLCJyZW5kZXJMYXllcnMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGF5ZXItdXRpbHMvYWdncmVnYXRpb24tdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHR5cGUge0FnZ3JlZ2F0ZWRCaW4sIENvbG9yTWFwfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuLyoqXG4gKiBCdWlsZCBhIFJlY29yZDxpbmRleCwgQWdncmVnYXRlZEJpbj4gZnJvbSB0aGUgcmF3IEZsb2F0MzJBcnJheSBvZiBwZXItYmluXG4gKiBhZ2dyZWdhdGVkIHZhbHVlcyByZXR1cm5lZCBieSBkZWNrLmdsIDkncyBDUFVBZ2dyZWdhdG9yL1dlYkdMQWdncmVnYXRvci5cbiAqIFRoZSByZXN1bHRpbmcgbWFwIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZm9ybWF0IGtlcGxlci5nbCBleHBlY3RzIGZvclxuICogaGlzdG9ncmFtIHJlbmRlcmluZyBhbmQgY29sb3Itc2NhbGUgc2VsZWN0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFnZ3JlZ2F0ZWRCaW5NYXAoXG4gIGJpblZhbHVlczogQXJyYXlMaWtlPG51bWJlcj4sXG4gIGJpbkNvdW50OiBudW1iZXIsXG4gIGFnZ3JlZ2F0b3I/OiBhbnlcbik6IFJlY29yZDxudW1iZXIsIEFnZ3JlZ2F0ZWRCaW4+IHtcbiAgY29uc3QgYmluczogUmVjb3JkPG51bWJlciwgQWdncmVnYXRlZEJpbj4gPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5Db3VudDsgaSsrKSB7XG4gICAgY29uc3QgdmFsID0gYmluVmFsdWVzW2ldO1xuICAgIGNvbnN0IGNvdW50ID0gYWdncmVnYXRvcj8uZ2V0QmluPy4oaSk/LmNvdW50ID8/IDA7XG4gICAgYmluc1tpXSA9IHtpLCB2YWx1ZTogdmFsLCBjb3VudHM6IGNvdW50fTtcbiAgfVxuICByZXR1cm4gYmlucztcbn1cblxuLyoqXG4gKiBDbGFzc2lmeSByYXcgcGVyLWJpbiBhZ2dyZWdhdGVkIHZhbHVlcyBpbnRvIGJyZWFrIGluZGljZXMgYWNjb3JkaW5nIHRvXG4gKiBhIGN1c3RvbSBjb2xvck1hcCwgYW5kIHBhdGNoIHRoZSBkZWNrLmdsIGludGVybmFsIGBzdGF0ZS5jb2xvcnNgIHNvIHRoZVxuICogR1BVIHNoYWRlciByZW5kZXJzIHRoZSBjb3JyZWN0IGNvbG9yIGZvciBlYWNoIGJpbi5cbiAqXG4gKiBDdXN0b20gYnJlYWtzIGRlZmluZSB0aHJlc2hvbGRzIFt0MCwgdDEsIOKApiwgdF97Ti0yfV0gZm9yIE4gY29sb3JzOlxuICogICBjb2xvciAwOiB2YWx1ZSA8IHQwXG4gKiAgIGNvbG9yIGk6IHRfe2ktMX0gPD0gdmFsdWUgPCB0X2lcbiAqICAgY29sb3IgTi0xOiB2YWx1ZSA+PSB0X3tOLTJ9XG4gKlxuICogV2UgcmVwbGFjZSB0aGUgdmFsdWVzIGluIGBzdGF0ZS5jb2xvcnMuYXR0cmlidXRlYCAvIGBzdGF0ZS5jb2xvcnMuaW5wdXRgXG4gKiB3aXRoIGludGVnZXIgYnJlYWsgaW5kaWNlcyBbMCDigKYgTi0xXS4gIENvbWJpbmVkIHdpdGggYGNvbG9yU2NhbGVUeXBlOiAncXVhbnRpemUnYFxuICogYW5kIGBjb2xvckRvbWFpbjogWzAsIE4tMV1gLCB0aGUgc2hhZGVyJ3MgbGluZWFyIGludGVycG9sYXRpb24gbWFwcyBlYWNoIGluZGV4XG4gKiB0byB0aGUgY29ycmVjdCBjb2xvciB0ZXh0dXJlIHBpeGVsLlxuICpcbiAqIGByYXdWYWx1ZXNgIG11c3QgYmUgdGhlIG9yaWdpbmFsIGFnZ3JlZ2F0ZWQgdmFsdWVzIChub3QgcHJldmlvdXNseSBjbGFzc2lmaWVkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5Qmluc0J5Q3VzdG9tQnJlYWtzKFxuICBzdGF0ZUNvbG9yczogYW55LFxuICBiaW5Db3VudDogbnVtYmVyLFxuICBjb2xvck1hcDogQ29sb3JNYXAsXG4gIHJhd1ZhbHVlczogRmxvYXQzMkFycmF5XG4pOiB2b2lkIHtcbiAgaWYgKCFyYXdWYWx1ZXMgfHwgYmluQ291bnQgPT09IDApIHJldHVybjtcblxuICBjb25zdCB0aHJlc2hvbGRzOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNvbG9yTWFwKSB7XG4gICAgaWYgKHR5cGVvZiBlbnRyeVswXSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKGVudHJ5WzBdKSkge1xuICAgICAgdGhyZXNob2xkcy5wdXNoKGVudHJ5WzBdKTtcbiAgICB9XG4gIH1cbiAgdGhyZXNob2xkcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgY29uc3QgbnVtQ29sb3JzID0gY29sb3JNYXAubGVuZ3RoO1xuICBjb25zdCBjbGFzc2lmaWVkID0gbmV3IEZsb2F0MzJBcnJheShyYXdWYWx1ZXMubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5Db3VudDsgaSsrKSB7XG4gICAgY29uc3QgdiA9IHJhd1ZhbHVlc1tpXTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2KSkge1xuICAgICAgY2xhc3NpZmllZFtpXSA9IE5hTjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaWR4ID0gbnVtQ29sb3JzIC0gMTtcbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRocmVzaG9sZHMubGVuZ3RoOyB0KyspIHtcbiAgICAgIGlmICh2IDwgdGhyZXNob2xkc1t0XSkge1xuICAgICAgICBpZHggPSB0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY2xhc3NpZmllZFtpXSA9IGlkeDtcbiAgfVxuICBmb3IgKGxldCBpID0gYmluQ291bnQ7IGkgPCBjbGFzc2lmaWVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY2xhc3NpZmllZFtpXSA9IE5hTjtcbiAgfVxuXG4gIGNvbnN0IGNsYXNzaWZpZWRBdHRyID0ge3ZhbHVlOiBjbGFzc2lmaWVkLCB0eXBlOiAnZmxvYXQzMicsIHNpemU6IDF9O1xuICBzdGF0ZUNvbG9ycy5pbnB1dCA9IGNsYXNzaWZpZWRBdHRyO1xuICBzdGF0ZUNvbG9ycy5hdHRyaWJ1dGUgPSBjbGFzc2lmaWVkQXR0cjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTaGFyZWQgX29uQWdncmVnYXRpb25VcGRhdGUgLyByZW5kZXJMYXllcnMgbG9naWMgZm9yIFNjYWxlRW5oYW5jZWQqIGxheWVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gZGVjay5nbCA5J3MgX29uQWdncmVnYXRpb25VcGRhdGUgaXMgcHJpdmF0ZSBhbmQgaXRzIG9uU2V0Q29sb3JEb21haW5cbi8vIGNhbGxiYWNrIG9ubHkgcHJvdmlkZXMgW21pbiwgbWF4XS4gIFRoYXQgaXMgc3VmZmljaWVudCBmb3IgcXVhbnRpemUvbGluZWFyXG4vLyBzY2FsZXMgYnV0IGQzLnNjYWxlUXVhbnRpbGUgbmVlZHMgdGhlICpmdWxsIHNvcnRlZCBhcnJheSogb2YgYmluIHZhbHVlcyB0b1xuLy8gY29tcHV0ZSBjb3JyZWN0IGJyZWFrIHBvaW50cyDigJQgd2l0aG91dCBpdCB0aGUgbGVnZW5kIGxhYmVscyBhcmUgd3Jvbmdcbi8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2tlcGxlcmdsL2tlcGxlci5nbC9pc3N1ZXMvMzM4MSkuXG4vL1xuLy8gZGVjay5nbCBkb2VzIG5vdCBleHBvc2UgYSBwdWJsaWMgaG9vayBmb3IgcG9zdC1hZ2dyZWdhdGlvbiBkYXRhLCBhbmQgcHJvcHNcbi8vIGFyZSBPYmplY3QuZnJlZXplKCknZCBzbyB3ZSBjYW5ub3Qgc3VwcHJlc3MgdGhlIHBhcmVudCdzIGNhbGxiYWNrLiAgSW5zdGVhZFxuLy8gd2UgbGV0IHRoZSBwYXJlbnQgZmlyZSBpdHMgW21pbiwgbWF4XSBjYWxsLCB0aGVuIGltbWVkaWF0ZWx5IGZpcmUgYSBzZWNvbmRcbi8vIGVucmljaGVkIGNhbGwgd2l0aCBwZXItYmluIHZhbHVlcyAoYWdncmVnYXRlZEJpbnMpIGFuZCwgZm9yIHF1YW50aWxlIHNjYWxlLFxuLy8gdGhlIGZ1bGwgc29ydGVkIGRvbWFpbi4gIFRoZSBzZWNvbmQgY2FsbCBvdmVyd3JpdGVzIHRoZSBmaXJzdCBkb3duc3RyZWFtIGluXG4vLyBfb25MYXllclNldERvbWFpbi5cbi8vXG4vLyBUaGlzIGNhbiBiZSByZW1vdmVkIG9uY2UgZGVjay5nbCBleHBvc2VzIGEgcmljaGVyIHBvc3QtYWdncmVnYXRpb24gY2FsbGJhY2tcbi8vIG9yIG1ha2VzIF9vbkFnZ3JlZ2F0aW9uVXBkYXRlIC8gQXR0cmlidXRlV2l0aFNjYWxlIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuXG5cbi8qKlxuICogRW5yaWNoZWQgX29uQWdncmVnYXRpb25VcGRhdGUgaW1wbGVtZW50YXRpb24gc2hhcmVkIGJ5IFNjYWxlRW5oYW5jZWRIZXhhZ29uTGF5ZXJcbiAqIGFuZCBTY2FsZUVuaGFuY2VkR3JpZExheWVyLlxuICpcbiAqIEBwYXJhbSBsYXllciAgICAgICBUaGUgZW5oYW5jZWQgbGF5ZXIgaW5zdGFuY2UgKGB0aGlzYClcbiAqIEBwYXJhbSBQYXJlbnRDbGFzcyBUaGUgZGVjay5nbCBwYXJlbnQgY2xhc3MgKEhleGFnb25MYXllciBvciBHcmlkTGF5ZXIpXG4gKiBAcGFyYW0gY2hhbm5lbCAgICAgVGhlIGFnZ3JlZ2F0aW9uIGNoYW5uZWwgaW5kZXggcGFzc2VkIGJ5IGRlY2suZ2xcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVucmljaGVkQWdncmVnYXRpb25VcGRhdGUobGF5ZXI6IGFueSwgUGFyZW50Q2xhc3M6IGFueSwgY2hhbm5lbDogbnVtYmVyKTogdm9pZCB7XG4gIChQYXJlbnRDbGFzcy5wcm90b3R5cGUgYXMgYW55KS5fb25BZ2dyZWdhdGlvblVwZGF0ZS5jYWxsKGxheWVyLCB7Y2hhbm5lbH0pO1xuXG4gIGlmIChjaGFubmVsICE9PSAwKSByZXR1cm47XG5cbiAgY29uc3QgcHJvcHMgPSBsYXllci5nZXRDdXJyZW50TGF5ZXIoKS5wcm9wcztcbiAgY29uc3Qge2FnZ3JlZ2F0b3J9ID0gbGF5ZXIuc3RhdGU7XG4gIGNvbnN0IHJlc3VsdCA9IGFnZ3JlZ2F0b3IuZ2V0UmVzdWx0KDApO1xuICBjb25zdCBiaW5WYWx1ZXMgPSByZXN1bHQ/LnZhbHVlIGFzIEZsb2F0MzJBcnJheSB8IHVuZGVmaW5lZDtcbiAgaWYgKCFiaW5WYWx1ZXMgfHwgYWdncmVnYXRvci5iaW5Db3VudCA8PSAwKSByZXR1cm47XG5cbiAgbGF5ZXIuc2V0U3RhdGUoe1xuICAgIHJhd0NvbG9yQmluVmFsdWVzOiBGbG9hdDMyQXJyYXkuZnJvbShiaW5WYWx1ZXMuc3ViYXJyYXkoMCwgYWdncmVnYXRvci5iaW5Db3VudCkpXG4gIH0pO1xuXG4gIGNvbnN0IGRvbWFpbiA9IGFnZ3JlZ2F0b3IuZ2V0UmVzdWx0RG9tYWluKDApO1xuICBjb25zdCBhZ2dyZWdhdGVkQmlucyA9IGJ1aWxkQWdncmVnYXRlZEJpbk1hcChiaW5WYWx1ZXMsIGFnZ3JlZ2F0b3IuYmluQ291bnQsIGFnZ3JlZ2F0b3IpO1xuXG4gIGlmIChwcm9wcy5jb2xvck1hcCkge1xuICAgIGNsYXNzaWZ5Qmluc0J5Q3VzdG9tQnJlYWtzKGxheWVyLnN0YXRlLmNvbG9ycywgYWdncmVnYXRvci5iaW5Db3VudCwgcHJvcHMuY29sb3JNYXAsIGJpblZhbHVlcyk7XG4gIH1cblxuICBsZXQgZW5yaWNoZWREb21haW4gPSBkb21haW47XG4gIGlmIChwcm9wcy5jb2xvclNjYWxlVHlwZSA9PT0gJ3F1YW50aWxlJykge1xuICAgIGVucmljaGVkRG9tYWluID0gQXJyYXkuZnJvbShiaW5WYWx1ZXMpXG4gICAgICAuc2xpY2UoMCwgYWdncmVnYXRvci5iaW5Db3VudClcbiAgICAgIC5maWx0ZXIoTnVtYmVyLmlzRmluaXRlKVxuICAgICAgLnNvcnQoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhIC0gYik7XG4gIH1cbiAgcHJvcHMub25TZXRDb2xvckRvbWFpbj8uKHtkb21haW46IGVucmljaGVkRG9tYWluLCBhZ2dyZWdhdGVkQmluc30pO1xufVxuXG4vKipcbiAqIFNoYXJlZCByZW5kZXJMYXllcnMoKSB3cmFwcGVyIHRoYXQgcmUtY2xhc3NpZmllcyBiaW5zIHdoZW4gY3VzdG9tIGNvbG9yTWFwXG4gKiBjaGFuZ2VzIGJldHdlZW4gcmVuZGVycyB3aXRob3V0IHRyaWdnZXJpbmcgYSBmdWxsIHJlLWFnZ3JlZ2F0aW9uLlxuICpcbiAqIEBwYXJhbSBsYXllciAgICAgICBUaGUgZW5oYW5jZWQgbGF5ZXIgaW5zdGFuY2UgKGB0aGlzYClcbiAqIEBwYXJhbSBQYXJlbnRDbGFzcyBUaGUgZGVjay5nbCBwYXJlbnQgY2xhc3MgKEhleGFnb25MYXllciBvciBHcmlkTGF5ZXIpXG4gKiBAcmV0dXJucyBUaGUgc3VibGF5ZXJzIHJldHVybmVkIGJ5IHRoZSBwYXJlbnQncyByZW5kZXJMYXllcnMoKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5yaWNoZWRSZW5kZXJMYXllcnMobGF5ZXI6IGFueSwgUGFyZW50Q2xhc3M6IGFueSk6IGFueSB7XG4gIGNvbnN0IHByb3BzID0gbGF5ZXIuZ2V0Q3VycmVudExheWVyKCkucHJvcHM7XG4gIGNvbnN0IHtjb2xvcnMsIHJhd0NvbG9yQmluVmFsdWVzLCBhZ2dyZWdhdG9yfSA9IGxheWVyLnN0YXRlO1xuICBpZiAocHJvcHMuY29sb3JNYXAgJiYgY29sb3JzICYmIHJhd0NvbG9yQmluVmFsdWVzICYmIGFnZ3JlZ2F0b3I/LmJpbkNvdW50ID4gMCkge1xuICAgIGNsYXNzaWZ5Qmluc0J5Q3VzdG9tQnJlYWtzKGNvbG9ycywgYWdncmVnYXRvci5iaW5Db3VudCwgcHJvcHMuY29sb3JNYXAsIHJhd0NvbG9yQmluVmFsdWVzKTtcbiAgfVxuICByZXR1cm4gKFBhcmVudENsYXNzLnBy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
@@ -0,0 +1,86 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
5
+ // SPDX-License-Identifier: MIT
6
+ // Copyright contributors to the kepler.gl project
7
+
8
+ import Supercluster from 'supercluster';
9
+ import memoize from 'lodash/memoize';
10
+ export function getGeoJSON(data, getPosition, filterData) {
11
+ var raw = typeof filterData === 'function' ? data.filter(filterData) : data;
12
+ return raw.map(function (d) {
13
+ return {
14
+ type: 'Point',
15
+ properties: {
16
+ data: d,
17
+ points: [d],
18
+ point_count: 1,
19
+ point_count_abbreviated: '1'
20
+ },
21
+ geometry: {
22
+ coordinates: getPosition(d)
23
+ }
24
+ };
25
+ }).filter(function (d) {
26
+ return d.geometry.coordinates.every(Number.isFinite);
27
+ });
28
+ }
29
+ var clusterResolver = function clusterResolver(_ref) {
30
+ var clusterRadius = _ref.clusterRadius;
31
+ return "".concat(clusterRadius);
32
+ };
33
+ var getClusterer = function getClusterer(_ref2) {
34
+ var clusterRadius = _ref2.clusterRadius,
35
+ geoJSON = _ref2.geoJSON;
36
+ return new Supercluster({
37
+ maxZoom: 20,
38
+ radius: clusterRadius,
39
+ reduce: function reduce(accumulated, props) {
40
+ accumulated.points = [].concat(_toConsumableArray(accumulated.points), _toConsumableArray(props.points));
41
+ },
42
+ map: function map(props) {
43
+ return {
44
+ points: [props.data]
45
+ };
46
+ }
47
+ }).load(geoJSON);
48
+ };
49
+ var ClusterBuilder = /*#__PURE__*/function () {
50
+ function ClusterBuilder() {
51
+ _classCallCheck(this, ClusterBuilder);
52
+ _defineProperty(this, "clusterer", void 0);
53
+ this.clusterer = memoize(getClusterer, clusterResolver);
54
+ }
55
+ return _createClass(ClusterBuilder, [{
56
+ key: "clustersAtZoom",
57
+ value: function clustersAtZoom(_ref3) {
58
+ var bbox = _ref3.bbox,
59
+ clusterRadius = _ref3.clusterRadius,
60
+ geoJSON = _ref3.geoJSON,
61
+ zoom = _ref3.zoom;
62
+ var clusterer = this.clusterer({
63
+ clusterRadius: clusterRadius,
64
+ geoJSON: geoJSON
65
+ });
66
+
67
+ // map clusters to formatted bins to be passed to deck.gl bin-sorter
68
+ var clusters = clusterer.getClusters(bbox, zoom).map(function (c, i) {
69
+ return {
70
+ points: c.properties.points,
71
+ position: c.geometry.coordinates,
72
+ index: i
73
+ };
74
+ });
75
+ return clusters;
76
+ }
77
+ }, {
78
+ key: "clearClustererCache",
79
+ value: function clearClustererCache() {
80
+ var _this$clusterer$cache, _this$clusterer$cache2;
81
+ (_this$clusterer$cache = (_this$clusterer$cache2 = this.clusterer.cache).clear) === null || _this$clusterer$cache === void 0 || _this$clusterer$cache.call(_this$clusterer$cache2);
82
+ }
83
+ }]);
84
+ }();
85
+ export { ClusterBuilder as default };
86
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdXBlcmNsdXN0ZXIiLCJtZW1vaXplIiwiZ2V0R2VvSlNPTiIsImRhdGEiLCJnZXRQb3NpdGlvbiIsImZpbHRlckRhdGEiLCJyYXciLCJmaWx0ZXIiLCJtYXAiLCJkIiwidHlwZSIsInByb3BlcnRpZXMiLCJwb2ludHMiLCJwb2ludF9jb3VudCIsInBvaW50X2NvdW50X2FiYnJldmlhdGVkIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsImV2ZXJ5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJjbHVzdGVyUmVzb2x2ZXIiLCJfcmVmIiwiY2x1c3RlclJhZGl1cyIsImNvbmNhdCIsImdldENsdXN0ZXJlciIsIl9yZWYyIiwiZ2VvSlNPTiIsIm1heFpvb20iLCJyYWRpdXMiLCJyZWR1Y2UiLCJhY2N1bXVsYXRlZCIsInByb3BzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibG9hZCIsIkNsdXN0ZXJCdWlsZGVyIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiY2x1c3RlcmVyIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwidmFsdWUiLCJjbHVzdGVyc0F0Wm9vbSIsIl9yZWYzIiwiYmJveCIsInpvb20iLCJjbHVzdGVycyIsImdldENsdXN0ZXJzIiwiYyIsImkiLCJwb3NpdGlvbiIsImluZGV4IiwiY2xlYXJDbHVzdGVyZXJDYWNoZSIsIl90aGlzJGNsdXN0ZXJlciRjYWNoZSIsIl90aGlzJGNsdXN0ZXJlciRjYWNoZTIiLCJjYWNoZSIsImNsZWFyIiwiY2FsbCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGF5ZXItdXRpbHMvY2x1c3Rlci11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgU3VwZXJjbHVzdGVyIGZyb20gJ3N1cGVyY2x1c3Rlcic7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5pbXBvcnQge01lbW9pemVkRnVuY3Rpb259IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge0JCb3gsIFBvc2l0aW9ufSBmcm9tICdnZW9qc29uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb0pTT04oZGF0YSwgZ2V0UG9zaXRpb24sIGZpbHRlckRhdGEpIHtcbiAgY29uc3QgcmF3ID0gdHlwZW9mIGZpbHRlckRhdGEgPT09ICdmdW5jdGlvbicgPyBkYXRhLmZpbHRlcihmaWx0ZXJEYXRhKSA6IGRhdGE7XG5cbiAgcmV0dXJuIHJhd1xuICAgIC5tYXAoZCA9PiAoe1xuICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZGF0YTogZCxcbiAgICAgICAgcG9pbnRzOiBbZF0sXG4gICAgICAgIHBvaW50X2NvdW50OiAxLFxuICAgICAgICBwb2ludF9jb3VudF9hYmJyZXZpYXRlZDogJzEnXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgY29vcmRpbmF0ZXM6IGdldFBvc2l0aW9uKGQpXG4gICAgICB9XG4gICAgfSkpXG4gICAgLmZpbHRlcihkID0+IGQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSk7XG59XG5cbmNvbnN0IGNsdXN0ZXJSZXNvbHZlciA9ICh7Y2x1c3RlclJhZGl1c306IHtjbHVzdGVyUmFkaXVzOiBudW1iZXJ9KSA9PiBgJHtjbHVzdGVyUmFkaXVzfWA7XG5cbmNvbnN0IGdldENsdXN0ZXJlciA9ICh7Y2x1c3RlclJhZGl1cywgZ2VvSlNPTn06IHtjbHVzdGVyUmFkaXVzOiBudW1iZXI7IGdlb0pTT059KSA9PlxuICBuZXcgU3VwZXJjbHVzdGVyKHtcbiAgICBtYXhab29tOiAyMCxcbiAgICByYWRpdXM6IGNsdXN0ZXJSYWRpdXMsXG4gICAgcmVkdWNlOiAoYWNjdW11bGF0ZWQsIHByb3BzKSA9PiB7XG4gICAgICBhY2N1bXVsYXRlZC5wb2ludHMgPSBbLi4uYWNjdW11bGF0ZWQucG9pbnRzLCAuLi5wcm9wcy5wb2ludHNdO1xuICAgIH0sXG4gICAgbWFwOiBwcm9wcyA9PiAoe3BvaW50czogW3Byb3BzLmRhdGFdfSlcbiAgfSkubG9hZChnZW9KU09OKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2x1c3RlckJ1aWxkZXIge1xuICBjbHVzdGVyZXI6ICgoe2NsdXN0ZXJSYWRpdXMsIGdlb0pTT059OiB7Y2x1c3RlclJhZGl1czogbnVtYmVyOyBnZW9KU09OfSkgPT4gU3VwZXJjbHVzdGVyKSAmXG4gICAgTWVtb2l6ZWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNsdXN0ZXJlciA9IG1lbW9pemUoZ2V0Q2x1c3RlcmVyLCBjbHVzdGVyUmVzb2x2ZXIpO1xuICB9XG5cbiAgY2x1c3RlcnNBdFpvb20oe1xuICAgIGJib3gsXG4gICAgY2x1c3RlclJhZGl1cyxcbiAgICBnZW9KU09OLFxuICAgIHpvb21cbiAgfToge1xuICAgIGJib3g6IEJCb3g7XG4gICAgY2x1c3RlclJhZGl1czogbnVtYmVyO1xuICAgIGdlb0pTT047XG4gICAgem9vbTogbnVtYmVyO1xuICB9KToge1xuICAgIHBvaW50czogYW55O1xuICAgIHBvc2l0aW9uOiBQb3NpdGlvbjtcbiAgICBpbmRleDogbnVtYmVyO1xuICB9W10ge1xuICAgIGNvbnN0IGNsdXN0ZXJlciA9IHRoaXMuY2x1c3RlcmVyKHtjbHVzdGVyUmFkaXVzLCBnZW9KU09OfSk7XG5cbiAgICAvLyBtYXAgY2x1c3RlcnMgdG8gZm9ybWF0dGVkIGJpbnMgdG8gYmUgcGFzc2VkIHRvIGRlY2suZ2wgYmluLXNvcnRlclxuICAgIGNvbnN0IGNsdXN0ZXJzID0gY2x1c3RlcmVyLmdldENsdXN0ZXJzKGJib3gsIHpvb20pLm1hcCgoYywgaSkgPT4gKHtcbiAgICAgIHBvaW50czogYy5wcm9wZXJ0aWVzLnBvaW50cyxcbiAgICAgIHBvc2l0aW9uOiBjLmdlb21ldHJ5LmNvb3JkaW5hdGVzLFxuICAgICAgaW5kZXg6IGlcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gY2x1c3RlcnM7XG4gIH1cblxuICBjbGVhckNsdXN0ZXJlckNhY2hlKCkge1xuICAgIHRoaXMuY2x1c3RlcmVyLmNhY2hlLmNsZWFyPy4oKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxZQUFZLE1BQU0sY0FBYztBQUN2QyxPQUFPQyxPQUFPLE1BQU0sZ0JBQWdCO0FBSXBDLE9BQU8sU0FBU0MsVUFBVUEsQ0FBQ0MsSUFBSSxFQUFFQyxXQUFXLEVBQUVDLFVBQVUsRUFBRTtFQUN4RCxJQUFNQyxHQUFHLEdBQUcsT0FBT0QsVUFBVSxLQUFLLFVBQVUsR0FBR0YsSUFBSSxDQUFDSSxNQUFNLENBQUNGLFVBQVUsQ0FBQyxHQUFHRixJQUFJO0VBRTdFLE9BQU9HLEdBQUcsQ0FDUEUsR0FBRyxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFLO01BQ1RDLElBQUksRUFBRSxPQUFPO01BQ2JDLFVBQVUsRUFBRTtRQUNWUixJQUFJLEVBQUVNLENBQUM7UUFDUEcsTUFBTSxFQUFFLENBQUNILENBQUMsQ0FBQztRQUNYSSxXQUFXLEVBQUUsQ0FBQztRQUNkQyx1QkFBdUIsRUFBRTtNQUMzQixDQUFDO01BQ0RDLFFBQVEsRUFBRTtRQUNSQyxXQUFXLEVBQUVaLFdBQVcsQ0FBQ0ssQ0FBQztNQUM1QjtJQUNGLENBQUM7RUFBQSxDQUFDLENBQUMsQ0FDRkYsTUFBTSxDQUFDLFVBQUFFLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNNLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDO0VBQUEsRUFBQztBQUMvRDtBQUVBLElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQUMsSUFBQTtFQUFBLElBQUtDLGFBQWEsR0FBQUQsSUFBQSxDQUFiQyxhQUFhO0VBQUEsVUFBQUMsTUFBQSxDQUFrQ0QsYUFBYTtBQUFBLENBQUU7QUFFeEYsSUFB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