| <html> | |
| 
 | |
| <head> | |
|     <title>Graph3d documentation</title> | |
|     <link rel='stylesheet' href='default.css' type='text/css'> | |
| 
 | |
|     <link href="prettify/prettify.css" type="text/css" rel="stylesheet" /> | |
|     <script type="text/javascript" src="prettify/prettify.js"></script> | |
| </head> | |
| 
 | |
| <body onload="prettyPrint();"> | |
| 
 | |
| <pre class="prettyprint lang-php"> | |
| <?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; | |
| } | |
| 
 | |
| 
 | |
| ?> | |
| 
 | |
| </pre> | |
| 
 | |
| </body> | |
| </html>
 |