<?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;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								?>
							 |