• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

keplergl / kepler.gl / 29876005165

21 Jul 2026 11:05PM UTC coverage: 54.489% (-1.6%) from 56.109%
29876005165

push

github

web-flow
feat: Globe view mode (#3486)

* feat: globe mode

Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>

* fixes

Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>

* fix build warning; zoom to point

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* fight with camera in globe mode

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* fix zoom out; poles isues

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* globe text fixes

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* fixes to background color

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* reset bearing, pitch, latitude - globe

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* fix globe saving config

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* fix grid and hex grid in globe

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* add max zoom for globe due to issues

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* improve zoom to cursor

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* occlusion fixes

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* icon layer fixes

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* fixes to s2

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* fix vector tile clipping in globe

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* flow layer warning

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* docs

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* heatmap - add some support in globe mode

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* heatmap fixes

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* video export fixes for globe + swipe + background + more

Signed-off-by: Ihor Dykhta <ihordykhta@Ihors-MacBook-Pro.local>

* video export fix

Signed... (continued)

7834 of 17290 branches covered (45.31%)

Branch coverage included in aggregate %.

231 of 1103 new or added lines in 43 files covered. (20.94%)

97 existing lines in 15 files now uncovered.

15780 of 26047 relevant lines covered (60.58%)

72.12 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

52.17
/src/deckgl-layers/src/svg-icon-layer/scatterplot-icon-layer.ts
1
// SPDX-License-Identifier: MIT
2
// Copyright contributors to the kepler.gl project
3

4
import {ScatterplotLayer, ScatterplotLayerProps} from '@deck.gl/layers';
5
import {Geometry, Model} from '@luma.gl/engine';
6
import {TOPOLOGY} from '@kepler.gl/constants';
7

8
const DEFAULT_POS = [-1, -1, 0, -1, 1, 0, 1, 1, 0, 1, -1, 0];
15✔
9

10
const globeModeUniforms = {
15✔
11
  name: 'globeMode',
12
  vs: `uniform globeModeUniforms {
13
  float globeModeMod;
14
} globeModeProps;
15
`,
16
  uniformTypes: {
17
    globeModeMod: 'f32'
18
  }
19
};
20

21
const iconFragmentShader = /* glsl */ `\
15✔
22
#version 300 es
23
#define SHADER_NAME scatterplot-icon-layer-fragment-shader
24
precision highp float;
25
in vec4 vFillColor;
26
in vec4 vLineColor;
27
in vec2 unitPosition;
28
in float innerUnitRadius;
29
in float outerRadiusPixels;
30
out vec4 fragColor;
31
void main(void) {
32
  geometry.uv = unitPosition;
33
  fragColor = vFillColor;
34
  DECKGL_FILTER_COLOR(fragColor, geometry);
35
}
36
`;
37

38
export interface ScatterplotIconLayerProps extends ScatterplotLayerProps<any> {
39
  iconGeometry: number[];
40
}
41

42
export default class ScatterplotIconLayer extends ScatterplotLayer<any, ScatterplotIconLayerProps> {
43
  getShaders() {
44
    const shaders = super.getShaders();
8✔
45
    return {
8✔
46
      ...shaders,
47
      fs: iconFragmentShader,
48
      modules: [...(shaders.modules || []), globeModeUniforms],
8!
49
      inject: {
50
        'vs:DECKGL_FILTER_SIZE': `
51
          size.xy *= globeModeProps.globeModeMod;`
52
      }
53
    };
54
  }
55

56
  draw(opts) {
NEW
57
    const model = this.state.model;
×
NEW
58
    if (model) {
×
NEW
59
      model.shaderInputs.setProps({
×
60
        globeMode: {
61
          globeModeMod: (this.context.viewport as any).resolution ? -0.5 : 1
×
62
        }
63
      });
64
    }
NEW
65
    super.draw(opts);
×
66
  }
67

68
  _getModel() {
69
    const {iconGeometry} = this.props;
8✔
70
    const positions = iconGeometry ? new Float32Array(iconGeometry) : new Float32Array(DEFAULT_POS);
8!
71

72
    return new Model(this.context.device, {
8✔
73
      ...this.getShaders(),
74
      id: this.props.id,
75
      bufferLayout: this.getAttributeManager()!.getBufferLayouts(),
76
      geometry: new Geometry({
77
        topology: iconGeometry ? TOPOLOGY.TRIANGLE_LIST : TOPOLOGY.TRIANGLE_STRIP,
8!
78
        attributes: {
79
          positions: {size: 3, value: positions}
80
        }
81
      }),
82
      isInstanced: true
83
    });
84
  }
85
}
86

87
ScatterplotIconLayer.layerName = 'ScatterplotIconLayer';
15✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc