|
|
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <title>Datastream example</title>
-
- <style>
- body {
- width: 600px;
- font-size: 14px;
- }
- </style>
-
- <script type="text/javascript" src="http://www.google.com/jsapi"></script>
- <script type="text/javascript" src="../graph3d.js"></script>
- <script type="text/javascript" src="ajax.js"></script>
-
- <script>
- var url = "datastream_csv.php";
-
- google.load("visualization", "1");
-
- // Set callback to run when API is loaded
- google.setOnLoadCallback(load);
-
- var loaded = false;
- var ajax = new Ajax();
- var dataBuffer = "";
-
- var indexTable = undefined;
- var dataTable = undefined;
- var graph = undefined;
- var options = undefined;
-
- function load() {
- // initialize data table
- indexTable = new Array();
- dataTable = new google.visualization.DataTable();
- dataTable.addColumn('number', 'x');
- dataTable.addColumn('number', 'y');
- dataTable.addColumn('number', 'z');
- dataTable.addColumn('number', 'color');
-
- // specify options
- options = {
- width: "500px",
- height: "500px",
- style: "dot-color",
- showPerspective: true,
- showGrid: true,
- showShadow: false,
- keepAspectRatio: true,
- verticalRatio: 0.5,
- cameraPosition: {
- distance: 1.4,
- horizontal: 0.0,
- vertical: 1.0
- }
- };
-
- // Instantiate our graph object.
- graph = new links.Graph3d(document.getElementById('graph'));
-
- // Draw our graph with the created data and options
- graph.draw(dataTable, options);
-
- loaded = true;
- }
-
- /**
- * Update the data in the datatable
- */
- function setData(id, x, y, z, color) {
- if (indexTable[id] != undefined) {
- // update data
- var row = indexTable[id];
- dataTable.setValue(row, 0, x);
- dataTable.setValue(row, 1, y);
- dataTable.setValue(row, 2, z);
- dataTable.setValue(row, 3, color);
- }
- else {
- // add data
- var row = dataTable.addRow([x, y,z, color]);
- indexTable[id] = row;
- }
- }
-
- /**
- * Parse data in csv format.
- * The data is supposed to be in CSV format and has five numeric columns:
- * id, x, y,z, color
- * Rows are separated by a line and, and fields by a comma. spaces are
- * neglected.
- * @param {string} data
- * @param {string} delimeter Optional delimeter. A comma "," by default
- */
- function parseData(data, delimeter) {
- if (delimeter == undefined) {
- delimeter = ",";
- }
-
- dataBuffer += data;
-
- var id = undefined;
- var x = undefined;
- var y = undefined;
- var z = undefined;
- var color = undefined;
-
- var rows = dataBuffer.split("\n");
- for (var i = 0; i < rows.length; i++) {
- var row = rows[i].split(delimeter);
-
- if (row.length == 5) {
- var id = parseInt(row[0]);
- var x = parseFloat(row[1]);
- var y = parseFloat(row[2]);
- var z = parseFloat(row[3]);
- var color = parseFloat(row[4]);
-
- setData(id, x, y, z, color);
- }
- else {
- // corrupt data or empty line
- }
- }
-
- // empty the buffer up to the last line
- // TODO: handle the buffer smarter, makes not much sense right now.
- var lastReturn = dataBuffer.lastIndexOf("\n");
- if (lastReturn >= 0)
- dataBuffer = dataBuffer.substring(lastReturn);
- else
- dataBuffer = "";
- }
-
- function start() {
- if(!loaded) {
- alert("Still loading Google API. One moment please...");
- return;
- }
-
- var callback = function (newData) {
- parseData(newData);
- graph.redraw(dataTable);
- }
-
- ajax.abort();
- ajax.requestLongPoll("GET", url, callback);
- }
-
- function stop () {
- ajax.abort();
- }
-
- </script>
-
- </head>
- <body>
- <h1>Datastream example</h1>
-
- <p>
- This example demonstrates reading a data stream, via a long poll.
- </p>
-
- <p>
- Note that some browsers buffer data from a stream before sending it to the
- screen. In that case "nothing" seems to happens until the buffer limit is
- reached.
- </p>
-
- <p>
- When the datasource is located on an external server,
- the datasource must enable cross domain scripting
- (Access-Control-Allow-Origin must be set on the server side).
- </p>
-
- <p>
- <input type="button" id="start" value="Start" onclick="start();">
- <input type="button" is="stop" value="Stop" onclick="stop();">
- </p>
-
- <div id="graph"></div>
- </body>
- </html>
|