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.
169 lines
5.5 KiB
169 lines
5.5 KiB
var BuoyAnalysisData = {
|
|
mapW: 900,
|
|
|
|
mapH: 600,
|
|
|
|
mapJson: {},
|
|
|
|
stationJson: {},
|
|
|
|
years: {
|
|
start: 1982,
|
|
end: 2015
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
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(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][property + year]['m'][i] <= 0) {
|
|
continue;
|
|
}
|
|
|
|
if (json[id][property + year]['m'][i] < BuoyAnalysisChart.axis.min) {
|
|
BuoyAnalysisChart.axis.min = json[id][property + year]['m'][i];
|
|
}
|
|
|
|
if (json[id][property + year]['m'][i] > BuoyAnalysisChart.axis.max) {
|
|
BuoyAnalysisChart.axis.max = json[id][property + year]['m'][i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// console.log(BuoyAnalysisChart.bars.property)
|
|
// console.log(BuoyAnalysisChart.axis.min)
|
|
// console.warn(BuoyAnalysisChart.axis.max)
|
|
|
|
BuoyAnalysisChart.axis.scale = d3.scale.linear()
|
|
.domain([BuoyAnalysisChart.axis.min, BuoyAnalysisChart.axis.max])
|
|
.range([BuoyAnalysisChart.axis.h, 0]);
|
|
|
|
BuoyAnalysisChart.axis.scaleInverted = d3.scale.linear()
|
|
.domain([BuoyAnalysisChart.axis.min, BuoyAnalysisChart.axis.max])
|
|
.range([0, BuoyAnalysisChart.axis.h]);
|
|
|
|
BuoyAnalysisChart.axis.imperial = d3.svg.axis()
|
|
.scale(BuoyAnalysisChart.axis.scale)
|
|
.orient("left")
|
|
.tickFormat(function(d) {
|
|
var val;
|
|
|
|
switch(BuoyAnalysisChart.bars.property) {
|
|
case 'ATMP':
|
|
case 'WTMP':
|
|
val = Math.round(d * 9 / 5 + 32);
|
|
break;
|
|
|
|
case 'WVHT':
|
|
case 'WSPD':
|
|
val = Math.round(d * 3.28 * 10) / 10;
|
|
break;
|
|
|
|
case 'WPER':
|
|
val = d;
|
|
break;
|
|
};
|
|
|
|
return val;
|
|
})
|
|
.tickValues(tickValues);
|
|
|
|
BuoyAnalysisChart.axis.metric = d3.svg.axis()
|
|
.scale(BuoyAnalysisChart.axis.scale)
|
|
.orient("right")
|
|
.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][BuoyAnalysisChart.bars.property + 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][BuoyAnalysisChart.bars.property + 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;
|
|
}
|
|
};
|
|
|