0.2.159 • Published 1 year ago

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

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year 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

1 year ago

0.2.158

1 year ago

0.2.157

1 year ago

0.2.156

1 year ago

0.2.155

1 year ago

0.2.154

1 year ago

0.2.153

1 year ago

0.2.152

1 year ago

0.2.151

1 year ago

0.2.150

1 year ago

0.2.149

1 year ago

0.2.148

1 year ago

0.2.147

1 year ago

0.2.146

1 year ago

0.2.145

1 year ago

0.2.144

1 year ago

0.2.143

1 year ago

0.2.142

1 year ago

0.2.141

1 year ago

0.2.140

1 year ago

0.2.139

1 year ago

0.2.138

1 year ago

0.2.137

1 year ago

0.2.136

1 year ago

0.2.135

1 year ago

0.2.134

1 year ago

0.2.133

1 year ago

0.2.132

1 year ago

0.2.131

1 year ago

0.2.130

1 year ago

0.2.129

1 year ago

0.2.128

1 year ago

0.2.127

1 year ago

0.2.126

1 year ago

0.2.125

1 year ago

0.2.124

1 year ago

0.2.123

1 year ago

0.2.122

1 year ago

0.2.121

1 year ago

0.2.120

1 year ago

0.2.119

1 year ago

0.2.118

1 year ago

0.2.117

1 year ago

0.2.116

1 year ago

0.2.115

1 year ago

0.2.114

1 year ago

0.2.113

1 year ago

0.2.112

1 year ago

0.2.111

1 year ago

0.2.110

1 year ago

0.2.109

1 year ago

0.2.108

1 year ago

0.2.107

1 year ago

0.2.106

1 year ago

0.2.105

1 year ago

0.2.104

1 year ago

0.2.103

1 year ago

0.2.102

1 year ago

0.2.101

1 year ago

0.2.100

1 year ago

0.2.99

1 year ago

0.2.98

1 year ago

0.2.97

1 year ago

0.2.96

1 year ago

0.2.95

1 year ago

0.2.94

1 year ago

0.2.93

1 year ago

0.2.92

1 year ago

0.2.91

1 year ago

0.2.90

1 year ago

0.2.89

1 year ago

0.2.88

1 year ago

0.2.87

1 year ago

0.2.86

1 year ago

0.2.85

1 year ago

0.2.84

1 year ago

0.2.83

1 year ago

0.2.82

1 year ago

0.2.81

1 year ago

0.2.80

1 year ago

0.2.79

1 year ago

0.2.78

1 year ago

0.2.77

1 year ago

0.2.76

1 year ago

0.2.75

1 year ago

0.2.74

1 year ago

0.2.73

1 year ago

0.2.72

1 year ago

0.2.71

1 year ago

0.2.70

1 year ago

0.2.69

1 year ago

0.2.68

1 year ago

0.2.67

1 year ago

0.2.66

1 year ago

0.2.65

1 year ago

0.2.64

1 year ago

0.2.63

1 year ago

0.2.62

1 year ago

0.2.61

1 year ago

0.2.60

1 year ago

0.2.59

1 year ago

0.2.57

1 year ago

0.2.56

1 year ago

0.2.55

1 year ago

0.2.54

1 year ago

0.2.53

1 year ago

0.2.52

1 year ago

0.2.51

1 year ago

0.2.50

1 year ago

0.2.49

1 year ago

0.2.48

1 year ago

0.2.47

1 year ago

0.2.46

1 year ago

0.2.45

1 year ago

0.2.44

1 year ago

0.2.43

1 year ago

0.2.42

1 year ago

0.2.41

1 year ago

0.2.40

1 year ago

0.2.39

1 year ago

0.2.38

1 year ago

0.2.37

1 year ago

0.2.36

1 year ago

0.2.35

1 year ago

0.2.34

1 year ago

0.2.33

1 year ago

0.2.32

1 year ago

0.2.31

1 year ago

0.2.30

1 year ago

0.2.29

1 year ago

0.2.28

1 year ago

0.2.27

1 year ago

0.2.26

1 year ago

0.2.25

1 year ago

0.2.24

1 year ago

0.2.23

1 year ago

0.2.22

1 year ago

0.2.21

1 year ago

0.2.20

1 year ago

0.2.19

1 year ago

0.2.18

1 year ago

0.2.17

1 year ago

0.2.16

1 year ago

0.2.15

1 year ago

0.2.14

1 year ago

0.2.13

1 year ago

0.2.12

1 year ago

0.2.11

1 year ago

0.2.10

1 year ago

0.2.9

1 year ago

0.2.8

1 year ago

0.2.7

1 year ago

0.2.6

1 year ago

0.2.5

1 year ago

0.2.4

1 year ago

0.2.3

1 year ago

0.2.2

1 year ago

0.2.1

1 year ago

0.2.0

1 year ago