From 930c40513e07aa2e7e4d5e8ad79d827664ad957c Mon Sep 17 00:00:00 2001 From: Xavier Mamano Date: Tue, 26 Mar 2013 21:08:16 +0100 Subject: [PATCH] This code is not yet complete! --- src/heatmap-openlayers-renderer.js | 42 +++++++++++++++++++----------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/heatmap-openlayers-renderer.js b/src/heatmap-openlayers-renderer.js index 2adec8ed..5e7f5d78 100644 --- a/src/heatmap-openlayers-renderer.js +++ b/src/heatmap-openlayers-renderer.js @@ -86,6 +86,7 @@ OpenLayers.Renderer.Heatmap = OpenLayers.Class(OpenLayers.Renderer, { this.root = hm.get("canvas"); this.features = {}; + this.max = 0; }, /** @@ -169,19 +170,31 @@ OpenLayers.Renderer.Heatmap = OpenLayers.Class(OpenLayers.Renderer, { if (feature.geometry) { style = this.applyDefaultSymbolizer(style || feature.style); // don't render if display none or feature outside extent - var bounds = feature.geometry.getBounds(); + var weight, + bounds = feature.geometry.getBounds(); var worldBounds; if (this.map.baseLayer && this.map.baseLayer.wrapDateLine) { worldBounds = this.map.getMaxExtent(); } - var intersects = bounds && bounds.intersectsBounds(this.extent, {worldBounds: worldBounds}); - - rendered = (style.display !== "none") && !!bounds && intersects; + rendered = (style.display !== "none"); + if (rendered && bounds) { + rendered = bounds.intersectsBounds( + this.extent, // TODO: use extent + heatmap radius + {worldBounds: worldBounds} + ); + // Get max weight of all features + weight = this.weight(feature); + if (this.max < weight) { + this.max = weight; + } + } else { + rendered = false; + } if (rendered) { // keep track of what we have rendered for redraw - this.features[feature.id] = [feature, style]; + this.features[feature.id] = [feature, weight]; } else { // remove from features tracked for redraw @@ -208,7 +221,7 @@ OpenLayers.Renderer.Heatmap = OpenLayers.Class(OpenLayers.Renderer, { var extent = this.extent; var x = ((lacation.lon - this.featureDx) / resolution + (-extent.left / resolution)); var y = ((extent.top / resolution) - lacation.lat / resolution); - return [x, y]; + return [Math.round(x), Math.round(y)]; }, /** @@ -221,6 +234,7 @@ OpenLayers.Renderer.Heatmap = OpenLayers.Class(OpenLayers.Renderer, { hm.set("width", this.root.width); hm.clear(); this.features = {}; + this.max = 0; }, /** @@ -256,6 +270,8 @@ OpenLayers.Renderer.Heatmap = OpenLayers.Class(OpenLayers.Renderer, { for(var i=0; i max ? count : max; } this.heatmap.store.setDataSet({ data: data, - max: max + max: this.max }); } },