Commit fac2a4178da6f497b0108e925e8ecd4793026572
1 parent
92822439
Exists in
master
Correção no uso do plugin heatmap
Showing
1 changed file
with
29 additions
and
18 deletions
Show diff stats
pacotes/heatmap/src/heatmap-openlayers.js
1 | -/* | |
1 | +/* | |
2 | 2 | * heatmap.js OpenLayers Heatmap Class |
3 | 3 | * |
4 | 4 | * Copyright (c) 2011, Patrick Wied (http://www.patrick-wied.at) |
5 | 5 | * Dual-licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) |
6 | 6 | * and the Beerware (http://en.wikipedia.org/wiki/Beerware) license. |
7 | - * | |
7 | + * | |
8 | 8 | * Modified on Jun,06 2011 by Antonio Santiago (http://www.acuriousanimal.com) |
9 | 9 | * - Heatmaps as independent map layer. |
10 | 10 | * - Points based on OpenLayers.LonLat. |
11 | 11 | * - Data initialization in constructor. |
12 | 12 | * - Improved 'addDataPoint' to add new lonlat based points. |
13 | - */ | |
13 | + */ | |
14 | 14 | OpenLayers.Layer.Heatmap = OpenLayers.Class(OpenLayers.Layer, { |
15 | 15 | // the heatmap isn't a basic layer by default - you usually want to display the heatmap over another map ;) |
16 | 16 | isBaseLayer: false, |
... | ... | @@ -34,18 +34,18 @@ OpenLayers.Layer.Heatmap = OpenLayers.Class(OpenLayers.Layer, { |
34 | 34 | // create the heatmap with passed heatmap-options |
35 | 35 | this.heatmap = h337.create(hmoptions); |
36 | 36 | |
37 | - handler = function(){ | |
37 | + handler = function(){ | |
38 | 38 | if(this.map && this.tmpData.max){ |
39 | - this.updateLayer(); | |
39 | + this.updateLayer(); | |
40 | 40 | } |
41 | 41 | }; |
42 | - handler1 = function(){ | |
42 | + handler1 = function(){ | |
43 | 43 | if(this.tmpData && this.tmpData.max){ |
44 | 44 | this.toggle(); |
45 | 45 | this.updateLayer(); |
46 | 46 | } |
47 | 47 | }; |
48 | - | |
48 | + | |
49 | 49 | // on zoomend and moveend we have to move the canvas element and redraw the datapoints with new positions |
50 | 50 | //map.events.register("zoomend", this, handler); |
51 | 51 | map.events.register("moveend", this, handler); |
... | ... | @@ -53,16 +53,16 @@ OpenLayers.Layer.Heatmap = OpenLayers.Class(OpenLayers.Layer, { |
53 | 53 | map.events.register( |
54 | 54 | "removed", |
55 | 55 | this, |
56 | - function(){ | |
56 | + function(){ | |
57 | 57 | if(this.tmpData.max){ |
58 | - this.destroy(); | |
58 | + this.destroy(); | |
59 | 59 | } |
60 | 60 | }); |
61 | 61 | }, |
62 | 62 | updateLayer: function(){ |
63 | 63 | var pixelOffset = this.getPixelOffset(), |
64 | 64 | el = this.heatmap.get('element'); |
65 | - // if the pixeloffset e.g. for x was positive move the canvas element to the left by setting left:-offset.y px | |
65 | + // if the pixeloffset e.g. for x was positive move the canvas element to the left by setting left:-offset.y px | |
66 | 66 | // otherwise move it the right by setting it a positive value. same for top |
67 | 67 | el.style.top = ((pixelOffset.y > 0)?('-'+pixelOffset.y):(Math.abs(pixelOffset.y)))+'px'; |
68 | 68 | el.style.left = ((pixelOffset.x > 0)?('-'+pixelOffset.x):(Math.abs(pixelOffset.x)))+'px'; |
... | ... | @@ -80,9 +80,9 @@ OpenLayers.Layer.Heatmap = OpenLayers.Class(OpenLayers.Layer, { |
80 | 80 | c_lonlat = new OpenLayers.LonLat(c.lon, c.lat), |
81 | 81 | c_pixel = this.mapLayer.getViewPortPxFromLonLat(c_lonlat); |
82 | 82 | |
83 | - return { | |
83 | + return { | |
84 | 84 | x: o_pixel.x - c_pixel.x, |
85 | - y: o_pixel.y - c_pixel.y | |
85 | + y: o_pixel.y - c_pixel.y | |
86 | 86 | }; |
87 | 87 | |
88 | 88 | }, |
... | ... | @@ -90,20 +90,31 @@ OpenLayers.Layer.Heatmap = OpenLayers.Class(OpenLayers.Layer, { |
90 | 90 | var set = {}, |
91 | 91 | dataset = obj.data, |
92 | 92 | dlen = dataset.length, |
93 | - entry, lonlat, pixel; | |
93 | + entry, lonlat, pixel, proj, tproj, vp; | |
94 | 94 | |
95 | 95 | set.max = obj.max; |
96 | 96 | set.data = []; |
97 | + | |
97 | 98 | // get the pixels for all the lonlat entries |
99 | + proj = this.map.getProjectionObject(); | |
100 | + tproj = this.projection; | |
98 | 101 | while(dlen--){ |
99 | - entry = dataset[dlen], | |
100 | - lonlat = entry.lonlat.clone().transform(this.projection, this.map.getProjectionObject()), | |
101 | - pixel = this.roundPixels(this.getViewPortPxFromLonLat(lonlat)); | |
102 | + entry = dataset[dlen]; | |
103 | + try{ | |
104 | + lonlat = entry.lonlat.clone().transform(tproj, proj); | |
105 | + if(lonlat){ | |
106 | + vp = this.getViewPortPxFromLonLat(lonlat); | |
102 | 107 | |
103 | - if(pixel){ | |
104 | - set.data.push({x: pixel.x, y: pixel.y, count: entry.count}); | |
108 | + pixel = this.roundPixels(vp); | |
109 | + | |
110 | + if(pixel){ | |
111 | + set.data.push({x: pixel.x, y: pixel.y, count: entry.count}); | |
112 | + } | |
113 | + } | |
105 | 114 | } |
115 | + catch(e){} | |
106 | 116 | } |
117 | + | |
107 | 118 | this.tmpData = obj; |
108 | 119 | this.heatmap.store.setDataSet(set); |
109 | 120 | }, | ... | ... |