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; } };