Map Snow Flow Rivers Reservoirs Mountains Skiing Whitewater Fishing Camping
- United States
ARLBERG (ST ANTON, LECH, ZURS, STUBEN, WALD)
- Overview
- Ski Resorts
- State Snowpack
- Avalanche
June 23, 2024
Weather today, snow Up to 33" of more snowfall forecasted over the next 5 days. Heavy snow is on the way, with the mountain expecting up to 11.4" of new snowfall by tomorrow. Get driving directions if you're planning on heading up.
Terrain Surface | NA |
Powder Score | NA |
Snowfall Next 24 Hours | 11" |
Snowfall Next 5 Days | 33.43" |
None Read More
Snowpack Depth (Past 7 Days)
Data sourced from
Snow Forecast
5 Day Snow Forecast
Weather into tomorrow, snow
Hourly Forecast
Start Your Free Trial
Long Term Outlook
Start Your Free Trial
Seasonal Snow Comparison
Compare year over year snow water equivalency
Start Your Free Trial
Snowpack Density
Snowpack vs Snow Water Equivalent
Wet, heavy snowfall generally consists of atleast 12.5% water content or higher for every foot of snow.Lighter, drier snow might contain up to 1.0 inch of water for every foot of snow; up to 8.3% water.
Ski Area Summary
Arlberg (St Anton, Lech, Zurs, Stuben, Wald)
Arlberg ski resort in Tirol boasts over 300km of slopes and stunning mountain scenery. Best trails include the challenging Mattun run and the scenic Weibermahd run. A little-known historical fact is that the Arlberg region was once a hub for smugglers during World War II. Beginners should check out the Schwarzwand practice slope, and for apres ski, the MooserWirt is a legendary spot for drinks and dancing.
Terrain Overview
The Arlberg region in Austria is known for its picturesque mountain ranges and challenging ski slopes. The main mountain ranges and aspects of the Arlberg-St. Anton-Lech-Zurs-Stuben-Wald ski resort include:
1. Arlberg Mountains: The Arlberg Mountains are the main mountain range in the region, offering a diverse range of ski slopes and off-piste opportunities.
2. Valluga: Valluga is the highest peak in the Arlberg region, reaching an elevation of 2,811 meters. It offers breathtaking views of the surrounding mountains and is a popular spot for advanced skiers.
3. Rendl: Rendl is a smaller mountain range located near St. Anton, offering a mix of challenging black and red runs.
4. Zurs: Zurs is a luxury ski resort located in the Lech-Zurs area, known for its high-end accommodations and excellent skiing conditions.
5. Lech: Lech is another popular ski resort in the Arlberg region, offering a mix of beginner and intermediate runs as well as some challenging off-piste terrain.
6. Stuben: Stuben is a small village located near St. Anton, known for its traditional charm and access to the Arlberg ski area.
Overall, the Arlberg-St. Anton-Lech-Zurs-Stuben-Wald ski resort offers a wide range of skiing opportunities for all levels of skiers, from beginners to experts. The stunning mountain ranges and diverse terrain make it a popular destination for winter sports enthusiasts from around the world.
River Recreation
Watershed Hydrology Interactive MapMain Menu
Natural Disasters
Interactive MapMain Menu
'; row += ''+data.forecast.daily[x].temp+'° '+data.forecast.daily[x].summary; row += '
'row += '
'all += row; row = '';row += '
'row += ''row += '
'+data.forecast.daily[x].temp+'°
'row += '
'+data.forecast.daily[x].day+'
' if (x < 4) $("#panels").append(row)}} else { $("#skif").remove();}var acc = '
- 'acc += allacc += '
'$("#acc").append(acc) $(document).ready(function () { $(document).foundation(); });$(function () { // On DOM ready... xml = data.meteo window.meteogram = new Meteogram(xml, 'forecast_chart');try{if (xml.forecast.tabular.time.length){try{ days = {} tot = 0 for (var row of xml.forecast.tabular.time){ var day = row['@attributes'].from.split('T')[0].split('-')[2]; if (day in days) days[day] += row.precipitation['@attributes'].value; else days[day] = row.precipitation['@attributes'].value; tot += row.precipitation['@attributes'].value }ct = [];ds = [];for (var row of Object.keys(days).sort()){ ct.push(row) ds.push(parseInt(days[row]))}//$("#metric_stats").append(' • '+parseInt(tot)+'" Forecasted')Highcharts.chart('snow_col', { exporting: { enabled: false }, chart: { type: 'column', }, title: { text: '' }, credits: { text: '', }, xAxis: { categories: ct, crosshair: true, labels: { style: { color: '#495057',fontSize: "14px",fontWeight: 'bold', } } }, yAxis: { min: 0, title: { text: '' }, lineWidth: 0, gridLineWidth: 0, minorGridLineWidth: 0, lineColor: 'transparent', labels: { enabled: false }, minorTickLength: 0, tickLength: 0 }, legend: { enabled: false }, tooltip: { headerFormat: '{point.key}
{series.name}: | ' + '{point.y:.1f}" |
', shared: true,enabled: false, useHTML: true }, plotOptions: { column: { pointPadding: 0.05, groupPadding: 0, borderWidth: 0, shadow: false, dataLabels: { enabled: true, format: '{point.y}"', style: { color: '#495057',fontSize: "18px",fontWeight: 'bold', } } } }, series: [{ name: 'Forecast', data: ds, color: '#3BB9FF' }]});} catch(err) {}}} catch(err) {}});});var ct = [];var ds = []; ct.push("W"); ds.push(11.4); ct.push("T"); ds.push(7.55); ct.push("F"); ds.push(0); ct.push("S"); ds.push(1.68); ct.push("S"); ds.push(7.85); Highcharts.chart('snow_col', { exporting: { enabled: false }, chart: { type: 'column', }, title: { text: '' }, credits: { text: '', }, xAxis: { categories: ct, crosshair: true, labels: { style: { color: '#495057',fontSize: "14px",fontWeight: 'bold', } } }, yAxis: { min: 0, title: { text: '' }, lineWidth: 0, gridLineWidth: 0, minorGridLineWidth: 0, lineColor: 'transparent', labels: { enabled: false }, minorTickLength: 0, tickLength: 0 }, legend: { enabled: false }, tooltip: { headerFormat: '{point.key}
{series.name}: | ' + '{point.y:.1f}" |
', shared: true,enabled: false, useHTML: true }, plotOptions: { column: { pointPadding: 0.05, groupPadding: 0, borderWidth: 0, shadow: false, dataLabels: { enabled: true, format: '{point.y}"', style: { color: '#495057',fontSize: "18px",fontWeight: 'bold', } } } }, series: [{ name: 'Forecast', data: ds, color: '#3BB9FF' }]});function timeSince(date) { var seconds = Math.floor((new Date() - date) / 1000); var interval = seconds / 31536000; if (interval > 1) { return Math.floor(interval) + " years"; } interval = seconds / 2592000; if (interval > 1) { return Math.floor(interval) + " months"; } interval = seconds / 86400; if (interval > 1) { return Math.floor(interval) + " days"; } interval = seconds / 3600; if (interval > 1) { return Math.floor(interval) + " hours"; } interval = seconds / 60; if (interval > 1) { return Math.floor(interval) + " minutes"; } return Math.floor(seconds) + " seconds";}var ft = {"geometry": {"type": "Point", "coordinates": [10.26275396347, 47.128177013414]}, "_rev": "21-a91c72d9cc5c97a4ee4162d1704235cb", "_id": "arlberg-st-anton-lech-zurs-stuben-wald", "type": "Feature", "properties": {"website": "http://www.skiarlberg.at", "ratings": [], "ai_description": "Arlberg ski resort in Tirol boasts over 300km of slopes and stunning mountain scenery. Best trails include the challenging Mattun run and the scenic Weibermahd run. A little-known historical fact is that the Arlberg region was once a hub for smugglers during World War II. Beginners should check out the Schwarzwand practice slope, and for apres ski, the MooserWirt is a legendary spot for drinks and dancing.", "last": "2020-02-24", "aggregate_score": 0, "title": "Arlberg (St Anton, Lech, Zurs, Stuben, Wald)", "trailmaps": ["arlberg-(st-anton0", "arlberg-(st-anton1", "arlberg-(st-anton2", "arlberg-(st-anton3"], "country": "Austria", "loc": ["tirol", "austria"], "visits": [{"date": "2019-01-09", "value": 1}, {"date": "2019-01-06", "value": 1}], "forecast": {"hourly": {"120": 33.43, "24": 11.4, "72": 23.54}, "daily": [{"wind_speed": 2.59, "temp": 21.61, "snow": 11.400000000000002, "summary": "snow", "details": "snow", "type": "snow", "day": "Wed", "wind_dir": 332.5, "icon": "Snow"}, {"wind_speed": 2.17, "temp": 20.76, "snow": 7.55, "summary": "snow", "details": "snow", "type": "snow", "day": "Thu", "wind_dir": 338.507, "icon": "Snow"}, {"wind_speed": 2.13, "temp": 20.61, "snow": 0, "summary": "light snow", "details": "light snow", "type": "snow", "day": "Fri", "wind_dir": 249.003, "icon": "Snow"}, {"wind_speed": 3.49, "temp": 28.5, "snow": 1.68, "summary": "few clouds", "details": "few clouds", "type": "snow", "day": "Sat", "wind_dir": 258.003, "icon": "Clouds"}, {"wind_speed": 3.8, "temp": 28.56, "snow": 7.8500000000000005, "summary": "light snow", "details": "light snow", "type": "snow", "day": "Sun", "wind_dir": 257.003, "icon": "Snow"}]}, "metrics": {"terrain_park": "Unknown", "night_skiing": "Unknown"}, "tag": "ski-area", "location": "Sankt Anton am Arlberg", "ai_aspects": "The Arlberg region in Austria is known for its picturesque mountain ranges and challenging ski slopes. The main mountain ranges and aspects of the Arlberg-St. Anton-Lech-Zurs-Stuben-Wald ski resort include:\n\n1. Arlberg Mountains: The Arlberg Mountains are the main mountain range in the region, offering a diverse range of ski slopes and off-piste opportunities.\n\n2. Valluga: Valluga is the highest peak in the Arlberg region, reaching an elevation of 2,811 meters. It offers breathtaking views of the surrounding mountains and is a popular spot for advanced skiers.\n\n3. Rendl: Rendl is a smaller mountain range located near St. Anton, offering a mix of challenging black and red runs.\n\n4. Zurs: Zurs is a luxury ski resort located in the Lech-Zurs area, known for its high-end accommodations and excellent skiing conditions.\n\n5. Lech: Lech is another popular ski resort in the Arlberg region, offering a mix of beginner and intermediate runs as well as some challenging off-piste terrain.\n\n6. Stuben: Stuben is a small village located near St. Anton, known for its traditional charm and access to the Arlberg ski area.\n\nOverall, the Arlberg-St. Anton-Lech-Zurs-Stuben-Wald ski resort offers a wide range of skiing opportunities for all levels of skiers, from beginners to experts. The stunning mountain ranges and diverse terrain make it a popular destination for winter sports enthusiasts from around the world.", "owner": "", "id": "arlberg-st-anton-lech-zurs-stuben-wald", "description": ""}}try{ var uuid = ft.properties.snow_data.uuid;$.getJSON("https://snoflo.org/get_realtime/?callback=?&type=snow&uuid="+uuid,function(data){ data = data.datasetvar instant_data = data[0]; var mycol = instant_data;if (mycol.length > 0 || 1 ){Highcharts.setOptions({ global: { useUTC: false }}); var col_data = [] for (var x = 1; x < mycol.length; x++){var s = mycol[x][0];var a = s.split(/[^0-9]/);var d=new Date (a[0],a[1]-1,a[2],a[3],a[4] ).getTime(); if (parseFloat(mycol[x][1]) >= 0)col_data.push([d, parseFloat(mycol[x][1]) ]) } if (col_data.length == 0) $("#tabz").remove(); if (col_data.length > 1 && 0 ){Highcharts.chart('instant_chart1', { exporting: { enabled: false,}, chart: { backgroundColor: 'rgba(0,0,0,0)', type: 'areaspline' }, credits: { text: '', style: { color: '#1779ba', fontWeight: 'bold' }, href: 'https://snoflo.org/report////history', },global: {timezoneOffset: -280}, title: { text: '', }, xAxis: { crosshair: true, type: 'datetime', dateTimeLabelFormats: { day: '%b %e' }, }, yAxis: {// min: 0, title: { style: { fontSize:'16px', fontWeight: 'bold', }, text: '' }, labels: { format: '{value}"' }, }, legend: { enabled: false }, plotOptions: { series: { pointWidth: 0 }, }, series: [{ type: 'areaspline', name: 'Snow Water Equivalent', color: 'rgb(84, 210, 255)', data: col_data, }] }); }const average = array => array.reduce((a, b) => a + b) / array.length;var instant_data = data[1]; var mycol = instant_data; var col_data = [] var prev = -1; var diff = 0; for (var x = 1; x < mycol.length; x++){var s = mycol[x][0];var a = s.split(/[^0-9]/);var d=new Date (a[0],a[1]-1,a[2],a[3],a[4] ).getTime(); if (parseFloat(mycol[x][1]) >= 0){ if(prev == -1) {prev = parseFloat(mycol[x][1]); } diff = parseFloat(mycol[x][1]) - prev; if (diff < 25){ col_data.push([d, parseFloat(mycol[x][1]) ]); prev = parseFloat(mycol[x][1]); } } } if (col_data.length > 1){ $('#instant_chart2').highcharts({ chart: {type: "areaspline", backgroundColor: 'rgba(0,0,0,0)', }, credits: { text: '', style: { color: '#1779ba', fontWeight: 'bold' }, href: 'https://snoflo.org/report////history', }, exporting: { enabled: false },global: {timezoneOffset: -280}, title: { text: '', }, xAxis: { crosshair: true, type: 'datetime', dateTimeLabelFormats: { day: '%b %e' }, }, yAxis: { title: { style: { fontSize:'16px', fontWeight: 'bold', }, text: '', }, labels: { format: '{value}"' }, }, legend: { enabled: false }, plotOptions: { series: { connectNulls: true, animation: { duration: 3200 }, marker: { enabled: false }, series: { lineWidth: 5 }, } }, series: [{ name: 'Snowpack', type: 'areaspline', color: 'rgb(84, 210, 255)', data: col_data, lineWidth: 5 }] });} else { $("#insta2").remove()}var instant_data = data[2]; var mycol = instant_data; var col_data = [] for (var x = 1; x < mycol.length; x++){var s = mycol[x][0];var a = s.split(/[^0-9]/);var d=new Date (a[0],a[1]-1,a[2],a[3],a[4] ).getTime(); col_data.push([d, parseFloat(mycol[x][1]) ]) } if (col_data.length > 1){Highcharts.chart('instant_chart3', { chart: { type: 'areaspline', backgroundColor: 'rgba(0,0,0,0)', }, credits: { text: '', style: { color: '#1779ba', fontWeight: 'bold' }, href: 'https://snoflo.org/report////history', }, exporting: { buttons: { contextButton: { symbol: 'menu', symbolStrokeWidth: 1, symbolFill: '#a4edba', symbolStroke: '#330033' } }, enabled: false, chartOptions:{ subtitle: { text:' | ' }, plotOptions: { areaspline: { animation: { duration: 3200 }, dataLabels: { enabled: false, borderRadius: 5, backgroundColor: 'rgba(252, 255, 197, 0.7)', borderWidth: 1, borderColor: '#AAA', y: -6 }, } }, } },global: {timezoneOffset: -280}, title: { text: '', }, xAxis: { crosshair: true, type: 'datetime', dateTimeLabelFormats: { day: '%b %e' }, }, yAxis: { title: { style: { fontSize:'16px', fontWeight: 'bold', }, text: "", }, labels: { format: '{value}°' }, }, legend: { enabled: false }, series: [{ type: 'areaspline', name: 'Air Temperature', threshold: 32, negativeColor: 'rgb(84, 210, 255)', color: '#FF3333', marker : { enabled: false }, lineWidth: 5, data: col_data }] });} else { $("#ttemp").remove()}} else { $("#conds").remove()}});} catch(err){ $("#conds").remove()}function Meteogram(xml, container) { this.symbols = []; this.symbolNames = []; this.precipitations = []; this.rains = []; this.windDirections = []; this.windDirectionNames = []; this.windSpeeds = []; this.windSpeedNames = []; this.temperatures = []; this.pressures = []; // Initialize this.xml = xml; this.container = container; // Run this.parseYrData();}Meteogram.prototype.getSymbolSprites = function (symbolSize) { return { '01d': { x: 0, y: 0 }, '01n': { x: symbolSize, y: 0 }, '16': { x: 2 * symbolSize, y: 0 }, '02d': { x: 0, y: symbolSize }, '02n': { x: symbolSize, y: symbolSize }, '03d': { x: 0, y: 2 * symbolSize }, '03n': { x: symbolSize, y: 2 * symbolSize }, '17': { x: 2 * symbolSize, y: 2 * symbolSize }, '04': { x: 0, y: 3 * symbolSize }, '05d': { x: 0, y: 4 * symbolSize }, '05n': { x: symbolSize, y: 4 * symbolSize }, '18': { x: 2 * symbolSize, y: 4 * symbolSize }, '06d': { x: 0, y: 5 * symbolSize }, '06n': { x: symbolSize, y: 5 * symbolSize }, '07d': { x: 0, y: 6 * symbolSize }, '07n': { x: symbolSize, y: 6 * symbolSize }, '08d': { x: 0, y: 7 * symbolSize }, '08n': { x: symbolSize, y: 7 * symbolSize }, '19': { x: 2 * symbolSize, y: 7 * symbolSize }, '09': { x: 0, y: 8 * symbolSize }, '10': { x: 0, y: 9 * symbolSize }, '11': { x: 0, y: 10 * symbolSize }, '12': { x: 0, y: 11 * symbolSize }, '13': { x: 0, y: 12 * symbolSize }, '14': { x: 0, y: 13 * symbolSize }, '15': { x: 0, y: 14 * symbolSize }, '20d': { x: 0, y: 15 * symbolSize }, '20n': { x: symbolSize, y: 15 * symbolSize }, '20m': { x: 2 * symbolSize, y: 15 * symbolSize }, '21d': { x: 0, y: 16 * symbolSize }, '21n': { x: symbolSize, y: 16 * symbolSize }, '21m': { x: 2 * symbolSize, y: 16 * symbolSize }, '22': { x: 0, y: 17 * symbolSize }, '23': { x: 0, y: 18 * symbolSize } };};/** * Function to smooth the temperature line. The original data provides only whole degrees, * which makes the line graph look jagged. So we apply a running mean on it, but preserve * the unaltered value in the tooltip. */Meteogram.prototype.smoothLine = function (data) { var i = data.length, sum, value; while (i--) { data[i].value = value = data[i].y; // preserve value for tooltip // Set the smoothed value to the average of the closest points, but don't allow // it to differ more than 0.5 degrees from the given value sum = (data[i - 1] || data[i]).y + value + (data[i + 1] || data[i]).y; data[i].y = Math.max(value - 0.5, Math.min(sum / 3, value + 0.5)); }};/** * Callback function that is called from Highcharts on hovering each point and returns * HTML for the tooltip. */Meteogram.prototype.tooltipFormatter = function (tooltip) { // Create the header with reference to the time interval var index = tooltip.points[0].point.index, ret = '' + Highcharts.dateFormat('%A, %b %e, %H:%M', tooltip.x) + '-' + Highcharts.dateFormat('%H:%M', tooltip.points[0].point.to) + '
'; // Symbol text ret += '' + this.symbolNames[index] + ''; ret += '
\u25CF ' + series.name + ': | ' + Highcharts.pick(point.point.value, point.y) + series.options.tooltip.valueSuffix + ' |
\u25CF Wind | ' + this.windDirectionNames[index] + '° ' + this.windSpeedNames[index] + ' (' + Highcharts.numberFormat(this.windSpeeds[index], 1) + ' mph) |
'; return ret;};/** * Draw the weather symbols on top of the temperature series. The symbols are sprites of a single * file, defined in the getSymbolSprites function above. */Meteogram.prototype.drawWeatherSymbols = function (chart) { var meteogram = this, symbolSprites = this.getSymbolSprites(30); $.each(chart.series[0].data, function (i, point) { var sprite, group; if (meteogram.resolution > 36e5 || i % 2 === 0) { sprite = symbolSprites[meteogram.symbols[i]]; if (sprite && !0) { // Create a group element that is positioned and clipped at 30 pixels width and height group = chart.renderer.g() .attr({ translateX: point.plotX + chart.plotLeft - 15, translateY: point.plotY + chart.plotTop - 30, zIndex: 5 }) .clip(chart.renderer.clipRect(0, 0, 30, 30)) .add(); // Position the image inside it at the sprite position chart.renderer.image( //'https://www.highcharts.com/samples/graphics/meteogram-symbols-30px.png', 'https://snoflo.org/static/images/meteogram-symbols-30px.png', -sprite.x, -sprite.y, 90, 570 ) .add(group); } } });};/** * Create wind speed symbols for the Beaufort wind scale. The symbols are rotated * around the zero centerpoint. */Meteogram.prototype.windArrow = function (name) { var level, path; // The stem and the arrow head path = [ 'M', 0, 7, // base of arrow 'L', -1.5, 7, 0, 10, 1.5, 7, 0, 7, 0, -10 // top ]; level = $.inArray(name, ['Calm', 'Light air', 'Light breeze', 'Gentle breeze', 'Moderate breeze', 'Fresh breeze', 'Strong breeze', 'Near gale', 'Gale', 'Strong gale', 'Storm', 'Violent storm', 'Hurricane']); if (level === 0) { path = []; } if (level === 2) { path.push('M', 0, -8, 'L', 4, -8); // short line } else if (level >= 3) { path.push(0, -10, 7, -10); // long line } if (level === 4) { path.push('M', 0, -7, 'L', 4, -7); } else if (level >= 5) { path.push('M', 0, -7, 'L', 7, -7); } if (level === 5) { path.push('M', 0, -4, 'L', 4, -4); } else if (level >= 6) { path.push('M', 0, -4, 'L', 7, -4); } if (level === 7) { path.push('M', 0, -1, 'L', 4, -1); } else if (level >= 8) { path.push('M', 0, -1, 'L', 7, -1); } return path;};///**// * Draw the wind arrows. Each arrow path is generated by the windArrow function above.// *///Meteogram.prototype.drawWindArrows = function (chart) {// var meteogram = this;//// $.each(chart.series[0].data, function (i, point) {// var arrow, x, y;//// if (meteogram.resolution > 36e5 || i % 2 === 0) {//// // Draw the wind arrows// x = point.plotX + chart.plotLeft + 0;// y = 340;// if (meteogram.windSpeedNames[i] === 'Calm') {// arrow = chart.renderer.circle(x, y, 10).attr({// fill: 'none'// });// } else {// arrow = chart.renderer.path(// meteogram.windArrow(meteogram.windSpeedNames[i])// ).attr({// rotation: parseInt(meteogram.windDirections[i], 10),// translateX: x, // rotation center// translateY: y // rotation center// });// }// arrow.attr({// stroke: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black',// 'stroke-width': 1.5,// zIndex: 5// })// .add();//// }// });//};/////**// * Draw blocks around wind arrows, below the plot area// *///Meteogram.prototype.drawBlocksForWindArrows = function (chart) {// var xAxis = chart.xAxis[0],// x,// pos,// max,// isLong,// isLast,// i;//// for (pos = xAxis.min, max = xAxis.max, i = 0; pos <= max + 36e5; pos += 36e5, i += 1) {//// // Get the X position// isLast = pos === max + 36e5;// x = Math.round(xAxis.toPixels(pos)) + (isLast ? 0.5 : -0.5);//// // Draw the vertical dividers and ticks// if (this.resolution > 36e5) {// isLong = pos % this.resolution === 0;// } else {// isLong = i % 2 === 0;// }// chart.renderer.path(['M', x, chart.plotTop + chart.plotHeight + (isLong ? 0 : 28),// 'L', x, chart.plotTop + chart.plotHeight + 32, 'Z'])// .attr({// 'stroke': chart.options.chart.plotBorderColor,// 'stroke-width': 1// })// .add();// }//};/** * Get the title based on the XML data */Meteogram.prototype.getTitle = function () { return ''; if (0 == 0){ return 'Meteogram Forecast for '; } else { return ''; }};/** * Build and return the Highcharts options structure */Meteogram.prototype.getChartOptions = function () { var meteogram = this; return { chart: { backgroundColor: 'rgba(0,0,0,0)', renderTo: this.container, marginBottom: 0, marginRight: 0, marginLeft: 0, //height: 400, plotBorderWidth: 0, /* events: { load: function() {// this.renderer.image('https://snoflo.org:5984/sentimap_icons/general/snoflo_error.png', 00, 00, 80, 60)// .add(); } }, */ events: { load: function() {// this.renderer.image('https://snoflo.org/static/images/logo_snoflo_hydroanalytics.png', 30, 25, 40, 40)// .add(); } }, }, title: { text: "", align: 'left', style: { color: 'lightgrey', } }, credits: { text: '', href: 'https://snoflo.org', position: { x: -20 } }, global: { useUTC: false }, tooltip: { shared: true, useHTML: true, formatter: function () { return meteogram.tooltipFormatter(this); } }, xAxis: [{ // Bottom X axis type: 'datetime', tickLength: 0, labels: {enabled:false, format: '{value:%H}' } }, { // Top X axis linkedTo: 0, type: 'datetime', tickInterval: 24 * 3600 * 1000, labels: { format: '{value:%a %b %e}', align: 'left', x: 3, y: -5 }, opposite: true, tickLength: 0,// gridLineWidth: 0 }], yAxis: [{ // temperature axis title: { style: { fontSize: '16px', fontWeight: 'bold', color: 'grey', }, text: null }, labels: { format: '{value}°', style: { fontSize: '10px', fontWeight: 'bold', color: 'grey', }, x: 25, y: -2, align: 'right', },min: 0, plotLines: [{ // zero plane value: 32, color: '#BBBBBB', width: 2, dashStyle: 'shortdot', zIndex: 2 }], showLastLabel: false, //showFirstLabel: false, // Custom positioner to provide even temperature ticks from top down tickPositioner: function () { var max = Math.ceil(this.max) + 1, pos = max - 12, // start ret; if (pos < this.min) { ret = []; while (pos <= max) { ret.push(pos += 1); } } // else return undefined and go auto return ret; }, maxPadding: 0.3, tickInterval: 1, gridLineColor: (Highcharts.theme && Highcharts.theme.background2) || 'white' }, { // precipitation axis title: { text: null }, labels: { enabled: false }, gridLineWidth: 0, tickLength: 0 }, { // Air pressure allowDecimals: false, title: { // Title on top of axis// text: 'hPa', text: 'humidity', offset: 0, align: 'low', rotation: 0, style: { fontSize: '10px', color: 'grey', }, textAlign: 'right', x: -3, x: -2, }, labels: { format: '{value}%', style: { fontSize: '10px', fontWeight: 'bold', color: 'grey', }, x: -3, y: -2, align: 'right', }, gridLineWidth: 0, opposite: true, showFirstLabel: false, showLastLabel: false, }], legend: {enabled: false, }, plotOptions: { series: { animation: { duration: 3200 }, pointPlacement: 'between' } }, series: [{ name: 'Temperature', data: this.temperatures, type: 'spline', marker: { enabled: false, states: { hover: { enabled: true } } }, tooltip: { valueSuffix: '°F' }, zIndex: 1, color: '#FF3333', threshold: 32, negativeColor: '#48AFE8' }, {// name: 'Precipitation', name: 'Snow', data: this.precipitations, type: 'column',// color: '#68CFE8', color: 'purple', yAxis: 1, groupPadding: 0, pointPadding: 0, borderWidth: 0, shadow: false, dataLabels: { enabled: true, formatter: function () { if (this.y > 0) { return this.y+'"'; } }, style: { fontSize: '10px' } }, tooltip: { valueSuffix: '"' } }, { name: 'Rain', data: this.rains, type: 'column', color: 'lightblue', yAxis: 1, groupPadding: 0, pointPadding: 0, borderWidth: 0, shadow: false, dataLabels: { enabled: true, formatter: function () { if (this.y > 0) { return this.y+'"'; } }, style: { fontSize: '10px' } }, tooltip: { valueSuffix: '"' } }, {// name: 'Air pressure', name: 'Humidity', color: 'grey', data: this.pressures, marker: { enabled: false }, shadow: false, tooltip: { // valueSuffix: ' hPa' valueSuffix: ' %' }, dashStyle: 'shortdot', yAxis: 2 }] };};/** * Post-process the chart from the callback function, the second argument to Highcharts.Chart. */Meteogram.prototype.onChartLoad = function (chart) { this.drawWeatherSymbols(chart);// this.drawWindArrows(chart);// this.drawBlocksForWindArrows(chart);};/** * Create the chart. This function is called async when the data file is loaded and parsed. */Meteogram.prototype.createChart = function () { var meteogram = this; this.chart = new Highcharts.Chart(this.getChartOptions(), function (chart) { meteogram.onChartLoad(chart); });};/** * Handle the data. This part of the code is not Highcharts specific, but deals with yr.no's * specific data format */Meteogram.prototype.parseYrData = function () { var meteogram = this, xml = this.xml, pointStart; if (!xml || !xml.forecast) { $('#loading').html(' Failed loading data, please try again later'); return; } // The returned xml variable is a JavaScript representation of the provided XML, // generated on the server by running PHP simple_load_xml and converting it to // JavaScript by json_encode. $.each(xml.forecast.tabular.time, function (i, time) { // Get the times - only Safari can't parse ISO8601 so we need to do some replacements var from = time['@attributes'].from + ' CDT', to = time['@attributes'].to + ' CDT'; from = from.replace(/-/g, '/').replace('T', ' '); from = Date.parse(from); to = to.replace(/-/g, '/').replace('T', ' '); to = Date.parse(to);// if (to > pointStart + 16 * 24 * 36e5) {// return;// } // If it is more than an hour between points, show all symbols if (i === 0) { meteogram.resolution = to - from; } // Populate the parallel arrays meteogram.symbols.push(time.symbol['@attributes']['var'].match(/[0-9]{2}[dnm]?/)[0]); // eslint-disable-line dot-notation meteogram.symbolNames.push(time.symbol['@attributes'].name); meteogram.temperatures.push({ x: from, y: parseInt(time.temperature['@attributes'].value, 10), // custom options used in the tooltip formatter to: to, index: i }); meteogram.precipitations.push({ x: from, y: parseFloat(time.precipitation['@attributes'].value) }); meteogram.rains.push({ x: from, y: parseFloat(time.rain['@attributes'].value) }); meteogram.windDirections.push(parseFloat(time.windDirection['@attributes'].deg)); meteogram.windDirectionNames.push(time.windDirection['@attributes'].name); meteogram.windSpeeds.push(parseFloat(time.windSpeed['@attributes'].mps)); meteogram.windSpeedNames.push(time.windSpeed['@attributes'].name); meteogram.pressures.push({ x: from, y: parseFloat(time.pressure['@attributes'].value) }); if (i === 0) { pointStart = (from + to) / 2; } }); // Smooth the line this.smoothLine(this.temperatures); // Create the chart when the data is loaded this.createChart();};// End of the Meteogram protype