-
Notifications
You must be signed in to change notification settings - Fork 211
/
prepare.js
46 lines (39 loc) · 1.25 KB
/
prepare.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
const PNG = require('pngjs').PNG;
const fs = require('fs');
const data = JSON.parse(fs.readFileSync('tmp.json'));
const name = process.argv[2];
const u = data.u;
const v = data.v;
const width = u.Ni;
const height = u.Nj - 1;
const png = new PNG({
colorType: 2,
filterType: 4,
width: width,
height: height
});
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++) {
const i = (y * width + x) * 4;
const k = y * width + (x + width / 2) % width;
png.data[i + 0] = Math.floor(255 * (u.values[k] - u.minimum) / (u.maximum - u.minimum));
png.data[i + 1] = Math.floor(255 * (v.values[k] - v.minimum) / (v.maximum - v.minimum));
png.data[i + 2] = 0;
png.data[i + 3] = 255;
}
}
png.pack().pipe(fs.createWriteStream(name + '.png'));
fs.writeFileSync(name + '.json', JSON.stringify({
source: 'http://nomads.ncep.noaa.gov',
date: formatDate(u.dataDate + '', u.dataTime),
width: width,
height: height,
uMin: u.minimum,
uMax: u.maximum,
vMin: v.minimum,
vMax: v.maximum
}, null, 2) + '\n');
function formatDate(date, time) {
return date.substr(0, 4) + '-' + date.substr(4, 2) + '-' + date.substr(6, 2) + 'T' +
(time < 10 ? '0' + time : time) + ':00Z';
}