sg-heatmap
Version:
Open-source all-in-one Swiss Army knife tool for creating Choropleth maps
74 lines (61 loc) • 2.35 kB
JavaScript
;
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);
}