|
@ -0,0 +1,50 @@ |
|
|
|
|
|
var d3 = require('d3') |
|
|
|
|
|
|
|
|
|
|
|
export function readxml(xmldoc) { |
|
|
|
|
|
let forcast = xmldoc.childNodes[0] |
|
|
|
|
|
let data = forcast.children[1] |
|
|
|
|
|
|
|
|
|
|
|
// Time
|
|
|
|
|
|
let times = data.getElementsByTagName('time-layout')[0] |
|
|
|
|
|
var startTimes = [] |
|
|
|
|
|
for (let time of times.getElementsByTagName('start-valid-time')) { |
|
|
|
|
|
let date = new Date(time.textContent) |
|
|
|
|
|
startTimes.push(date) |
|
|
|
|
|
} |
|
|
|
|
|
var endTimes = [] |
|
|
|
|
|
for (let time of times.getElementsByTagName('end-valid-time')) { |
|
|
|
|
|
let date = new Date(time.textContent) |
|
|
|
|
|
endTimes.push(date) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Temperature
|
|
|
|
|
|
var temperatures = [] |
|
|
|
|
|
for (let temp_type of data.getElementsByTagName('temperature')) { |
|
|
|
|
|
if (temp_type.attributes.type.nodeValue === 'hourly') { |
|
|
|
|
|
for (let temp of temp_type.getElementsByTagName('value')) { |
|
|
|
|
|
let degC = (parseFloat(temp.textContent) - 32) * (5.0/9.0) |
|
|
|
|
|
temperatures.push(degC) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Map
|
|
|
|
|
|
let nElements = startTimes.length |
|
|
|
|
|
var forcastData = [] |
|
|
|
|
|
for (var i = 0; i < nElements; i++) { |
|
|
|
|
|
let midtimeScale = d3.scaleTime() |
|
|
|
|
|
.domain([0, 1]) |
|
|
|
|
|
.range([startTimes[i], endTimes[i]]) |
|
|
|
|
|
let midpointTime = midtimeScale(0.5) |
|
|
|
|
|
forcastData.push({ |
|
|
|
|
|
'date': midpointTime, |
|
|
|
|
|
'temp': temperatures[i] |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
|
|
'startTimes': startTimes, |
|
|
|
|
|
'endTimes': endTimes, |
|
|
|
|
|
'temperature': forcastData |
|
|
|
|
|
} |
|
|
|
|
|
} |