0.2.159 • Published 11 months ago

leaflet.webgl-temperature-map-forked v0.2.159

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

Leaflet.WebglTemperatureMap

A simple and fast Leaflet Library to draw temperature maps (heat maps) using WebGL in pure Javascript. Except a O(N) pre-process step which is done in Javascipt, all calculations and drawing are done with shaders in WebGL, so it is pretty fast.

Inspired by temperature-map-gl

Triangulation of mask powered by earcut

In plans rewrite hole package to pixi or three.js (or may be pts) from naked webGL

Demo

Basic Usage

    npm i --save leaflet.webgl-temperature-map
import L from 'leaflet';
import 'leaflet.webgl-temprature-map';

const map = L.map(); // creates map

const tempMap = L.webGlTemperatureMapLayer().addTo(map);

tempMap.setPoints([
  [2630.0850293955414, 7132.896936250415, 64.16567943765965],
  [4065.465306828053, 600.8491068712285, 41.28007958055719],
  [4559.413280590601, 6877.027363962465, 30.497164030229907]
]);

points are in this format:

// x, y - can be lat lng (must set second param in setPoints as { isLatLng: true}), or screen coords
const points = [[x0, y0, v0], [x1, y1, v1], ...[xN, yN, vN]];

Requirements

Reference

L.webGlTemperatureMapLayer(options)

Return Object of class

Options

  • All options from Leaflet setOptions
  • idwOptions - options to temperature map: {
    • p: 5,
    • canvas: null,
    • zIndex: 10,
    • opacity: 0.35,
    • range_factor: 0.00390625,
    • gamma: 2.2,
    • debug_points: false, // work only for debug - not right position on zoom after move
    • framebuffer_factor: 1,
    • isNullColorized: true, // to transparent background set false
    • point_text:
      let v;
      if (val < 1) v = val.toFixed(2);
      else if (val < 10) v = val.toFixed(1);
      else v = Math.round(val);
      return v;
      }
    }

Methods

  • onAdd(map): Sets temperature map to leaflet map.
  • setPoints(points: x, y, value, options: { isLatLng: false }): Adds array of points to the temperature map and draws it. X, y - can be lat lng, or screen coords.
  • needRedraw(): Redraws the temperature map.

Callbacks

  • onDrawLayer({ layer, canvas, bounds, size, zoom, center, ce, ce_b, corner }): Call when layer did redraw.
  • onLayerWillUnmount(): Call when layer will unmount.
  • onLayerDidMount(): Call when layer did mount.

Changelog

0.1.0 July 05, 2020

  • Fix default options

0.1.0 July 05, 2020

  • Add options to temperature map.
  • Add ability to set background transparent
  • Add ability to set points as lat,lng or L.Point

0.0.1 May 06, 2020

  • Initial release.

License

MIT License

Technical explanation

Values are calculated using 'Inverse Distance Weighting (IDW)' algorithm:

Wikipedia - Inverse Distance Weighting

The rest of the explanation makes sense only in the context of the wikipedia article above...

For every point, we perform a render pass to a texture. Using IDW, we calculate the point "influence" to every fragment using a fragment shader. We store the ui*wi at the r channel of the texture and w_i at the g channel. Using blending with "accumulator" configuration, we end end up with a texture, where we have the top sum of IDW in r channel, and the bottom sum at the g channel. Since channels WebGL are clamped in 0,1, we multiply both channels with range_factor to avoid clamping.

At last, we perform a last pass where we get the IDW value by reading the calculation texture and do a r/g at every fragment. We then use this value to determine the color of the fragment.

0.2.159

11 months ago

0.2.158

11 months ago

0.2.157

11 months ago

0.2.156

11 months ago

0.2.155

11 months ago

0.2.154

11 months ago

0.2.153

11 months ago

0.2.152

11 months ago

0.2.151

11 months ago

0.2.150

11 months ago

0.2.149

11 months ago

0.2.148

11 months ago

0.2.147

11 months ago

0.2.146

11 months ago

0.2.145

11 months ago

0.2.144

11 months ago

0.2.143

11 months ago

0.2.142

11 months ago

0.2.141

11 months ago

0.2.140

11 months ago

0.2.139

11 months ago

0.2.138

11 months ago

0.2.137

11 months ago

0.2.136

11 months ago

0.2.135

11 months ago

0.2.134

11 months ago

0.2.133

11 months ago

0.2.132

11 months ago

0.2.131

11 months ago

0.2.130

11 months ago

0.2.129

11 months ago

0.2.128

11 months ago

0.2.127

11 months ago

0.2.126

11 months ago

0.2.125

11 months ago

0.2.124

11 months ago

0.2.123

11 months ago

0.2.122

11 months ago

0.2.121

11 months ago

0.2.120

11 months ago

0.2.119

11 months ago

0.2.118

11 months ago

0.2.117

11 months ago

0.2.116

11 months ago

0.2.115

11 months ago

0.2.114

11 months ago

0.2.113

11 months ago

0.2.112

11 months ago

0.2.111

11 months ago

0.2.110

11 months ago

0.2.109

11 months ago

0.2.108

11 months ago

0.2.107

11 months ago

0.2.106

11 months ago

0.2.105

11 months ago

0.2.104

11 months ago

0.2.103

11 months ago

0.2.102

11 months ago

0.2.101

11 months ago

0.2.100

11 months ago

0.2.99

11 months ago

0.2.98

11 months ago

0.2.97

11 months ago

0.2.96

11 months ago

0.2.95

11 months ago

0.2.94

11 months ago

0.2.93

11 months ago

0.2.92

11 months ago

0.2.91

11 months ago

0.2.90

11 months ago

0.2.89

11 months ago

0.2.88

11 months ago

0.2.87

11 months ago

0.2.86

11 months ago

0.2.85

11 months ago

0.2.84

11 months ago

0.2.83

11 months ago

0.2.82

11 months ago

0.2.81

11 months ago

0.2.80

11 months ago

0.2.79

11 months ago

0.2.78

11 months ago

0.2.77

11 months ago

0.2.76

11 months ago

0.2.75

11 months ago

0.2.74

11 months ago

0.2.73

11 months ago

0.2.72

11 months ago

0.2.71

11 months ago

0.2.70

11 months ago

0.2.69

11 months ago

0.2.68

11 months ago

0.2.67

11 months ago

0.2.66

11 months ago

0.2.65

11 months ago

0.2.64

11 months ago

0.2.63

11 months ago

0.2.62

11 months ago

0.2.61

11 months ago

0.2.60

11 months ago

0.2.59

11 months ago

0.2.57

11 months ago

0.2.56

11 months ago

0.2.55

11 months ago

0.2.54

11 months ago

0.2.53

11 months ago

0.2.52

11 months ago

0.2.51

11 months ago

0.2.50

11 months ago

0.2.49

11 months ago

0.2.48

11 months ago

0.2.47

11 months ago

0.2.46

11 months ago

0.2.45

11 months ago

0.2.44

11 months ago

0.2.43

11 months ago

0.2.42

11 months ago

0.2.41

11 months ago

0.2.40

11 months ago

0.2.39

11 months ago

0.2.38

11 months ago

0.2.37

11 months ago

0.2.36

11 months ago

0.2.35

11 months ago

0.2.34

11 months ago

0.2.33

11 months ago

0.2.32

11 months ago

0.2.31

11 months ago

0.2.30

11 months ago

0.2.29

11 months ago

0.2.28

11 months ago

0.2.27

11 months ago

0.2.26

11 months ago

0.2.25

11 months ago

0.2.24

11 months ago

0.2.23

11 months ago

0.2.22

11 months ago

0.2.21

11 months ago

0.2.20

11 months ago

0.2.19

11 months ago

0.2.18

11 months ago

0.2.17

11 months ago

0.2.16

11 months ago

0.2.15

11 months ago

0.2.14

11 months ago

0.2.13

11 months ago

0.2.12

11 months ago

0.2.11

11 months ago

0.2.10

11 months ago

0.2.9

11 months ago

0.2.8

11 months ago

0.2.7

11 months ago

0.2.6

11 months ago

0.2.5

11 months ago

0.2.4

11 months ago

0.2.3

11 months ago

0.2.2

11 months ago

0.2.1

11 months ago

0.2.0

11 months ago