UNPKG

sg-heatmap

Version:

Open-source all-in-one Swiss Army knife tool for creating Choropleth maps

74 lines (61 loc) 2.35 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = supportLeaflet; function supportLeaflet(heatmap) { function initializeRenderer(colorScale) { var defaultStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var addonStyle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; if (!window) throw new Error('Method initializeRenderer should only be called browser-side'); if (!window.L) throw new Error('Leaflet not loaded'); if ('renderer' in this) { console.log('Existing renderer replaced'); this.renderer.remove(); } this.colorScale = colorScale; this.renderer = window.L.geoJSON(null, { style: function style(feature) { var styleOptions = Object.assign({}, defaultStyle); var color = feature.properties.color; if (color) Object.assign(styleOptions, addonStyle, { fillColor: color }); return styleOptions; } }).addData(this.children.map(function (c) { return { id: c.id, type: 'Feature', geometry: c.geometry, properties: Object.assign({}, c.properties, { color: null }) }; })); return this.renderer; } function render(stat) { var _this = this; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!this.renderer) throw new Error('Renderer has not been initialized'); var colorScale = options.colorScale || this.colorScale; var _getStat = this.getStat(stat), statValues = _getStat.values, min = _getStat.min, max = _getStat.max; var domain = options.domain || [min, max]; function normalize(value) { return (value - domain[0]) / (domain[1] - domain[0]); } this.renderer.eachLayer(function (layer) { var key = layer.feature.id; if (key in statValues) { var normalized = normalize(statValues[key]); var transformed = Math.pow(normalized, options.transform || 1); layer.feature.properties.color = colorScale(transformed); } else { layer.feature.properties.color = null; } _this.renderer.resetStyle(layer); }); } heatmap.initializeRenderer = initializeRenderer.bind(heatmap); heatmap.render = render.bind(heatmap); }