var BuoyAnalysisData = { mapW: 500, mapH: 600, mapJson: {}, stationJson: {}, years: { start: 1982, end: 2015 }, /** * */ populateMapData: function() { return new Promise(function(resolve) { d3.json('data/map.json', function(error, json) { BuoyAnalysisData.mapJson = json; resolve(); }); }); }, /** * */ populateSrcFile: function() { return new Promise(function(resolve) { d3.json('data/stations.json', function(error, json) { BuoyAnalysisData.stationJson = json; resolve(); }); }); }, /** * */ setAxisProperties: function(property, tickValues) { var json = BuoyAnalysisData.stationJson; var property = BuoyAnalysisChart.bars.property; var tickValues = BuoyAnalysisChart.bars.tickValues; BuoyAnalysisChart.axis.min = 100; BuoyAnalysisChart.axis.max = 0; for (var id in json) { for (var year = BuoyAnalysisData.years.start; year <= BuoyAnalysisData.years.end; year++) { for (var i = 0; i < 12; i++) { if (json[id]['a' + year][property]['m'][i] <= 0) { continue; } if (json[id]['a' + year][property]['m'][i] < BuoyAnalysisChart.axis.min) { BuoyAnalysisChart.axis.min = json[id]['a' + year][property]['m'][i]; } if (json[id]['a' + year][property]['m'][i] > BuoyAnalysisChart.axis.max) { BuoyAnalysisChart.axis.max = json[id]['a' + year][property]['m'][i]; } } } } BuoyAnalysisChart.axis.scale = d3.scale.linear().domain([0, BuoyAnalysisChart.axis.max]) .range([0, BuoyAnalysisChart.bars.width]); // BuoyAnalysisChart.axis.scaleInverted = d3.scale.linear().domain([0, BuoyAnalysisChart.axis.max]) // .range([BuoyAnalysisChart.bars.width, 0]); BuoyAnalysisChart.axis.imperial = d3.svg.axis() .scale(BuoyAnalysisChart.axis.scale) .orient("top") .tickFormat(function(d) { var val; switch(BuoyAnalysisChart.bars.property) { case 'at': case 'wt': val = Math.round(d * 9 / 5 + 32); break; case 'wh': case 'ws': val = Math.round(d * 3.28 * 10) / 10; break; case 'wp': val = d; break; }; return val; }) .tickValues(tickValues); BuoyAnalysisChart.axis.metric = d3.svg.axis() .scale(BuoyAnalysisChart.axis.scale) .orient("bottom") .tickValues(tickValues); }, /** * */ 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]['a' + year][BuoyAnalysisChart.bars.property]; 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]['a' + year][BuoyAnalysisChart.bars.property]; 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; } };