You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

156 lines
4.4 KiB

var BuoyAnalysisData = {
mapW: 900,
mapH: 600,
mapJson: {},
stationJson: {},
years: {
start: 1982,
end: 2015
},
axis: {
h: 200,
min: 100,
max: 0,
scale: null,
scaleInverted: null,
fahrenheit: null,
celsius: null
},
/**
*
*/
populateMapData: function() {
return new Promise(function(resolve) {
d3.json('client/_map.json', function(error, json) {
BuoyAnalysisData.mapJson = json;
resolve();
});
});
},
/**
*
*/
populateSrcFile: function() {
return new Promise(function(resolve) {
d3.json('client/_stations.json', function(error, json) {
BuoyAnalysisData.stationJson = json;
resolve();
});
});
},
/**
*
*/
setAxisProperties: function() {
var json = BuoyAnalysisData.stationJson;
for (var id in json) {
for (var prop in json[id]) {
if (prop === 'id' || prop === 'lat' || prop === 'lon' || prop === 'name') {
continue;
}
for (var i = 0; i < 12; i++) {
if (json[id][prop]['m'][i] <= 0) {
continue;
}
if (json[id][prop]['m'][i] < BuoyAnalysisData.axis.min) {
BuoyAnalysisData.axis.min = json[id][prop]['m'][i];
}
if (json[id][prop]['m'][i] > BuoyAnalysisData.axis.max) {
BuoyAnalysisData.axis.max = json[id][prop]['m'][i];
}
}
}
}
// console.warn("MIN: " + BuoyAnalysisData.axis.min + ', MAX: ' + BuoyAnalysisData.axis.max)
BuoyAnalysisData.axis.scale = d3.scale.linear()
.domain([BuoyAnalysisData.axis.min, BuoyAnalysisData.axis.max])
.range([BuoyAnalysisData.axis.h, 0]);
BuoyAnalysisData.axis.scaleInverted = d3.scale.linear()
.domain([BuoyAnalysisData.axis.min, BuoyAnalysisData.axis.max])
.range([0, BuoyAnalysisData.axis.h]);
BuoyAnalysisData.axis.fahrenheit = d3.svg.axis()
.scale(BuoyAnalysisData.axis.scale)
.orient("left")
.tickFormat(function(d) { return Math.round(d * 9 / 5 + 32); })
.tickValues([10, 13, 15.5, 18.5, 21]);
BuoyAnalysisData.axis.celsius = d3.svg.axis()
.scale(BuoyAnalysisData.axis.scale)
.orient("right")
.tickValues([10, 13, 15.5, 18.5, 21]);
},
/**
*
*/
calculateYearlyAverages: function(stations) {
var sum, count, avg;
var years = [];
for (var year = BuoyAnalysisData.years.start; year <= BuoyAnalysisData.years.end; year++) {
sum = 0;
count = 0;
stations.forEach(function(id) {
data = BuoyAnalysisData.stationJson[id]['avgs' + year];
if (data === undefined || data.y === 0) {
return;
}
sum += data.y;
count++;
});
years.push({ average: (sum / count) || 0, year: year });
}
return years;
},
/**
*
*/
calculateMonthlyAverages: function(stations) {
var sum, count, data;
var months = [];
for (var year = BuoyAnalysisData.years.start; year <= BuoyAnalysisData.years.end; year++) {
for (var month = 0; month < 12; month++) {
sum = 0;
count = 0;
stations.forEach(function(id) {
data = BuoyAnalysisData.stationJson[id]['avgs' + year];
if (data === undefined || data.m[month] === 0) {
return;
}
sum += data.m[month];
count++;
});
months.push({ average: (sum / count) || 0, month: month, year: year });
}
};
return months;
}
};