tangram-core 0.3.0__cp310-cp310-manylinux_2_28_aarch64.whl
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.
- tangram_core/App.vue +441 -0
- tangram_core/CommandPalette.vue +200 -0
- tangram_core/HighlightText.vue +32 -0
- tangram_core/__Timeline.vue +300 -0
- tangram_core/__init__.py +5 -0
- tangram_core/__main__.py +331 -0
- tangram_core/_core.cpython-310-aarch64-linux-gnu.so +0 -0
- tangram_core/_core.pyi +38 -0
- tangram_core/api.ts +652 -0
- tangram_core/backend.py +458 -0
- tangram_core/components.ts +2 -0
- tangram_core/config.py +167 -0
- tangram_core/dist-frontend/aggregation-layers.js +521 -0
- tangram_core/dist-frontend/aggregation-layers.js.map +1 -0
- tangram_core/dist-frontend/assets/_commonjsHelpers-CqkleIqs.js +2 -0
- tangram_core/dist-frontend/assets/_commonjsHelpers-CqkleIqs.js.map +1 -0
- tangram_core/dist-frontend/assets/array-utils-flat-BBMak426.js +11 -0
- tangram_core/dist-frontend/assets/array-utils-flat-BBMak426.js.map +1 -0
- tangram_core/dist-frontend/assets/assert-cyW4mg7q.js +3 -0
- tangram_core/dist-frontend/assets/assert-cyW4mg7q.js.map +1 -0
- tangram_core/dist-frontend/assets/b612-latin-400-italic-DePNXA0a.woff +0 -0
- tangram_core/dist-frontend/assets/b612-latin-400-italic-a-4GLPtl.woff2 +0 -0
- tangram_core/dist-frontend/assets/b612-latin-400-normal-CC98FVm_.woff2 +0 -0
- tangram_core/dist-frontend/assets/b612-latin-400-normal-JbZ7xwUX.woff +0 -0
- tangram_core/dist-frontend/assets/b612-latin-700-normal-B_Snq1wd.woff +0 -0
- tangram_core/dist-frontend/assets/b612-latin-700-normal-BinQrnoB.woff2 +0 -0
- tangram_core/dist-frontend/assets/clip-extension-D-rbmFPj.js +26 -0
- tangram_core/dist-frontend/assets/clip-extension-D-rbmFPj.js.map +1 -0
- tangram_core/dist-frontend/assets/color-CUNNsFV-.js +17 -0
- tangram_core/dist-frontend/assets/color-CUNNsFV-.js.map +1 -0
- tangram_core/dist-frontend/assets/cube-geometry-v0HQ793i.js +2 -0
- tangram_core/dist-frontend/assets/cube-geometry-v0HQ793i.js.map +1 -0
- tangram_core/dist-frontend/assets/deep-equal-BTW2ZN6S.js +2 -0
- tangram_core/dist-frontend/assets/deep-equal-BTW2ZN6S.js.map +1 -0
- tangram_core/dist-frontend/assets/fly-to-interpolator-CIXGjOdo.js +2 -0
- tangram_core/dist-frontend/assets/fly-to-interpolator-CIXGjOdo.js.map +1 -0
- tangram_core/dist-frontend/assets/geojson-layer-DgMOQ4Qu.js +1010 -0
- tangram_core/dist-frontend/assets/geojson-layer-DgMOQ4Qu.js.map +1 -0
- tangram_core/dist-frontend/assets/globe-view-Day_n1iB.js +94 -0
- tangram_core/dist-frontend/assets/globe-view-Day_n1iB.js.map +1 -0
- tangram_core/dist-frontend/assets/globe-viewport-tqhQW7C4.js +2 -0
- tangram_core/dist-frontend/assets/globe-viewport-tqhQW7C4.js.map +1 -0
- tangram_core/dist-frontend/assets/image-loader-hHJsndO6.js +2 -0
- tangram_core/dist-frontend/assets/image-loader-hHJsndO6.js.map +1 -0
- tangram_core/dist-frontend/assets/inconsolata-latin-400-normal-DTZQ6lD6.woff2 +0 -0
- tangram_core/dist-frontend/assets/inconsolata-latin-400-normal-HYADljCo.woff +0 -0
- tangram_core/dist-frontend/assets/inconsolata-latin-700-normal-ByjKuJjN.woff2 +0 -0
- tangram_core/dist-frontend/assets/inconsolata-latin-700-normal-DzgUY3Rl.woff +0 -0
- tangram_core/dist-frontend/assets/inconsolata-latin-ext-400-normal-BaHVOdFB.woff2 +0 -0
- tangram_core/dist-frontend/assets/inconsolata-latin-ext-400-normal-yvPjCxxx.woff +0 -0
- tangram_core/dist-frontend/assets/inconsolata-latin-ext-700-normal-D0Kpgs_9.woff2 +0 -0
- tangram_core/dist-frontend/assets/inconsolata-latin-ext-700-normal-Dlt-daqV.woff +0 -0
- tangram_core/dist-frontend/assets/inconsolata-vietnamese-400-normal-ByiM2lek.woff +0 -0
- tangram_core/dist-frontend/assets/inconsolata-vietnamese-400-normal-DfC_iMic.woff2 +0 -0
- tangram_core/dist-frontend/assets/inconsolata-vietnamese-700-normal-DLCFFAUf.woff +0 -0
- tangram_core/dist-frontend/assets/inconsolata-vietnamese-700-normal-DuasYmn8.woff2 +0 -0
- tangram_core/dist-frontend/assets/index-CcogpxdD.js +824 -0
- tangram_core/dist-frontend/assets/index-CcogpxdD.js.map +1 -0
- tangram_core/dist-frontend/assets/index-SSLdizTv.css +1 -0
- tangram_core/dist-frontend/assets/layer-DPcO4AXQ.js +555 -0
- tangram_core/dist-frontend/assets/layer-DPcO4AXQ.js.map +1 -0
- tangram_core/dist-frontend/assets/layer-extension-CYwTXf73.js +2 -0
- tangram_core/dist-frontend/assets/layer-extension-CYwTXf73.js.map +1 -0
- tangram_core/dist-frontend/assets/mesh-layers-wiqredoy.js +1123 -0
- tangram_core/dist-frontend/assets/mesh-layers-wiqredoy.js.map +1 -0
- tangram_core/dist-frontend/assets/orthographic-viewport-B4nCj5tn.js +2 -0
- tangram_core/dist-frontend/assets/orthographic-viewport-B4nCj5tn.js.map +1 -0
- tangram_core/dist-frontend/assets/pick-layers-pass-C-3k0wbN.js +2 -0
- tangram_core/dist-frontend/assets/pick-layers-pass-C-3k0wbN.js.map +1 -0
- tangram_core/dist-frontend/assets/project-BTjD2Imj.js +760 -0
- tangram_core/dist-frontend/assets/project-BTjD2Imj.js.map +1 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-italic-4qS3_zkX.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-italic-CDK-EZBY.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-normal-Bgns473E.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-normal-_T2aQlWs.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-500-normal-CvEVpWxD.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-500-normal-s4PklZE0.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-700-normal-9RN-Z7cI.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-700-normal-BGMkBBYx.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-italic-C7erd-g8.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-italic-DR5R5TWx.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-normal-DGo1Ayjq.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-normal-WtM1l1qc.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-500-normal-C8FNIdXm.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-500-normal-TLDmfi3Q.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-700-normal-CTXjXnze.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-700-normal-CWPRiRXS.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-greek-400-italic-CR6qj4Z4.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-greek-400-italic-DHRaIs10.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-greek-400-normal-D5vBSIyg.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-greek-400-normal-FabMgVmk.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-greek-500-normal-BIN62cw9.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-greek-500-normal-Hsn-wDIp.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-greek-700-normal-89Up2Xly.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-greek-700-normal-DWMOA2VK.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-400-italic-D_BR-3LG.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-400-italic-om57GXsO.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-400-normal-BICmKrXV.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-400-normal-D2e7XwB1.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-500-normal-3p2daRJW.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-500-normal-Dc9bsamC.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-700-normal-BOl6B_hI.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-700-normal-DRbp0YnP.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-italic-BXrkWnoY.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-italic-Bhem1d5z.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-normal-DT8nEsYA.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-normal-OHaX69iP.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-500-normal-CcSTXKtO.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-500-normal-JgPl2bDS.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-700-normal-B004qtqu.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-700-normal-O6H_RRvN.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-italic-BwUYFJ2t.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-italic-DV8QogUk.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-normal-0o1laQ-g.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-normal-CPsdS8_S.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-500-normal-G9shSJ2z.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-500-normal-TFWhjk13.woff2 +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-700-normal-BtNeb9D6.woff +0 -0
- tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-700-normal-D35V1G0s.woff2 +0 -0
- tangram_core/dist-frontend/assets/shader-Cbdysp2j.js +843 -0
- tangram_core/dist-frontend/assets/shader-Cbdysp2j.js.map +1 -0
- tangram_core/dist-frontend/assets/solid-polygon-layer-DJFl_7Ca.js +392 -0
- tangram_core/dist-frontend/assets/solid-polygon-layer-DJFl_7Ca.js.map +1 -0
- tangram_core/dist-frontend/assets/tesselator-CENyUZ2p.js +2 -0
- tangram_core/dist-frontend/assets/tesselator-CENyUZ2p.js.map +1 -0
- tangram_core/dist-frontend/assets/webgl-developer-tools-utTNOsNf.js +7 -0
- tangram_core/dist-frontend/assets/webgl-developer-tools-utTNOsNf.js.map +1 -0
- tangram_core/dist-frontend/assets/webgl-device-BYRB-GQX.js +3 -0
- tangram_core/dist-frontend/assets/webgl-device-BYRB-GQX.js.map +1 -0
- tangram_core/dist-frontend/assets/widget-BjgEeHAL.js +2 -0
- tangram_core/dist-frontend/assets/widget-BjgEeHAL.js.map +1 -0
- tangram_core/dist-frontend/core.js +60 -0
- tangram_core/dist-frontend/core.js.map +1 -0
- tangram_core/dist-frontend/extensions.js +609 -0
- tangram_core/dist-frontend/extensions.js.map +1 -0
- tangram_core/dist-frontend/favicon.ico +0 -0
- tangram_core/dist-frontend/favicon.png +0 -0
- tangram_core/dist-frontend/geo-layers.js +115 -0
- tangram_core/dist-frontend/geo-layers.js.map +1 -0
- tangram_core/dist-frontend/index.html +39 -0
- tangram_core/dist-frontend/json.js +3 -0
- tangram_core/dist-frontend/json.js.map +1 -0
- tangram_core/dist-frontend/layers.js +268 -0
- tangram_core/dist-frontend/layers.js.map +1 -0
- tangram_core/dist-frontend/mapbox.js +2 -0
- tangram_core/dist-frontend/mapbox.js.map +1 -0
- tangram_core/dist-frontend/mesh-layers.js +2 -0
- tangram_core/dist-frontend/mesh-layers.js.map +1 -0
- tangram_core/dist-frontend/widgets.js +3 -0
- tangram_core/dist-frontend/widgets.js.map +1 -0
- tangram_core/main.ts +28 -0
- tangram_core/package.json +62 -0
- tangram_core/plugin.py +109 -0
- tangram_core/plugin.ts +47 -0
- tangram_core/redis.py +89 -0
- tangram_core/user.css +114 -0
- tangram_core/utils.ts +143 -0
- tangram_core/vite-plugin-tangram.mjs +155 -0
- tangram_core-0.3.0.dist-info/METADATA +101 -0
- tangram_core-0.3.0.dist-info/RECORD +162 -0
- tangram_core-0.3.0.dist-info/WHEEL +4 -0
- tangram_core-0.3.0.dist-info/entry_points.txt +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregation-layers.js","sources":["../../../node_modules/.pnpm/@luma.gl+engine@9.2.6_@luma.gl+core@9.2.6_@luma.gl+shadertools@9.2.6_@luma.gl+core@9.2.6_/node_modules/@luma.gl/engine/dist/compute/texture-transform.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregator/cpu-aggregator/sort-bins.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregator/cpu-aggregator/aggregate.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregator/cpu-aggregator/vertex-accessor.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregator/cpu-aggregator/cpu-aggregator.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregator/gpu-aggregator/utils.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregator/gpu-aggregator/bin-sorter-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregator/gpu-aggregator/webgl-bin-sorter.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregator/gpu-aggregator/aggregation-transform-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregator/gpu-aggregator/webgl-aggregation-transform.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregator/gpu-aggregator/webgl-aggregator.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/aggregation-layer.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/utils/color-utils.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/screen-grid-layer/screen-grid-layer-vertex.glsl.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/screen-grid-layer/screen-grid-layer-fragment.glsl.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/screen-grid-layer/screen-grid-layer-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/screen-grid-layer/screen-grid-cell-layer.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/screen-grid-layer/bin-options-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/screen-grid-layer/screen-grid-layer.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/utils/scale-utils.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/utils/bounds-utils.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/hexagon-layer/hexbin.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/hexagon-layer/hexagon-cell-layer-vertex.glsl.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/hexagon-layer/hexagon-layer-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/hexagon-layer/hexagon-cell-layer.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/hexagon-layer/bin-options-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/hexagon-layer/hexagon-layer.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/contour-layer/marching-squares-codes.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/contour-layer/marching-squares.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/contour-layer/contour-utils.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/contour-layer/value-reader.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/contour-layer/bin-options-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/contour-layer/contour-layer.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/grid-layer/grid-cell-layer-vertex.glsl.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/grid-layer/grid-layer-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/grid-layer/grid-cell-layer.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/grid-layer/bin-options-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/grid-layer/grid-layer.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/heatmap-layer-utils.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/triangle-layer-vertex.glsl.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/triangle-layer-fragment.glsl.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/triangle-layer-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/triangle-layer.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/common/utils/prop-utils.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/aggregation-layer.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/weights-vs.glsl.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/weights-fs.glsl.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/max-vs.glsl.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/max-fs.glsl.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/heatmap-layer-uniforms.js","../../../node_modules/.pnpm/@deck.gl+aggregation-layers@9.2.6_@deck.gl+core@9.2.6_@deck.gl+layers@9.2.6_@deck.gl+co_1bb1eecfa87bfdc354f2630e9f7c1dac/node_modules/@deck.gl/aggregation-layers/dist/heatmap-layer/heatmap-layer.js"],"sourcesContent":["// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getPassthroughFS } from '@luma.gl/shadertools';\nimport { Model } from \"../model/model.js\";\nimport { uid } from \"../utils/uid.js\";\nconst FS_OUTPUT_VARIABLE = 'transform_output';\n/**\n * Creates a pipeline for texture→texture transforms.\n * @deprecated\n */\nexport class TextureTransform {\n device;\n model;\n sampler;\n currentIndex = 0;\n samplerTextureMap = null;\n bindings = []; // each element is an object : {sourceTextures, targetTexture, framebuffer}\n resources = {}; // resources to be deleted\n constructor(device, props) {\n this.device = device;\n // For precise picking of element IDs.\n this.sampler = device.createSampler({\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge',\n minFilter: 'nearest',\n magFilter: 'nearest',\n mipmapFilter: 'nearest'\n });\n this.model = new Model(this.device, {\n id: props.id || uid('texture-transform-model'),\n fs: props.fs ||\n getPassthroughFS({\n input: props.targetTextureVarying,\n inputChannels: props.targetTextureChannels,\n output: FS_OUTPUT_VARIABLE\n }),\n vertexCount: props.vertexCount, // TODO(donmccurdy): Naming?\n ...props\n });\n this._initialize(props);\n Object.seal(this);\n }\n // Delete owned resources.\n destroy() {\n this.model.destroy();\n for (const binding of this.bindings) {\n binding.framebuffer?.destroy();\n }\n }\n /** @deprecated Use {@link destroy}. */\n delete() {\n this.destroy();\n }\n run(options) {\n const { framebuffer } = this.bindings[this.currentIndex];\n const renderPass = this.device.beginRenderPass({ framebuffer, ...options });\n this.model.draw(renderPass);\n renderPass.end();\n this.device.submit();\n }\n getTargetTexture() {\n const { targetTexture } = this.bindings[this.currentIndex];\n return targetTexture;\n }\n getFramebuffer() {\n const currentResources = this.bindings[this.currentIndex];\n return currentResources.framebuffer;\n }\n // Private\n _initialize(props) {\n this._updateBindings(props);\n }\n _updateBindings(props) {\n this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], props);\n }\n _updateBinding(binding, { sourceBuffers, sourceTextures, targetTexture }) {\n if (!binding) {\n binding = {\n sourceBuffers: {},\n sourceTextures: {},\n // @ts-expect-error\n targetTexture: null\n };\n }\n Object.assign(binding.sourceTextures, sourceTextures);\n Object.assign(binding.sourceBuffers, sourceBuffers);\n if (targetTexture) {\n binding.targetTexture = targetTexture;\n const { width, height } = targetTexture;\n // TODO(donmccurdy): When is this called, and is this expected?\n if (binding.framebuffer) {\n binding.framebuffer.destroy();\n }\n binding.framebuffer = this.device.createFramebuffer({\n id: 'transform-framebuffer',\n width,\n height,\n colorAttachments: [targetTexture]\n });\n binding.framebuffer.resize({ width, height });\n }\n return binding;\n }\n // set texture filtering parameters on source textures.\n _setSourceTextureParameters() {\n const index = this.currentIndex;\n const { sourceTextures } = this.bindings[index];\n for (const name in sourceTextures) {\n sourceTextures[name].sampler = this.sampler;\n }\n }\n}\n//# sourceMappingURL=texture-transform.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Group data points into bins */\nexport function sortBins({ pointCount, getBinId }) {\n const binsById = new Map();\n for (let i = 0; i < pointCount; i++) {\n const id = getBinId(i);\n if (id === null) {\n continue;\n }\n let bin = binsById.get(String(id));\n if (bin) {\n bin.points.push(i);\n }\n else {\n bin = {\n id,\n index: binsById.size,\n points: [i]\n };\n binsById.set(String(id), bin);\n }\n }\n return Array.from(binsById.values());\n}\n/** Pack bin ids into a typed array */\nexport function packBinIds({ bins, dimensions, target }) {\n const targetLength = bins.length * dimensions;\n if (!target || target.length < targetLength) {\n target = new Float32Array(targetLength);\n }\n for (let i = 0; i < bins.length; i++) {\n const { id } = bins[i];\n if (Array.isArray(id)) {\n target.set(id, i * dimensions);\n }\n else {\n target[i] = id;\n }\n }\n return target;\n}\n//# sourceMappingURL=sort-bins.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst count = pointIndices => {\n return pointIndices.length;\n};\nconst sum = (pointIndices, getValue) => {\n let result = 0;\n for (const i of pointIndices) {\n result += getValue(i);\n }\n return result;\n};\nconst mean = (pointIndices, getValue) => {\n if (pointIndices.length === 0) {\n return NaN;\n }\n return sum(pointIndices, getValue) / pointIndices.length;\n};\nconst min = (pointIndices, getValue) => {\n let result = Infinity;\n for (const i of pointIndices) {\n const value = getValue(i);\n if (value < result) {\n result = value;\n }\n }\n return result;\n};\nconst max = (pointIndices, getValue) => {\n let result = -Infinity;\n for (const i of pointIndices) {\n const value = getValue(i);\n if (value > result) {\n result = value;\n }\n }\n return result;\n};\nexport const BUILT_IN_OPERATIONS = {\n COUNT: count,\n SUM: sum,\n MEAN: mean,\n MIN: min,\n MAX: max\n};\n/**\n * Performs the aggregation step. See interface Aggregator comments.\n * @returns Floa32Array of aggregated values, one for each bin, and the [min,max] of the values\n */\nexport function aggregate({ bins, getValue, operation, target }) {\n if (!target || target.length < bins.length) {\n target = new Float32Array(bins.length);\n }\n // eslint-disable-next-line @typescript-eslint/no-shadow\n let min = Infinity;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n let max = -Infinity;\n for (let j = 0; j < bins.length; j++) {\n const { points } = bins[j];\n target[j] = operation(points, getValue);\n if (target[j] < min)\n min = target[j];\n if (target[j] > max)\n max = target[j];\n }\n return { value: target, domain: [min, max] };\n}\n//# sourceMappingURL=aggregate.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Evaluate a VertexAccessor with a set of attributes */\nexport function evaluateVertexAccessor(accessor, attributes, options) {\n const vertexReaders = {};\n for (const id of accessor.sources || []) {\n const attribute = attributes[id];\n if (attribute) {\n vertexReaders[id] = getVertexReader(attribute);\n }\n else {\n throw new Error(`Cannot find attribute ${id}`);\n }\n }\n const data = {};\n return (vertexIndex) => {\n for (const id in vertexReaders) {\n data[id] = vertexReaders[id](vertexIndex);\n }\n return accessor.getValue(data, vertexIndex, options);\n };\n}\n/** Read value out of a deck.gl Attribute by vertex */\nfunction getVertexReader(attribute) {\n const value = attribute.value;\n const { offset = 0, stride, size } = attribute.getAccessor();\n const bytesPerElement = value.BYTES_PER_ELEMENT;\n const elementOffset = offset / bytesPerElement;\n const elementStride = stride ? stride / bytesPerElement : size;\n if (size === 1) {\n // Size 1, returns (i: number) => number\n if (attribute.isConstant) {\n return () => value[0];\n }\n return (vertexIndex) => {\n const i = elementOffset + elementStride * vertexIndex;\n return value[i];\n };\n }\n // Size >1, returns (i: number) => number[]\n let result;\n if (attribute.isConstant) {\n result = Array.from(value);\n return () => result;\n }\n result = new Array(size);\n return (vertexIndex) => {\n const i = elementOffset + elementStride * vertexIndex;\n for (let j = 0; j < size; j++) {\n result[j] = value[i + j];\n }\n return result;\n };\n}\n//# sourceMappingURL=vertex-accessor.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { _deepEqual as deepEqual } from '@deck.gl/core';\nimport { sortBins, packBinIds } from \"./sort-bins.js\";\nimport { aggregate, BUILT_IN_OPERATIONS } from \"./aggregate.js\";\nimport { evaluateVertexAccessor } from \"./vertex-accessor.js\";\n/** An Aggregator implementation that calculates aggregation on the CPU */\nexport class CPUAggregator {\n constructor(props) {\n this.bins = [];\n this.binIds = null;\n this.results = [];\n this.dimensions = props.dimensions;\n this.channelCount = props.getValue.length;\n this.props = {\n ...props,\n binOptions: {},\n pointCount: 0,\n operations: [],\n customOperations: [],\n attributes: {}\n };\n this.needsUpdate = true;\n this.setProps(props);\n }\n destroy() { }\n get binCount() {\n return this.bins.length;\n }\n /** Update aggregation props */\n // eslint-disable-next-line complexity\n setProps(props) {\n const oldProps = this.props;\n if (props.binOptions) {\n if (!deepEqual(props.binOptions, oldProps.binOptions, 2)) {\n this.setNeedsUpdate();\n }\n }\n if (props.operations) {\n for (let channel = 0; channel < this.channelCount; channel++) {\n if (props.operations[channel] !== oldProps.operations[channel]) {\n this.setNeedsUpdate(channel);\n }\n }\n }\n if (props.customOperations) {\n for (let channel = 0; channel < this.channelCount; channel++) {\n if (Boolean(props.customOperations[channel]) !== Boolean(oldProps.customOperations[channel])) {\n this.setNeedsUpdate(channel);\n }\n }\n }\n if (props.pointCount !== undefined && props.pointCount !== oldProps.pointCount) {\n this.setNeedsUpdate();\n }\n if (props.attributes) {\n props.attributes = { ...oldProps.attributes, ...props.attributes };\n }\n Object.assign(this.props, props);\n }\n /** Flags a channel to need update\n * This is called internally by setProps() if certain props change\n * Users of this class still need to manually set the dirty flag sometimes, because even if no props changed\n * the underlying buffers could have been updated and require rerunning the aggregation\n * @param {number} channel - mark the given channel as dirty. If not provided, all channels will be updated.\n */\n setNeedsUpdate(channel) {\n if (channel === undefined) {\n this.needsUpdate = true;\n }\n else if (this.needsUpdate !== true) {\n this.needsUpdate = this.needsUpdate || [];\n this.needsUpdate[channel] = true;\n }\n }\n /** Run aggregation */\n update() {\n if (this.needsUpdate === true) {\n this.bins = sortBins({\n pointCount: this.props.pointCount,\n getBinId: evaluateVertexAccessor(this.props.getBin, this.props.attributes, this.props.binOptions)\n });\n const value = packBinIds({\n bins: this.bins,\n dimensions: this.dimensions,\n // Reuse allocated typed array\n target: this.binIds?.value\n });\n this.binIds = { value, type: 'float32', size: this.dimensions };\n }\n for (let channel = 0; channel < this.channelCount; channel++) {\n if (this.needsUpdate === true || this.needsUpdate[channel]) {\n const operation = this.props.customOperations[channel] ||\n BUILT_IN_OPERATIONS[this.props.operations[channel]];\n const { value, domain } = aggregate({\n bins: this.bins,\n getValue: evaluateVertexAccessor(this.props.getValue[channel], this.props.attributes, undefined),\n operation,\n // Reuse allocated typed array\n target: this.results[channel]?.value\n });\n this.results[channel] = { value, domain, type: 'float32', size: 1 };\n this.props.onUpdate?.({ channel });\n }\n }\n this.needsUpdate = false;\n }\n preDraw() { }\n /** Returns an accessor to the bins. */\n getBins() {\n return this.binIds;\n }\n /** Returns an accessor to the output for a given channel. */\n getResult(channel) {\n return this.results[channel];\n }\n /** Returns the [min, max] of aggregated values for a given channel. */\n getResultDomain(channel) {\n return this.results[channel]?.domain ?? [Infinity, -Infinity];\n }\n /** Returns the information for a given bin. */\n getBin(index) {\n const bin = this.bins[index];\n if (!bin) {\n return null;\n }\n const value = new Array(this.channelCount);\n for (let i = 0; i < value.length; i++) {\n const result = this.results[i];\n value[i] = result?.value[index];\n }\n return {\n id: bin.id,\n value,\n count: bin.points.length,\n pointIndices: bin.points\n };\n }\n}\n//# sourceMappingURL=cpu-aggregator.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Create a float texture to store aggregation result\n */\nexport function createRenderTarget(device, width, height) {\n return device.createFramebuffer({\n width,\n height,\n colorAttachments: [\n device.createTexture({\n width,\n height,\n format: 'rgba32float',\n sampler: {\n minFilter: 'nearest',\n magFilter: 'nearest'\n }\n })\n ]\n });\n}\n//# sourceMappingURL=utils.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = /* glsl */ `\\\nuniform binSorterUniforms {\n ivec4 binIdRange;\n ivec2 targetSize;\n} binSorter;\n`;\nexport const binSorterUniforms = {\n name: 'binSorter',\n vs: uniformBlock,\n uniformTypes: {\n binIdRange: 'vec4<i32>',\n targetSize: 'vec2<i32>'\n }\n};\n//# sourceMappingURL=bin-sorter-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Model } from '@luma.gl/engine';\nimport { createRenderTarget } from \"./utils.js\";\nimport { binSorterUniforms } from \"./bin-sorter-uniforms.js\";\nconst COLOR_CHANNELS = [0x1, 0x2, 0x4, 0x8]; // GPU color mask RED, GREEN, BLUE, ALPHA\nconst MAX_FLOAT32 = 3e38;\nconst EMPTY_MASKS = { SUM: 0, MEAN: 0, MIN: 0, MAX: 0, COUNT: 0 };\nexport const TEXTURE_WIDTH = 1024;\n/**\n * This class manages the resources for performing the first step of aggregation\n * Sort a list of data points into a number of bins\n */\nexport class WebGLBinSorter {\n constructor(device, props) {\n /**\n * A packed texture in which each pixel represents a bin.\n * The index of the pixel in the memory layout is the bin index.\n * Alpha value is the count of data points that fall into this bin\n * R,G,B values are the aggregated values of each channel:\n * - Sum of all data points if operation is 'SUM', or 'MEAN'\n * - Min of all data points if operation is 'MIN'\n * - Max of all data points if operation is 'MAX'\n */\n this.binsFBO = null;\n this.device = device;\n this.model = createModel(device, props);\n }\n get texture() {\n return this.binsFBO ? this.binsFBO.colorAttachments[0].texture : null;\n }\n destroy() {\n this.model.destroy();\n this.binsFBO?.colorAttachments[0].texture.destroy();\n this.binsFBO?.destroy();\n }\n getBinValues(index) {\n if (!this.binsFBO) {\n return null;\n }\n const x = index % TEXTURE_WIDTH;\n const y = Math.floor(index / TEXTURE_WIDTH);\n const buffer = this.device.readPixelsToArrayWebGL(this.binsFBO, {\n sourceX: x,\n sourceY: y,\n sourceWidth: 1,\n sourceHeight: 1\n }).buffer;\n return new Float32Array(buffer);\n }\n setDimensions(binCount, binIdRange) {\n const width = TEXTURE_WIDTH;\n const height = Math.ceil(binCount / width);\n // Only destroy existing texture if it is not large enough\n if (!this.binsFBO) {\n this.binsFBO = createRenderTarget(this.device, width, height);\n }\n else if (this.binsFBO.height < height) {\n this.binsFBO.resize({ width, height });\n }\n const binSorterProps = {\n binIdRange: [\n binIdRange[0][0],\n binIdRange[0][1],\n binIdRange[1]?.[0] || 0,\n binIdRange[1]?.[1] || 0\n ],\n targetSize: [this.binsFBO.width, this.binsFBO.height]\n };\n this.model.shaderInputs.setProps({ binSorter: binSorterProps });\n }\n setModelProps(props) {\n const model = this.model;\n if (props.attributes) {\n model.setAttributes(props.attributes);\n }\n if (props.constantAttributes) {\n model.setConstantAttributes(props.constantAttributes);\n }\n if (props.vertexCount !== undefined) {\n model.setVertexCount(props.vertexCount);\n }\n if (props.shaderModuleProps) {\n model.shaderInputs.setProps(props.shaderModuleProps);\n }\n }\n /** Update aggregation */\n update(\n /** The aggregation operation for each channel. Use null to skip update. */\n operations) {\n if (!this.binsFBO) {\n return;\n }\n const masks = getMaskByOperation(operations);\n this._updateBins('SUM', masks.SUM + masks.MEAN);\n this._updateBins('MIN', masks.MIN);\n this._updateBins('MAX', masks.MAX);\n }\n /** Recalculate aggregation on the given channels using the given operation */\n _updateBins(operation, \n /** GPU bit mask of one or more channels that should be updated */\n colorMask) {\n if (colorMask === 0) {\n return;\n }\n colorMask |= COLOR_CHANNELS[3]; // Also renders to the alpha channel (point count)\n const model = this.model;\n const target = this.binsFBO;\n const initialValue = operation === 'MAX' ? -MAX_FLOAT32 : operation === 'MIN' ? MAX_FLOAT32 : 0;\n const renderPass = this.device.beginRenderPass({\n id: `gpu-aggregation-${operation}`,\n framebuffer: target,\n parameters: {\n viewport: [0, 0, target.width, target.height],\n colorMask\n },\n clearColor: [initialValue, initialValue, initialValue, 0],\n clearDepth: false,\n clearStencil: false\n });\n model.setParameters({\n blend: true,\n blendColorSrcFactor: 'one',\n blendColorDstFactor: 'one',\n blendAlphaSrcFactor: 'one',\n blendAlphaDstFactor: 'one',\n blendColorOperation: operation === 'MAX' ? 'max' : operation === 'MIN' ? 'min' : 'add',\n blendAlphaOperation: 'add'\n });\n model.draw(renderPass);\n renderPass.end();\n }\n}\n/** Convert a [channel -> operation] map to a [operation -> GPU color mask] map */\nfunction getMaskByOperation(operations) {\n const result = { ...EMPTY_MASKS };\n for (let channel = 0; channel < operations.length; channel++) {\n const op = operations[channel];\n if (op) {\n result[op] += COLOR_CHANNELS[channel];\n }\n }\n return result;\n}\nfunction createModel(device, props) {\n let userVs = props.vs;\n if (props.dimensions === 2) {\n // If user provides 2d bin IDs, convert them to 1d indices for data packing\n userVs += /* glsl */ `\nvoid getBin(out int binId) {\n ivec2 binId2;\n getBin(binId2);\n if (binId2.x < binSorter.binIdRange.x || binId2.x >= binSorter.binIdRange.y) {\n binId = -1;\n } else {\n binId = (binId2.y - binSorter.binIdRange.z) * (binSorter.binIdRange.y - binSorter.binIdRange.x) + binId2.x;\n }\n}\n`;\n }\n const vs = `\\\n#version 300 es\n#define SHADER_NAME gpu-aggregation-sort-bins-vertex\n\n${userVs}\n\nout vec3 v_Value;\n\nvoid main() {\n int binIndex;\n getBin(binIndex);\n binIndex = binIndex - binSorter.binIdRange.x;\n if (binIndex < 0) {\n gl_Position = vec4(0.);\n return;\n }\n int row = binIndex / binSorter.targetSize.x;\n int col = binIndex - row * binSorter.targetSize.x;\n vec2 position = (vec2(col, row) + 0.5) / vec2(binSorter.targetSize) * 2.0 - 1.0;\n gl_Position = vec4(position, 0.0, 1.0);\n gl_PointSize = 1.0;\n\n#if NUM_CHANNELS == 3\n getValue(v_Value);\n#elif NUM_CHANNELS == 2\n getValue(v_Value.xy);\n#else\n getValue(v_Value.x);\n#endif\n}\n`;\n const fs = /* glsl */ `\\\n#version 300 es\n#define SHADER_NAME gpu-aggregation-sort-bins-fragment\n\nprecision highp float;\n\nin vec3 v_Value;\nout vec4 fragColor;\n\nvoid main() {\n fragColor.xyz = v_Value;\n\n #ifdef MODULE_GEOMETRY\n geometry.uv = vec2(0.);\n DECKGL_FILTER_COLOR(fragColor, geometry);\n #endif\n\n fragColor.w = 1.0;\n}\n`;\n const model = new Model(device, {\n bufferLayout: props.bufferLayout,\n modules: [...(props.modules || []), binSorterUniforms],\n // @ts-expect-error TODO fix luma type\n defines: { ...props.defines, NON_INSTANCED_MODEL: 1, NUM_CHANNELS: props.channelCount },\n isInstanced: false,\n vs,\n fs,\n topology: 'point-list',\n disableWarnings: true\n });\n return model;\n}\n//# sourceMappingURL=webgl-bin-sorter.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = /* glsl */ `\\\nuniform aggregatorTransformUniforms {\n ivec4 binIdRange;\n bvec3 isCount;\n bvec3 isMean;\n float naN;\n} aggregatorTransform;\n`;\nexport const aggregatorTransformUniforms = {\n name: 'aggregatorTransform',\n vs: uniformBlock,\n uniformTypes: {\n binIdRange: 'vec4<i32>',\n isCount: 'vec3<f32>',\n isMean: 'vec3<f32>'\n }\n};\n//# sourceMappingURL=aggregation-transform-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { BufferTransform } from '@luma.gl/engine';\nimport { createRenderTarget } from \"./utils.js\";\nimport { TEXTURE_WIDTH } from \"./webgl-bin-sorter.js\";\nimport { aggregatorTransformUniforms } from \"./aggregation-transform-uniforms.js\";\nconst MAX_FLOAT32 = 3e38;\nexport class WebGLAggregationTransform {\n constructor(device, props) {\n /** Packed from bin ids */\n this.binBuffer = null;\n /** Packed values from each channel of each bin\n * Stride is number of channels * 4 bytes (float32)\n */\n this.valueBuffer = null;\n /** Aggregated [min, max] for each channel */\n this._domains = null;\n this.device = device;\n this.channelCount = props.channelCount;\n this.transform = createTransform(device, props);\n this.domainFBO = createRenderTarget(device, 2, 1);\n }\n destroy() {\n this.transform.destroy();\n this.binBuffer?.destroy();\n this.valueBuffer?.destroy();\n this.domainFBO.colorAttachments[0].texture.destroy();\n this.domainFBO.destroy();\n }\n get domains() {\n if (!this._domains) {\n // Domain model has run, but result has not been read to CPU\n const buffer = this.device.readPixelsToArrayWebGL(this.domainFBO).buffer;\n const domain = new Float32Array(buffer);\n this._domains = [\n [-domain[4], domain[0]],\n [-domain[5], domain[1]],\n [-domain[6], domain[2]]\n ].slice(0, this.channelCount);\n }\n return this._domains;\n }\n setDimensions(binCount, binIdRange) {\n const { model, transformFeedback } = this.transform;\n model.setVertexCount(binCount);\n const aggregatorTransformProps = {\n binIdRange: [\n binIdRange[0][0],\n binIdRange[0][1],\n binIdRange[1]?.[0] || 0,\n binIdRange[1]?.[1] || 0\n ]\n };\n model.shaderInputs.setProps({ aggregatorTransform: aggregatorTransformProps });\n // Only destroy existing buffer if it is not large enough\n const binBufferByteLength = binCount * binIdRange.length * 4;\n if (!this.binBuffer || this.binBuffer.byteLength < binBufferByteLength) {\n this.binBuffer?.destroy();\n this.binBuffer = this.device.createBuffer({ byteLength: binBufferByteLength });\n transformFeedback.setBuffer('binIds', this.binBuffer);\n }\n const valueBufferByteLength = binCount * this.channelCount * 4;\n if (!this.valueBuffer || this.valueBuffer.byteLength < valueBufferByteLength) {\n this.valueBuffer?.destroy();\n this.valueBuffer = this.device.createBuffer({ byteLength: valueBufferByteLength });\n transformFeedback.setBuffer('values', this.valueBuffer);\n }\n }\n update(bins, operations) {\n if (!bins) {\n return;\n }\n const transform = this.transform;\n const target = this.domainFBO;\n const isCount = [0, 1, 2].map(i => (operations[i] === 'COUNT' ? 1 : 0));\n const isMean = [0, 1, 2].map(i => (operations[i] === 'MEAN' ? 1 : 0));\n const aggregatorTransformProps = {\n isCount: isCount,\n isMean: isMean,\n bins\n };\n transform.model.shaderInputs.setProps({ aggregatorTransform: aggregatorTransformProps });\n transform.run({\n id: 'gpu-aggregation-domain',\n framebuffer: target,\n parameters: {\n viewport: [0, 0, 2, 1]\n },\n clearColor: [-MAX_FLOAT32, -MAX_FLOAT32, -MAX_FLOAT32, 0],\n clearDepth: false,\n clearStencil: false\n });\n // Clear the last read results. This will be lazy-populated if used.\n this._domains = null;\n }\n}\nfunction createTransform(device, props) {\n const vs = /* glsl */ `\\\n#version 300 es\n#define SHADER_NAME gpu-aggregation-domain-vertex\n\nuniform sampler2D bins;\n\n#if NUM_DIMS == 1\nout float binIds;\n#else\nout vec2 binIds;\n#endif\n\n#if NUM_CHANNELS == 1\nflat out float values;\n#elif NUM_CHANNELS == 2\nflat out vec2 values;\n#else\nflat out vec3 values;\n#endif\n\nconst float NAN = intBitsToFloat(-1);\n\nvoid main() {\n int row = gl_VertexID / SAMPLER_WIDTH;\n int col = gl_VertexID - row * SAMPLER_WIDTH;\n vec4 weights = texelFetch(bins, ivec2(col, row), 0);\n vec3 value3 = mix(\n mix(weights.rgb, vec3(weights.a), aggregatorTransform.isCount),\n weights.rgb / max(weights.a, 1.0),\n aggregatorTransform.isMean\n );\n if (weights.a == 0.0) {\n value3 = vec3(NAN);\n }\n\n#if NUM_DIMS == 1\n binIds = float(gl_VertexID + aggregatorTransform.binIdRange.x);\n#else\n int y = gl_VertexID / (aggregatorTransform.binIdRange.y - aggregatorTransform.binIdRange.x);\n int x = gl_VertexID - y * (aggregatorTransform.binIdRange.y - aggregatorTransform.binIdRange.x);\n binIds.y = float(y + aggregatorTransform.binIdRange.z);\n binIds.x = float(x + aggregatorTransform.binIdRange.x);\n#endif\n\n#if NUM_CHANNELS == 3\n values = value3;\n#elif NUM_CHANNELS == 2\n values = value3.xy;\n#else\n values = value3.x;\n#endif\n\n gl_Position = vec4(0., 0., 0., 1.);\n // This model renders into a 2x1 texture to obtain min and max simultaneously.\n // See comments in fragment shader\n gl_PointSize = 2.0;\n}\n`;\n const fs = /* glsl */ `\\\n#version 300 es\n#define SHADER_NAME gpu-aggregation-domain-fragment\n\nprecision highp float;\n\n#if NUM_CHANNELS == 1\nflat in float values;\n#elif NUM_CHANNELS == 2\nflat in vec2 values;\n#else\nflat in vec3 values;\n#endif\n\nout vec4 fragColor;\n\nvoid main() {\n vec3 value3;\n#if NUM_CHANNELS == 3\n value3 = values;\n#elif NUM_CHANNELS == 2\n value3.xy = values;\n#else\n value3.x = values;\n#endif\n if (isnan(value3.x)) discard;\n // This shader renders into a 2x1 texture with blending=max\n // The left pixel yields the max value of each channel\n // The right pixel yields the min value of each channel\n if (gl_FragCoord.x < 1.0) {\n fragColor = vec4(value3, 1.0);\n } else {\n fragColor = vec4(-value3, 1.0);\n }\n}\n`;\n return new BufferTransform(device, {\n vs,\n fs,\n topology: 'point-list',\n modules: [aggregatorTransformUniforms],\n parameters: {\n blend: true,\n blendColorSrcFactor: 'one',\n blendColorDstFactor: 'one',\n blendColorOperation: 'max',\n blendAlphaSrcFactor: 'one',\n blendAlphaDstFactor: 'one',\n blendAlphaOperation: 'max'\n },\n defines: {\n // @ts-expect-error TODO fix luma type\n NUM_DIMS: props.dimensions,\n // @ts-expect-error TODO fix luma type\n NUM_CHANNELS: props.channelCount,\n // @ts-expect-error TODO fix luma type\n SAMPLER_WIDTH: TEXTURE_WIDTH\n },\n varyings: ['binIds', 'values'],\n disableWarnings: true\n });\n}\n//# sourceMappingURL=webgl-aggregation-transform.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { WebGLBinSorter } from \"./webgl-bin-sorter.js\";\nimport { WebGLAggregationTransform } from \"./webgl-aggregation-transform.js\";\nimport { _deepEqual as deepEqual, log } from '@deck.gl/core';\n/** An Aggregator implementation that calculates aggregation on the GPU */\nexport class WebGLAggregator {\n /** Checks if the current device supports GPU aggregation */\n static isSupported(device) {\n return (device.features.has('float32-renderable-webgl') &&\n device.features.has('texture-blend-float-webgl'));\n }\n constructor(device, props) {\n this.binCount = 0;\n /** Cached outputs */\n this.binIds = null;\n this.results = [];\n this.device = device;\n this.dimensions = props.dimensions;\n this.channelCount = props.channelCount;\n this.props = {\n ...props,\n pointCount: 0,\n binIdRange: [[0, 0]],\n operations: [],\n attributes: {},\n binOptions: {}\n };\n this.needsUpdate = new Array(this.channelCount).fill(true);\n this.binSorter = new WebGLBinSorter(device, props);\n this.aggregationTransform = new WebGLAggregationTransform(device, props);\n this.setProps(props);\n }\n getBins() {\n const buffer = this.aggregationTransform.binBuffer;\n if (!buffer) {\n return null;\n }\n if (this.binIds?.buffer !== buffer) {\n // deck.gl Attribute.setBinaryValue uses shallow comparison to determine if attribute value has changed\n // For performance, only create a new binary attribute descriptor when Buffer changes\n this.binIds = { buffer, type: 'float32', size: this.dimensions };\n }\n return this.binIds;\n }\n /** Returns an accessor to the output for a given channel. */\n getResult(channel) {\n const buffer = this.aggregationTransform.valueBuffer;\n if (!buffer || channel >= this.channelCount) {\n return null;\n }\n if (this.results[channel]?.buffer !== buffer) {\n this.results[channel] = {\n buffer,\n type: 'float32',\n size: 1,\n stride: this.channelCount * 4,\n offset: channel * 4\n };\n }\n return this.results[channel];\n }\n /** Returns the [min, max] of aggregated values for a given channel. */\n getResultDomain(channel) {\n return this.aggregationTransform.domains[channel];\n }\n /** Returns the information for a given bin. */\n getBin(index) {\n if (index < 0 || index >= this.binCount) {\n return null;\n }\n const { binIdRange } = this.props;\n let id;\n if (this.dimensions === 1) {\n id = [index + binIdRange[0][0]];\n }\n else {\n const [[x0, x1], [y0]] = binIdRange;\n const width = x1 - x0;\n id = [(index % width) + x0, Math.floor(index / width) + y0];\n }\n const pixel = this.binSorter.getBinValues(index);\n if (!pixel) {\n return null;\n }\n const count = pixel[3];\n const value = [];\n for (let channel = 0; channel < this.channelCount; channel++) {\n const operation = this.props.operations[channel];\n if (operation === 'COUNT') {\n value[channel] = count;\n }\n else if (count === 0) {\n value[channel] = NaN;\n }\n else {\n value[channel] = operation === 'MEAN' ? pixel[channel] / count : pixel[channel];\n }\n }\n return { id, value, count };\n }\n /** Release GPU resources */\n destroy() {\n this.binSorter.destroy();\n this.aggregationTransform.destroy();\n }\n /** Update aggregation props. Normalize prop values and set change flags. */\n // eslint-disable-next-line complexity, max-statements\n setProps(props) {\n const oldProps = this.props;\n // Update local settings. These will set the flag this._needsUpdate\n if ('binIdRange' in props && !deepEqual(props.binIdRange, oldProps.binIdRange, 2)) {\n const binIdRange = props.binIdRange;\n log.assert(binIdRange.length === this.dimensions);\n if (this.dimensions === 1) {\n const [[x0, x1]] = binIdRange;\n this.binCount = x1 - x0;\n }\n else {\n const [[x0, x1], [y0, y1]] = binIdRange;\n this.binCount = (x1 - x0) * (y1 - y0);\n }\n this.binSorter.setDimensions(this.binCount, binIdRange);\n this.aggregationTransform.setDimensions(this.binCount, binIdRange);\n this.setNeedsUpdate();\n }\n if (props.operations) {\n for (let channel = 0; channel < this.channelCount; channel++) {\n if (props.operations[channel] !== oldProps.operations[channel]) {\n this.setNeedsUpdate(channel);\n }\n }\n }\n if (props.pointCount !== undefined && props.pointCount !== oldProps.pointCount) {\n this.binSorter.setModelProps({ vertexCount: props.pointCount });\n this.setNeedsUpdate();\n }\n if (props.binOptions) {\n if (!deepEqual(props.binOptions, oldProps.binOptions, 2)) {\n this.setNeedsUpdate();\n }\n this.binSorter.model.shaderInputs.setProps({ binOptions: props.binOptions });\n }\n if (props.attributes) {\n const attributeBuffers = {};\n const constantAttributes = {};\n for (const attribute of Object.values(props.attributes)) {\n for (const [attributeName, value] of Object.entries(attribute.getValue())) {\n if (ArrayBuffer.isView(value)) {\n constantAttributes[attributeName] = value;\n }\n else if (value) {\n attributeBuffers[attributeName] = value;\n }\n }\n }\n this.binSorter.setModelProps({ attributes: attributeBuffers, constantAttributes });\n }\n if (props.shaderModuleProps) {\n this.binSorter.setModelProps({ shaderModuleProps: props.shaderModuleProps });\n }\n Object.assign(this.props, props);\n }\n /** Flags a channel to need update.\n * This is called internally by setProps() if certain props change\n * Users of this class still need to manually set the dirty flag sometimes, because even if no props changed\n * the underlying buffers could have been updated and require rerunning the aggregation\n * @param {number} channel - mark the given channel as dirty. If not provided, all channels will be updated.\n */\n setNeedsUpdate(channel) {\n if (channel === undefined) {\n this.needsUpdate.fill(true);\n }\n else {\n this.needsUpdate[channel] = true;\n }\n }\n update() { }\n /** Run aggregation */\n preDraw() {\n if (!this.needsUpdate.some(Boolean)) {\n return;\n }\n const { operations } = this.props;\n const operationsToUpdate = this.needsUpdate.map((needsUpdate, i) => needsUpdate ? operations[i] : null);\n // Render data to bins\n this.binSorter.update(operationsToUpdate);\n // Read to buffer and calculate domain\n this.aggregationTransform.update(this.binSorter.texture, operations);\n for (let i = 0; i < this.channelCount; i++) {\n if (this.needsUpdate[i]) {\n this.needsUpdate[i] = false;\n this.props.onUpdate?.({ channel: i });\n }\n }\n // Uncomment to debug\n // console.log('binsFBO', new Float32Array(this.device.readPixelsToArrayWebGL(this.binSorter.texture!).buffer));\n // console.log('binsBuffer', new Float32Array(this.aggregationTransform.binBuffer?.readSyncWebGL().buffer!));\n // console.log('resultBuffer', new Float32Array(this.aggregationTransform.valueBuffer?.readSyncWebGL().buffer!));\n }\n}\n//# sourceMappingURL=webgl-aggregator.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer, AttributeManager } from '@deck.gl/core';\nclass AggregationLayer extends CompositeLayer {\n /** Allow this layer to participates in the draw cycle */\n get isDrawable() {\n return true;\n }\n initializeState() {\n this.getAttributeManager().remove(['instancePickingColors']);\n }\n // Extend Layer.updateState to update the Aggregator instance\n // returns true if aggregator is changed\n updateState(params) {\n super.updateState(params);\n const aggregatorType = this.getAggregatorType();\n if (params.changeFlags.extensionsChanged || this.state.aggregatorType !== aggregatorType) {\n this.state.aggregator?.destroy();\n const aggregator = this.createAggregator(aggregatorType);\n aggregator.setProps({\n attributes: this.getAttributeManager()?.attributes\n });\n this.setState({ aggregator, aggregatorType });\n return true;\n }\n return false;\n }\n // Override Layer.finalizeState to dispose the Aggregator instance\n finalizeState(context) {\n super.finalizeState(context);\n this.state.aggregator.destroy();\n }\n // Override Layer.updateAttributes to update the aggregator\n updateAttributes(changedAttributes) {\n const { aggregator } = this.state;\n aggregator.setProps({\n attributes: changedAttributes\n });\n for (const id in changedAttributes) {\n this.onAttributeChange(id);\n }\n // In aggregator.update() the aggregator allocates the buffers to store its output\n // These buffers will be exposed by aggregator.getResults() and passed to the sublayers\n // Therefore update() must be called before renderLayers()\n // CPUAggregator's output is populated right here in update()\n // GPUAggregator's output is pre-allocated and populated in preDraw(), see comments below\n aggregator.update();\n }\n draw({ shaderModuleProps }) {\n // GPU aggregation needs `shaderModuleProps` for projection/filter uniforms which are only accessible at draw time\n // GPUAggregator's Buffers are pre-allocated during `update()` and passed down to the sublayer attributes in renderLayers()\n // Although the Buffers have been bound to the sublayer's Model, their content are not populated yet\n // GPUAggregator.preDraw() is called in the draw cycle here right before Buffers are used by sublayer.draw()\n const { aggregator } = this.state;\n // @ts-expect-error only used by GPU aggregators\n aggregator.setProps({ shaderModuleProps });\n aggregator.preDraw();\n }\n // override CompositeLayer._getAttributeManager to create AttributeManager instance\n _getAttributeManager() {\n return new AttributeManager(this.context.device, {\n id: this.props.id,\n stats: this.context.stats\n });\n }\n}\nAggregationLayer.layerName = 'AggregationLayer';\nexport default AggregationLayer;\n//# sourceMappingURL=aggregation-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport const defaultColorRange = [\n [255, 255, 178],\n [254, 217, 118],\n [254, 178, 76],\n [253, 141, 60],\n [240, 59, 32],\n [189, 0, 38]\n];\n// Converts a colorRange array to a flat array with 4 components per color\nexport function colorRangeToFlatArray(colorRange, normalize = false, ArrayType = Float32Array) {\n let flatArray;\n if (Number.isFinite(colorRange[0])) {\n // its already a flat array.\n flatArray = new ArrayType(colorRange);\n }\n else {\n // flatten it\n flatArray = new ArrayType(colorRange.length * 4);\n let index = 0;\n for (let i = 0; i < colorRange.length; i++) {\n const color = colorRange[i];\n flatArray[index++] = color[0];\n flatArray[index++] = color[1];\n flatArray[index++] = color[2];\n flatArray[index++] = Number.isFinite(color[3]) ? color[3] : 255;\n }\n }\n if (normalize) {\n for (let i = 0; i < flatArray.length; i++) {\n flatArray[i] /= 255;\n }\n }\n return flatArray;\n}\nexport const COLOR_RANGE_FILTER = {\n linear: 'linear',\n quantile: 'nearest',\n quantize: 'nearest',\n ordinal: 'nearest'\n};\nexport function updateColorRangeTexture(texture, type) {\n texture.setSampler({\n minFilter: COLOR_RANGE_FILTER[type],\n magFilter: COLOR_RANGE_FILTER[type]\n });\n}\nexport function createColorRangeTexture(device, colorRange, type = 'linear') {\n const colors = colorRangeToFlatArray(colorRange, false, Uint8Array);\n return device.createTexture({\n format: 'rgba8unorm',\n sampler: {\n minFilter: COLOR_RANGE_FILTER[type],\n magFilter: COLOR_RANGE_FILTER[type],\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n },\n data: colors,\n width: colors.length / 4,\n height: 1\n });\n}\n//# sourceMappingURL=color-utils.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default /* glsl */ `\\\n#version 300 es\n#define SHADER_NAME screen-grid-layer-vertex-shader\n#define RANGE_COUNT 6\nin vec2 positions;\nin vec2 instancePositions;\nin float instanceWeights;\nin vec3 instancePickingColors;\nuniform sampler2D colorRange;\nout vec4 vColor;\nvec4 interp(float value, vec2 domain, sampler2D range) {\nfloat r = (value - domain.x) / (domain.y - domain.x);\nreturn texture(range, vec2(r, 0.5));\n}\nvoid main(void) {\nif (isnan(instanceWeights)) {\ngl_Position = vec4(0.);\nreturn;\n}\nvec2 pos = instancePositions * screenGrid.gridSizeClipspace + positions * screenGrid.cellSizeClipspace;\npos.x = pos.x - 1.0;\npos.y = 1.0 - pos.y;\ngl_Position = vec4(pos, 0., 1.);\nvColor = interp(instanceWeights, screenGrid.colorDomain, colorRange);\nvColor.a *= layer.opacity;\npicking_setPickingColor(instancePickingColors);\n}\n`;\n//# sourceMappingURL=screen-grid-layer-vertex.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* fragment shader for the grid-layer */\nexport default /* glsl */ `\\\n#version 300 es\n#define SHADER_NAME screen-grid-layer-fragment-shader\nprecision highp float;\nin vec4 vColor;\nout vec4 fragColor;\nvoid main(void) {\nfragColor = vColor;\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=screen-grid-layer-fragment.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = /* glsl */ `\\\nuniform screenGridUniforms {\n vec2 cellSizeClipspace;\n vec2 gridSizeClipspace;\n vec2 colorDomain;\n} screenGrid;\n`;\nexport const screenGridUniforms = {\n name: 'screenGrid',\n vs: uniformBlock,\n uniformTypes: {\n cellSizeClipspace: 'vec2<f32>',\n gridSizeClipspace: 'vec2<f32>',\n colorDomain: 'vec2<f32>'\n }\n};\n//# sourceMappingURL=screen-grid-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Model, Geometry } from '@luma.gl/engine';\nimport { Layer, picking } from '@deck.gl/core';\nimport { createColorRangeTexture, updateColorRangeTexture } from \"../common/utils/color-utils.js\";\nimport vs from \"./screen-grid-layer-vertex.glsl.js\";\nimport fs from \"./screen-grid-layer-fragment.glsl.js\";\nimport { screenGridUniforms } from \"./screen-grid-layer-uniforms.js\";\nclass ScreenGridCellLayer extends Layer {\n getShaders() {\n return super.getShaders({ vs, fs, modules: [picking, screenGridUniforms] });\n }\n initializeState() {\n this.getAttributeManager().addInstanced({\n instancePositions: {\n size: 2,\n type: 'float32',\n accessor: 'getBin'\n },\n instanceWeights: {\n size: 1,\n type: 'float32',\n accessor: 'getWeight'\n }\n });\n this.state.model = this._getModel();\n }\n updateState(params) {\n super.updateState(params);\n const { props, oldProps, changeFlags } = params;\n const model = this.state.model;\n if (oldProps.colorRange !== props.colorRange) {\n this.state.colorTexture?.destroy();\n this.state.colorTexture = createColorRangeTexture(this.context.device, props.colorRange, props.colorScaleType);\n const screenGridProps = { colorRange: this.state.colorTexture };\n model.shaderInputs.setProps({ screenGrid: screenGridProps });\n }\n else if (oldProps.colorScaleType !== props.colorScaleType) {\n updateColorRangeTexture(this.state.colorTexture, props.colorScaleType);\n }\n if (oldProps.cellMarginPixels !== props.cellMarginPixels ||\n oldProps.cellSizePixels !== props.cellSizePixels ||\n changeFlags.viewportChanged) {\n const { width, height } = this.context.viewport;\n const { cellSizePixels: gridSize, cellMarginPixels } = this.props;\n const cellSize = Math.max(gridSize - cellMarginPixels, 0);\n const screenGridProps = {\n gridSizeClipspace: [(gridSize / width) * 2, (gridSize / height) * 2],\n cellSizeClipspace: [(cellSize / width) * 2, (cellSize / height) * 2]\n };\n model.shaderInputs.setProps({ screenGrid: screenGridProps });\n }\n }\n finalizeState(context) {\n super.finalizeState(context);\n this.state.colorTexture?.destroy();\n }\n draw({ uniforms }) {\n const colorDomain = this.props.colorDomain();\n const model = this.state.model;\n const screenGridProps = { colorDomain };\n model.shaderInputs.setProps({ screenGrid: screenGridProps });\n model.draw(this.context.renderPass);\n }\n // Private Methods\n _getModel() {\n return new Model(this.context.device, {\n ...this.getShaders(),\n id: this.props.id,\n bufferLayout: this.getAttributeManager().getBufferLayouts(),\n geometry: new Geometry({\n topology: 'triangle-strip',\n attributes: {\n positions: {\n value: new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]),\n size: 2\n }\n }\n }),\n isInstanced: true\n });\n }\n}\nScreenGridCellLayer.layerName = 'ScreenGridCellLayer';\nexport default ScreenGridCellLayer;\n//# sourceMappingURL=screen-grid-cell-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = /* glsl */ `\\\nuniform binOptionsUniforms {\n float cellSizePixels;\n} binOptions;\n`;\nexport const binOptionsUniforms = {\n name: 'binOptions',\n vs: uniformBlock,\n uniformTypes: {\n cellSizePixels: 'f32'\n }\n};\n//# sourceMappingURL=bin-options-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { project32 } from '@deck.gl/core';\nimport { WebGLAggregator, CPUAggregator } from \"../common/aggregator/index.js\";\nimport AggregationLayer from \"../common/aggregation-layer.js\";\nimport ScreenGridCellLayer from \"./screen-grid-cell-layer.js\";\nimport { binOptionsUniforms } from \"./bin-options-uniforms.js\";\nimport { defaultColorRange } from \"../common/utils/color-utils.js\";\nconst defaultProps = {\n cellSizePixels: { type: 'number', value: 100, min: 1 },\n cellMarginPixels: { type: 'number', value: 2, min: 0 },\n colorRange: defaultColorRange,\n colorScaleType: 'linear',\n getPosition: { type: 'accessor', value: (d) => d.position },\n getWeight: { type: 'accessor', value: 1 },\n gpuAggregation: true,\n aggregation: 'SUM'\n};\n/** Aggregates data into histogram bins and renders them as a grid. */\nclass ScreenGridLayer extends AggregationLayer {\n getAggregatorType() {\n return this.props.gpuAggregation && WebGLAggregator.isSupported(this.context.device)\n ? 'gpu'\n : 'cpu';\n }\n createAggregator(type) {\n if (type === 'cpu' || !WebGLAggregator.isSupported(this.context.device)) {\n return new CPUAggregator({\n dimensions: 2,\n getBin: {\n sources: ['positions'],\n getValue: ({ positions }, index, opts) => {\n const viewport = this.context.viewport;\n const p = viewport.project(positions);\n const cellSizePixels = opts.cellSizePixels;\n if (p[0] < 0 || p[0] >= viewport.width || p[1] < 0 || p[1] >= viewport.height) {\n // Not on screen\n return null;\n }\n return [Math.floor(p[0] / cellSizePixels), Math.floor(p[1] / cellSizePixels)];\n }\n },\n getValue: [{ sources: ['counts'], getValue: ({ counts }) => counts }]\n });\n }\n return new WebGLAggregator(this.context.device, {\n dimensions: 2,\n channelCount: 1,\n bufferLayout: this.getAttributeManager().getBufferLayouts({ isInstanced: false }),\n ...super.getShaders({\n modules: [project32, binOptionsUniforms],\n vs: `\n in vec3 positions;\n in vec3 positions64Low;\n in float counts;\n \n void getBin(out ivec2 binId) {\n vec4 pos = project_position_to_clipspace(positions, positions64Low, vec3(0.0));\n vec2 screenCoords = vec2(pos.x / pos.w + 1.0, 1.0 - pos.y / pos.w) / 2.0 * project.viewportSize / project.devicePixelRatio;\n vec2 gridCoords = floor(screenCoords / binOptions.cellSizePixels);\n binId = ivec2(gridCoords);\n }\n void getValue(out float weight) {\n weight = counts;\n }\n `\n })\n });\n }\n initializeState() {\n super.initializeState();\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n positions: {\n size: 3,\n accessor: 'getPosition',\n type: 'float64',\n fp64: this.use64bitPositions()\n },\n // this attribute is used in gpu aggregation path only\n counts: { size: 1, accessor: 'getWeight' }\n });\n }\n shouldUpdateState({ changeFlags }) {\n return changeFlags.somethingChanged;\n }\n updateState(params) {\n const aggregatorChanged = super.updateState(params);\n const { props, oldProps, changeFlags } = params;\n const { cellSizePixels, aggregation } = props;\n if (aggregatorChanged ||\n changeFlags.dataChanged ||\n changeFlags.updateTriggersChanged ||\n changeFlags.viewportChanged ||\n aggregation !== oldProps.aggregation ||\n cellSizePixels !== oldProps.cellSizePixels) {\n const { width, height } = this.context.viewport;\n const { aggregator } = this.state;\n if (aggregator instanceof WebGLAggregator) {\n aggregator.setProps({\n binIdRange: [\n [0, Math.ceil(width / cellSizePixels)],\n [0, Math.ceil(height / cellSizePixels)]\n ]\n });\n }\n aggregator.setProps({\n pointCount: this.getNumInstances(),\n operations: [aggregation],\n binOptions: {\n cellSizePixels\n }\n });\n }\n if (changeFlags.viewportChanged) {\n // Rerun aggregation on viewport change\n this.state.aggregator.setNeedsUpdate();\n }\n return aggregatorChanged;\n }\n onAttributeChange(id) {\n const { aggregator } = this.state;\n switch (id) {\n case 'positions':\n aggregator.setNeedsUpdate();\n break;\n case 'counts':\n aggregator.setNeedsUpdate(0);\n break;\n default:\n // This should not happen\n }\n }\n renderLayers() {\n const { aggregator } = this.state;\n const CellLayerClass = this.getSubLayerClass('cells', ScreenGridCellLayer);\n const binAttribute = aggregator.getBins();\n const weightAttribute = aggregator.getResult(0);\n return new CellLayerClass(this.props, this.getSubLayerProps({\n id: 'cell-layer'\n }), {\n data: {\n length: aggregator.binCount,\n attributes: {\n getBin: binAttribute,\n getWeight: weightAttribute\n }\n },\n // Data has changed shallowly, but we likely don't need to update the attributes\n dataComparator: (data, oldData) => data.length === oldData.length,\n updateTriggers: {\n getBin: [binAttribute],\n getWeight: [weightAttribute]\n },\n parameters: {\n depthWriteEnabled: false,\n ...this.props.parameters\n },\n // Evaluate domain at draw() time\n colorDomain: () => this.props.colorDomain || aggregator.getResultDomain(0),\n // Extensions are already handled by the GPUAggregator, do not pass it down\n extensions: []\n });\n }\n getPickingInfo(params) {\n const info = params.info;\n const { index } = info;\n if (index >= 0) {\n const bin = this.state.aggregator.getBin(index);\n let object;\n if (bin) {\n object = {\n col: bin.id[0],\n row: bin.id[1],\n value: bin.value[0],\n count: bin.count\n };\n if (bin.pointIndices) {\n object.pointIndices = bin.pointIndices;\n object.points = Array.isArray(this.props.data)\n ? bin.pointIndices.map(i => this.props.data[i])\n : [];\n }\n }\n info.object = object;\n }\n return info;\n }\n}\nScreenGridLayer.layerName = 'ScreenGridLayer';\nScreenGridLayer.defaultProps = defaultProps;\nexport default ScreenGridLayer;\n//# sourceMappingURL=screen-grid-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Applies a scale to BinaryAttribute */\nexport class AttributeWithScale {\n constructor(input, inputLength) {\n this.props = {\n scaleType: 'linear',\n lowerPercentile: 0,\n upperPercentile: 100\n };\n /** [min, max] of attribute values, or null if unknown */\n this.domain = null;\n /** Valid domain if lower/upper percentile are defined */\n this.cutoff = null;\n this.input = input;\n this.inputLength = inputLength;\n // No processing is needed with the default scale\n this.attribute = input;\n }\n getScalePercentile() {\n if (!this._percentile) {\n const value = getAttributeValue(this.input, this.inputLength);\n this._percentile = applyScaleQuantile(value);\n }\n return this._percentile;\n }\n getScaleOrdinal() {\n if (!this._ordinal) {\n const value = getAttributeValue(this.input, this.inputLength);\n this._ordinal = applyScaleOrdinal(value);\n }\n return this._ordinal;\n }\n /** Returns the [lowerCutoff, upperCutoff] of scaled values, or null if not applicable */\n getCutoff({ scaleType, lowerPercentile, upperPercentile }) {\n if (scaleType === 'quantile') {\n return [lowerPercentile, upperPercentile - 1];\n }\n if (lowerPercentile > 0 || upperPercentile < 100) {\n const { domain: thresholds } = this.getScalePercentile();\n let lowValue = thresholds[Math.floor(lowerPercentile) - 1] ?? -Infinity;\n let highValue = thresholds[Math.floor(upperPercentile) - 1] ?? Infinity;\n if (scaleType === 'ordinal') {\n const { domain: sortedUniqueValues } = this.getScaleOrdinal();\n lowValue = sortedUniqueValues.findIndex(x => x >= lowValue);\n highValue = sortedUniqueValues.findIndex(x => x > highValue) - 1;\n if (highValue === -2) {\n highValue = sortedUniqueValues.length - 1;\n }\n }\n return [lowValue, highValue];\n }\n return null;\n }\n update(props) {\n const oldProps = this.props;\n if (props.scaleType !== oldProps.scaleType) {\n switch (props.scaleType) {\n case 'quantile': {\n const { attribute } = this.getScalePercentile();\n this.attribute = attribute;\n this.domain = [0, 99];\n break;\n }\n case 'ordinal': {\n const { attribute, domain } = this.getScaleOrdinal();\n this.attribute = attribute;\n this.domain = [0, domain.length - 1];\n break;\n }\n default:\n this.attribute = this.input;\n this.domain = null;\n }\n }\n if (props.scaleType !== oldProps.scaleType ||\n props.lowerPercentile !== oldProps.lowerPercentile ||\n props.upperPercentile !== oldProps.upperPercentile) {\n this.cutoff = this.getCutoff(props);\n }\n this.props = props;\n return this;\n }\n}\n/**\n * Transform an array of values to ordinal indices\n */\nexport function applyScaleOrdinal(values) {\n const uniqueValues = new Set();\n for (const x of values) {\n if (Number.isFinite(x)) {\n uniqueValues.add(x);\n }\n }\n const sortedUniqueValues = Array.from(uniqueValues).sort();\n const domainMap = new Map();\n for (let i = 0; i < sortedUniqueValues.length; i++) {\n domainMap.set(sortedUniqueValues[i], i);\n }\n return {\n attribute: {\n value: values.map(x => (Number.isFinite(x) ? domainMap.get(x) : NaN)),\n type: 'float32',\n size: 1\n },\n domain: sortedUniqueValues\n };\n}\n/**\n * Transform an array of values to percentiles\n */\nexport function applyScaleQuantile(values, rangeLength = 100) {\n const sortedValues = Array.from(values).filter(Number.isFinite).sort(ascending);\n let i = 0;\n const n = Math.max(1, rangeLength);\n const thresholds = new Array(n - 1);\n while (++i < n) {\n thresholds[i - 1] = threshold(sortedValues, i / n);\n }\n return {\n attribute: {\n value: values.map(x => (Number.isFinite(x) ? bisectRight(thresholds, x) : NaN)),\n type: 'float32',\n size: 1\n },\n domain: thresholds\n };\n}\nfunction getAttributeValue(attribute, length) {\n const elementStride = (attribute.stride ?? 4) / 4;\n const elementOffset = (attribute.offset ?? 0) / 4;\n let value = attribute.value;\n if (!value) {\n const bytes = attribute.buffer?.readSyncWebGL(0, elementStride * 4 * length);\n if (bytes) {\n value = new Float32Array(bytes.buffer);\n attribute.value = value;\n }\n }\n if (elementStride === 1) {\n return value.subarray(0, length);\n }\n const result = new Float32Array(length);\n for (let i = 0; i < length; i++) {\n result[i] = value[i * elementStride + elementOffset];\n }\n return result;\n}\nfunction ascending(a, b) {\n return a - b;\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 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}\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 (a[mid] > x) {\n hi = mid;\n }\n else {\n lo = mid + 1;\n }\n }\n return lo;\n}\n//# sourceMappingURL=scale-utils.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Utility to estimate binIdRange as expected by AggregatorProps */\nexport function getBinIdRange({ dataBounds, getBinId, padding = 0 }) {\n const corners = [\n dataBounds[0],\n dataBounds[1],\n [dataBounds[0][0], dataBounds[1][1]],\n [dataBounds[1][0], dataBounds[0][1]]\n ].map(p => getBinId(p));\n const minX = Math.min(...corners.map(p => p[0])) - padding;\n const minY = Math.min(...corners.map(p => p[1])) - padding;\n const maxX = Math.max(...corners.map(p => p[0])) + padding + 1;\n const maxY = Math.max(...corners.map(p => p[1])) + padding + 1;\n return [\n [minX, maxX],\n [minY, maxY]\n ];\n}\n//# sourceMappingURL=bounds-utils.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst THIRD_PI = Math.PI / 3;\nconst DIST_X = 2 * Math.sin(THIRD_PI);\nconst DIST_Y = 1.5;\nexport const HexbinVertices = Array.from({ length: 6 }, (_, i) => {\n const angle = i * THIRD_PI;\n return [Math.sin(angle), -Math.cos(angle)];\n});\n/**\n * Adapted from d3-hexbin\n * Copyright Mike Bostock, 2012-2016\n All rights reserved.\n * https://github.com/d3/d3-hexbin/blob/master/src/hexbin.js\n *\n * Returns the hexbin that a point (x,y) falls into\n */\nexport function pointToHexbin([px, py], radius) {\n let pj = Math.round((py = py / radius / DIST_Y));\n let pi = Math.round((px = px / radius / DIST_X - (pj & 1) / 2));\n const py1 = py - pj;\n if (Math.abs(py1) * 3 > 1) {\n const px1 = px - pi;\n const pi2 = pi + (px < pi ? -1 : 1) / 2;\n const pj2 = pj + (py < pj ? -1 : 1);\n const px2 = px - pi2;\n const py2 = py - pj2;\n if (px1 * px1 + py1 * py1 > px2 * px2 + py2 * py2) {\n pi = pi2 + (pj & 1 ? 1 : -1) / 2;\n pj = pj2;\n }\n }\n return [pi, pj];\n}\nexport const pointToHexbinGLSL = /* glsl */ `\nconst vec2 DIST = vec2(${DIST_X}, ${DIST_Y});\n\nivec2 pointToHexbin(vec2 p, float radius) {\n p /= radius * DIST;\n float pj = round(p.y);\n float pjm2 = mod(pj, 2.0);\n p.x -= pjm2 * 0.5;\n float pi = round(p.x);\n vec2 d1 = p - vec2(pi, pj);\n\n if (abs(d1.y) * 3. > 1.) {\n vec2 v2 = step(0.0, d1) - 0.5;\n v2.y *= 2.0;\n vec2 d2 = d1 - v2;\n if (dot(d1, d1) > dot(d2, d2)) {\n pi += v2.x + pjm2 - 0.5;\n pj += v2.y;\n }\n }\n return ivec2(pi, pj);\n}\n`;\nexport function getHexbinCentroid([i, j], radius) {\n return [(i + (j & 1) / 2) * radius * DIST_X, j * radius * DIST_Y];\n}\nexport const getHexbinCentroidGLSL = `\nconst vec2 DIST = vec2(${DIST_X}, ${DIST_Y});\n\nvec2 hexbinCentroid(vec2 binId, float radius) {\n binId.x += fract(binId.y * 0.5);\n return binId * DIST * radius;\n}\n`;\n//# sourceMappingURL=hexbin.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getHexbinCentroidGLSL } from \"./hexbin.js\";\nexport default /* glsl */ `\\\n#version 300 es\n#define SHADER_NAME hexagon-cell-layer-vertex-shader\nin vec3 positions;\nin vec3 normals;\nin vec2 instancePositions;\nin float instanceElevationValues;\nin float instanceColorValues;\nin vec3 instancePickingColors;\nuniform sampler2D colorRange;\nout vec4 vColor;\n${getHexbinCentroidGLSL}\nfloat interp(float value, vec2 domain, vec2 range) {\nfloat r = min(max((value - domain.x) / (domain.y - domain.x), 0.), 1.);\nreturn mix(range.x, range.y, r);\n}\nvec4 interp(float value, vec2 domain, sampler2D range) {\nfloat r = (value - domain.x) / (domain.y - domain.x);\nreturn texture(range, vec2(r, 0.5));\n}\nvoid main(void) {\ngeometry.pickingColor = instancePickingColors;\nif (isnan(instanceColorValues) ||\ninstanceColorValues < hexagon.colorDomain.z ||\ninstanceColorValues > hexagon.colorDomain.w ||\ninstanceElevationValues < hexagon.elevationDomain.z ||\ninstanceElevationValues > hexagon.elevationDomain.w\n) {\ngl_Position = vec4(0.);\nreturn;\n}\nvec2 commonPosition = hexbinCentroid(instancePositions, column.radius) + (hexagon.originCommon - project.commonOrigin.xy);\ncommonPosition += positions.xy * column.radius * column.coverage;\ngeometry.position = vec4(commonPosition, 0.0, 1.0);\ngeometry.normal = project_normal(normals);\nfloat elevation = 0.0;\nif (column.extruded) {\nelevation = interp(instanceElevationValues, hexagon.elevationDomain.xy, hexagon.elevationRange);\nelevation = project_size(elevation);\ngeometry.position.z = (positions.z + 1.0) / 2.0 * elevation;\n}\ngl_Position = project_common_position_to_clipspace(geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nvColor = interp(instanceColorValues, hexagon.colorDomain.xy, colorRange);\nvColor.a *= layer.opacity;\nif (column.extruded) {\nvColor.rgb = lighting_getLightColor(vColor.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n//# sourceMappingURL=hexagon-cell-layer-vertex.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = /* glsl */ `\\\nuniform hexagonUniforms {\n vec4 colorDomain;\n vec4 elevationDomain;\n vec2 elevationRange;\n vec2 originCommon;\n} hexagon;\n`;\nexport const hexagonUniforms = {\n name: 'hexagon',\n vs: uniformBlock,\n uniformTypes: {\n colorDomain: 'vec4<f32>',\n elevationDomain: 'vec4<f32>',\n elevationRange: 'vec2<f32>',\n originCommon: 'vec2<f32>'\n }\n};\n//# sourceMappingURL=hexagon-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ColumnLayer } from '@deck.gl/layers';\nimport { createColorRangeTexture, updateColorRangeTexture } from \"../common/utils/color-utils.js\";\nimport vs from \"./hexagon-cell-layer-vertex.glsl.js\";\nimport { hexagonUniforms } from \"./hexagon-layer-uniforms.js\";\nclass HexagonCellLayer extends ColumnLayer {\n getShaders() {\n const shaders = super.getShaders();\n shaders.modules.push(hexagonUniforms);\n return { ...shaders, vs };\n }\n initializeState() {\n super.initializeState();\n const attributeManager = this.getAttributeManager();\n attributeManager.remove([\n 'instanceElevations',\n 'instanceFillColors',\n 'instanceLineColors',\n 'instanceStrokeWidths'\n ]);\n attributeManager.addInstanced({\n instancePositions: {\n size: 2,\n type: 'float32',\n accessor: 'getBin'\n },\n instanceColorValues: {\n size: 1,\n type: 'float32',\n accessor: 'getColorValue'\n },\n instanceElevationValues: {\n size: 1,\n type: 'float32',\n accessor: 'getElevationValue'\n }\n });\n }\n updateState(params) {\n super.updateState(params);\n const { props, oldProps } = params;\n const model = this.state.fillModel;\n if (oldProps.colorRange !== props.colorRange) {\n this.state.colorTexture?.destroy();\n this.state.colorTexture = createColorRangeTexture(this.context.device, props.colorRange, props.colorScaleType);\n const hexagonProps = { colorRange: this.state.colorTexture };\n model.shaderInputs.setProps({ hexagon: hexagonProps });\n }\n else if (oldProps.colorScaleType !== props.colorScaleType) {\n updateColorRangeTexture(this.state.colorTexture, props.colorScaleType);\n }\n }\n finalizeState(context) {\n super.finalizeState(context);\n this.state.colorTexture?.destroy();\n }\n draw({ uniforms }) {\n const { radius, hexOriginCommon, elevationRange, elevationScale, extruded, coverage, colorDomain, elevationDomain } = this.props;\n const colorCutoff = this.props.colorCutoff || [-Infinity, Infinity];\n const elevationCutoff = this.props.elevationCutoff || [-Infinity, Infinity];\n const fillModel = this.state.fillModel;\n if (fillModel.vertexArray.indexBuffer) {\n // indices are for drawing wireframe, disable them\n // TODO - this should be handled in ColumnLayer?\n fillModel.setIndexBuffer(null);\n }\n fillModel.setVertexCount(this.state.fillVertexCount);\n const hexagonProps = {\n colorDomain: [\n Math.max(colorDomain[0], colorCutoff[0]), // instanceColorValue that maps to colorRange[0]\n Math.min(colorDomain[1], colorCutoff[1]), // instanceColorValue that maps to colorRange[colorRange.length - 1]\n Math.max(colorDomain[0] - 1, colorCutoff[0]), // hide cell if instanceColorValue is less than this\n Math.min(colorDomain[1] + 1, colorCutoff[1]) // hide cell if instanceColorValue is greater than this\n ],\n elevationDomain: [\n Math.max(elevationDomain[0], elevationCutoff[0]), // instanceElevationValue that maps to elevationRange[0]\n Math.min(elevationDomain[1], elevationCutoff[1]), // instanceElevationValue that maps to elevationRange[elevationRange.length - 1]\n Math.max(elevationDomain[0] - 1, elevationCutoff[0]), // hide cell if instanceElevationValue is less than this\n Math.min(elevationDomain[1] + 1, elevationCutoff[1]) // hide cell if instanceElevationValue is greater than this\n ],\n elevationRange: [elevationRange[0] * elevationScale, elevationRange[1] * elevationScale],\n originCommon: hexOriginCommon\n };\n fillModel.shaderInputs.setProps({\n column: { extruded, coverage, radius },\n hexagon: hexagonProps\n });\n fillModel.draw(this.context.renderPass);\n }\n}\nHexagonCellLayer.layerName = 'HexagonCellLayer';\nexport default HexagonCellLayer;\n//# sourceMappingURL=hexagon-cell-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = /* glsl */ `\\\nuniform binOptionsUniforms {\n vec2 hexOriginCommon;\n float radiusCommon;\n} binOptions;\n`;\nexport const binOptionsUniforms = {\n name: 'binOptions',\n vs: uniformBlock,\n uniformTypes: {\n hexOriginCommon: 'vec2<f32>',\n radiusCommon: 'f32'\n }\n};\n//# sourceMappingURL=bin-options-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log, createIterable, project32, Viewport } from '@deck.gl/core';\nimport { WebGLAggregator, CPUAggregator } from \"../common/aggregator/index.js\";\nimport AggregationLayer from \"../common/aggregation-layer.js\";\nimport { defaultColorRange } from \"../common/utils/color-utils.js\";\nimport { AttributeWithScale } from \"../common/utils/scale-utils.js\";\nimport { getBinIdRange } from \"../common/utils/bounds-utils.js\";\nimport HexagonCellLayer from \"./hexagon-cell-layer.js\";\nimport { pointToHexbin, HexbinVertices, getHexbinCentroid, pointToHexbinGLSL } from \"./hexbin.js\";\nimport { binOptionsUniforms } from \"./bin-options-uniforms.js\";\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() { }\nconst defaultProps = {\n gpuAggregation: true,\n // color\n colorDomain: null,\n colorRange: defaultColorRange,\n getColorValue: { type: 'accessor', value: null }, // default value is calculated from `getColorWeight` and `colorAggregation`\n getColorWeight: { type: 'accessor', value: 1 },\n colorAggregation: 'SUM',\n lowerPercentile: { type: 'number', min: 0, max: 100, value: 0 },\n upperPercentile: { type: 'number', min: 0, max: 100, value: 100 },\n colorScaleType: 'quantize',\n onSetColorDomain: noop,\n // elevation\n elevationDomain: null,\n elevationRange: [0, 1000],\n getElevationValue: { type: 'accessor', value: null }, // default value is calculated from `getElevationWeight` and `elevationAggregation`\n getElevationWeight: { type: 'accessor', value: 1 },\n elevationAggregation: 'SUM',\n elevationScale: { type: 'number', min: 0, value: 1 },\n elevationLowerPercentile: { type: 'number', min: 0, max: 100, value: 0 },\n elevationUpperPercentile: { type: 'number', min: 0, max: 100, value: 100 },\n elevationScaleType: 'linear',\n onSetElevationDomain: noop,\n // hexbin\n radius: { type: 'number', min: 1, value: 1000 },\n coverage: { type: 'number', min: 0, max: 1, value: 1 },\n getPosition: { type: 'accessor', value: (x) => x.position },\n hexagonAggregator: { type: 'function', optional: true, value: null },\n extruded: false,\n // Optional material for 'lighting' shader module\n material: true\n};\n/** Aggregate data into a grid-based heatmap. The color and height of a cell are determined based on the objects it contains. */\nclass HexagonLayer extends AggregationLayer {\n getAggregatorType() {\n const { gpuAggregation, hexagonAggregator, getColorValue, getElevationValue } = this.props;\n if (gpuAggregation && (hexagonAggregator || getColorValue || getElevationValue)) {\n // If these features are desired by the app, the user should explicitly use CPU aggregation\n log.warn('Features not supported by GPU aggregation, falling back to CPU')();\n return 'cpu';\n }\n if (\n // GPU aggregation is requested\n gpuAggregation &&\n // GPU aggregation is supported by the device\n WebGLAggregator.isSupported(this.context.device)) {\n return 'gpu';\n }\n return 'cpu';\n }\n createAggregator(type) {\n if (type === 'cpu') {\n const { hexagonAggregator, radius } = this.props;\n return new CPUAggregator({\n dimensions: 2,\n getBin: {\n sources: ['positions'],\n getValue: ({ positions }, index, opts) => {\n if (hexagonAggregator) {\n return hexagonAggregator(positions, radius);\n }\n const viewport = this.state.aggregatorViewport;\n // project to common space\n const p = viewport.projectPosition(positions);\n const { radiusCommon, hexOriginCommon } = opts;\n return pointToHexbin([p[0] - hexOriginCommon[0], p[1] - hexOriginCommon[1]], radiusCommon);\n }\n },\n getValue: [\n { sources: ['colorWeights'], getValue: ({ colorWeights }) => colorWeights },\n { sources: ['elevationWeights'], getValue: ({ elevationWeights }) => elevationWeights }\n ]\n });\n }\n return new WebGLAggregator(this.context.device, {\n dimensions: 2,\n channelCount: 2,\n bufferLayout: this.getAttributeManager().getBufferLayouts({ isInstanced: false }),\n ...super.getShaders({\n modules: [project32, binOptionsUniforms],\n vs: /* glsl */ `\n in vec3 positions;\n in vec3 positions64Low;\n in float colorWeights;\n in float elevationWeights;\n \n ${pointToHexbinGLSL}\n\n void getBin(out ivec2 binId) {\n vec3 positionCommon = project_position(positions, positions64Low);\n binId = pointToHexbin(positionCommon.xy, binOptions.radiusCommon);\n }\n void getValue(out vec2 value) {\n value = vec2(colorWeights, elevationWeights);\n }\n `\n })\n });\n }\n initializeState() {\n super.initializeState();\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n positions: {\n size: 3,\n accessor: 'getPosition',\n type: 'float64',\n fp64: this.use64bitPositions()\n },\n colorWeights: { size: 1, accessor: 'getColorWeight' },\n elevationWeights: { size: 1, accessor: 'getElevationWeight' }\n });\n }\n // eslint-disable-next-line complexity\n updateState(params) {\n const aggregatorChanged = super.updateState(params);\n const { props, oldProps, changeFlags } = params;\n const { aggregator } = this.state;\n if ((changeFlags.dataChanged || !this.state.dataAsArray) &&\n (props.getColorValue || props.getElevationValue)) {\n // Convert data to array\n this.state.dataAsArray = Array.from(createIterable(props.data).iterable);\n }\n if (aggregatorChanged ||\n changeFlags.dataChanged ||\n props.radius !== oldProps.radius ||\n props.getColorValue !== oldProps.getColorValue ||\n props.getElevationValue !== oldProps.getElevationValue ||\n props.colorAggregation !== oldProps.colorAggregation ||\n props.elevationAggregation !== oldProps.elevationAggregation) {\n this._updateBinOptions();\n const { radiusCommon, hexOriginCommon, binIdRange, dataAsArray } = this.state;\n aggregator.setProps({\n // @ts-expect-error only used by GPUAggregator\n binIdRange,\n pointCount: this.getNumInstances(),\n operations: [props.colorAggregation, props.elevationAggregation],\n binOptions: {\n radiusCommon,\n hexOriginCommon\n },\n onUpdate: this._onAggregationUpdate.bind(this)\n });\n if (dataAsArray) {\n const { getColorValue, getElevationValue } = this.props;\n aggregator.setProps({\n // @ts-expect-error only used by CPUAggregator\n customOperations: [\n getColorValue &&\n ((indices) => getColorValue(indices.map(i => dataAsArray[i]), { indices, data: props.data })),\n getElevationValue &&\n ((indices) => getElevationValue(indices.map(i => dataAsArray[i]), { indices, data: props.data }))\n ]\n });\n }\n }\n if (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getColorValue) {\n aggregator.setNeedsUpdate(0);\n }\n if (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getElevationValue) {\n aggregator.setNeedsUpdate(1);\n }\n return aggregatorChanged;\n }\n _updateBinOptions() {\n const bounds = this.getBounds();\n let radiusCommon = 1;\n let hexOriginCommon = [0, 0];\n let binIdRange = [\n [0, 1],\n [0, 1]\n ];\n let viewport = this.context.viewport;\n if (bounds && Number.isFinite(bounds[0][0])) {\n let centroid = [(bounds[0][0] + bounds[1][0]) / 2, (bounds[0][1] + bounds[1][1]) / 2];\n const { radius } = this.props;\n const { unitsPerMeter } = viewport.getDistanceScales(centroid);\n radiusCommon = unitsPerMeter[0] * radius;\n // Use the centroid of the hex at the center of the data\n // This offsets the common space without changing the bins\n const centerHex = pointToHexbin(viewport.projectFlat(centroid), radiusCommon);\n centroid = viewport.unprojectFlat(getHexbinCentroid(centerHex, radiusCommon));\n const ViewportType = viewport.constructor;\n // We construct a viewport for the GPU aggregator's project module\n // This viewport is determined by data\n // removes arbitrary precision variance that depends on initial view state\n viewport = viewport.isGeospatial\n ? new ViewportType({ longitude: centroid[0], latitude: centroid[1], zoom: 12 })\n : new Viewport({ position: [centroid[0], centroid[1], 0], zoom: 12 });\n hexOriginCommon = [Math.fround(viewport.center[0]), Math.fround(viewport.center[1])];\n binIdRange = getBinIdRange({\n dataBounds: bounds,\n getBinId: (p) => {\n const positionCommon = viewport.projectFlat(p);\n positionCommon[0] -= hexOriginCommon[0];\n positionCommon[1] -= hexOriginCommon[1];\n return pointToHexbin(positionCommon, radiusCommon);\n },\n padding: 1\n });\n }\n this.setState({ radiusCommon, hexOriginCommon, binIdRange, aggregatorViewport: viewport });\n }\n draw(opts) {\n // Replaces render time viewport with our own\n if (opts.shaderModuleProps.project) {\n opts.shaderModuleProps.project.viewport = this.state.aggregatorViewport;\n }\n super.draw(opts);\n }\n _onAggregationUpdate({ channel }) {\n const props = this.getCurrentLayer().props;\n const { aggregator } = this.state;\n if (channel === 0) {\n const result = aggregator.getResult(0);\n this.setState({\n colors: new AttributeWithScale(result, aggregator.binCount)\n });\n props.onSetColorDomain(aggregator.getResultDomain(0));\n }\n else if (channel === 1) {\n const result = aggregator.getResult(1);\n this.setState({\n elevations: new AttributeWithScale(result, aggregator.binCount)\n });\n props.onSetElevationDomain(aggregator.getResultDomain(1));\n }\n }\n onAttributeChange(id) {\n const { aggregator } = this.state;\n switch (id) {\n case 'positions':\n aggregator.setNeedsUpdate();\n this._updateBinOptions();\n const { radiusCommon, hexOriginCommon, binIdRange } = this.state;\n aggregator.setProps({\n // @ts-expect-error only used by GPUAggregator\n binIdRange,\n binOptions: {\n radiusCommon,\n hexOriginCommon\n }\n });\n break;\n case 'colorWeights':\n aggregator.setNeedsUpdate(0);\n break;\n case 'elevationWeights':\n aggregator.setNeedsUpdate(1);\n break;\n default:\n // This should not happen\n }\n }\n renderLayers() {\n const { aggregator, radiusCommon, hexOriginCommon } = this.state;\n const { elevationScale, colorRange, elevationRange, extruded, coverage, material, transitions, colorScaleType, lowerPercentile, upperPercentile, colorDomain, elevationScaleType, elevationLowerPercentile, elevationUpperPercentile, elevationDomain } = this.props;\n const CellLayerClass = this.getSubLayerClass('cells', HexagonCellLayer);\n const binAttribute = aggregator.getBins();\n const colors = this.state.colors?.update({\n scaleType: colorScaleType,\n lowerPercentile,\n upperPercentile\n });\n const elevations = this.state.elevations?.update({\n scaleType: elevationScaleType,\n lowerPercentile: elevationLowerPercentile,\n upperPercentile: elevationUpperPercentile\n });\n if (!colors || !elevations) {\n return null;\n }\n return new CellLayerClass(this.getSubLayerProps({\n id: 'cells'\n }), {\n data: {\n length: aggregator.binCount,\n attributes: {\n getBin: binAttribute,\n getColorValue: colors.attribute,\n getElevationValue: elevations.attribute\n }\n },\n // Data has changed shallowly, but we likely don't need to update the attributes\n dataComparator: (data, oldData) => data.length === oldData.length,\n updateTriggers: {\n getBin: [binAttribute],\n getColorValue: [colors.attribute],\n getElevationValue: [elevations.attribute]\n },\n diskResolution: 6,\n vertices: HexbinVertices,\n radius: radiusCommon,\n hexOriginCommon,\n elevationScale,\n colorRange,\n colorScaleType,\n elevationRange,\n extruded,\n coverage,\n material,\n colorDomain: colors.domain || colorDomain || aggregator.getResultDomain(0),\n elevationDomain: elevations.domain || elevationDomain || aggregator.getResultDomain(1),\n colorCutoff: colors.cutoff,\n elevationCutoff: elevations.cutoff,\n transitions: transitions && {\n getFillColor: transitions.getColorValue || transitions.getColorWeight,\n getElevation: transitions.getElevationValue || transitions.getElevationWeight\n },\n // Extensions are already handled by the GPUAggregator, do not pass it down\n extensions: []\n });\n }\n getPickingInfo(params) {\n const info = params.info;\n const { index } = info;\n if (index >= 0) {\n const bin = this.state.aggregator.getBin(index);\n let object;\n if (bin) {\n const centroidCommon = getHexbinCentroid(bin.id, this.state.radiusCommon);\n const centroid = this.context.viewport.unprojectFlat(centroidCommon);\n object = {\n col: bin.id[0],\n row: bin.id[1],\n position: centroid,\n colorValue: bin.value[0],\n elevationValue: bin.value[1],\n count: bin.count\n };\n if (bin.pointIndices) {\n object.pointIndices = bin.pointIndices;\n object.points = Array.isArray(this.props.data)\n ? bin.pointIndices.map(i => this.props.data[i])\n : [];\n }\n }\n info.object = object;\n }\n return info;\n }\n}\nHexagonLayer.layerName = 'HexagonLayer';\nHexagonLayer.defaultProps = defaultProps;\nexport default HexagonLayer;\n//# sourceMappingURL=hexagon-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Code to Offsets Map needed to implement Marching Squares algorithm\n// Ref: https://en.wikipedia.org/wiki/Marching_squares\n// Table to map code to the intersection offsets\n// All offsets are relative to the center of marching cell (which is top right corner of grid-cell, and center of marching-square)\nconst HALF = 0.5;\nconst ONE6TH = 1 / 6;\nconst OFFSET = {\n N: [0, HALF], // NORTH\n E: [HALF, 0], // EAST\n S: [0, -HALF], // SOUTH\n W: [-HALF, 0], // WEST\n // CORNERS\n NE: [HALF, HALF],\n NW: [-HALF, HALF],\n SE: [HALF, -HALF],\n SW: [-HALF, -HALF]\n};\n// NOTE: vertices are ordered in CCW direction, starting from NW corner\n// Triangles\nconst SW_TRIANGLE = [OFFSET.W, OFFSET.SW, OFFSET.S];\nconst SE_TRIANGLE = [OFFSET.S, OFFSET.SE, OFFSET.E];\nconst NE_TRIANGLE = [OFFSET.E, OFFSET.NE, OFFSET.N];\nconst NW_TRIANGLE = [OFFSET.NW, OFFSET.W, OFFSET.N];\n// Trapezoids\nconst SW_TRAPEZOID = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF]\n];\nconst SE_TRAPEZOID = [\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF],\n [HALF, -ONE6TH],\n [HALF, ONE6TH]\n];\nconst NE_TRAPEZOID = [\n [HALF, -ONE6TH],\n [HALF, ONE6TH],\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\nconst NW_TRAPEZOID = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\n// Rectangles\nconst S_RECTANGLE = [OFFSET.W, OFFSET.SW, OFFSET.SE, OFFSET.E];\nconst E_RECTANGLE = [OFFSET.S, OFFSET.SE, OFFSET.NE, OFFSET.N];\nconst N_RECTANGLE = [OFFSET.NW, OFFSET.W, OFFSET.E, OFFSET.NE];\nconst W_RECTANGLE = [OFFSET.NW, OFFSET.SW, OFFSET.S, OFFSET.N];\nconst EW_RECTANGEL = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n [HALF, -ONE6TH],\n [HALF, ONE6TH]\n];\nconst SN_RECTANGEL = [\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF],\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\n// Square\nconst SQUARE = [OFFSET.NW, OFFSET.SW, OFFSET.SE, OFFSET.NE];\n// Pentagons\nconst SW_PENTAGON = [OFFSET.NW, OFFSET.SW, OFFSET.SE, OFFSET.E, OFFSET.N];\nconst SE_PENTAGON = [OFFSET.W, OFFSET.SW, OFFSET.SE, OFFSET.NE, OFFSET.N];\nconst NE_PENTAGON = [OFFSET.NW, OFFSET.W, OFFSET.S, OFFSET.SE, OFFSET.NE];\nconst NW_PENTAGON = [OFFSET.NW, OFFSET.SW, OFFSET.S, OFFSET.E, OFFSET.NE];\nconst NW_N_PENTAGON = [OFFSET.NW, OFFSET.W, [HALF, -ONE6TH], [HALF, ONE6TH], OFFSET.N];\nconst NE_E_PENTAGON = [[-ONE6TH, -HALF], [ONE6TH, -HALF], OFFSET.E, OFFSET.NE, OFFSET.N];\nconst SE_S_PENTAGON = [[-HALF, ONE6TH], [-HALF, -ONE6TH], OFFSET.S, OFFSET.SE, OFFSET.E];\nconst SW_W_PENTAGON = [OFFSET.W, OFFSET.SW, OFFSET.S, [ONE6TH, HALF], [-ONE6TH, HALF]];\nconst NW_W_PENTAGON = [OFFSET.NW, OFFSET.W, [-ONE6TH, -HALF], [ONE6TH, -HALF], OFFSET.N];\nconst NE_N_PENTAGON = [[-HALF, ONE6TH], [-HALF, -ONE6TH], OFFSET.E, OFFSET.NE, OFFSET.N];\nconst SE_E_PENTAGON = [OFFSET.S, OFFSET.SE, OFFSET.E, [ONE6TH, HALF], [-ONE6TH, HALF]];\nconst SW_S_PENTAGON = [OFFSET.W, OFFSET.SW, OFFSET.S, [HALF, -ONE6TH], [HALF, ONE6TH]];\n// Hexagon\nconst S_HEXAGON = [OFFSET.W, OFFSET.SW, OFFSET.SE, OFFSET.E, [ONE6TH, HALF], [-ONE6TH, HALF]];\nconst E_HEXAGON = [[-HALF, ONE6TH], [-HALF, -ONE6TH], OFFSET.S, OFFSET.SE, OFFSET.NE, OFFSET.N];\nconst N_HEXAGON = [OFFSET.NW, OFFSET.W, [-ONE6TH, -HALF], [ONE6TH, -HALF], OFFSET.E, OFFSET.NE];\nconst W_HEXAGON = [OFFSET.NW, OFFSET.SW, OFFSET.S, [HALF, -ONE6TH], [HALF, ONE6TH], OFFSET.N];\nconst SW_NE_HEXAGON = [OFFSET.W, OFFSET.SW, OFFSET.S, OFFSET.E, OFFSET.NE, OFFSET.N];\nconst NW_SE_HEXAGON = [OFFSET.NW, OFFSET.W, OFFSET.S, OFFSET.SE, OFFSET.E, OFFSET.N];\n// Heptagon (7-sided)\nconst NE_HEPTAGON = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF],\n OFFSET.E,\n OFFSET.NE,\n OFFSET.N\n];\nconst SW_HEPTAGON = [\n OFFSET.W,\n OFFSET.SW,\n OFFSET.S,\n [HALF, -ONE6TH],\n [HALF, ONE6TH],\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\nconst NW_HEPTAGON = [\n OFFSET.NW,\n OFFSET.W,\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF],\n [HALF, -ONE6TH],\n [HALF, ONE6TH],\n OFFSET.N\n];\nconst SE_HEPTAGON = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n OFFSET.S,\n OFFSET.SE,\n OFFSET.E,\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\n// Octagon\nconst OCTAGON = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF],\n [HALF, -ONE6TH],\n [HALF, ONE6TH],\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\n// Note: above wiki page invertes white/black dots for generating the code, we don't\nexport const ISOLINES_CODE_OFFSET_MAP = {\n // key is equal to the code of 4 vertices (invert the code specified in wiki)\n // value can be an array or an Object\n // Array : [line] or [line, line], where each line is [start-point, end-point], and each point is [x, y]\n // Object : to handle saddle cases, whos output depends on mean value of all 4 corners\n // key: code of mean value (0 or 1)\n // value: Array , as above defines one or two line segments\n 0: [],\n 1: [[OFFSET.W, OFFSET.S]],\n 2: [[OFFSET.S, OFFSET.E]],\n 3: [[OFFSET.W, OFFSET.E]],\n 4: [[OFFSET.N, OFFSET.E]],\n 5: {\n 0: [\n [OFFSET.W, OFFSET.S],\n [OFFSET.N, OFFSET.E]\n ],\n 1: [\n [OFFSET.W, OFFSET.N],\n [OFFSET.S, OFFSET.E]\n ]\n },\n 6: [[OFFSET.N, OFFSET.S]],\n 7: [[OFFSET.W, OFFSET.N]],\n 8: [[OFFSET.W, OFFSET.N]],\n 9: [[OFFSET.N, OFFSET.S]],\n 10: {\n 0: [\n [OFFSET.W, OFFSET.N],\n [OFFSET.S, OFFSET.E]\n ],\n 1: [\n [OFFSET.W, OFFSET.S],\n [OFFSET.N, OFFSET.E]\n ]\n },\n 11: [[OFFSET.N, OFFSET.E]],\n 12: [[OFFSET.W, OFFSET.E]],\n 13: [[OFFSET.S, OFFSET.E]],\n 14: [[OFFSET.W, OFFSET.S]],\n 15: []\n};\nfunction ternaryToIndex(ternary) {\n return parseInt(ternary, 4);\n}\nexport const ISOBANDS_CODE_OFFSET_MAP = {\n // Below list of cases, follow the same order as in above mentioned wiki page.\n // Each case has its code on first commented line // T,TR,R,C\n // where T: Top, TR: Top-right, R: Right and C: current, each will be either 0, 1 or 2\n // final code is binary representation of above code , where takes 2 digits\n // for example: code 2-2-2-1 => 10-10-10-01 => 10101001 => 169\n // no contours\n [ternaryToIndex('0000')]: [],\n [ternaryToIndex('2222')]: [],\n // single triangle\n [ternaryToIndex('2221')]: [SW_TRIANGLE],\n [ternaryToIndex('2212')]: [SE_TRIANGLE],\n [ternaryToIndex('2122')]: [NE_TRIANGLE],\n [ternaryToIndex('1222')]: [NW_TRIANGLE],\n [ternaryToIndex('0001')]: [SW_TRIANGLE],\n [ternaryToIndex('0010')]: [SE_TRIANGLE],\n [ternaryToIndex('0100')]: [NE_TRIANGLE],\n [ternaryToIndex('1000')]: [NW_TRIANGLE],\n // single trapezoid\n [ternaryToIndex('2220')]: [SW_TRAPEZOID],\n [ternaryToIndex('2202')]: [SE_TRAPEZOID],\n [ternaryToIndex('2022')]: [NE_TRAPEZOID],\n [ternaryToIndex('0222')]: [NW_TRAPEZOID],\n [ternaryToIndex('0002')]: [SW_TRAPEZOID],\n [ternaryToIndex('0020')]: [SE_TRAPEZOID],\n [ternaryToIndex('0200')]: [NE_TRAPEZOID],\n [ternaryToIndex('2000')]: [NW_TRAPEZOID],\n // single rectangle\n [ternaryToIndex('0011')]: [S_RECTANGLE],\n [ternaryToIndex('0110')]: [E_RECTANGLE],\n [ternaryToIndex('1100')]: [N_RECTANGLE],\n [ternaryToIndex('1001')]: [W_RECTANGLE],\n [ternaryToIndex('2211')]: [S_RECTANGLE],\n [ternaryToIndex('2112')]: [E_RECTANGLE],\n [ternaryToIndex('1122')]: [N_RECTANGLE],\n [ternaryToIndex('1221')]: [W_RECTANGLE],\n [ternaryToIndex('2200')]: [EW_RECTANGEL],\n [ternaryToIndex('2002')]: [SN_RECTANGEL],\n [ternaryToIndex('0022')]: [EW_RECTANGEL],\n [ternaryToIndex('0220')]: [SN_RECTANGEL],\n // single square\n // 1111\n [ternaryToIndex('1111')]: [SQUARE],\n // single pentagon\n [ternaryToIndex('1211')]: [SW_PENTAGON],\n [ternaryToIndex('2111')]: [SE_PENTAGON],\n [ternaryToIndex('1112')]: [NE_PENTAGON],\n [ternaryToIndex('1121')]: [NW_PENTAGON],\n [ternaryToIndex('1011')]: [SW_PENTAGON],\n [ternaryToIndex('0111')]: [SE_PENTAGON],\n [ternaryToIndex('1110')]: [NE_PENTAGON],\n [ternaryToIndex('1101')]: [NW_PENTAGON],\n [ternaryToIndex('1200')]: [NW_N_PENTAGON],\n [ternaryToIndex('0120')]: [NE_E_PENTAGON],\n [ternaryToIndex('0012')]: [SE_S_PENTAGON],\n [ternaryToIndex('2001')]: [SW_W_PENTAGON],\n [ternaryToIndex('1022')]: [NW_N_PENTAGON],\n [ternaryToIndex('2102')]: [NE_E_PENTAGON],\n [ternaryToIndex('2210')]: [SE_S_PENTAGON],\n [ternaryToIndex('0221')]: [SW_W_PENTAGON],\n [ternaryToIndex('1002')]: [NW_W_PENTAGON],\n [ternaryToIndex('2100')]: [NE_N_PENTAGON],\n [ternaryToIndex('0210')]: [SE_E_PENTAGON],\n [ternaryToIndex('0021')]: [SW_S_PENTAGON],\n [ternaryToIndex('1220')]: [NW_W_PENTAGON],\n [ternaryToIndex('0122')]: [NE_N_PENTAGON],\n [ternaryToIndex('2012')]: [SE_E_PENTAGON],\n [ternaryToIndex('2201')]: [SW_S_PENTAGON],\n // single hexagon\n [ternaryToIndex('0211')]: [S_HEXAGON],\n [ternaryToIndex('2110')]: [E_HEXAGON],\n [ternaryToIndex('1102')]: [N_HEXAGON],\n [ternaryToIndex('1021')]: [W_HEXAGON],\n [ternaryToIndex('2011')]: [S_HEXAGON],\n [ternaryToIndex('0112')]: [E_HEXAGON],\n [ternaryToIndex('1120')]: [N_HEXAGON],\n [ternaryToIndex('1201')]: [W_HEXAGON],\n [ternaryToIndex('2101')]: [SW_NE_HEXAGON],\n [ternaryToIndex('0121')]: [SW_NE_HEXAGON],\n [ternaryToIndex('1012')]: [NW_SE_HEXAGON],\n [ternaryToIndex('1210')]: [NW_SE_HEXAGON],\n // 6-sided polygons based on mean weight\n // NOTE: merges mean value codes for extreme changes (as per above Wiki doc)\n [ternaryToIndex('0101')]: {\n 0: [SW_TRIANGLE, NE_TRIANGLE],\n 1: [SW_NE_HEXAGON],\n 2: [SW_NE_HEXAGON]\n },\n [ternaryToIndex('1010')]: {\n 0: [NW_TRIANGLE, SE_TRIANGLE],\n 1: [NW_SE_HEXAGON],\n 2: [NW_SE_HEXAGON]\n },\n [ternaryToIndex('2121')]: {\n 0: [SW_NE_HEXAGON],\n 1: [SW_NE_HEXAGON],\n 2: [SW_TRIANGLE, NE_TRIANGLE]\n },\n [ternaryToIndex('1212')]: {\n 0: [NW_SE_HEXAGON],\n 1: [NW_SE_HEXAGON],\n 2: [NW_TRIANGLE, SE_TRIANGLE]\n },\n // 7-sided polygons based on mean weight\n [ternaryToIndex('2120')]: {\n 0: [NE_HEPTAGON],\n 1: [NE_HEPTAGON],\n 2: [SW_TRAPEZOID, NE_TRIANGLE]\n },\n [ternaryToIndex('2021')]: {\n 0: [SW_HEPTAGON],\n 1: [SW_HEPTAGON],\n 2: [SW_TRIANGLE, NE_TRAPEZOID]\n },\n [ternaryToIndex('1202')]: {\n 0: [NW_HEPTAGON],\n 1: [NW_HEPTAGON],\n 2: [NW_TRIANGLE, SE_TRAPEZOID]\n },\n [ternaryToIndex('0212')]: {\n 0: [SE_HEPTAGON],\n 1: [SE_HEPTAGON],\n 2: [SE_TRIANGLE, NW_TRAPEZOID]\n },\n [ternaryToIndex('0102')]: {\n 0: [SW_TRAPEZOID, NE_TRIANGLE],\n 1: [NE_HEPTAGON],\n 2: [NE_HEPTAGON]\n },\n [ternaryToIndex('0201')]: {\n 0: [SW_TRIANGLE, NE_TRAPEZOID],\n 1: [SW_HEPTAGON],\n 2: [SW_HEPTAGON]\n },\n [ternaryToIndex('1020')]: {\n 0: [NW_TRIANGLE, SE_TRAPEZOID],\n 1: [NW_HEPTAGON],\n 2: [NW_HEPTAGON]\n },\n [ternaryToIndex('2010')]: {\n 0: [SE_TRIANGLE, NW_TRAPEZOID],\n 1: [SE_HEPTAGON],\n 2: [SE_HEPTAGON]\n },\n // 8-sided polygons based on mean weight\n [ternaryToIndex('2020')]: {\n 0: [NW_TRAPEZOID, SE_TRAPEZOID],\n 1: [OCTAGON],\n 2: [SW_TRAPEZOID, NE_TRAPEZOID]\n },\n [ternaryToIndex('0202')]: {\n 0: [NE_TRAPEZOID, SW_TRAPEZOID],\n 1: [OCTAGON],\n 2: [NW_TRAPEZOID, SE_TRAPEZOID]\n }\n};\n//# sourceMappingURL=marching-squares-codes.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// All utility methods needed to implement Marching Squares algorithm\n// Ref: https://en.wikipedia.org/wiki/Marching_squares\nimport { ISOLINES_CODE_OFFSET_MAP, ISOBANDS_CODE_OFFSET_MAP } from \"./marching-squares-codes.js\";\n// Utility methods\nfunction getVertexCode(weight, threshold) {\n // threshold must be a single value or a range (array of size 2)\n if (Number.isNaN(weight)) {\n return 0;\n }\n // Iso-bands\n if (Array.isArray(threshold)) {\n if (weight < threshold[0]) {\n return 0;\n }\n return weight < threshold[1] ? 1 : 2;\n }\n // Iso-lines\n return weight >= threshold ? 1 : 0;\n}\n// Returns marching square code for given cell\n/* eslint-disable complexity, max-statements*/\nexport function getCode(opts) {\n // Assumptions\n // Origin is on bottom-left , and X increase to right, Y to top\n // When processing one cell, we process 4 cells, by extending row to top and on column to right\n // to create a 2X2 cell grid\n const { x, y, xRange, yRange, getValue, threshold } = opts;\n const isLeftBoundary = x < xRange[0];\n const isRightBoundary = x >= xRange[1] - 1;\n const isBottomBoundary = y < yRange[0];\n const isTopBoundary = y >= yRange[1] - 1;\n const isBoundary = isLeftBoundary || isRightBoundary || isBottomBoundary || isTopBoundary;\n let weights = 0;\n let current;\n let right;\n let top;\n let topRight;\n // TOP\n if (isLeftBoundary || isTopBoundary) {\n top = 0;\n }\n else {\n const w = getValue(x, y + 1);\n top = getVertexCode(w, threshold);\n weights += w;\n }\n // TOP-RIGHT\n if (isRightBoundary || isTopBoundary) {\n topRight = 0;\n }\n else {\n const w = getValue(x + 1, y + 1);\n topRight = getVertexCode(w, threshold);\n weights += w;\n }\n // RIGHT\n if (isRightBoundary || isBottomBoundary) {\n right = 0;\n }\n else {\n const w = getValue(x + 1, y);\n right = getVertexCode(w, threshold);\n weights += w;\n }\n // CURRENT\n if (isLeftBoundary || isBottomBoundary) {\n current = 0;\n }\n else {\n const w = getValue(x, y);\n current = getVertexCode(w, threshold);\n weights += w;\n }\n let code = -1;\n if (Number.isFinite(threshold)) {\n code = (top << 3) | (topRight << 2) | (right << 1) | current;\n }\n if (Array.isArray(threshold)) {\n code = (top << 6) | (topRight << 4) | (right << 2) | current;\n }\n let meanCode = 0;\n // meanCode is only needed for saddle cases, and they should\n // only occur when we are not processing a cell on boundary\n // because when on a boundary either, bottom-row, top-row, left-column or right-column will have both 0 codes\n if (!isBoundary) {\n meanCode = getVertexCode(weights / 4, threshold);\n }\n return { code, meanCode };\n}\n/* eslint-enable complexity, max-statements*/\n// Returns intersection vertices for given cellindex\n// [x, y] refers current marching cell, reference vertex is always top-right corner\nexport function getPolygons(opts) {\n const { x, y, z, code, meanCode } = opts;\n let offsets = ISOBANDS_CODE_OFFSET_MAP[code];\n // handle saddle cases\n if (!Array.isArray(offsets)) {\n offsets = offsets[meanCode];\n }\n // Reference vertex is at top-right move to top-right corner\n const rX = x + 1;\n const rY = y + 1;\n // offsets format\n // [[1A, 1B, 1C, ...], [2A, 2B, 2C, ...]],\n // vertices format\n // [\n // [[x1A, y1A], [x1B, y1B], [x1C, y1C] ... ],\n // ...\n // ]\n const polygons = [];\n offsets.forEach(polygonOffsets => {\n const polygon = [];\n polygonOffsets.forEach(xyOffset => {\n const vX = rX + xyOffset[0];\n const vY = rY + xyOffset[1];\n polygon.push([vX, vY, z]);\n });\n polygons.push(polygon);\n });\n return polygons;\n}\n// Returns intersection vertices for given cellindex\n// [x, y] refers current marching cell, reference vertex is always top-right corner\nexport function getLines(opts) {\n const { x, y, z, code, meanCode } = opts;\n let offsets = ISOLINES_CODE_OFFSET_MAP[code];\n // handle saddle cases\n if (!Array.isArray(offsets)) {\n offsets = offsets[meanCode];\n }\n // Reference vertex is at top-right move to top-right corner\n const rX = x + 1;\n const rY = y + 1;\n // offsets format\n // [[1A, 1B], [2A, 2B]],\n // vertices format\n // [[x1A, y1A], [x1B, y1B], [x2A, x2B], ...],\n const lines = [];\n offsets.forEach(xyOffsets => {\n xyOffsets.forEach(offset => {\n const vX = rX + offset[0];\n const vY = rY + offset[1];\n lines.push([vX, vY, z]);\n });\n });\n return lines;\n}\n//# sourceMappingURL=marching-squares.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getCode, getLines, getPolygons } from \"./marching-squares.js\";\n// Given all the cell weights, generates contours for each threshold.\n/* eslint-disable max-depth */\nexport function generateContours({ contours, getValue, xRange, yRange }) {\n const contourLines = [];\n const contourPolygons = [];\n let segmentIndex = 0;\n let polygonIndex = 0;\n for (let i = 0; i < contours.length; i++) {\n const contour = contours[i];\n const z = contour.zIndex ?? i;\n const { threshold } = contour;\n for (let x = xRange[0] - 1; x < xRange[1]; x++) {\n for (let y = yRange[0] - 1; y < yRange[1]; y++) {\n // Get the MarchingSquares code based on neighbor cell weights.\n const { code, meanCode } = getCode({\n getValue,\n threshold,\n x,\n y,\n xRange,\n yRange\n });\n const opts = {\n x,\n y,\n z,\n code,\n meanCode\n };\n if (Array.isArray(threshold)) {\n // ISO bands\n const polygons = getPolygons(opts);\n for (const polygon of polygons) {\n contourPolygons[polygonIndex++] = {\n vertices: polygon,\n contour\n };\n }\n }\n else {\n // ISO lines\n const path = getLines(opts);\n if (path.length > 0) {\n contourLines[segmentIndex++] = {\n vertices: path,\n contour\n };\n }\n }\n }\n }\n }\n return { lines: contourLines, polygons: contourPolygons };\n}\n/* eslint-enable max-depth */\n//# sourceMappingURL=contour-utils.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CPUAggregator, WebGLAggregator } from \"../common/aggregator/index.js\";\n/** Returns an accessor to the aggregated values from bin id */\nexport function getAggregatorValueReader(opts) {\n const { aggregator, binIdRange, channel } = opts;\n if (aggregator instanceof WebGLAggregator) {\n const buffer = aggregator.getResult(channel)?.buffer;\n if (buffer) {\n const values = new Float32Array(buffer.readSyncWebGL().buffer);\n return getWebGLAggregatorValueReader(values, binIdRange);\n }\n }\n if (aggregator instanceof CPUAggregator) {\n const values = aggregator.getResult(channel)?.value;\n const ids = aggregator.getBins()?.value;\n if (ids && values) {\n return getCPUAggregatorValueReader(values, ids, aggregator.binCount);\n }\n }\n return null;\n}\nfunction getWebGLAggregatorValueReader(values, binIdRange) {\n const [[minX, maxX], [minY, maxY]] = binIdRange;\n const width = maxX - minX;\n const height = maxY - minY;\n return (x, y) => {\n x -= minX;\n y -= minY;\n if (x < 0 || x >= width || y < 0 || y >= height) {\n return NaN;\n }\n return values[y * width + x];\n };\n}\nfunction getCPUAggregatorValueReader(values, ids, count) {\n const idMap = {};\n for (let i = 0; i < count; i++) {\n const x = ids[i * 2];\n const y = ids[i * 2 + 1];\n idMap[x] = idMap[x] || {};\n idMap[x][y] = values[i];\n }\n return (x, y) => idMap[x]?.[y] ?? NaN;\n}\n//# sourceMappingURL=value-reader.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = /* glsl */ `\\\nuniform binOptionsUniforms {\n vec2 cellOriginCommon;\n vec2 cellSizeCommon;\n} binOptions;\n`;\nexport const binOptionsUniforms = {\n name: 'binOptions',\n vs: uniformBlock,\n uniformTypes: {\n cellOriginCommon: 'vec2<f32>',\n cellSizeCommon: 'vec2<f32>'\n }\n};\n//# sourceMappingURL=bin-options-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { COORDINATE_SYSTEM, project32, Viewport, _deepEqual } from '@deck.gl/core';\nimport { PathLayer, SolidPolygonLayer } from '@deck.gl/layers';\nimport { WebGLAggregator, CPUAggregator } from \"../common/aggregator/index.js\";\nimport AggregationLayer from \"../common/aggregation-layer.js\";\nimport { generateContours } from \"./contour-utils.js\";\nimport { getAggregatorValueReader } from \"./value-reader.js\";\nimport { getBinIdRange } from \"../common/utils/bounds-utils.js\";\nimport { Matrix4 } from '@math.gl/core';\nimport { binOptionsUniforms } from \"./bin-options-uniforms.js\";\nconst DEFAULT_COLOR = [255, 255, 255, 255];\nconst DEFAULT_STROKE_WIDTH = 1;\nconst defaultProps = {\n // grid aggregation\n cellSize: { type: 'number', min: 1, value: 1000 },\n gridOrigin: { type: 'array', compare: true, value: [0, 0] },\n getPosition: { type: 'accessor', value: (x) => x.position },\n getWeight: { type: 'accessor', value: 1 },\n gpuAggregation: true,\n aggregation: 'SUM',\n // contour lines\n contours: {\n type: 'object',\n value: [{ threshold: 1 }],\n optional: true,\n compare: 3\n },\n zOffset: 0.005\n};\n/** Aggregate data into a grid-based heatmap. The color and height of a cell are determined based on the objects it contains. */\nclass GridLayer extends AggregationLayer {\n getAggregatorType() {\n return this.props.gpuAggregation && WebGLAggregator.isSupported(this.context.device)\n ? 'gpu'\n : 'cpu';\n }\n createAggregator(type) {\n if (type === 'cpu') {\n return new CPUAggregator({\n dimensions: 2,\n getBin: {\n sources: ['positions'],\n getValue: ({ positions }, index, opts) => {\n const viewport = this.state.aggregatorViewport;\n // project to common space\n const p = viewport.projectPosition(positions);\n const { cellSizeCommon, cellOriginCommon } = opts;\n return [\n Math.floor((p[0] - cellOriginCommon[0]) / cellSizeCommon[0]),\n Math.floor((p[1] - cellOriginCommon[1]) / cellSizeCommon[1])\n ];\n }\n },\n getValue: [{ sources: ['counts'], getValue: ({ counts }) => counts }],\n onUpdate: this._onAggregationUpdate.bind(this)\n });\n }\n return new WebGLAggregator(this.context.device, {\n dimensions: 2,\n channelCount: 1,\n bufferLayout: this.getAttributeManager().getBufferLayouts({ isInstanced: false }),\n ...super.getShaders({\n modules: [project32, binOptionsUniforms],\n vs: /* glsl */ `\n in vec3 positions;\n in vec3 positions64Low;\n in float counts;\n\n void getBin(out ivec2 binId) {\n vec3 positionCommon = project_position(positions, positions64Low);\n vec2 gridCoords = floor(positionCommon.xy / binOptions.cellSizeCommon);\n binId = ivec2(gridCoords);\n }\n void getValue(out float value) {\n value = counts;\n }\n `\n }),\n onUpdate: this._onAggregationUpdate.bind(this)\n });\n }\n initializeState() {\n super.initializeState();\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n positions: {\n size: 3,\n accessor: 'getPosition',\n type: 'float64',\n fp64: this.use64bitPositions()\n },\n counts: { size: 1, accessor: 'getWeight' }\n });\n }\n updateState(params) {\n const aggregatorChanged = super.updateState(params);\n const { props, oldProps, changeFlags } = params;\n const { aggregator } = this.state;\n if (aggregatorChanged ||\n changeFlags.dataChanged ||\n props.cellSize !== oldProps.cellSize ||\n !_deepEqual(props.gridOrigin, oldProps.gridOrigin, 1) ||\n props.aggregation !== oldProps.aggregation) {\n this._updateBinOptions();\n const { cellSizeCommon, cellOriginCommon, binIdRange } = this.state;\n aggregator.setProps({\n // @ts-expect-error only used by GPUAggregator\n binIdRange,\n pointCount: this.getNumInstances(),\n operations: [props.aggregation],\n binOptions: {\n cellSizeCommon,\n cellOriginCommon\n }\n });\n }\n if (!_deepEqual(oldProps.contours, props.contours, 2)) {\n // Recalculate contours\n this.setState({ contourData: null });\n }\n return aggregatorChanged;\n }\n _updateBinOptions() {\n const bounds = this.getBounds();\n const cellSizeCommon = [1, 1];\n let cellOriginCommon = [0, 0];\n let binIdRange = [\n [0, 1],\n [0, 1]\n ];\n let viewport = this.context.viewport;\n if (bounds && Number.isFinite(bounds[0][0])) {\n let centroid = [(bounds[0][0] + bounds[1][0]) / 2, (bounds[0][1] + bounds[1][1]) / 2];\n const { cellSize, gridOrigin } = this.props;\n const { unitsPerMeter } = viewport.getDistanceScales(centroid);\n cellSizeCommon[0] = unitsPerMeter[0] * cellSize;\n cellSizeCommon[1] = unitsPerMeter[1] * cellSize;\n // Offset common space to center at the origin of the grid cell where the data center is in\n // This improves precision without affecting the cell positions\n const centroidCommon = viewport.projectFlat(centroid);\n cellOriginCommon = [\n Math.floor((centroidCommon[0] - gridOrigin[0]) / cellSizeCommon[0]) * cellSizeCommon[0] +\n gridOrigin[0],\n Math.floor((centroidCommon[1] - gridOrigin[1]) / cellSizeCommon[1]) * cellSizeCommon[1] +\n gridOrigin[1]\n ];\n centroid = viewport.unprojectFlat(cellOriginCommon);\n const ViewportType = viewport.constructor;\n // We construct a viewport for the GPU aggregator's project module\n // This viewport is determined by data\n // removes arbitrary precision variance that depends on initial view state\n viewport = viewport.isGeospatial\n ? new ViewportType({ longitude: centroid[0], latitude: centroid[1], zoom: 12 })\n : new Viewport({ position: [centroid[0], centroid[1], 0], zoom: 12 });\n // Round to the nearest 32-bit float to match CPU and GPU results\n cellOriginCommon = [Math.fround(viewport.center[0]), Math.fround(viewport.center[1])];\n binIdRange = getBinIdRange({\n dataBounds: bounds,\n getBinId: (p) => {\n const positionCommon = viewport.projectFlat(p);\n return [\n Math.floor((positionCommon[0] - cellOriginCommon[0]) / cellSizeCommon[0]),\n Math.floor((positionCommon[1] - cellOriginCommon[1]) / cellSizeCommon[1])\n ];\n }\n });\n }\n this.setState({ cellSizeCommon, cellOriginCommon, binIdRange, aggregatorViewport: viewport });\n }\n draw(opts) {\n // Replaces render time viewport with our own\n if (opts.shaderModuleProps.project) {\n opts.shaderModuleProps.project.viewport = this.state.aggregatorViewport;\n }\n super.draw(opts);\n }\n _onAggregationUpdate() {\n const { aggregator, binIdRange } = this.state;\n this.setState({\n aggregatedValueReader: getAggregatorValueReader({ aggregator, binIdRange, channel: 0 }),\n contourData: null\n });\n }\n _getContours() {\n const { aggregatedValueReader } = this.state;\n if (!aggregatedValueReader) {\n return null;\n }\n if (!this.state.contourData) {\n const { binIdRange } = this.state;\n const { contours } = this.props;\n const contourData = generateContours({\n contours,\n getValue: aggregatedValueReader,\n xRange: binIdRange[0],\n yRange: binIdRange[1]\n });\n this.state.contourData = contourData;\n }\n return this.state.contourData;\n }\n onAttributeChange(id) {\n const { aggregator } = this.state;\n switch (id) {\n case 'positions':\n aggregator.setNeedsUpdate();\n this._updateBinOptions();\n const { cellSizeCommon, cellOriginCommon, binIdRange } = this.state;\n aggregator.setProps({\n // @ts-expect-error only used by GPUAggregator\n binIdRange,\n binOptions: {\n cellSizeCommon,\n cellOriginCommon\n }\n });\n break;\n case 'counts':\n aggregator.setNeedsUpdate(0);\n break;\n default:\n // This should not happen\n }\n }\n renderLayers() {\n const contourData = this._getContours();\n if (!contourData) {\n return null;\n }\n const { lines, polygons } = contourData;\n const { zOffset } = this.props;\n const { cellOriginCommon, cellSizeCommon } = this.state;\n const LinesSubLayerClass = this.getSubLayerClass('lines', PathLayer);\n const BandsSubLayerClass = this.getSubLayerClass('bands', SolidPolygonLayer);\n const modelMatrix = new Matrix4()\n .translate([cellOriginCommon[0], cellOriginCommon[1], 0])\n .scale([cellSizeCommon[0], cellSizeCommon[1], zOffset]);\n // Contour lines layer\n const lineLayer = lines &&\n lines.length > 0 &&\n new LinesSubLayerClass(this.getSubLayerProps({\n id: 'lines'\n }), {\n data: lines,\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n modelMatrix,\n getPath: d => d.vertices,\n getColor: d => d.contour.color ?? DEFAULT_COLOR,\n getWidth: d => d.contour.strokeWidth ?? DEFAULT_STROKE_WIDTH,\n widthUnits: 'pixels'\n });\n // Contour bands layer\n const bandsLayer = polygons &&\n polygons.length > 0 &&\n new BandsSubLayerClass(this.getSubLayerProps({\n id: 'bands'\n }), {\n data: polygons,\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n modelMatrix,\n getPolygon: d => d.vertices,\n getFillColor: d => d.contour.color ?? DEFAULT_COLOR\n });\n return [lineLayer, bandsLayer];\n }\n getPickingInfo(params) {\n const info = params.info;\n const { object } = info;\n if (object) {\n info.object = {\n contour: object.contour\n };\n }\n return info;\n }\n}\nGridLayer.layerName = 'ContourLayer';\nGridLayer.defaultProps = defaultProps;\nexport default GridLayer;\n//# sourceMappingURL=contour-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default /* glsl */ `#version 300 es\n#define SHADER_NAME grid-cell-layer-vertex-shader\nin vec3 positions;\nin vec3 normals;\nin vec2 instancePositions;\nin float instanceElevationValues;\nin float instanceColorValues;\nin vec3 instancePickingColors;\nuniform sampler2D colorRange;\nout vec4 vColor;\nfloat interp(float value, vec2 domain, vec2 range) {\nfloat r = min(max((value - domain.x) / (domain.y - domain.x), 0.), 1.);\nreturn mix(range.x, range.y, r);\n}\nvec4 interp(float value, vec2 domain, sampler2D range) {\nfloat r = (value - domain.x) / (domain.y - domain.x);\nreturn texture(range, vec2(r, 0.5));\n}\nvoid main(void) {\ngeometry.pickingColor = instancePickingColors;\nif (isnan(instanceColorValues) ||\ninstanceColorValues < grid.colorDomain.z ||\ninstanceColorValues > grid.colorDomain.w ||\ninstanceElevationValues < grid.elevationDomain.z ||\ninstanceElevationValues > grid.elevationDomain.w\n) {\ngl_Position = vec4(0.);\nreturn;\n}\nvec2 commonPosition = (instancePositions + (positions.xy + 1.0) / 2.0 * column.coverage) * grid.sizeCommon + grid.originCommon - project.commonOrigin.xy;\ngeometry.position = vec4(commonPosition, 0.0, 1.0);\ngeometry.normal = project_normal(normals);\nfloat elevation = 0.0;\nif (column.extruded) {\nelevation = interp(instanceElevationValues, grid.elevationDomain.xy, grid.elevationRange);\nelevation = project_size(elevation);\ngeometry.position.z = (positions.z + 1.0) / 2.0 * elevation;\n}\ngl_Position = project_common_position_to_clipspace(geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nvColor = interp(instanceColorValues, grid.colorDomain.xy, colorRange);\nvColor.a *= layer.opacity;\nif (column.extruded) {\nvColor.rgb = lighting_getLightColor(vColor.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n//# sourceMappingURL=grid-cell-layer-vertex.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = /* glsl */ `\\\nuniform gridUniforms {\n vec4 colorDomain;\n vec4 elevationDomain;\n vec2 elevationRange;\n vec2 originCommon;\n vec2 sizeCommon;\n} grid;\n`;\nexport const gridUniforms = {\n name: 'grid',\n vs: uniformBlock,\n uniformTypes: {\n colorDomain: 'vec4<f32>',\n elevationDomain: 'vec4<f32>',\n elevationRange: 'vec2<f32>',\n originCommon: 'vec2<f32>',\n sizeCommon: 'vec2<f32>'\n }\n};\n//# sourceMappingURL=grid-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ColumnLayer } from '@deck.gl/layers';\nimport { CubeGeometry } from '@luma.gl/engine';\nimport { createColorRangeTexture, updateColorRangeTexture } from \"../common/utils/color-utils.js\";\nimport vs from \"./grid-cell-layer-vertex.glsl.js\";\nimport { gridUniforms } from \"./grid-layer-uniforms.js\";\nexport class GridCellLayer extends ColumnLayer {\n getShaders() {\n const shaders = super.getShaders();\n shaders.modules.push(gridUniforms);\n return { ...shaders, vs };\n }\n initializeState() {\n super.initializeState();\n const attributeManager = this.getAttributeManager();\n attributeManager.remove([\n 'instanceElevations',\n 'instanceFillColors',\n 'instanceLineColors',\n 'instanceStrokeWidths'\n ]);\n attributeManager.addInstanced({\n instancePositions: {\n size: 2,\n type: 'float32',\n accessor: 'getBin'\n },\n instanceColorValues: {\n size: 1,\n type: 'float32',\n accessor: 'getColorValue'\n },\n instanceElevationValues: {\n size: 1,\n type: 'float32',\n accessor: 'getElevationValue'\n }\n });\n }\n updateState(params) {\n super.updateState(params);\n const { props, oldProps } = params;\n const model = this.state.fillModel;\n if (oldProps.colorRange !== props.colorRange) {\n this.state.colorTexture?.destroy();\n this.state.colorTexture = createColorRangeTexture(this.context.device, props.colorRange, props.colorScaleType);\n const gridProps = { colorRange: this.state.colorTexture };\n model.shaderInputs.setProps({ grid: gridProps });\n }\n else if (oldProps.colorScaleType !== props.colorScaleType) {\n updateColorRangeTexture(this.state.colorTexture, props.colorScaleType);\n }\n }\n finalizeState(context) {\n super.finalizeState(context);\n this.state.colorTexture?.destroy();\n }\n _updateGeometry() {\n const geometry = new CubeGeometry();\n this.state.fillModel.setGeometry(geometry);\n }\n draw({ uniforms }) {\n const { cellOriginCommon, cellSizeCommon, elevationRange, elevationScale, extruded, coverage, colorDomain, elevationDomain } = this.props;\n const colorCutoff = this.props.colorCutoff || [-Infinity, Infinity];\n const elevationCutoff = this.props.elevationCutoff || [-Infinity, Infinity];\n const fillModel = this.state.fillModel;\n const gridProps = {\n colorDomain: [\n Math.max(colorDomain[0], colorCutoff[0]), // instanceColorValue that maps to colorRange[0]\n Math.min(colorDomain[1], colorCutoff[1]), // instanceColorValue that maps to colorRange[colorRange.length - 1]\n Math.max(colorDomain[0] - 1, colorCutoff[0]), // hide cell if instanceColorValue is less than this\n Math.min(colorDomain[1] + 1, colorCutoff[1]) // hide cell if instanceColorValue is greater than this\n ],\n elevationDomain: [\n Math.max(elevationDomain[0], elevationCutoff[0]), // instanceElevationValue that maps to elevationRange[0]\n Math.min(elevationDomain[1], elevationCutoff[1]), // instanceElevationValue that maps to elevationRange[elevationRange.length - 1]\n Math.max(elevationDomain[0] - 1, elevationCutoff[0]), // hide cell if instanceElevationValue is less than this\n Math.min(elevationDomain[1] + 1, elevationCutoff[1]) // hide cell if instanceElevationValue is greater than this\n ],\n elevationRange: [elevationRange[0] * elevationScale, elevationRange[1] * elevationScale],\n originCommon: cellOriginCommon,\n sizeCommon: cellSizeCommon\n };\n fillModel.shaderInputs.setProps({\n column: { extruded, coverage },\n grid: gridProps\n });\n fillModel.draw(this.context.renderPass);\n }\n}\nGridCellLayer.layerName = 'GridCellLayer';\n//# sourceMappingURL=grid-cell-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = /* glsl */ `\\\nuniform binOptionsUniforms {\n vec2 cellOriginCommon;\n vec2 cellSizeCommon;\n} binOptions;\n`;\nexport const binOptionsUniforms = {\n name: 'binOptions',\n vs: uniformBlock,\n uniformTypes: {\n cellOriginCommon: 'vec2<f32>',\n cellSizeCommon: 'vec2<f32>'\n }\n};\n//# sourceMappingURL=bin-options-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log, createIterable, project32, Viewport } from '@deck.gl/core';\nimport { WebGLAggregator, CPUAggregator } from \"../common/aggregator/index.js\";\nimport AggregationLayer from \"../common/aggregation-layer.js\";\nimport { defaultColorRange } from \"../common/utils/color-utils.js\";\nimport { AttributeWithScale } from \"../common/utils/scale-utils.js\";\nimport { getBinIdRange } from \"../common/utils/bounds-utils.js\";\nimport { GridCellLayer } from \"./grid-cell-layer.js\";\nimport { binOptionsUniforms } from \"./bin-options-uniforms.js\";\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() { }\nconst defaultProps = {\n gpuAggregation: true,\n // color\n colorDomain: null,\n colorRange: defaultColorRange,\n getColorValue: { type: 'accessor', value: null }, // default value is calculated from `getColorWeight` and `colorAggregation`\n getColorWeight: { type: 'accessor', value: 1 },\n colorAggregation: 'SUM',\n lowerPercentile: { type: 'number', min: 0, max: 100, value: 0 },\n upperPercentile: { type: 'number', min: 0, max: 100, value: 100 },\n colorScaleType: 'quantize',\n onSetColorDomain: noop,\n // elevation\n elevationDomain: null,\n elevationRange: [0, 1000],\n getElevationValue: { type: 'accessor', value: null }, // default value is calculated from `getElevationWeight` and `elevationAggregation`\n getElevationWeight: { type: 'accessor', value: 1 },\n elevationAggregation: 'SUM',\n elevationScale: { type: 'number', min: 0, value: 1 },\n elevationLowerPercentile: { type: 'number', min: 0, max: 100, value: 0 },\n elevationUpperPercentile: { type: 'number', min: 0, max: 100, value: 100 },\n elevationScaleType: 'linear',\n onSetElevationDomain: noop,\n // grid\n cellSize: { type: 'number', min: 0, value: 1000 },\n coverage: { type: 'number', min: 0, max: 1, value: 1 },\n getPosition: { type: 'accessor', value: (x) => x.position },\n gridAggregator: { type: 'function', optional: true, value: null },\n extruded: false,\n // Optional material for 'lighting' shader module\n material: true\n};\n/** Aggregate data into a grid-based heatmap. The color and height of a cell are determined based on the objects it contains. */\nclass GridLayer extends AggregationLayer {\n getAggregatorType() {\n const { gpuAggregation, gridAggregator, getColorValue, getElevationValue } = this.props;\n if (gpuAggregation && (gridAggregator || getColorValue || getElevationValue)) {\n // If these features are desired by the app, the user should explicitly use CPU aggregation\n log.warn('Features not supported by GPU aggregation, falling back to CPU')();\n return 'cpu';\n }\n if (\n // GPU aggregation is requested\n gpuAggregation &&\n // GPU aggregation is supported by the device\n WebGLAggregator.isSupported(this.context.device)) {\n return 'gpu';\n }\n return 'cpu';\n }\n createAggregator(type) {\n if (type === 'cpu') {\n const { gridAggregator, cellSize } = this.props;\n return new CPUAggregator({\n dimensions: 2,\n getBin: {\n sources: ['positions'],\n getValue: ({ positions }, index, opts) => {\n if (gridAggregator) {\n return gridAggregator(positions, cellSize);\n }\n const viewport = this.state.aggregatorViewport;\n // project to common space\n const p = viewport.projectPosition(positions);\n const { cellSizeCommon, cellOriginCommon } = opts;\n return [\n Math.floor((p[0] - cellOriginCommon[0]) / cellSizeCommon[0]),\n Math.floor((p[1] - cellOriginCommon[1]) / cellSizeCommon[1])\n ];\n }\n },\n getValue: [\n { sources: ['colorWeights'], getValue: ({ colorWeights }) => colorWeights },\n { sources: ['elevationWeights'], getValue: ({ elevationWeights }) => elevationWeights }\n ]\n });\n }\n return new WebGLAggregator(this.context.device, {\n dimensions: 2,\n channelCount: 2,\n bufferLayout: this.getAttributeManager().getBufferLayouts({ isInstanced: false }),\n ...super.getShaders({\n modules: [project32, binOptionsUniforms],\n vs: /* glsl */ `\n in vec3 positions;\n in vec3 positions64Low;\n in float colorWeights;\n in float elevationWeights;\n\n void getBin(out ivec2 binId) {\n vec3 positionCommon = project_position(positions, positions64Low);\n vec2 gridCoords = floor(positionCommon.xy / binOptions.cellSizeCommon);\n binId = ivec2(gridCoords);\n }\n void getValue(out vec2 value) {\n value = vec2(colorWeights, elevationWeights);\n }\n `\n })\n });\n }\n initializeState() {\n super.initializeState();\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n positions: {\n size: 3,\n accessor: 'getPosition',\n type: 'float64',\n fp64: this.use64bitPositions()\n },\n colorWeights: { size: 1, accessor: 'getColorWeight' },\n elevationWeights: { size: 1, accessor: 'getElevationWeight' }\n });\n }\n // eslint-disable-next-line complexity\n updateState(params) {\n const aggregatorChanged = super.updateState(params);\n const { props, oldProps, changeFlags } = params;\n const { aggregator } = this.state;\n if ((changeFlags.dataChanged || !this.state.dataAsArray) &&\n (props.getColorValue || props.getElevationValue)) {\n // Convert data to array\n this.state.dataAsArray = Array.from(createIterable(props.data).iterable);\n }\n if (aggregatorChanged ||\n changeFlags.dataChanged ||\n props.cellSize !== oldProps.cellSize ||\n props.getColorValue !== oldProps.getColorValue ||\n props.getElevationValue !== oldProps.getElevationValue ||\n props.colorAggregation !== oldProps.colorAggregation ||\n props.elevationAggregation !== oldProps.elevationAggregation) {\n this._updateBinOptions();\n const { cellSizeCommon, cellOriginCommon, binIdRange, dataAsArray } = this.state;\n aggregator.setProps({\n // @ts-expect-error only used by GPUAggregator\n binIdRange,\n pointCount: this.getNumInstances(),\n operations: [props.colorAggregation, props.elevationAggregation],\n binOptions: {\n cellSizeCommon,\n cellOriginCommon\n },\n onUpdate: this._onAggregationUpdate.bind(this)\n });\n if (dataAsArray) {\n const { getColorValue, getElevationValue } = this.props;\n aggregator.setProps({\n // @ts-expect-error only used by CPUAggregator\n customOperations: [\n getColorValue &&\n ((indices) => getColorValue(indices.map(i => dataAsArray[i]), { indices, data: props.data })),\n getElevationValue &&\n ((indices) => getElevationValue(indices.map(i => dataAsArray[i]), { indices, data: props.data }))\n ]\n });\n }\n }\n if (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getColorValue) {\n aggregator.setNeedsUpdate(0);\n }\n if (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getElevationValue) {\n aggregator.setNeedsUpdate(1);\n }\n return aggregatorChanged;\n }\n _updateBinOptions() {\n const bounds = this.getBounds();\n const cellSizeCommon = [1, 1];\n let cellOriginCommon = [0, 0];\n let binIdRange = [\n [0, 1],\n [0, 1]\n ];\n let viewport = this.context.viewport;\n if (bounds && Number.isFinite(bounds[0][0])) {\n let centroid = [(bounds[0][0] + bounds[1][0]) / 2, (bounds[0][1] + bounds[1][1]) / 2];\n const { cellSize } = this.props;\n const { unitsPerMeter } = viewport.getDistanceScales(centroid);\n cellSizeCommon[0] = unitsPerMeter[0] * cellSize;\n cellSizeCommon[1] = unitsPerMeter[1] * cellSize;\n // Offset common space to center at the origin of the grid cell where the data center is in\n // This improves precision without affecting the cell positions\n const centroidCommon = viewport.projectFlat(centroid);\n cellOriginCommon = [\n Math.floor(centroidCommon[0] / cellSizeCommon[0]) * cellSizeCommon[0],\n Math.floor(centroidCommon[1] / cellSizeCommon[1]) * cellSizeCommon[1]\n ];\n centroid = viewport.unprojectFlat(cellOriginCommon);\n const ViewportType = viewport.constructor;\n // We construct a viewport for the GPU aggregator's project module\n // This viewport is determined by data\n // removes arbitrary precision variance that depends on initial view state\n viewport = viewport.isGeospatial\n ? new ViewportType({ longitude: centroid[0], latitude: centroid[1], zoom: 12 })\n : new Viewport({ position: [centroid[0], centroid[1], 0], zoom: 12 });\n // Round to the nearest 32-bit float to match CPU and GPU results\n cellOriginCommon = [Math.fround(viewport.center[0]), Math.fround(viewport.center[1])];\n binIdRange = getBinIdRange({\n dataBounds: bounds,\n getBinId: (p) => {\n const positionCommon = viewport.projectFlat(p);\n return [\n Math.floor((positionCommon[0] - cellOriginCommon[0]) / cellSizeCommon[0]),\n Math.floor((positionCommon[1] - cellOriginCommon[1]) / cellSizeCommon[1])\n ];\n }\n });\n }\n this.setState({ cellSizeCommon, cellOriginCommon, binIdRange, aggregatorViewport: viewport });\n }\n draw(opts) {\n // Replaces render time viewport with our own\n if (opts.shaderModuleProps.project) {\n opts.shaderModuleProps.project.viewport = this.state.aggregatorViewport;\n }\n super.draw(opts);\n }\n _onAggregationUpdate({ channel }) {\n const props = this.getCurrentLayer().props;\n const { aggregator } = this.state;\n if (channel === 0) {\n const result = aggregator.getResult(0);\n this.setState({\n colors: new AttributeWithScale(result, aggregator.binCount)\n });\n props.onSetColorDomain(aggregator.getResultDomain(0));\n }\n else if (channel === 1) {\n const result = aggregator.getResult(1);\n this.setState({\n elevations: new AttributeWithScale(result, aggregator.binCount)\n });\n props.onSetElevationDomain(aggregator.getResultDomain(1));\n }\n }\n onAttributeChange(id) {\n const { aggregator } = this.state;\n switch (id) {\n case 'positions':\n aggregator.setNeedsUpdate();\n this._updateBinOptions();\n const { cellSizeCommon, cellOriginCommon, binIdRange } = this.state;\n aggregator.setProps({\n // @ts-expect-error only used by GPUAggregator\n binIdRange,\n binOptions: {\n cellSizeCommon,\n cellOriginCommon\n }\n });\n break;\n case 'colorWeights':\n aggregator.setNeedsUpdate(0);\n break;\n case 'elevationWeights':\n aggregator.setNeedsUpdate(1);\n break;\n default:\n // This should not happen\n }\n }\n renderLayers() {\n const { aggregator, cellOriginCommon, cellSizeCommon } = this.state;\n const { elevationScale, colorRange, elevationRange, extruded, coverage, material, transitions, colorScaleType, lowerPercentile, upperPercentile, colorDomain, elevationScaleType, elevationLowerPercentile, elevationUpperPercentile, elevationDomain } = this.props;\n const CellLayerClass = this.getSubLayerClass('cells', GridCellLayer);\n const binAttribute = aggregator.getBins();\n const colors = this.state.colors?.update({\n scaleType: colorScaleType,\n lowerPercentile,\n upperPercentile\n });\n const elevations = this.state.elevations?.update({\n scaleType: elevationScaleType,\n lowerPercentile: elevationLowerPercentile,\n upperPercentile: elevationUpperPercentile\n });\n if (!colors || !elevations) {\n return null;\n }\n return new CellLayerClass(this.getSubLayerProps({\n id: 'cells'\n }), {\n data: {\n length: aggregator.binCount,\n attributes: {\n getBin: binAttribute,\n getColorValue: colors.attribute,\n getElevationValue: elevations.attribute\n }\n },\n // Data has changed shallowly, but we likely don't need to update the attributes\n dataComparator: (data, oldData) => data.length === oldData.length,\n updateTriggers: {\n getBin: [binAttribute],\n getColorValue: [colors.attribute],\n getElevationValue: [elevations.attribute]\n },\n cellOriginCommon,\n cellSizeCommon,\n elevationScale,\n colorRange,\n colorScaleType,\n elevationRange,\n extruded,\n coverage,\n material,\n colorDomain: colors.domain || colorDomain || aggregator.getResultDomain(0),\n elevationDomain: elevations.domain || elevationDomain || aggregator.getResultDomain(1),\n colorCutoff: colors.cutoff,\n elevationCutoff: elevations.cutoff,\n transitions: transitions && {\n getFillColor: transitions.getColorValue || transitions.getColorWeight,\n getElevation: transitions.getElevationValue || transitions.getElevationWeight\n },\n // Extensions are already handled by the GPUAggregator, do not pass it down\n extensions: []\n });\n }\n getPickingInfo(params) {\n const info = params.info;\n const { index } = info;\n if (index >= 0) {\n const bin = this.state.aggregator.getBin(index);\n let object;\n if (bin) {\n object = {\n col: bin.id[0],\n row: bin.id[1],\n colorValue: bin.value[0],\n elevationValue: bin.value[1],\n count: bin.count\n };\n if (bin.pointIndices) {\n object.pointIndices = bin.pointIndices;\n object.points = Array.isArray(this.props.data)\n ? bin.pointIndices.map(i => this.props.data[i])\n : [];\n }\n }\n info.object = object;\n }\n return info;\n }\n}\nGridLayer.layerName = 'GridLayer';\nGridLayer.defaultProps = defaultProps;\nexport default GridLayer;\n//# sourceMappingURL=grid-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport function getBounds(points) {\n // Now build bounding box in world space (aligned to world coordiante system)\n const x = points.map(p => p[0]);\n const y = points.map(p => p[1]);\n const xMin = Math.min.apply(null, x);\n const xMax = Math.max.apply(null, x);\n const yMin = Math.min.apply(null, y);\n const yMax = Math.max.apply(null, y);\n return [xMin, yMin, xMax, yMax];\n}\n// true if currentBounds contains targetBounds, false otherwise\nexport function boundsContain(currentBounds, targetBounds) {\n if (targetBounds[0] >= currentBounds[0] &&\n targetBounds[2] <= currentBounds[2] &&\n targetBounds[1] >= currentBounds[1] &&\n targetBounds[3] <= currentBounds[3]) {\n return true;\n }\n return false;\n}\nconst scratchArray = new Float32Array(12);\n// For given rectangle bounds generates two triangles vertices that coverit completely\nexport function packVertices(points, dimensions = 2) {\n let index = 0;\n for (const point of points) {\n for (let i = 0; i < dimensions; i++) {\n scratchArray[index++] = point[i] || 0;\n }\n }\n return scratchArray;\n}\n// Expands boundingBox:[xMin, yMin, xMax, yMax] to match aspect ratio of given width and height\nexport function scaleToAspectRatio(boundingBox, width, height) {\n const [xMin, yMin, xMax, yMax] = boundingBox;\n const currentWidth = xMax - xMin;\n const currentHeight = yMax - yMin;\n let newWidth = currentWidth;\n let newHeight = currentHeight;\n if (currentWidth / currentHeight < width / height) {\n // expand bounding box width\n newWidth = (width / height) * currentHeight;\n }\n else {\n newHeight = (height / width) * currentWidth;\n }\n if (newWidth < width) {\n newWidth = width;\n newHeight = height;\n }\n const xCenter = (xMax + xMin) / 2;\n const yCenter = (yMax + yMin) / 2;\n return [\n xCenter - newWidth / 2,\n yCenter - newHeight / 2,\n xCenter + newWidth / 2,\n yCenter + newHeight / 2\n ];\n}\n// Get texture coordiante of point inside a bounding box\nexport function getTextureCoordinates(point, bounds) {\n const [xMin, yMin, xMax, yMax] = bounds;\n return [(point[0] - xMin) / (xMax - xMin), (point[1] - yMin) / (yMax - yMin)];\n}\n//# sourceMappingURL=heatmap-layer-utils.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Inspired by screen-grid-layer vertex shader in deck.gl\nexport default `\\\n#version 300 es\n#define SHADER_NAME heatp-map-layer-vertex-shader\nuniform sampler2D maxTexture;\nin vec3 positions;\nin vec2 texCoords;\nout vec2 vTexCoords;\nout float vIntensityMin;\nout float vIntensityMax;\nvoid main(void) {\ngl_Position = project_position_to_clipspace(positions, vec3(0.0), vec3(0.0));\nvTexCoords = texCoords;\nvec4 maxTexture = texture(maxTexture, vec2(0.5));\nfloat maxValue = triangle.aggregationMode < 0.5 ? maxTexture.r : maxTexture.g;\nfloat minValue = maxValue * triangle.threshold;\nif (triangle.colorDomain[1] > 0.) {\nmaxValue = triangle.colorDomain[1];\nminValue = triangle.colorDomain[0];\n}\nvIntensityMax = triangle.intensity / maxValue;\nvIntensityMin = triangle.intensity / minValue;\n}\n`;\n//# sourceMappingURL=triangle-layer-vertex.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME triangle-layer-fragment-shader\nprecision highp float;\nuniform sampler2D weightsTexture;\nuniform sampler2D colorTexture;\nin vec2 vTexCoords;\nin float vIntensityMin;\nin float vIntensityMax;\nout vec4 fragColor;\nvec4 getLinearColor(float value) {\nfloat factor = clamp(value * vIntensityMax, 0., 1.);\nvec4 color = texture(colorTexture, vec2(factor, 0.5));\ncolor.a *= min(value * vIntensityMin, 1.0);\nreturn color;\n}\nvoid main(void) {\nvec4 weights = texture(weightsTexture, vTexCoords);\nfloat weight = weights.r;\nif (triangle.aggregationMode > 0.5) {\nweight /= max(1.0, weights.a);\n}\nif (weight <= 0.) {\ndiscard;\n}\nvec4 linearColor = getLinearColor(weight);\nlinearColor.a *= layer.opacity;\nfragColor = linearColor;\n}\n`;\n//# sourceMappingURL=triangle-layer-fragment.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform triangleUniforms {\n float aggregationMode;\n vec2 colorDomain;\n float intensity;\n float threshold;\n} triangle;\n`;\nexport const triangleUniforms = {\n name: 'triangle',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n aggregationMode: 'f32',\n colorDomain: 'vec2<f32>',\n intensity: 'f32',\n threshold: 'f32'\n }\n};\n//# sourceMappingURL=triangle-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Model } from '@luma.gl/engine';\nimport { Layer, project32 } from '@deck.gl/core';\nimport vs from \"./triangle-layer-vertex.glsl.js\";\nimport fs from \"./triangle-layer-fragment.glsl.js\";\nimport { triangleUniforms } from \"./triangle-layer-uniforms.js\";\nclass TriangleLayer extends Layer {\n getShaders() {\n return super.getShaders({ vs, fs, modules: [project32, triangleUniforms] });\n }\n initializeState({ device }) {\n this.setState({ model: this._getModel(device) });\n }\n _getModel(device) {\n const { vertexCount, data } = this.props;\n return new Model(device, {\n ...this.getShaders(),\n id: this.props.id,\n attributes: data.attributes,\n bufferLayout: [\n { name: 'positions', format: 'float32x3' },\n { name: 'texCoords', format: 'float32x2' }\n ],\n topology: 'triangle-strip',\n vertexCount\n });\n }\n draw() {\n const { model } = this.state;\n const { aggregationMode, colorDomain, intensity, threshold, colorTexture, maxTexture, weightsTexture } = this.props;\n const triangleProps = {\n aggregationMode,\n colorDomain,\n intensity,\n threshold,\n colorTexture,\n maxTexture,\n weightsTexture\n };\n model.shaderInputs.setProps({ triangle: triangleProps });\n model.draw(this.context.renderPass);\n }\n}\nTriangleLayer.layerName = 'TriangleLayer';\nexport default TriangleLayer;\n//# sourceMappingURL=triangle-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport function filterProps(props, filterKeys) {\n const filteredProps = {};\n for (const key in props) {\n if (!filterKeys.includes(key)) {\n filteredProps[key] = props[key];\n }\n }\n return filteredProps;\n}\n//# sourceMappingURL=prop-utils.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer, AttributeManager, _compareProps as compareProps } from '@deck.gl/core';\nimport { filterProps } from \"../common/utils/prop-utils.js\";\n/** Legacy AggregationLayer, to be removed in v9.1 */\nclass AggregationLayer extends CompositeLayer {\n initializeAggregationLayer(dimensions) {\n super.initializeState(this.context);\n this.setState({\n // Layer props , when changed doesn't require updating aggregation\n ignoreProps: filterProps(this.constructor._propTypes, dimensions.data.props),\n dimensions\n });\n }\n updateState(opts) {\n super.updateState(opts);\n const { changeFlags } = opts;\n if (changeFlags.extensionsChanged) {\n const shaders = this.getShaders({});\n if (shaders && shaders.defines) {\n shaders.defines.NON_INSTANCED_MODEL = 1;\n }\n this.updateShaders(shaders);\n }\n // Explictly call to update attributes as 'CompositeLayer' doesn't call this\n this._updateAttributes();\n }\n updateAttributes(changedAttributes) {\n // Super classes, can refer to state.changedAttributes to determine what\n // attributes changed\n this.setState({ changedAttributes });\n }\n getAttributes() {\n return this.getAttributeManager().getAttributes();\n }\n getModuleSettings() {\n // For regular layer draw this happens during draw cycle (_drawLayersInViewport) not during update cycle\n // For aggregation layers this is called during updateState to update aggregation data\n // NOTE: it is similar to LayerPass._getShaderModuleProps() but doesn't inlcude `effects` it is not needed for aggregation\n const { viewport, mousePosition, device } = this.context;\n const moduleSettings = Object.assign(Object.create(this.props), {\n viewport,\n mousePosition,\n picking: {\n isActive: 0\n },\n // @ts-expect-error TODO - assuming WebGL context\n devicePixelRatio: device.canvasContext.cssToDeviceRatio()\n });\n return moduleSettings;\n }\n updateShaders(shaders) {\n // Default implemention is empty, subclasses can update their Model objects if needed\n }\n /**\n * Checks if aggregation is dirty\n * @param {Object} updateOpts - object {props, oldProps, changeFlags}\n * @param {Object} params - object {dimension, compareAll}\n * @param {Object} params.dimension - {props, accessors} array of props and/or accessors\n * @param {Boolean} params.compareAll - when `true` it will include non layer props for comparision\n * @returns {Boolean} - returns true if dimensions' prop or accessor is changed\n **/\n isAggregationDirty(updateOpts, params = {}) {\n const { props, oldProps, changeFlags } = updateOpts;\n const { compareAll = false, dimension } = params;\n const { ignoreProps } = this.state;\n const { props: dataProps, accessors = [] } = dimension;\n const { updateTriggersChanged } = changeFlags;\n if (changeFlags.dataChanged) {\n return true;\n }\n if (updateTriggersChanged) {\n if (updateTriggersChanged.all) {\n return true;\n }\n for (const accessor of accessors) {\n if (updateTriggersChanged[accessor]) {\n return true;\n }\n }\n }\n if (compareAll) {\n if (changeFlags.extensionsChanged) {\n return true;\n }\n // Compare non layer props too (like extension props)\n // ignoreprops refers to all Layer props other than aggregation props that need to be comapred\n return compareProps({\n oldProps,\n newProps: props,\n ignoreProps,\n propTypes: this.constructor._propTypes\n });\n }\n // Compare props of the dimension\n for (const name of dataProps) {\n if (props[name] !== oldProps[name]) {\n return true;\n }\n }\n return false;\n }\n /**\n * Checks if an attribute is changed\n * @param {String} name - name of the attribute\n * @returns {Boolean} - `true` if attribute `name` is changed, `false` otherwise,\n * If `name` is not passed or `undefiend`, `true` if any attribute is changed, `false` otherwise\n **/\n isAttributeChanged(name) {\n const { changedAttributes } = this.state;\n if (!name) {\n // if name not specified return true if any attribute is changed\n return !isObjectEmpty(changedAttributes);\n }\n return changedAttributes && changedAttributes[name] !== undefined;\n }\n // Private\n // override Composite layer private method to create AttributeManager instance\n _getAttributeManager() {\n return new AttributeManager(this.context.device, {\n id: this.props.id,\n stats: this.context.stats\n });\n }\n}\nAggregationLayer.layerName = 'AggregationLayer';\nexport default AggregationLayer;\n// Helper methods\n// Returns true if given object is empty, false otherwise.\nfunction isObjectEmpty(obj) {\n let isEmpty = true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const key in obj) {\n isEmpty = false;\n break;\n }\n return isEmpty;\n}\n//# sourceMappingURL=aggregation-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\nin vec3 positions;\nin vec3 positions64Low;\nin float weights;\nout vec4 weightsTexture;\nvoid main()\n{\nweightsTexture = vec4(weights * weight.weightsScale, 0., 0., 1.);\nfloat radiusTexels = project_pixel_size(weight.radiusPixels) * weight.textureWidth / (weight.commonBounds.z - weight.commonBounds.x);\ngl_PointSize = radiusTexels * 2.;\nvec3 commonPosition = project_position(positions, positions64Low);\ngl_Position.xy = (commonPosition.xy - weight.commonBounds.xy) / (weight.commonBounds.zw - weight.commonBounds.xy) ;\ngl_Position.xy = (gl_Position.xy * 2.) - (1.);\ngl_Position.w = 1.0;\n}\n`;\n//# sourceMappingURL=weights-vs.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\nin vec4 weightsTexture;\nout vec4 fragColor;\nfloat gaussianKDE(float u){\nreturn pow(2.71828, -u*u/0.05555)/(1.77245385*0.166666);\n}\nvoid main()\n{\nfloat dist = length(gl_PointCoord - vec2(0.5, 0.5));\nif (dist > 0.5) {\ndiscard;\n}\nfragColor = weightsTexture * gaussianKDE(2. * dist);\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=weights-fs.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\nuniform sampler2D inTexture;\nout vec4 outTexture;\nvoid main()\n{\nint yIndex = gl_VertexID / int(maxWeight.textureSize);\nint xIndex = gl_VertexID - (yIndex * int(maxWeight.textureSize));\nvec2 uv = (0.5 + vec2(float(xIndex), float(yIndex))) / maxWeight.textureSize;\noutTexture = texture(inTexture, uv);\ngl_Position = vec4(0.0, 0.0, 0.0, 1.0);\ngl_PointSize = 1.0;\n}\n`;\n//# sourceMappingURL=max-vs.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\nin vec4 outTexture;\nout vec4 fragColor;\nvoid main() {\nfragColor = outTexture;\nfragColor.g = outTexture.r / max(1.0, outTexture.a);\n}\n`;\n//# sourceMappingURL=max-fs.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform weightUniforms {\n vec4 commonBounds;\n float radiusPixels;\n float textureWidth;\n float weightsScale;\n} weight;\n`;\nexport const weightUniforms = {\n name: 'weight',\n vs: uniformBlock,\n uniformTypes: {\n commonBounds: 'vec4<f32>',\n radiusPixels: 'f32',\n textureWidth: 'f32',\n weightsScale: 'f32'\n }\n};\nexport const maxWeightUniforms = {\n name: 'maxWeight',\n vs: `\\\nuniform maxWeightUniforms {\n float textureSize;\n} maxWeight;\n`,\n uniformTypes: {\n textureSize: 'f32'\n }\n};\n//# sourceMappingURL=heatmap-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* global setTimeout clearTimeout */\nimport { getBounds, boundsContain, packVertices, scaleToAspectRatio, getTextureCoordinates } from \"./heatmap-layer-utils.js\";\nimport { TextureTransform } from '@luma.gl/engine';\nimport { AttributeManager, COORDINATE_SYSTEM, log, project32 } from '@deck.gl/core';\nimport TriangleLayer from \"./triangle-layer.js\";\nimport AggregationLayer from \"./aggregation-layer.js\";\nimport { defaultColorRange, colorRangeToFlatArray } from \"../common/utils/color-utils.js\";\nimport weightsVs from \"./weights-vs.glsl.js\";\nimport weightsFs from \"./weights-fs.glsl.js\";\nimport maxVs from \"./max-vs.glsl.js\";\nimport maxFs from \"./max-fs.glsl.js\";\nimport { maxWeightUniforms, weightUniforms } from \"./heatmap-layer-uniforms.js\";\nconst RESOLUTION = 2; // (number of common space pixels) / (number texels)\nconst TEXTURE_PROPS = {\n format: 'rgba8unorm',\n dimension: '2d',\n width: 1,\n height: 1,\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n};\nconst DEFAULT_COLOR_DOMAIN = [0, 0];\nconst AGGREGATION_MODE = {\n SUM: 0,\n MEAN: 1\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};\nconst FLOAT_TARGET_FEATURES = [\n 'float32-renderable-webgl', // ability to render to float texture\n 'texture-blend-float-webgl' // ability to blend when rendering to float texture\n];\nconst DIMENSIONS = {\n data: {\n props: ['radiusPixels']\n }\n};\n/** Visualizes the spatial distribution of data. */\nclass HeatmapLayer extends AggregationLayer {\n getShaders(shaders) {\n let modules = [project32];\n if (shaders.modules) {\n modules = [...modules, ...shaders.modules];\n }\n return super.getShaders({ ...shaders, modules });\n }\n initializeState() {\n super.initializeAggregationLayer(DIMENSIONS);\n this.setState({ colorDomain: DEFAULT_COLOR_DOMAIN });\n this._setupTextureParams();\n this._setupAttributes();\n this._setupResources();\n }\n shouldUpdateState({ changeFlags }) {\n // Need to be updated when viewport changes\n return changeFlags.somethingChanged;\n }\n /* eslint-disable max-statements,complexity */\n updateState(opts) {\n super.updateState(opts);\n this._updateHeatmapState(opts);\n }\n _updateHeatmapState(opts) {\n const { props, oldProps } = opts;\n const changeFlags = this._getChangeFlags(opts);\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 if (changeFlags.dataChanged || changeFlags.boundsChanged) {\n // Update weight map immediately\n clearTimeout(this.state.updateTimer);\n this.setState({ isWeightMapDirty: true });\n if (changeFlags.dataChanged) {\n // Recreate weights transform if data changed, as buffer layout may have changed,\n // happens when binary attibutes passed.\n const weightsTransformShaders = this.getShaders({ vs: weightsVs, fs: weightsFs });\n this._createWeightsTransform(weightsTransformShaders);\n }\n }\n else if (changeFlags.viewportZoomChanged) {\n // Update weight map when zoom stops\n this._debouncedUpdateWeightmap();\n }\n if (props.colorRange !== oldProps.colorRange) {\n this._updateColorTexture(opts);\n }\n if (this.state.isWeightMapDirty) {\n this._updateWeightmap();\n }\n this.setState({ zoom: opts.context.viewport.zoom });\n }\n renderLayers() {\n const { weightsTexture, triPositionBuffer, triTexCoordBuffer, maxWeightsTexture, colorTexture, colorDomain } = this.state;\n const { updateTriggers, intensity, threshold, aggregation } = this.props;\n const TriangleLayerClass = this.getSubLayerClass('triangle', TriangleLayer);\n return new TriangleLayerClass(this.getSubLayerProps({\n id: 'triangle-layer',\n updateTriggers\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 weightsTexture,\n intensity,\n threshold,\n colorDomain\n });\n }\n finalizeState(context) {\n super.finalizeState(context);\n const { weightsTransform, weightsTexture, maxWeightTransform, maxWeightsTexture, triPositionBuffer, triTexCoordBuffer, colorTexture, updateTimer } = this.state;\n weightsTransform?.destroy();\n weightsTexture?.destroy();\n maxWeightTransform?.destroy();\n maxWeightsTexture?.destroy();\n triPositionBuffer?.destroy();\n triTexCoordBuffer?.destroy();\n colorTexture?.destroy();\n if (updateTimer) {\n clearTimeout(updateTimer);\n }\n }\n // PRIVATE\n // override Composite layer private method to create AttributeManager instance\n _getAttributeManager() {\n return new AttributeManager(this.context.device, {\n id: this.props.id,\n stats: this.context.stats\n });\n }\n _getChangeFlags(opts) {\n const changeFlags = {};\n const { dimensions } = this.state;\n changeFlags.dataChanged =\n (this.isAttributeChanged() && 'attribute changed') || // if any attribute is changed\n (this.isAggregationDirty(opts, {\n compareAll: true,\n dimension: dimensions.data\n }) &&\n 'aggregation is dirty');\n changeFlags.viewportChanged = opts.changeFlags.viewportChanged;\n const { zoom } = this.state;\n if (!opts.context.viewport || opts.context.viewport.zoom !== zoom) {\n changeFlags.viewportZoomChanged = true;\n }\n return changeFlags;\n }\n _createTextures() {\n const { textureSize, format } = this.state;\n this.setState({\n weightsTexture: this.context.device.createTexture({\n ...TEXTURE_PROPS,\n width: textureSize,\n height: textureSize,\n format\n }),\n maxWeightsTexture: this.context.device.createTexture({\n ...TEXTURE_PROPS,\n width: 1,\n height: 1,\n format\n })\n });\n }\n _setupAttributes() {\n const attributeManager = this.getAttributeManager();\n attributeManager.add({\n positions: { size: 3, type: 'float64', accessor: 'getPosition' },\n weights: { size: 1, accessor: 'getWeight' }\n });\n this.setState({ positionAttributeName: 'positions' });\n }\n _setupTextureParams() {\n const { device } = this.context;\n const { weightsTextureSize } = this.props;\n const textureSize = Math.min(weightsTextureSize, device.limits.maxTextureDimension2D);\n const floatTargetSupport = FLOAT_TARGET_FEATURES.every(feature => device.features.has(feature));\n const format = floatTargetSupport ? 'rgba32float' : 'rgba8unorm';\n const weightsScale = floatTargetSupport ? 1 : 1 / 255;\n this.setState({ textureSize, format, weightsScale });\n if (!floatTargetSupport) {\n log.warn(`HeatmapLayer: ${this.id} rendering to float texture not supported, falling back to low precision format`)();\n }\n }\n _createWeightsTransform(shaders) {\n let { weightsTransform } = this.state;\n const { weightsTexture } = this.state;\n const attributeManager = this.getAttributeManager();\n weightsTransform?.destroy();\n weightsTransform = new TextureTransform(this.context.device, {\n id: `${this.id}-weights-transform`,\n bufferLayout: attributeManager.getBufferLayouts(),\n vertexCount: 1,\n targetTexture: weightsTexture,\n parameters: {\n depthWriteEnabled: false,\n blendColorOperation: 'add',\n blendColorSrcFactor: 'one',\n blendColorDstFactor: 'one',\n blendAlphaSrcFactor: 'one',\n blendAlphaDstFactor: 'one'\n },\n topology: 'point-list',\n ...shaders,\n modules: [...shaders.modules, weightUniforms]\n });\n this.setState({ weightsTransform });\n }\n _setupResources() {\n this._createTextures();\n const { device } = this.context;\n const { textureSize, weightsTexture, maxWeightsTexture } = this.state;\n const weightsTransformShaders = this.getShaders({\n vs: weightsVs,\n fs: weightsFs\n });\n this._createWeightsTransform(weightsTransformShaders);\n const maxWeightsTransformShaders = this.getShaders({\n vs: maxVs,\n fs: maxFs,\n modules: [maxWeightUniforms]\n });\n const maxWeightTransform = new TextureTransform(device, {\n id: `${this.id}-max-weights-transform`,\n targetTexture: maxWeightsTexture,\n ...maxWeightsTransformShaders,\n vertexCount: textureSize * textureSize,\n topology: 'point-list',\n parameters: {\n depthWriteEnabled: false,\n blendColorOperation: 'max',\n blendAlphaOperation: 'max',\n blendColorSrcFactor: 'one',\n blendColorDstFactor: 'one',\n blendAlphaSrcFactor: 'one',\n blendAlphaDstFactor: 'one'\n }\n });\n const maxWeightProps = { inTexture: weightsTexture, textureSize };\n maxWeightTransform.model.shaderInputs.setProps({\n maxWeight: maxWeightProps\n });\n this.setState({\n weightsTexture,\n maxWeightsTexture,\n maxWeightTransform,\n zoom: null,\n triPositionBuffer: device.createBuffer({ byteLength: 48 }),\n triTexCoordBuffer: device.createBuffer({ byteLength: 48 })\n });\n }\n // overwrite super class method to update transform model\n updateShaders(shaderOptions) {\n // shader params (modules, injects) changed, update model object\n this._createWeightsTransform({\n vs: weightsVs,\n fs: weightsFs,\n ...shaderOptions\n });\n }\n _updateMaxWeightValue() {\n const { maxWeightTransform } = this.state;\n maxWeightTransform.run({\n parameters: { viewport: [0, 0, 1, 1] },\n clearColor: [0, 0, 0, 0]\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 // 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([0, viewport.height]),\n viewport.unproject([viewport.width, viewport.height])\n ].map(p => p.map(Math.fround));\n // #1: get world bounds for current viewport extends\n const visibleWorldBounds = getBounds(viewportCorners); // TODO: Change to visible bounds\n const newState = { visibleWorldBounds, viewportCorners };\n let boundsChanged = false;\n if (forceUpdate ||\n !this.state.worldBounds ||\n !boundsContain(this.state.worldBounds, visibleWorldBounds)) {\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 // #4 :convert aligned common bounds to world bounds\n const worldBounds = this._commonToWorldBounds(scaledCommonBounds);\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 // #5: now convert world bounds to common using Layer's coordiante system and origin\n const normalizedCommonBounds = this._worldToCommonBounds(worldBounds);\n newState.worldBounds = worldBounds;\n newState.normalizedCommonBounds = normalizedCommonBounds;\n boundsChanged = true;\n }\n this.setState(newState);\n return boundsChanged;\n }\n _updateTextureRenderingBounds() {\n // Just render visible portion of the texture\n const { triPositionBuffer, triTexCoordBuffer, normalizedCommonBounds, viewportCorners } = this.state;\n const { viewport } = this.context;\n triPositionBuffer.write(packVertices(viewportCorners, 3));\n const textureBounds = viewportCorners.map(p => getTextureCoordinates(viewport.projectPosition(p), normalizedCommonBounds));\n triTexCoordBuffer.write(packVertices(textureBounds, 2));\n }\n _updateColorTexture(opts) {\n const { colorRange } = opts.props;\n let { colorTexture } = this.state;\n const colors = colorRangeToFlatArray(colorRange, false, Uint8Array);\n colorTexture?.destroy();\n colorTexture = this.context.device.createTexture({\n ...TEXTURE_PROPS,\n data: colors,\n width: colorRange.length,\n height: 1\n });\n this.setState({ colorTexture });\n }\n _updateWeightmap() {\n const { radiusPixels, colorDomain, aggregation } = this.props;\n const { worldBounds, textureSize, weightsScale, weightsTexture } = this.state;\n const weightsTransform = this.state.weightsTransform;\n this.state.isWeightMapDirty = false;\n // convert world bounds to common using Layer's coordiante system and origin\n const commonBounds = this._worldToCommonBounds(worldBounds, {\n useLayerCoordinateSystem: true\n });\n if (colorDomain && aggregation === 'SUM') {\n // scale color domain to weight per pixel\n const { viewport } = this.context;\n const metersPerPixel = (viewport.distanceScales.metersPerUnit[2] * (commonBounds[2] - commonBounds[0])) /\n textureSize;\n this.state.colorDomain = colorDomain.map(x => x * metersPerPixel * weightsScale);\n }\n else {\n this.state.colorDomain = colorDomain || DEFAULT_COLOR_DOMAIN;\n }\n const attributeManager = this.getAttributeManager();\n const attributes = attributeManager.getAttributes();\n const moduleSettings = this.getModuleSettings();\n this._setModelAttributes(weightsTransform.model, attributes);\n weightsTransform.model.setVertexCount(this.getNumInstances());\n const weightProps = {\n radiusPixels,\n commonBounds,\n textureWidth: textureSize,\n weightsScale,\n weightsTexture: weightsTexture\n };\n const { viewport, devicePixelRatio, coordinateSystem, coordinateOrigin } = moduleSettings;\n const { modelMatrix } = this.props;\n weightsTransform.model.shaderInputs.setProps({\n project: { viewport, devicePixelRatio, modelMatrix, coordinateSystem, coordinateOrigin },\n weight: weightProps\n });\n weightsTransform.run({\n parameters: { viewport: [0, 0, textureSize, textureSize] },\n clearColor: [0, 0, 0, 0]\n });\n this._updateMaxWeightValue();\n }\n _debouncedUpdateWeightmap(fromTimer = false) {\n let { updateTimer } = this.state;\n const { debounceTimeout } = this.props;\n if (fromTimer) {\n updateTimer = null;\n // update\n this._updateBounds(true);\n this._updateTextureRenderingBounds();\n this.setState({ isWeightMapDirty: true });\n }\n else {\n this.setState({ isWeightMapDirty: false });\n clearTimeout(updateTimer);\n updateTimer = setTimeout(this._debouncedUpdateWeightmap.bind(this, true), debounceTimeout);\n }\n this.setState({ updateTimer });\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 const offsetMode = 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 let bottomLeftCommon;\n let topRightCommon;\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 }\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 bottomLeftCommon[0] - offsetOriginCommon[0],\n bottomLeftCommon[1] - offsetOriginCommon[1],\n topRightCommon[0] - offsetOriginCommon[0],\n topRightCommon[1] - offsetOriginCommon[1]\n ], size, size);\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 return bottomLeftWorld.slice(0, 2).concat(topRightWorld.slice(0, 2));\n }\n}\nHeatmapLayer.layerName = 'HeatmapLayer';\nHeatmapLayer.defaultProps = defaultProps;\nexport default HeatmapLayer;\n//# sourceMappingURL=heatmap-layer.js.map"],"names":["FS_OUTPUT_VARIABLE","TextureTransform","device","props","Model","uid","getPassthroughFS","binding","options","framebuffer","renderPass","targetTexture","sourceBuffers","sourceTextures","width","height","index","name","sortBins","pointCount","getBinId","binsById","i","id","bin","packBinIds","bins","dimensions","target","targetLength","count","pointIndices","sum","getValue","result","mean","min","value","max","BUILT_IN_OPERATIONS","aggregate","operation","j","points","evaluateVertexAccessor","accessor","attributes","vertexReaders","attribute","getVertexReader","data","vertexIndex","offset","stride","size","bytesPerElement","elementOffset","elementStride","CPUAggregator","oldProps","deepEqual","channel","domain","createRenderTarget","uniformBlock","binSorterUniforms","COLOR_CHANNELS","MAX_FLOAT32","EMPTY_MASKS","TEXTURE_WIDTH","WebGLBinSorter","createModel","x","y","buffer","binCount","binIdRange","binSorterProps","model","operations","masks","getMaskByOperation","colorMask","initialValue","op","userVs","vs","fs","aggregatorTransformUniforms","WebGLAggregationTransform","createTransform","transformFeedback","aggregatorTransformProps","binBufferByteLength","valueBufferByteLength","transform","isCount","isMean","BufferTransform","WebGLAggregator","x0","x1","y0","pixel","log","y1","attributeBuffers","constantAttributes","attributeName","operationsToUpdate","needsUpdate","CompositeLayer","params","aggregatorType","aggregator","context","changedAttributes","shaderModuleProps","AttributeManager","AggregationLayer","defaultColorRange","colorRangeToFlatArray","colorRange","normalize","ArrayType","flatArray","color","COLOR_RANGE_FILTER","updateColorRangeTexture","texture","type","createColorRangeTexture","colors","vs$3","fs$1","screenGridUniforms","ScreenGridCellLayer","Layer","picking","changeFlags","screenGridProps","gridSize","cellMarginPixels","cellSize","uniforms","colorDomain","Geometry","binOptionsUniforms","defaultProps","d","ScreenGridLayer","positions","opts","viewport","p","cellSizePixels","counts","project32","aggregatorChanged","aggregation","CellLayerClass","binAttribute","weightAttribute","oldData","info","object","AttributeWithScale","input","inputLength","getAttributeValue","applyScaleQuantile","applyScaleOrdinal","scaleType","lowerPercentile","upperPercentile","thresholds","lowValue","highValue","sortedUniqueValues","values","uniqueValues","domainMap","rangeLength","sortedValues","ascending","n","threshold","bisectRight","length","bytes","a","b","fraction","domainLength","domainFraction","lowIndex","low","high","lo","hi","mid","getBinIdRange","dataBounds","padding","corners","minX","minY","maxX","maxY","THIRD_PI","DIST_X","DIST_Y","HexbinVertices","_","angle","pointToHexbin","px","py","radius","pj","pi","py1","px1","pi2","pj2","px2","py2","pointToHexbinGLSL","getHexbinCentroid","getHexbinCentroidGLSL","vs$2","hexagonUniforms","HexagonCellLayer","ColumnLayer","shaders","attributeManager","hexagonProps","hexOriginCommon","elevationRange","elevationScale","extruded","coverage","elevationDomain","colorCutoff","elevationCutoff","fillModel","noop","HexagonLayer","gpuAggregation","hexagonAggregator","getColorValue","getElevationValue","radiusCommon","colorWeights","elevationWeights","createIterable","dataAsArray","indices","bounds","centroid","unitsPerMeter","centerHex","ViewportType","Viewport","positionCommon","material","transitions","colorScaleType","elevationScaleType","elevationLowerPercentile","elevationUpperPercentile","elevations","centroidCommon","HALF","ONE6TH","OFFSET","SW_TRIANGLE","SE_TRIANGLE","NE_TRIANGLE","NW_TRIANGLE","SW_TRAPEZOID","SE_TRAPEZOID","NE_TRAPEZOID","NW_TRAPEZOID","S_RECTANGLE","E_RECTANGLE","N_RECTANGLE","W_RECTANGLE","EW_RECTANGEL","SN_RECTANGEL","SQUARE","SW_PENTAGON","SE_PENTAGON","NE_PENTAGON","NW_PENTAGON","NW_N_PENTAGON","NE_E_PENTAGON","SE_S_PENTAGON","SW_W_PENTAGON","NW_W_PENTAGON","NE_N_PENTAGON","SE_E_PENTAGON","SW_S_PENTAGON","S_HEXAGON","E_HEXAGON","N_HEXAGON","W_HEXAGON","SW_NE_HEXAGON","NW_SE_HEXAGON","NE_HEPTAGON","SW_HEPTAGON","NW_HEPTAGON","SE_HEPTAGON","OCTAGON","ISOLINES_CODE_OFFSET_MAP","ternaryToIndex","ternary","ISOBANDS_CODE_OFFSET_MAP","getVertexCode","weight","getCode","xRange","yRange","isLeftBoundary","isRightBoundary","isBottomBoundary","isTopBoundary","isBoundary","weights","current","right","top","topRight","w","code","meanCode","getPolygons","z","offsets","rX","rY","polygons","polygonOffsets","polygon","xyOffset","vX","vY","getLines","lines","xyOffsets","generateContours","contours","contourLines","contourPolygons","segmentIndex","polygonIndex","contour","path","getAggregatorValueReader","getWebGLAggregatorValueReader","ids","getCPUAggregatorValueReader","idMap","DEFAULT_COLOR","DEFAULT_STROKE_WIDTH","cellSizeCommon","cellOriginCommon","_deepEqual","gridOrigin","aggregatedValueReader","contourData","zOffset","LinesSubLayerClass","PathLayer","BandsSubLayerClass","SolidPolygonLayer","modelMatrix","Matrix4","lineLayer","COORDINATE_SYSTEM","bandsLayer","GridLayer","vs$1","gridUniforms","GridCellLayer","gridProps","geometry","CubeGeometry","gridAggregator","getBounds","xMin","xMax","yMin","yMax","boundsContain","currentBounds","targetBounds","scratchArray","packVertices","point","scaleToAspectRatio","boundingBox","currentWidth","currentHeight","newWidth","newHeight","xCenter","yCenter","getTextureCoordinates","triangleUniforms","TriangleLayer","vertexCount","aggregationMode","intensity","colorTexture","maxTexture","weightsTexture","triangleProps","filterProps","filterKeys","filteredProps","key","mousePosition","updateOpts","compareAll","dimension","ignoreProps","dataProps","accessors","updateTriggersChanged","compareProps","isObjectEmpty","obj","isEmpty","weightsVs","weightsFs","maxVs","maxFs","weightUniforms","maxWeightUniforms","RESOLUTION","TEXTURE_PROPS","DEFAULT_COLOR_DOMAIN","AGGREGATION_MODE","FLOAT_TARGET_FEATURES","DIMENSIONS","HeatmapLayer","modules","weightsTransformShaders","triPositionBuffer","triTexCoordBuffer","maxWeightsTexture","updateTriggers","TriangleLayerClass","weightsTransform","maxWeightTransform","updateTimer","zoom","textureSize","format","weightsTextureSize","floatTargetSupport","feature","weightsScale","maxWeightsTransformShaders","maxWeightProps","shaderOptions","forceUpdate","viewportCorners","visibleWorldBounds","newState","boundsChanged","scaledCommonBounds","worldBounds","normalizedCommonBounds","textureBounds","radiusPixels","commonBounds","metersPerPixel","moduleSettings","weightProps","devicePixelRatio","coordinateSystem","coordinateOrigin","fromTimer","debounceTimeout","useLayerCoordinateSystem","minLong","minLat","maxLong","maxLat","offsetMode","offsetOriginCommon","bottomLeftCommon","topRightCommon","bottomLeftWorld","topRightWorld"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50]}
|