<?php /* This datasource returns a response in the form of a google query response USAGE All parameters are optional datasource.php?xmin=0&xmax=314&xstepnum=25&ymin=0&ymax=314&ystepnum=25 DOCUMENTATION http://code.google.com/apis/visualization/documentation/dev/implementing_data_source.html EXAMPLE OF A RESPONSE FILE Note that the reqId in the response must correspond with the reqId from the request. ________________________________________________________________________________ google.visualization.Query.setResponse({ version:'0.6', reqId:'0', status:'ok', table:{ cols:[ {id:'x', label:'x', type:'number'}, {id:'y', label:'y', type:'number'}, {id:'value', label:'value', type:'number'} ], rows:[ {c:[{v:0}, {v:0}, {v:10.0}]}, {c:[{v:1}, {v:0}, {v:12.0}]}, {c:[{v:2}, {v:0}, {v:13.0}]}, {c:[{v:0}, {v:1}, {v:11.0}]}, {c:[{v:1}, {v:1}, {v:14.0}]}, {c:[{v:2}, {v:1}, {v:11.0}]} ] } }); ________________________________________________________________________________ */ /** * A custom function */ function custom($x, $y) { $d = sqrt(pow($x/100, 2) + pow($y/100, 2)); return 50 * exp(-5 * $d / 10) * sin($d*5) } // retrieve parameters $default_stepnum = 25; $xmin = isset($_REQUEST['xmin']) ? (float)$_REQUEST['xmin'] : -100; $xmax = isset($_REQUEST['xmax']) ? (float)$_REQUEST['xmax'] : 100; $xstepnum = isset($_REQUEST['xstepnum']) ? (int)$_REQUEST['xstepnum'] : $default_stepnum; $ymin = isset($_REQUEST['ymin']) ? (float)$_REQUEST['ymin'] : -100; $ymax = isset($_REQUEST['ymax']) ? (float)$_REQUEST['ymax'] : 100; $ystepnum = isset($_REQUEST['ystepnum']) ? (int)$_REQUEST['ystepnum'] : $default_stepnum; // in the reply we must fill in the request id that came with the request $reqId = getReqId(); // check for a maximum number of datapoints (for safety) if ($xstepnum * $ystepnum > 10000) { echo "google.visualization.Query.setResponse({ version:'0.6', reqId:'$reqId', status:'error', errors:[{reason:'not_supported', message:'Maximum number of datapoints exceeded'}] });"; exit; } // output the header part of the response echo "google.visualization.Query.setResponse({ version:'0.6', reqId:'$reqId', status:'ok', table:{ cols:[ {id:'x', label:'x', type:'number'}, {id:'y', label:'y', type:'number'}, {id:'value', label:'', type:'number'} ], rows:["; // output the actual values $first = true; $xstep = ($xmax - $xmin) / $xstepnum; $ystep = ($ymax - $ymin) / $ystepnum; for ($x = $xmin; $x < $xmax; $x+=$xstep) { for ($y = $ymin; $y < $ymax; $y+=$ystep) { $value = custom($x,$y); if (!$first) { echo ",\n"; } else { echo "\n"; } echo " {c:[{v:$x}, {v:$y}, {v:$value}]}"; $first = false; } } // output the end part of the response echo " ] } }); "; /** * Retrieve the request id from the get/post data * @return {number} $reqId The request id, or 0 if not found */ function getReqId() { $reqId = 0; foreach ($_REQUEST as $req) { if (substr($req, 0,6) == "reqId:") { $reqId = substr($req, 6); } } return $reqId; } ?>