Skip to content

Commit fcd5752

Browse files
author
Vincent van der Wal
committed
working again with static path
1 parent d6832ed commit fcd5752

File tree

1 file changed

+66
-77
lines changed

1 file changed

+66
-77
lines changed

src/om-protocol.ts

Lines changed: 66 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,30 @@ let dark = false;
3030
let domain: Domain;
3131
let variable: Variable;
3232

33+
const vList = [
34+
'cape',
35+
'cloud_base',
36+
'cloud_cover',
37+
'cloud_cover_high',
38+
'cloud_cover_low',
39+
'cloud_cover_mid',
40+
'convective_inhibition',
41+
'direct_radiation',
42+
'freezing_level_height',
43+
'precipitation',
44+
'pressure_msl',
45+
'relative_humidity_2m',
46+
'shortwave_radiation',
47+
'snow_depth',
48+
'snowfall_height',
49+
'sunshine_duration',
50+
'surface_temperature',
51+
'temperature_2m',
52+
'wind_gusts_10m',
53+
'wind_u_component_10m',
54+
'wind_v_component_10m'
55+
];
56+
3357
let projection: Projection;
3458
let projectionGrid: ProjectionGrid;
3559
let projectionName: string;
@@ -107,13 +131,7 @@ export const getValueFromLatLong = (
107131
);
108132
if (variable.value.startsWith('wind_')) {
109133
const directions = data.directions as TypedArray;
110-
const dir = interpolate2DHermite(
111-
directions,
112-
domain.grid.nx,
113-
index,
114-
xFraction,
115-
yFraction
116-
);
134+
const dir = interpolate2DHermite(directions, domain.grid.nx, index, xFraction, yFraction);
117135
return { index: index, value: px, direction: dir };
118136
} else {
119137
return { index: index, value: px };
@@ -250,6 +268,8 @@ const initOMFile = async (url: string) => {
250268

251269
const urlParams = new URLSearchParams(omParams);
252270
dark = urlParams.get('dark') === 'true';
271+
variable = variables.find((v) => urlParams.get('variable') === v.value) ?? variables[0];
272+
index = vList.indexOf(variable.value);
253273

254274
if (fileReader.reader) {
255275
fileReader.reader.dispose();
@@ -275,8 +295,8 @@ const initOMFile = async (url: string) => {
275295
delete fileReader.backendDirections;
276296

277297
domain = domains.find((dm) => dm.value === omUrl.split('/')[4]) ?? domains[0];
278-
const variableString = omUrl.split('/')[omUrl.split('/').length - 1].replace('.om', '');
279-
variable = variables.find((v) => v.value === variableString) ?? variables[0];
298+
// const variableString = omUrl.split('/')[omUrl.split('/').length - 1].replace('.om', '');
299+
// variable = variables.find((v) => v.value === variableString) ?? variables[0];
280300

281301
nx = domain.grid.nx;
282302
ny = domain.grid.ny;
@@ -291,10 +311,7 @@ const initOMFile = async (url: string) => {
291311
const projectOrigin = domain.grid.projection.projectOrigin ?? true;
292312

293313
projectionName = domain.grid.projection.name;
294-
projection = new DynamicProjection(
295-
projectionName,
296-
domain.grid.projection
297-
) as Projection;
314+
projection = new DynamicProjection(projectionName, domain.grid.projection) as Projection;
298315
projectionGrid = new ProjectionGrid(
299316
projection,
300317
nx,
@@ -312,58 +329,36 @@ const initOMFile = async (url: string) => {
312329
const matches = url.match(reg);
313330
if (domain.windUVComponents) {
314331
fileReader.backendu = new MemoryHttpBackend({
315-
url: omUrl.replace(
316-
matches[0],
317-
`wind_u_component_${matches[1]}m.om`
318-
),
332+
url: omUrl.replace(matches[0], `wind_u_component_${matches[1]}m.om`),
319333
maxFileSize: 500 * 1024 * 1024 // 500 MB
320334
});
321335
fileReader.backendv = new MemoryHttpBackend({
322-
url: omUrl.replace(
323-
matches[0],
324-
`wind_v_component_${matches[1]}m.om`
325-
),
336+
url: omUrl.replace(matches[0], `wind_v_component_${matches[1]}m.om`),
326337
maxFileSize: 500 * 1024 * 1024 // 500 MB
327338
});
328-
fileReader.readeru = await OmFileReader.create(fileReader.backendu).catch(
329-
() => {
330-
throw new Error(`OMFile error: 404 file not found`);
331-
}
332-
);
333-
fileReader.readerv = await OmFileReader.create(fileReader.backendv).catch(
334-
() => {
335-
throw new Error(`OMFile error: 404 file not found`);
336-
}
337-
);
339+
fileReader.readeru = await OmFileReader.create(fileReader.backendu).catch(() => {
340+
throw new Error(`OMFile error: 404 file not found`);
341+
});
342+
fileReader.readerv = await OmFileReader.create(fileReader.backendv).catch(() => {
343+
throw new Error(`OMFile error: 404 file not found`);
344+
});
338345
if (fileReader.readeru && fileReader.readerv) {
339346
const dimensions = fileReader.readeru.getDimensions();
340347

341348
// Create ranges for each dimension
342349
const ranges = dimensions.map((dim, _) => {
343350
return { start: 0, end: dim };
344351
});
345-
const datau = await fileReader.readeru.read(
346-
OmDataType.FloatArray,
347-
ranges
348-
);
349-
const datav = await fileReader.readerv.read(
350-
OmDataType.FloatArray,
351-
ranges
352-
);
352+
const datau = await fileReader.readeru.read(OmDataType.FloatArray, ranges);
353+
const datav = await fileReader.readerv.read(OmDataType.FloatArray, ranges);
353354

354355
const dataValues = [];
355356
const dataDirections = [];
356357

357358
for (let [i, dp] of datau.entries()) {
358-
dataValues.push(
359-
Math.sqrt(Math.pow(dp, 2) + Math.pow(datav[i], 2)) *
360-
1.94384
361-
);
362-
363-
dataDirections.push(
364-
(Math.atan2(dp, datav[i]) * (180 / Math.PI) + 360) %
365-
360
366-
);
359+
dataValues.push(Math.sqrt(Math.pow(dp, 2) + Math.pow(datav[i], 2)) * 1.94384);
360+
361+
dataDirections.push((Math.atan2(dp, datav[i]) * (180 / Math.PI) + 360) % 360);
367362
}
368363
data = { values: dataValues, directions: dataDirections };
369364
}
@@ -377,16 +372,14 @@ const initOMFile = async (url: string) => {
377372
maxFileSize: 500 * 1024 * 1024 // 500 MB
378373
});
379374

380-
fileReader.reader = await OmFileReader.create(fileReader.backend).catch(
375+
fileReader.reader = await OmFileReader.create(fileReader.backend).catch(() => {
376+
throw new Error(`OMFile error: 404 file not found`);
377+
});
378+
fileReader.readerDirections = await OmFileReader.create(fileReader.backendDirections).catch(
381379
() => {
382380
throw new Error(`OMFile error: 404 file not found`);
383381
}
384382
);
385-
fileReader.readerDirections = await OmFileReader.create(
386-
fileReader.backendDirections
387-
).catch(() => {
388-
throw new Error(`OMFile error: 404 file not found`);
389-
});
390383

391384
if (fileReader.reader && fileReader.readerDirections) {
392385
const dimensions = fileReader.reader.getDimensions();
@@ -395,14 +388,8 @@ const initOMFile = async (url: string) => {
395388
const ranges = dimensions.map((dim, _) => {
396389
return { start: 0, end: dim };
397390
});
398-
const dataWind = await fileReader.reader.read(
399-
OmDataType.FloatArray,
400-
ranges
401-
);
402-
const dataDirs = await fileReader.readerDirections.read(
403-
OmDataType.FloatArray,
404-
ranges
405-
);
391+
const dataWind = await fileReader.reader.read(OmDataType.FloatArray, ranges);
392+
const dataDirs = await fileReader.readerDirections.read(OmDataType.FloatArray, ranges);
406393

407394
const dataValues = [];
408395
const dataDirections = [];
@@ -418,28 +405,30 @@ const initOMFile = async (url: string) => {
418405
} else {
419406
fileReader.backend = new MemoryHttpBackend({
420407
url: omUrl,
421-
maxFileSize: 500 * 1024 * 1024 // 500 MB
408+
maxFileSize: 500 * 1024 * 1024 // 500 MB,
422409
});
423410
fileReader.reader = await OmFileReader.create(fileReader.backend).catch(() => {
424411
throw new Error(`OMFile error: 404 file not found`);
425412
});
426-
if (fileReader.reader) {
427-
const dimensions = fileReader.reader.getDimensions();
428413

429-
// Create ranges for each dimension
430-
const ranges = dimensions.map((dim, _) => {
431-
return { start: 0, end: dim };
432-
});
433-
let dataValues = await fileReader.reader.read(
434-
OmDataType.FloatArray,
435-
ranges
436-
);
414+
for (const i of [...Array(fileReader.reader.numberOfChildren())].map((_, i) => i)) {
415+
const child = await fileReader.reader.getChild(i);
416+
if (child.getName() === variable.value) {
417+
const dimensions = child.getDimensions();
437418

438-
if (variable.value == 'wind_gusts_10m') {
439-
dataValues = dataValues.map((val) => val * 1.94384);
440-
}
419+
// Create ranges for each dimension
420+
const ranges = dimensions.map((dim, _) => {
421+
return { start: 0, end: dim };
422+
});
423+
let dataValues = await child.read(OmDataType.FloatArray, ranges);
441424

442-
data = { values: dataValues };
425+
if (variable.value == 'wind_gusts_10m') {
426+
dataValues = dataValues.map((val) => val * 1.94384);
427+
}
428+
429+
data = { values: dataValues };
430+
break;
431+
}
443432
}
444433
}
445434
};

0 commit comments

Comments
 (0)