diff --git a/src/routes/en/docs/+layout.svelte b/src/routes/en/docs/+layout.svelte index f9d0b6a4..2cbb2b87 100644 --- a/src/routes/en/docs/+layout.svelte +++ b/src/routes/en/docs/+layout.svelte @@ -37,7 +37,9 @@ ] }, { title: 'Historical Weather', url: '/en/docs/historical-weather-api' }, - { title: 'Ensemble Models', url: '/en/docs/ensemble-api' }, + { title: 'Ensemble Models', url: '/en/docs/ensemble-api', children: [ + { title: 'Ensemble Mean API', url: '/en/docs/ensemble-mean-api' } + ]}, { title: 'Seasonal Forecast', url: '/en/docs/seasonal-forecast-api' }, { title: 'Climate Change', url: '/en/docs/climate-api' }, { title: 'Marine Forecast', url: '/en/docs/marine-weather-api' }, diff --git a/src/routes/en/docs/ensemble-api/+page.svelte b/src/routes/en/docs/ensemble-api/+page.svelte index 7cec4d7b..41957d93 100644 --- a/src/routes/en/docs/ensemble-api/+page.svelte +++ b/src/routes/en/docs/ensemble-api/+page.svelte @@ -129,8 +129,14 @@ > - The initial version of ensemble weather models has been integrated. You can learn more about - these models in the ensemble means and spreads + with a longer retention period. For more information on ensemble models, see this + blog article = { ukmo_uk_ensemble_2km: ukmo_2km_variables, gem_global_ensemble: gem_global_variables, bom_access_global_ensemble: bom_access_global_ensemble, - meteoswiss_icon_ch1_ensemble: meteoswiss, - meteoswiss_icon_ch2_ensemble: meteoswiss + meteoswiss_icon_ch1_ensemble: meteoswiss_variables, + meteoswiss_icon_ch2_ensemble: meteoswiss_variables }; export const hourly = [ diff --git a/src/routes/en/docs/ensemble-mean-api/+layout.ts b/src/routes/en/docs/ensemble-mean-api/+layout.ts new file mode 100644 index 00000000..61989e91 --- /dev/null +++ b/src/routes/en/docs/ensemble-mean-api/+layout.ts @@ -0,0 +1,10 @@ +import type { LayoutLoad } from './$types'; + +export const load = (() => { + return { + heroTitle: 'Ensemble Mean API', + heroDescription: 'Mean Ensemble Weather Forecasts from Multiple Models', + heroImage: '/images/backgrounds/forstberg.webp', + heroImagePosition: 'center 65%' + }; +}) satisfies LayoutLoad; diff --git a/src/routes/en/docs/ensemble-mean-api/+page.svelte b/src/routes/en/docs/ensemble-mean-api/+page.svelte new file mode 100644 index 00000000..71a88081 --- /dev/null +++ b/src/routes/en/docs/ensemble-mean-api/+page.svelte @@ -0,0 +1,879 @@ + + + + Ensemble Mean API | Open-Meteo.com + + + +
+ + + + + + + +
+ +

Ensemble Models

+
+
+ {#each models as group, i (i)} +
+ {#each group as { value, label } (value)} +
+ { + if ($params.models?.includes(value)) { + $params.models = $params.models.filter((item: string) => { + return item !== value; + }); + } else if ($params.models) { + $params.models.push(value); + $params.models = $params.models; + } + }} + /> + +
+ {/each} +
+ {/each} +
+
+ + +
+

+ Hourly Weather Variables +

+
+ {#each hourly as group, i (i)} +
+ {#each group as { value, label } (value)} +
+
+
+ {label} +
+
+
+ { + if ($params.hourly?.includes(value)) { + $params.hourly = $params.hourly.filter((item: string) => { + return item !== value; + }); + } else if ($params.hourly) { + $params.hourly.push(value); + $params.hourly = $params.hourly; + } + }} + /> + +
+ {#if !noSpreadVariables.includes(value)} +
+ { + if ($params.hourly?.includes(value + '_spread')) { + $params.hourly = $params.hourly.filter((item: string) => { + return item !== value + '_spread'; + }); + } else if ($params.hourly) { + $params.hourly.push(value + '_spread'); + $params.hourly = $params.hourly; + } + }} + /> + + +
+ {/if} +
+
+
+ {/each} +
+ {/each} +
+
+ + +
+ + +
+ {#each additionalVariables as group, i (i)} +
+ {#each group as { value, label } (value)} +
+
+
+ {label} +
+
+
+ { + if ($params.hourly?.includes(value)) { + $params.hourly = $params.hourly.filter((item: string) => { + return item !== value; + }); + } else if ($params.hourly) { + $params.hourly.push(value); + $params.hourly = $params.hourly; + } + }} + /> + +
+ {#if !noSpreadVariables.includes(value)} +
+ { + if ($params.hourly?.includes(value + '_spread')) { + $params.hourly = $params.hourly.filter((item: string) => { + return item !== value + '_spread'; + }); + } else if ($params.hourly) { + $params.hourly.push(value + '_spread'); + $params.hourly = $params.hourly; + } + }} + /> + + +
+ {/if} +
+
+
+ {/each} +
+ {/each} +
+ + + Note: You can further adjust the forecast time range for hourly weather variables using &forecast_hours= + and &past_hours= as shown below. + +
+
+ + {forecastHours?.label} + + {#each forecastHoursOptions as { value, label } (value)} + {label} + {/each} + + + +
+
+ + {pastHours?.label} + + {#each pastHoursOptions as { value, label } (value)} + {label} + {/each} + + + +
+ +
+ + {temporalResolution?.label} + + {#each temporalResolutionOptions as { value, label } (value)} + {label} + {/each} + + + +
+
+ + {cellSelection?.label} + + {#each gridCellSelectionOptions as { value, label } (value)} + {label} + {/each} + + + +
+
+
+ +
+ {#each solarVariables as group, i (i)} +
+ {#each group as { value, label } (value)} +
+
+
+ {label} +
+
+
+ { + if ($params.hourly?.includes(value)) { + $params.hourly = $params.hourly.filter((item: string) => { + return item !== value; + }); + } else if ($params.hourly) { + $params.hourly.push(value); + $params.hourly = $params.hourly; + } + }} + /> + +
+ {#if !noSpreadVariables.includes(value)} +
+ { + if ($params.hourly?.includes(value + '_spread')) { + $params.hourly = $params.hourly.filter((item: string) => { + return item !== value + '_spread'; + }); + } else if ($params.hourly) { + $params.hourly.push(value + '_spread'); + $params.hourly = $params.hourly; + } + }} + /> + + +
+ {/if} +
+
+
+ {/each} +
+ {/each} +
+ + + Note: Solar radiation is averaged over the past hour. Use + instant for radiation at the indicated time. For global tilted irradiance GTI please + specify Tilt and Azimuth below. + + +
+
+ + + {#if Number($params.tilt) < 0 || Number($params.tilt) > 90} +
Tilt must be between 0° and 90°
+ {/if} +
+ +
+ + + {#if Number($params.azimuth) < -180 || Number($params.azimuth) > 180} +
+ Azimuth must be between -180° (north) and 180° (north) +
+ {/if} +
+
+
+ +
+
+ +
+ {#each pressureVariables as variable, i (i)} + (pressureVariablesTab = variable.value)} + >
+ {variable.label} + + {levels.filter((level) => + $params.hourly?.includes(`${variable.value}_${level}hPa`) + ).length + ? '(' + + levels.filter((level) => + $params.hourly?.includes(`${variable.value}_${level}hPa`) + ).length + + '/' + + levels.length + + ')' + : ''} + +
+
+ {/each} +
+
+
+
+ {#each pressureVariables as variable, i (i)} + {#if pressureVariablesTab === variable.value} +
{variable.label}
+
+
+ {#each sliceIntoChunks(levels, levels.length / 3 + 1) as chunk, j (j)} +
+ {#each chunk as level, k (k)} +
+
+
+ {level} hPa ({altitudeAboveSeaLevelMeters(level)}) +
+
+
+ { + if ( + $params.hourly?.includes(`${variable.value}_${level}hPa`) + ) { + $params.hourly = $params.hourly.filter((item: string) => { + return item !== `${variable.value}_${level}hPa`; + }); + } else if ($params.hourly) { + $params.hourly.push(`${variable.value}_${level}hPa`); + $params.hourly = $params.hourly; + } + }} + /> + +
+ {#if !noSpreadVariables.includes(`${variable.value}_${level}hPa`)} +
+ { + if ( + $params.hourly?.includes( + `${variable.value}_${level}hPa_spread` + ) + ) { + $params.hourly = $params.hourly.filter((item: string) => { + return item !== `${variable.value}_${level}hPa_spread`; + }); + } else if ($params.hourly) { + $params.hourly.push( + `${variable.value}_${level}hPa_spread` + ); + $params.hourly = $params.hourly; + } + }} + /> + + +
+ {/if} +
+
+
+ {/each} +
+ {/each} +
+
+ {/if} + {/each} +
+
+
+ Note: Altitudes are approximate and in meters above sea level + (not above ground). Use geopotential_height to get precise altitudes above sea + level. +
+
+
+
+ + +
+

Daily Weather Variables

+
+ {#each daily as group, i (i)} +
+ {#each group as { value, label } (value)} +
+
+
+ {label} +
+
+
+ { + if ($params.daily?.includes(value)) { + $params.daily = $params.daily.filter((item: string) => { + return item !== value; + }); + } else if ($params.daily) { + $params.daily.push(value); + $params.daily = $params.daily; + } + }} + /> + +
+ + +
+
+
+ {/each} +
+ {/each} +
+ {#if timezoneInvalid} +
+ + + It is recommended to select a timezone for daily data. Per default the API will use + GMT+0. + + +
+ {/if} +
+ + +
+ +
+ + +
+ + + +
+ +
+ + +
+

Documentation

+
+

+ The Ensemble Mean API offers access to mean and spread (standard deviation) directly + calculated from ensemble models using individual members. These ensemble means are stored for + an extended period, with most available since March 2026. Individual ensemble members, + however, are only stored for up to three days. +

+

+ The Ensemble Mean API uses the same data sources as the regular Ensemble API. Please refer to + the Ensemble API for a detailed list of ensemble models. +

+
+
diff --git a/src/routes/en/docs/ensemble-mean-api/options.ts b/src/routes/en/docs/ensemble-mean-api/options.ts new file mode 100644 index 00000000..b910bd40 --- /dev/null +++ b/src/routes/en/docs/ensemble-mean-api/options.ts @@ -0,0 +1,749 @@ +export const defaultParameters = { + daily: [], + hourly: [], + models: [], + current: [], + + timezone: 'UTC', + location_mode: 'location_search', + csv_coordinates: undefined, + + time_mode: 'forecast_days', + past_days: '0', + forecast_days: '7', + + end_date: undefined, + start_date: undefined, + + past_hours: undefined, + cell_selection: undefined, + forecast_hours: undefined, + temporal_resolution: undefined, + + tilt: '0', + azimuth: '0', + + timeformat: 'iso8601', + wind_speed_unit: 'kmh', + precipitation_unit: 'mm', + temperature_unit: 'celsius' +}; + +export const pressureVariables = [ + { value: 'temperature', label: 'Temperature' }, + { value: 'relative_humidity', label: 'Relative Humidity' }, + { value: 'dew_point', label: 'Dew Point' }, + { value: 'cloud_cover', label: 'Cloud Cover' }, + { value: 'wind_speed', label: 'Wind Speed' }, + { value: 'wind_direction', label: 'Wind Direction' }, + { value: 'vertical_velocity', label: 'Vertical Velocity' }, + { value: 'geopotential_height', label: 'Geopotential Height' } +]; + +export const levels = [1000, 925, 850, 700, 600, 500, 400, 300, 250, 200, 150, 100, 50]; + +const ecmwf_pressure_levels = [ + 'cloud_cover_1000hPa', + 'cloud_cover_100hPa', + 'cloud_cover_150hPa', + 'cloud_cover_200hPa', + 'cloud_cover_250hPa', + 'cloud_cover_300hPa', + 'cloud_cover_400hPa', + 'cloud_cover_500hPa', + 'cloud_cover_50hPa', + 'cloud_cover_600hPa', + 'cloud_cover_700hPa', + 'cloud_cover_850hPa', + 'cloud_cover_925hPa', + 'dew_point_1000hPa', + 'dew_point_100hPa', + 'dew_point_150hPa', + 'dew_point_200hPa', + 'dew_point_250hPa', + 'dew_point_300hPa', + 'dew_point_400hPa', + 'dew_point_500hPa', + 'dew_point_50hPa', + 'dew_point_600hPa', + 'dew_point_700hPa', + 'dew_point_850hPa', + 'dew_point_925hPa', + 'geopotential_height_1000hPa', + 'geopotential_height_100hPa', + 'geopotential_height_150hPa', + 'geopotential_height_200hPa', + 'geopotential_height_250hPa', + 'geopotential_height_300hPa', + 'geopotential_height_400hPa', + 'geopotential_height_500hPa', + 'geopotential_height_50hPa', + 'geopotential_height_600hPa', + 'geopotential_height_700hPa', + 'geopotential_height_850hPa', + 'geopotential_height_925hPa', + 'relative_humidity_1000hPa', + 'relative_humidity_100hPa', + 'relative_humidity_150hPa', + 'relative_humidity_200hPa', + 'relative_humidity_250hPa', + 'relative_humidity_300hPa', + 'relative_humidity_400hPa', + 'relative_humidity_500hPa', + 'relative_humidity_50hPa', + 'relative_humidity_600hPa', + 'relative_humidity_700hPa', + 'relative_humidity_850hPa', + 'relative_humidity_925hPa', + 'temperature_1000hPa', + 'temperature_100hPa', + 'temperature_150hPa', + 'temperature_200hPa', + 'temperature_250hPa', + 'temperature_300hPa', + 'temperature_400hPa', + 'temperature_500hPa', + 'temperature_50hPa', + 'temperature_600hPa', + 'temperature_700hPa', + 'temperature_850hPa', + 'temperature_925hPa', + 'vertical_velocity_1000hPa', + 'vertical_velocity_100hPa', + 'vertical_velocity_150hPa', + 'vertical_velocity_200hPa', + 'vertical_velocity_250hPa', + 'vertical_velocity_300hPa', + 'vertical_velocity_400hPa', + 'vertical_velocity_500hPa', + 'vertical_velocity_50hPa', + 'vertical_velocity_600hPa', + 'vertical_velocity_700hPa', + 'vertical_velocity_850hPa', + 'vertical_velocity_925hPa', + 'wind_speed_1000hPa', + 'wind_speed_100hPa', + 'wind_speed_150hPa', + 'wind_speed_200hPa', + 'wind_speed_250hPa', + 'wind_speed_300hPa', + 'wind_speed_400hPa', + 'wind_speed_500hPa', + 'wind_speed_50hPa', + 'wind_speed_600hPa', + 'wind_speed_700hPa', + 'wind_speed_850hPa', + 'wind_speed_925hPa', + 'wind_direction_1000hPa', + 'wind_direction_100hPa', + 'wind_direction_150hPa', + 'wind_direction_200hPa', + 'wind_direction_250hPa', + 'wind_direction_300hPa', + 'wind_direction_400hPa', + 'wind_direction_500hPa', + 'wind_direction_50hPa', + 'wind_direction_600hPa', + 'wind_direction_700hPa', + 'wind_direction_850hPa', + 'wind_direction_925hPa' +]; + +export const icon_global_variables = [ + 'weather_code', + 'temperature_2m', + 'surface_pressure', + 'pressure_msl', + 'relative_humidity_2m', + 'dew_point_2m', + 'apparent_temperature', + 'precipitation', + 'snowfall', + 'snowfall_water_equivalent', + 'cloud_cover', + 'et0_fao_evapotranspiration', + 'vapour_pressure_deficit', + 'wind_speed_10m', + 'wind_direction_10m', + 'rain', + 'wet_bulb_temperature_2m', + 'shortwave_radiation', + 'sunshine_duration', + 'is_day' +]; + +export const icon_eu_variables = [ + 'weather_code', + 'temperature_2m', + 'surface_pressure', + 'pressure_msl', + 'precipitation', + 'snowfall', + 'snowfall_water_equivalent', + 'cloud_cover', + 'wind_speed_10m', + 'wind_direction_10m', + 'wind_gusts_10m', + 'wind_speed_80m', + 'wind_direction_80m', + 'temperature_80m', + 'rain', + 'cape', + 'wet_bulb_temperature_2m', + 'shortwave_radiation', + 'sunshine_duration', + 'is_day' +]; + +export const icon_d2_variables = [ + 'weather_code', + 'temperature_2m', + 'surface_pressure', + 'pressure_msl', + 'relative_humidity_2m', + 'dew_point_2m', + 'apparent_temperature', + 'precipitation', + 'snowfall', + 'snowfall_water_equivalent', + 'cloud_cover', + 'et0_fao_evapotranspiration', + 'vapour_pressure_deficit', + 'wind_speed_10m', + 'wind_speed_80m', + 'wind_speed_180m', + 'wind_direction_10m', + 'wind_direction_80m', + 'wind_direction_180m', + 'wind_gusts_10m', + 'temperature_80m', + 'rain', + 'cape', + 'shortwave_radiation', + 'sunshine_duration', + 'wet_bulb_temperature_2m', + 'temperature_500hPa', + 'temperature_850hPa', + 'geopotential_height_500hPa', + 'geopotential_height_850hPa', + 'is_day' +]; + +export const gfs025_variables = [ + 'temperature_2m', + 'visibility', + 'wind_gusts_10m', + 'surface_pressure', + 'pressure_msl', + 'soil_temperature_0_to_10cm', + 'soil_moisture_0_to_10cm', + 'snow_depth', + 'relative_humidity_2m', + 'dew_point_2m', + 'wind_speed_10m', + 'wind_direction_10m', + 'precipitation', + 'snowfall', + 'snowfall_water_equivalent', + 'cape', + 'cloud_cover', + 'wet_bulb_temperature_2m', + 'apparent_temperature', + 'weather_code', + 'et0_fao_evapotranspiration', + 'vapour_pressure_deficit', + 'cape', + 'convective_inhibition', + 'rain', + 'shortwave_radiation', + 'sunshine_duration', + 'is_day' +]; + +export const aigfs025_variables = [ + ...ecmwf_pressure_levels, + 'temperature_2m', + 'surface_pressure', + 'pressure_msl', + 'wind_speed_10m', + 'wind_direction_10m', + 'precipitation', + 'rain', + 'snowfall', + 'snowfall_water_equivalent', + 'cloud_cover', + 'cloud_cover_high', + 'cloud_cover_low', + 'cloud_cover_mid', + 'weather_code', + 'is_day' +]; + +export const gfs05_variables = [ + ...gfs025_variables, + ...ecmwf_pressure_levels, + 'snow_depth', + 'wind_speed_80m', + 'wind_direction_80m', + 'wind_speed_100m', + 'wind_direction_100m', + 'wind_speed_120m', + 'wind_direction_120m', + 'soil_temperature_10_to_40cm', + 'soil_temperature_40_to_100cm', + 'soil_temperature_100_to_200cm', + 'soil_moisture_10_to_40cm', + 'soil_moisture_40_to_100cm', + 'soil_moisture_100_to_200cm', + 'uv_index', + 'uv_index_clear_sky', + 'cape', + 'freezing_level_height', + 'rain', + 'wet_bulb_temperature_2m', + 'surface_temperature', + 'temperature_80m', + 'temperature_120m', + 'shortwave_radiation', + 'temperature_500hPa', + 'temperature_850hPa', + 'geopotential_height_500hPa', + 'geopotential_height_850hPa', + 'is_day' +]; + +export const ecmwf_ifs025_variables = [ + ...ecmwf_pressure_levels, + 'cape', + 'cloud_cover', + 'cloud_cover_high', + 'cloud_cover_low', + 'cloud_cover_mid', + 'dew_point_2m', + 'precipitation', + 'precipitation_probability', + 'precipitation_type', + 'pressure_msl', + 'relative_humidity_2m', + 'runoff', + 'shortwave_radiation', + 'snow_depth', + 'snow_depth_water_equivalent', + 'snowfall_water_equivalent', + 'snowfall', + 'rain', + 'soil_moisture_0_to_7cm', + 'soil_moisture_100_to_255cm', + 'soil_moisture_28_to_100cm', + 'soil_moisture_7_to_28cm', + 'soil_temperature_0_to_7cm', + 'soil_temperature_100_to_255cm', + 'soil_temperature_28_to_100cm', + 'soil_temperature_7_to_28cm', + 'surface_temperature', + 'temperature_2m', + 'temperature_2m_max', + 'temperature_2m_min', + 'total_column_integrated_water_vapour', + 'wet_bulb_temperature_2m', + 'wind_gusts_10m', + 'wind_speed_100m', + 'wind_speed_10m', + 'wind_direction_100m', + 'wind_direction_10m', + 'apparent_temperature', + 'vapour_pressure_deficit', + 'weather_code', + 'sunshine_duration', + 'surface_pressure', + 'et0_fao_evapotranspiration', + 'is_day' +]; + +export const ecmwf_aifs025_variables = [ + ...ecmwf_pressure_levels, + 'cloud_cover', + 'cloud_cover_high', + 'cloud_cover_low', + 'cloud_cover_mid', + 'dew_point_2m', + 'precipitation', + 'precipitation_probability', + 'pressure_msl', + 'relative_humidity_2m', + 'shortwave_radiation', + 'snowfall_water_equivalent', + 'snowfall', + 'rain', + 'soil_temperature_0_to_7cm', + 'soil_temperature_7_to_28cm', + 'surface_temperature', + 'temperature_2m', + 'wind_speed_100m', + 'wind_speed_10m', + 'wind_direction_100m', + 'wind_direction_10m', + 'wet_bulb_temperature_2m', + 'apparent_temperature', + 'vapour_pressure_deficit', + 'weather_code', + 'surface_pressure', + 'sunshine_duration', + 'et0_fao_evapotranspiration', + 'is_day' +]; + +export const ukmo_variables = [ + 'temperature_2m', + 'rain', + 'snowfall', + 'snow_depth_water_equivalent', + 'snowfall_water_equivalent', + 'precipitation', + 'et0_fao_evapotranspiration', + 'relative_humidity_2m', + 'dew_point_2m', + 'apparent_temperature', + 'vapour_pressure_deficit', + 'weather_code', + 'surface_pressure', + 'pressure_msl', + 'cloud_cover', + 'wind_speed_10m', + 'wind_direction_10m', + 'wind_gusts_10m', + 'surface_temperature', + 'visibility', + 'cape', + 'wet_bulb_temperature_2m', + 'shortwave_radiation', + 'sunshine_duration', + 'is_day' +]; + +export const ukmo_2km_variables = [ + ...ukmo_variables, + 'cloud_cover_high', + 'cloud_cover_mid', + 'cloud_cover_low', + 'is_day' +]; + +export const gem_global_variables = [ + 'temperature_2m', + 'surface_pressure', + 'snow_depth', + 'relative_humidity_2m', + 'dew_point_2m', + 'wind_speed_10m', + 'wind_direction_10m', + 'precipitation', + 'snowfall', + 'snowfall_water_equivalent', + 'cape', + 'cloud_cover', + 'apparent_temperature', + 'weather_code', + 'pressure_msl', + 'et0_fao_evapotranspiration', + 'vapour_pressure_deficit', + 'cape', + 'rain', + 'wet_bulb_temperature_2m', + 'shortwave_radiation', + 'sunshine_duration', + 'temperature_500hPa', + 'temperature_850hPa', + 'geopotential_height_500hPa', + 'geopotential_height_850hPa', + 'is_day' +]; + +export const bom_access_global_ensemble = [ + 'temperature_2m', + 'surface_pressure', + 'snow_depth', + 'relative_humidity_2m', + 'dew_point_2m', + 'wind_speed_10m', + 'wind_gusts_10m', + 'wind_direction_10m', + 'precipitation', + 'snowfall', + 'snowfall_water_equivalent', + 'cape', + 'cloud_cover', + 'apparent_temperature', + 'weather_code', + 'pressure_msl', + 'et0_fao_evapotranspiration', + 'vapour_pressure_deficit', + 'visibility', + 'sunshine_duration', + 'wet_bulb_temperature_2m', + 'rain', + 'shortwave_radiation', + 'surface_temperature', + 'soil_temperature_0_to_10cm', + 'soil_temperature_10_to_40cm', + 'soil_temperature_40_to_100cm', + 'soil_temperature_100_to_200cm', + 'soil_moisture_0_to_10cm', + 'soil_moisture_10_to_40cm', + 'soil_moisture_40_to_100cm', + 'soil_moisture_100_to_200cm', + 'is_day' +]; + +export const meteoswiss_variables = [ + 'temperature_2m', + 'surface_pressure', + 'snow_depth', + 'relative_humidity_2m', + 'dew_point_2m', + 'wind_speed_10m', + 'wind_gusts_10m', + 'wind_direction_10m', + 'precipitation', + 'wet_bulb_temperature_2m', + 'snowfall', + 'snowfall_water_equivalent', + 'convective_inhibition', + 'cape', + 'cloud_cover', + 'apparent_temperature', + 'weather_code', + 'pressure_msl', + 'et0_fao_evapotranspiration', + 'vapour_pressure_deficit', + 'sunshine_duration', + 'rain', + 'shortwave_radiation', + 'surface_temperature', + 'cloud_base', + 'cloud_cover_high', + 'cloud_cover_mid', + 'cloud_cover_low', + 'freezing_level_height', + 'snowfall_height', + 'is_day' +]; + +export const availableVariables = { + dwd_icon_eps_ensemble_mean_seamless: icon_d2_variables, + dwd_icon_eps_ensemble_mean: icon_global_variables, + dwd_icon_eu_eps_ensemble_mean: icon_eu_variables, + dwd_icon_d2_eps_ensemble_mean: icon_d2_variables, + ncep_gefs_ensemble_mean_seamless: gfs05_variables, + ncep_gefs025_ensemble_mean: gfs025_variables, + ncep_gefs05_ensemble_mean: gfs05_variables, + ncep_hgefs025_ensemble_mean: gfs025_variables, + ecmwf_ifs025_ensemble_mean: ecmwf_ifs025_variables, + ecmwf_aifs025_ensemble_mean: ecmwf_aifs025_variables, + ukmo_global_ensemble_mean_20km: ukmo_variables, + ukmo_uk_ensemble_mean_2km: ukmo_2km_variables, + cmc_gem_geps_ensemble_mean: gem_global_variables, + bom_access_global_ensemble_mean: bom_access_global_ensemble, + meteoswiss_icon_ch1_ensemble_mean: meteoswiss_variables, + meteoswiss_icon_ch2_ensemble_mean: meteoswiss_variables +}; + +export const hourly = [ + [ + { value: 'temperature_2m', label: 'Temperature (2 m)' }, + { value: 'relative_humidity_2m', label: 'Relative Humidity (2 m)' }, + { value: 'dew_point_2m', label: 'Dewpoint (2 m)' }, + { value: 'apparent_temperature', label: 'Apparent Temperature' }, + { value: 'precipitation', label: 'Precipitation (rain + snow)' }, + { value: 'rain', label: 'Rain' }, + { value: 'snowfall', label: 'Snowfall' }, + { value: 'snow_depth', label: 'Snow Depth' } + ], + [ + { value: 'weather_code', label: 'Weather code' }, + { value: 'pressure_msl', label: 'Sea Level Pressure' }, + { value: 'surface_pressure', label: 'Surface Pressure' }, + { value: 'cloud_cover', label: 'Cloud Cover Total' }, + { value: 'cloud_cover_low', label: 'Cloud Cover Low' }, + { value: 'cloud_cover_mid', label: 'Cloud Cover Mid' }, + { value: 'cloud_cover_high', label: 'Cloud Cover High' }, + { value: 'visibility', label: 'Visibility' }, + { value: 'et0_fao_evapotranspiration', label: 'Reference Evapotranspiration (ET₀)' }, + { value: 'vapour_pressure_deficit', label: 'Vapour Pressure Deficit' } + ], + [ + { value: 'wind_speed_10m', label: 'Wind Speed (10 m)' }, + { value: 'wind_speed_80m', label: 'Wind Speed (80 m)' }, + { value: 'wind_speed_100m', label: 'Wind Speed (100 m)' }, + { value: 'wind_speed_120m', label: 'Wind Speed (120 m)' }, + { value: 'wind_direction_10m', label: 'Wind Direction (10 m)' }, + { value: 'wind_direction_80m', label: 'Wind Direction (80 m)' }, + { value: 'wind_direction_100m', label: 'Wind Direction (100 m)' }, + { value: 'wind_direction_120m', label: 'Wind Direction (120 m)' }, + { value: 'wind_gusts_10m', label: 'Wind Gusts (10 m)' }, + { value: 'temperature_80m', label: 'Temperature (80 m)' }, + { value: 'temperature_120m', label: 'Temperature (120 m)' } + ], + [ + { value: 'surface_temperature', label: 'Surface Temperature' }, + { value: 'soil_temperature_0_to_10cm', label: 'Soil Temperature (0-10 cm)' }, + { value: 'soil_temperature_10_to_40cm', label: 'Soil Temperature (10-40 cm)' }, + { value: 'soil_temperature_40_to_100cm', label: 'Soil Temperature (40-100 cm)' }, + { value: 'soil_temperature_100_to_200cm', label: 'Soil Temperature (100-200 cm)' }, + { value: 'soil_moisture_0_to_10cm', label: 'Soil Moisture (0-10 cm)' }, + { value: 'soil_moisture_10_to_40cm', label: 'Soil Moisture (10-40 cm)' }, + { value: 'soil_moisture_40_to_100cm', label: 'Soil Moisture (40-100 cm)' }, + { value: 'soil_moisture_100_to_200cm', label: 'Soil Moisture (100-400 cm)' }, + { value: 'soil_temperature_0_to_7cm', label: 'Soil Temperature (0-7 cm)' }, + { value: 'soil_temperature_7_to_28cm', label: 'Soil Temperature (7-28 cm)' }, + { value: 'soil_temperature_28_to_100cm', label: 'Soil Temperature (28-100 cm)' }, + { value: 'soil_temperature_100_to_255cm', label: 'Soil Temperature (100-255 cm)' }, + { value: 'soil_moisture_0_to_7cm', label: 'Soil Moisture (0-7 cm)' }, + { value: 'soil_moisture_7_to_28cm', label: 'Soil Moisture (7-28 cm)' }, + { value: 'soil_moisture_28_to_100cm', label: 'Soil Moisture (28-100 cm)' }, + { value: 'soil_moisture_100_to_255cm', label: 'Soil Moisture (100-255 cm)' } + ] +]; + +export const daily = [ + [ + { value: 'temperature_2m_mean', label: 'Mean Temperature (2 m)' }, + { value: 'temperature_2m_min', label: 'Minimum Temperature (2 m)' }, + { value: 'temperature_2m_max', label: 'Maximum Temperature (2 m)' }, + { value: 'apparent_temperature_mean', label: 'Mean Apparent Temperature' }, + { value: 'apparent_temperature_min', label: 'Minimum Apparent Temperature' }, + { value: 'apparent_temperature_max', label: 'Maximum Apparent Temperature' }, + { value: 'wind_speed_10m_mean', label: 'Mean Wind Speed (10 m)' }, + { value: 'wind_speed_10m_min', label: 'Minimum Wind Speed (10 m)' }, + { value: 'wind_speed_10m_max', label: 'Maximum Wind Speed (10 m)' }, + { value: 'wind_direction_10m_dominant', label: 'Dominant Wind Direction (10 m)' } + ], + [ + { value: 'wind_gusts_10m_mean', label: 'Mean Wind Gusts (10 m)' }, + { value: 'wind_gusts_10m_min', label: 'Minimum Wind Gusts (10 m)' }, + { value: 'wind_gusts_10m_max', label: 'Maximum Wind Gusts (10 m)' }, + { value: 'wind_speed_100m_mean', label: 'Mean Wind Speed (100 m)' }, + { value: 'wind_speed_100m_min', label: 'Minimum Wind Speed (100 m)' }, + { value: 'wind_speed_100m_max', label: 'Maximum Wind Speed (100 m)' }, + { value: 'wind_direction_100m_dominant', label: 'Dominant Wind Direction (100m)' }, + { value: 'cloud_cover_mean', label: 'Mean Cloud Cover' }, + { value: 'cloud_cover_min', label: 'Minimum Cloud Cover' }, + { value: 'cloud_cover_max', label: 'Maximum Cloud Cover' } + ], + [ + { value: 'precipitation_sum', label: 'Precipitation Sum' }, + { value: 'precipitation_hours', label: 'Precipitation Hours' }, + { value: 'rain_sum', label: 'Rain Sum' }, + { value: 'snowfall_sum', label: 'Snowfall Sum' }, + { value: 'pressure_msl_mean', label: 'Mean Sea Level Pressure' }, + { value: 'pressure_msl_min', label: 'Minimum Sea Level Pressure' }, + { value: 'pressure_msl_max', label: 'Maximum Sea Level Pressure' }, + { value: 'surface_pressure_mean', label: 'Mean Surface Pressure' }, + { value: 'surface_pressure_min', label: 'Minimum Surface Pressure' }, + { value: 'surface_pressure_max', label: 'Maximum Surface Pressure' } + ], + [ + { value: 'relative_humidity_2m_mean', label: 'Mean Relative Humidity (2 m)' }, + { value: 'relative_humidity_2m_min', label: 'Minimum Relative Humidity (2 m)' }, + { value: 'relative_humidity_2m_max', label: 'Maximum Relative Humidity (2 m)' }, + { value: 'cape_mean', label: 'Mean CAPE' }, + { value: 'cape_min', label: 'Minimum CAPE' }, + { value: 'cape_max', label: 'Maximum CAPE' }, + { value: 'dew_point_2m_mean', label: 'Mean Dewpoint (2 m)' }, + { value: 'dew_point_2m_min', label: 'Minimum Dewpoint (2 m)' }, + { value: 'dew_point_2m_max', label: 'Maximum Dewpoint (2 m)' }, + { value: 'et0_fao_evapotranspiration', label: 'Reference Evapotranspiration (ET₀)' }, + { value: 'shortwave_radiation_sum', label: 'Shortwave Radiation Sum' } + ] +]; + +export const additionalVariables = [ + [ + { value: 'is_day', label: 'Is Day or Night' }, + { value: 'uv_index', label: 'UV Index' }, + { value: 'uv_index_clear_sky', label: 'UV Index Clear Sky' }, + { value: 'temperature_2m_min', label: 'Temperature 3-Hourly Minimum (2 m)' }, + { value: 'temperature_2m_max', label: 'Temperature 3-Hourly Maximum (2 m)' }, + { value: 'wet_bulb_temperature_2m', label: 'Wet Bulb Temperature (2 m)' } + ], + [ + { value: 'cape', label: 'CAPE' }, + { value: 'convective_inhibition', label: 'Convective Inhibition (CIN)' }, + { value: 'freezing_level_height', label: 'Freezing Level Height' }, + { value: 'snowfall_height', label: 'Snowfall Height' }, + { value: 'sunshine_duration', label: 'Sunshine Duration' }, + { value: 'snowfall_water_equivalent', label: 'Snowfall (Water Equivalent)' }, + { value: 'snow_depth_water_equivalent', label: 'Snow Depth (Water Equivalent)' } + ] +]; + +export const solarVariables = [ + [ + { value: 'shortwave_radiation', label: 'Shortwave Solar Radiation GHI' }, + { value: 'direct_radiation', label: 'Direct Solar Radiation' }, + { value: 'diffuse_radiation', label: 'Diffuse Solar Radiation DHI' }, + { value: 'direct_normal_irradiance', label: 'Direct Normal Irradiance DNI' }, + { value: 'global_tilted_irradiance', label: 'Global Tilted Radiation GTI' } + ], + [ + { value: 'shortwave_radiation_instant', label: 'Shortwave Solar Radiation GHI (Instant)' }, + { value: 'direct_radiation_instant', label: 'Direct Solar Radiation (Instant)' }, + { value: 'diffuse_radiation_instant', label: 'Diffuse Solar Radiation DHI (Instant)' }, + { value: 'direct_normal_irradiance_instant', label: 'Direct Normal Irradiance DNI (Instant)' }, + { value: 'global_tilted_irradiance_instant', label: 'Global Tilted Radiation GTI (Instant)' } + ] +]; + +export const models = [ + [ + { value: 'dwd_icon_eps_ensemble_mean_seamless', label: 'DWD ICON EPS Seamless Mean' }, + { value: 'dwd_icon_eps_ensemble_mean', label: 'DWD ICON EPS Global Mean' }, + { value: 'dwd_icon_eu_eps_ensemble_mean', label: 'DWD ICON EPS EU Mean' }, + { value: 'dwd_icon_d2_eps_ensemble_mean', label: 'DWD ICON EPS D2 Mean' } + ], + [ + { value: 'ncep_gefs_ensemble_mean_seamless', label: 'GFS Ensemble Seamless Mean' }, + { value: 'ncep_gefs025_ensemble_mean', label: 'GFS Ensemble 0.25° Mean' }, + { value: 'ncep_gefs05_ensemble_mean', label: 'GFS Ensemble 0.5° Mean' }, + { value: 'ncep_hgefs025_ensemble_mean', label: 'HGEFS 0.25° Mean' } + ], + [ + { value: 'ecmwf_ifs025_ensemble_mean', label: 'ECMWF IFS 0.25° Ensemble Mean' }, + { value: 'ecmwf_aifs025_ensemble_mean', label: 'ECMWF AIFS 0.25° Ensemble Mean' }, + { value: 'cmc_gem_geps_ensemble_mean', label: 'GEM Global Ensemble Mean' }, + { value: 'bom_access_global_ensemble_mean', label: 'BOM ACCESS Global Mean' } + ], + [ + { value: 'ukmo_global_ensemble_mean_20km', label: 'UK MetOffice Global 20km Mean' }, + { value: 'ukmo_uk_ensemble_mean_2km', label: 'UK MetOffice UK 2km Mean' } + ], + [ + { value: 'meteoswiss_icon_ch1_ensemble_mean', label: 'MeteoSwiss ICON CH1 Mean' }, + { value: 'meteoswiss_icon_ch2_ensemble_mean', label: 'MeteoSwiss ICON CH2 Mean' } + ] +]; + +export const forecastDaysOptions = [ + { value: '1', label: '1 day' }, + { value: '3', label: '3 days' }, + { value: '7', label: '7 days (default)' }, + { value: '14', label: '14 days' }, + { value: '16', label: '16 days' }, + { value: '30', label: '30 days' }, + { value: '35', label: '35 days' } +]; + +export const pastDaysOptions = [ + { value: '0', label: '0 days (default)' }, + { value: '1', label: '1 day' }, + { value: '2', label: '2 days' }, + { value: '3', label: '3 days' }, + { value: '5', label: '5 days' }, + { value: '7', label: '1 week' }, + { value: '14', label: '2 weeks' }, + { value: '31', label: '1 month' }, + { value: '61', label: '2 months' }, + { value: '92', label: '3 months' } +]; + +export const noSpreadVariables = ['is_day', 'weather_code']; diff --git a/src/routes/en/docs/options.ts b/src/routes/en/docs/options.ts index 7ac15e99..012a7135 100644 --- a/src/routes/en/docs/options.ts +++ b/src/routes/en/docs/options.ts @@ -238,7 +238,7 @@ export const additionalDaily = [ ] // available, but duplicate of correct syntax: - //{ value: 'weathercode', label: 'XXX' }, + // { value: 'weathercode', label: 'Weather Code' }, // { value: 'cloudcover_max', label: 'Maximum Cloud Cover' }, // { value: 'cloudcover_mean', label: 'Mean Cloud Cover' }, // { value: 'cloudcover_min', label: 'Minimum Cloud Cover' }, @@ -254,7 +254,7 @@ export const additionalDaily = [ // { value: 'vapor_pressure_deficit_max', label: 'Maximum Vapor Pressure Deficit' }, // soil parameters, not available on all models - // { value: 'soil_moisture_0_to_100cm_mean', label: 'Mean Soil Moisture (0-100 cm)' }, + // { value: 'soil_moisture_0_to_100cm_mean', label: 'Mean Soil Moisture (0-100 cm)' }, // { value: 'soil_moisture_0_to_10cm_mean', label: 'Mean Soil Moisture (0-10 cm)' }, // { value: 'soil_moisture_0_to_7cm_mean', label: 'Mean Soil Moisture (0-7 cm)' }, // { value: 'soil_moisture_28_to_100cm_mean', label: 'Mean Soil Moisture (28-100 cm)' }, diff --git a/static/images/backgrounds/originals/forstberg.jpg b/static/images/backgrounds/originals/forstberg.jpg new file mode 100644 index 00000000..02eb1c3b Binary files /dev/null and b/static/images/backgrounds/originals/forstberg.jpg differ