HighCharts - Weather Image
by Shankar
HTML
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
<div id="container" style="width: 800px; height: 310px; margin: 0 auto">
<div style="margin-top: 100px; text-align: center" id="loading">
<i class="fa fa-spinner fa-spin"></i> Loading data from external source
</div>
</div>
<!--
<div style="width: 800px; margin: 0 auto">
<a href="#http://www.yr.no/place/United_Kingdom/England/London/forecast_hour_by_hour.xml">London</a>,
<a href="#http://www.yr.no/place/France/Rhône-Alpes/Val_d\'Isère~2971074/forecast_hour_by_hour.xml">Val d'Isère</a>,
<a href="#http://www.yr.no/place/United_States/California/San_Francisco/forecast_hour_by_hour.xml">San Francisco</a>,
<a href="#http://www.yr.no/place/Norway/Vik/Vikafjell/forecast_hour_by_hour.xml">Vikjafjellet</a>
</div>
-->
JavaScript
/**
* This is a complex demo of how to set up a Highcharts chart, coupled to a
* dynamic source and extended by drawing image sprites, wind arrow paths
* and a second grid on top of the chart. The purpose of the demo is to inpire
* developers to go beyond the basic chart types and show how the library can
* be extended programmatically. This is what the demo does:
*
* - Loads weather forecast from www.yr.no in form of an XML service. The XML
* is translated on the Higcharts website into JSONP for the sake of the demo
* being shown on both our website and JSFiddle.
* - When the data arrives async, a Meteogram instance is created. We have
* created the Meteogram prototype to provide an organized structure of the different
* methods and subroutines associated with the demo.
* - The parseYrData method parses the data from www.yr.no into several parallel arrays. These
* arrays are used directly as the data option for temperature, precipitation
* and air pressure. As the temperature data gives only full degrees, we apply
* some smoothing on the graph, but keep the original data in the tooltip.
* - After this, the options structure is build, and the chart generated with the
* parsed data.
* - In the callback (on chart load), we weather icons on top of the temperature series.
* The icons are sprites from a single PNG image, placed inside a clipped 30x30
* SVG <g> element. VML interprets this as HTML images inside a clipped div.
* - Lastly, the wind arrows are built and added below the plot area, and a grid is
* drawn around them. The wind arrows are basically drawn north-south, then rotated
* as per the wind direction.
*/
function Meteogram(xml, container) {
// Parallel arrays for the chart data, these are populated as the XML/JSON file
// is loaded
this.symbols = [];
this.symbolNames = [];
this.precipitations = [];
this.windDirections = [];
this.windDirectionNames = [];
this.windSpeeds =...