1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
if (window.Heatmap) {
// We do want heatmap page to run on load... Bit cheeky
OpenLayers.Strategy.FixMyStreetNoLoad = OpenLayers.Strategy.FixMyStreet;
OpenLayers.Strategy.FixMyStreetHeatmap = OpenLayers.Class(OpenLayers.Strategy.FixMyStreet, {
// Same as update, but doesn't check layer visibility (as running when markers invisible)
update: function(options) {
var mapBounds = this.getMapBounds();
if (mapBounds !== null && ((options && options.force) ||
(this.layer.calculateInRange() && this.invalidBounds(mapBounds)))) {
this.calculateBounds(mapBounds);
this.resolution = this.layer.map.getResolution();
this.triggerRead(options);
}
},
CLASS_NAME: 'OpenLayers.Strategy.FixMyStreetHeatmap'
});
}
fixmystreet.protocol_params.wards = 'wards';
fixmystreet.protocol_params.start_date = 'start_date';
fixmystreet.protocol_params.end_date = 'end_date';
$(function(){
if (!window.Heatmap) {
return;
}
var heat_layer = new Heatmap.Layer("Heatmap");
heat_layer.setOpacity(0.7);
heat_layer.setVisibility(false);
var s = new OpenLayers.Strategy.FixMyStreetHeatmap();
s.setLayer(heat_layer);
s.activate();
// Now it's listening on heat layer, set it to update markers layer
s.layer = fixmystreet.markers;
function create_heat_layer() {
heat_layer.points = [];
for (var i = 0; i < fixmystreet.markers.features.length; i++) {
var m = fixmystreet.markers.features[i];
var ll = new OpenLayers.LonLat(m.geometry.x, m.geometry.y);
heat_layer.addSource(new Heatmap.Source(ll));
}
heat_layer.redraw();
}
fixmystreet.markers.events.register('loadend', null, create_heat_layer);
create_heat_layer();
fixmystreet.map.addLayer(heat_layer);
$('#heatmap_yes').on('click', function() {
fixmystreet.markers.setVisibility(false);
heat_layer.setVisibility(true);
});
$('#heatmap_no').on('click', function() {
heat_layer.setVisibility(false);
fixmystreet.markers.setVisibility(true);
});
$('#sort').closest('.report-list-filters').hide();
$("#wards, #start_date, #end_date").on("change.filters", function() {
// If the category or status has changed we need to re-fetch map markers
fixmystreet.markers.events.triggerEvent("refresh", {force: true});
});
$("#filter_categories, #statuses").on("change.filters", function() {
if (!fixmystreet.markers.getVisibility()) {
// If not visible, still want to trigger change for heatmap
fixmystreet.markers.events.triggerEvent("refresh", {force: true});
}
});
});
|