@@ -30,6 +30,30 @@ let dark = false;
30
30
let domain : Domain ;
31
31
let variable : Variable ;
32
32
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
+
33
57
let projection : Projection ;
34
58
let projectionGrid : ProjectionGrid ;
35
59
let projectionName : string ;
@@ -107,13 +131,7 @@ export const getValueFromLatLong = (
107
131
) ;
108
132
if ( variable . value . startsWith ( 'wind_' ) ) {
109
133
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 ) ;
117
135
return { index : index , value : px , direction : dir } ;
118
136
} else {
119
137
return { index : index , value : px } ;
@@ -250,6 +268,8 @@ const initOMFile = async (url: string) => {
250
268
251
269
const urlParams = new URLSearchParams ( omParams ) ;
252
270
dark = urlParams . get ( 'dark' ) === 'true' ;
271
+ variable = variables . find ( ( v ) => urlParams . get ( 'variable' ) === v . value ) ?? variables [ 0 ] ;
272
+ index = vList . indexOf ( variable . value ) ;
253
273
254
274
if ( fileReader . reader ) {
255
275
fileReader . reader . dispose ( ) ;
@@ -275,8 +295,8 @@ const initOMFile = async (url: string) => {
275
295
delete fileReader . backendDirections ;
276
296
277
297
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];
280
300
281
301
nx = domain . grid . nx ;
282
302
ny = domain . grid . ny ;
@@ -291,10 +311,7 @@ const initOMFile = async (url: string) => {
291
311
const projectOrigin = domain . grid . projection . projectOrigin ?? true ;
292
312
293
313
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 ;
298
315
projectionGrid = new ProjectionGrid (
299
316
projection ,
300
317
nx ,
@@ -312,58 +329,36 @@ const initOMFile = async (url: string) => {
312
329
const matches = url . match ( reg ) ;
313
330
if ( domain . windUVComponents ) {
314
331
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` ) ,
319
333
maxFileSize : 500 * 1024 * 1024 // 500 MB
320
334
} ) ;
321
335
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` ) ,
326
337
maxFileSize : 500 * 1024 * 1024 // 500 MB
327
338
} ) ;
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
+ } ) ;
338
345
if ( fileReader . readeru && fileReader . readerv ) {
339
346
const dimensions = fileReader . readeru . getDimensions ( ) ;
340
347
341
348
// Create ranges for each dimension
342
349
const ranges = dimensions . map ( ( dim , _ ) => {
343
350
return { start : 0 , end : dim } ;
344
351
} ) ;
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 ) ;
353
354
354
355
const dataValues = [ ] ;
355
356
const dataDirections = [ ] ;
356
357
357
358
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 ) ;
367
362
}
368
363
data = { values : dataValues , directions : dataDirections } ;
369
364
}
@@ -377,16 +372,14 @@ const initOMFile = async (url: string) => {
377
372
maxFileSize : 500 * 1024 * 1024 // 500 MB
378
373
} ) ;
379
374
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 (
381
379
( ) => {
382
380
throw new Error ( `OMFile error: 404 file not found` ) ;
383
381
}
384
382
) ;
385
- fileReader . readerDirections = await OmFileReader . create (
386
- fileReader . backendDirections
387
- ) . catch ( ( ) => {
388
- throw new Error ( `OMFile error: 404 file not found` ) ;
389
- } ) ;
390
383
391
384
if ( fileReader . reader && fileReader . readerDirections ) {
392
385
const dimensions = fileReader . reader . getDimensions ( ) ;
@@ -395,14 +388,8 @@ const initOMFile = async (url: string) => {
395
388
const ranges = dimensions . map ( ( dim , _ ) => {
396
389
return { start : 0 , end : dim } ;
397
390
} ) ;
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 ) ;
406
393
407
394
const dataValues = [ ] ;
408
395
const dataDirections = [ ] ;
@@ -418,28 +405,30 @@ const initOMFile = async (url: string) => {
418
405
} else {
419
406
fileReader . backend = new MemoryHttpBackend ( {
420
407
url : omUrl ,
421
- maxFileSize : 500 * 1024 * 1024 // 500 MB
408
+ maxFileSize : 500 * 1024 * 1024 // 500 MB,
422
409
} ) ;
423
410
fileReader . reader = await OmFileReader . create ( fileReader . backend ) . catch ( ( ) => {
424
411
throw new Error ( `OMFile error: 404 file not found` ) ;
425
412
} ) ;
426
- if ( fileReader . reader ) {
427
- const dimensions = fileReader . reader . getDimensions ( ) ;
428
413
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 ( ) ;
437
418
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 ) ;
441
424
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
+ }
443
432
}
444
433
}
445
434
} ;
0 commit comments