Map Snow Flow Rivers Reservoirs Mountains Skiing Whitewater Fishing Camping
- United States
NICKEL PLATE NORDIC CENTRE
- Overview
- Ski Resorts
- State Snowpack
- Avalanche
June 22, 2024
Weather today, light snow Up to 2" of more snowfall forecasted over the next 5 days.
Terrain Surface | NA |
Powder Score | NA |
Snowfall Next 24 Hours | 1" |
Snowfall Next 5 Days | 2.36" |
None Read More
Snowpack Depth (Past 7 Days)
Data sourced from
Snow Forecast
5 Day Snow Forecast
Weather into tomorrow, light 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
Nickel Plate Nordic Centre
Nickel Plate Nordic Centre in British Columbia offers over 56km of ski trails with stunning views of the Okanagan Valley. The best trails are said to be the Ponderosa Trail and the Snowshoe Trail. An interesting fact is that the resort was founded in 1978 by a group of Nordic enthusiasts who wanted to create a world-class cross-country ski facility. For beginners, the Discovery Trail is a great option. The best apres ski bar is the BullWheel Gastro Family Pub, which serves delicious food and drinks in a cozy atmosphere.
Terrain Overview
The Nickel Plate Nordic Centre ski resort in British Columbia is located in the interior of the province, near the town of Penticton. The resort is situated in the Okanagan Highlands, which is a region known for its rolling hills and scenic mountain views.
The pertinent mountain ranges near the Nickel Plate Nordic Centre include the Okanagan Range, which is a subrange of the Columbia Mountains. This range is characterized by rugged peaks and deep valleys, providing a stunning backdrop for skiing and other outdoor activities.
In terms of mountain aspects, the Nickel Plate Nordic Centre offers a variety of terrain for skiers of all levels. The resort has a mix of beginner, intermediate, and advanced trails, with some trails offering stunning views of the surrounding mountains and valleys.
Overall, the Nickel Plate Nordic Centre is a popular destination for cross-country skiing and snowshoeing, with its beautiful mountain surroundings and well-groomed trails attracting visitors from near and far.
Nearby Ski Areas | 5 day forecast |
---|---|
NICKEL PLATE NORDIC CENTRE | NA |
TELEMARK CROSS COUNTRY | NA |
APEX MOUNTAIN RESORT | NA |
View British-Columbia Ski Report
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(1); ct.push("T"); ds.push(1); ct.push("F"); ds.push(0); ct.push("S"); ds.push(1); ct.push("S"); ds.push(1); 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": [-119.95433092117, 49.383755709583]}, "_rev": "16-691744835ee9f60bf6b94e2c775a8137", "_id": "nickel-plate-nordic-centre", "type": "Feature", "properties": {"website": "http://www.nickelplatenordic.org", "ratings": [], "ai_description": "Nickel Plate Nordic Centre in British Columbia offers over 56km of ski trails with stunning views of the Okanagan Valley. The best trails are said to be the Ponderosa Trail and the Snowshoe Trail. An interesting fact is that the resort was founded in 1978 by a group of Nordic enthusiasts who wanted to create a world-class cross-country ski facility. For beginners, the Discovery Trail is a great option. The best apres ski bar is the BullWheel Gastro Family Pub, which serves delicious food and drinks in a cozy atmosphere.", "last": "2020-02-24", "aggregate_score": 0, "title": "Nickel Plate Nordic Centre", "trailmaps": ["nickel-plate-nordic-centre0", "nickel-plate-nordic-centre1", "nickel-plate-nordic-centre2", "nickel-plate-nordic-centre3"], "country": "Canada", "forecast": {"hourly": {"120": 2.36, "24": 0.93, "72": 2.02}, "daily": [{"wind_speed": 1.92, "temp": 20.58, "snow": 0.93, "summary": "light snow", "details": "light snow", "type": "snow", "day": "Wed", "wind_dir": 131, "icon": "Snow"}, {"wind_speed": 1.61, "temp": 22.33, "snow": 0.6300000000000001, "summary": "light snow", "details": "light snow", "type": "snow", "day": "Thu", "wind_dir": 161.007, "icon": "Snow"}, {"wind_speed": 2.01, "temp": 24.98, "snow": 0, "summary": "light snow", "details": "light snow", "type": "snow", "day": "Fri", "wind_dir": 130.503, "icon": "Snow"}, {"wind_speed": 1.59, "temp": 24.85, "snow": 0.01, "summary": "clear sky", "details": "clear sky", "type": "snow", "day": "Sat", "wind_dir": 155.503, "icon": "Clear"}, {"wind_speed": 1.63, "temp": 26.71, "snow": 0.2, "summary": "light snow", "details": "light snow", "type": "snow", "day": "Sun", "wind_dir": 120.003, "icon": "Snow"}]}, "metrics": {"terrain_park": "Unknown", "night_skiing": "Unknown"}, "state": "WA", "tag": "ski-area", "location": "Hedley", "ai_aspects": "The Nickel Plate Nordic Centre ski resort in British Columbia is located in the interior of the province, near the town of Penticton. The resort is situated in the Okanagan Highlands, which is a region known for its rolling hills and scenic mountain views.\n\nThe pertinent mountain ranges near the Nickel Plate Nordic Centre include the Okanagan Range, which is a subrange of the Columbia Mountains. This range is characterized by rugged peaks and deep valleys, providing a stunning backdrop for skiing and other outdoor activities.\n\nIn terms of mountain aspects, the Nickel Plate Nordic Centre offers a variety of terrain for skiers of all levels. The resort has a mix of beginner, intermediate, and advanced trails, with some trails offering stunning views of the surrounding mountains and valleys.\n\nOverall, the Nickel Plate Nordic Centre is a popular destination for cross-country skiing and snowshoeing, with its beautiful mountain surroundings and well-groomed trails attracting visitors from near and far.", "owner": "", "loc": ["british-columbia", "canada"]}}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