More trip planner testing with colors
[busui.git] / labs / tripPlannerTester.kml.php
blob:a/labs/tripPlannerTester.kml.php -> blob:b/labs/tripPlannerTester.kml.php
--- a/labs/tripPlannerTester.kml.php
+++ b/labs/tripPlannerTester.kml.php
@@ -1,1 +1,175 @@
+<?php
 
+$csv = false;
+$kml = true;
+if ($kml) {
+	header('Content-Type: application/vnd.google-earth.kml+xml');
+echo '<?xml version="1.0" encoding="UTF-8"?>
+<kml xmlns="http://www.opengis.net/kml/2.2"><Document>';
+}
+include ('../include/common.inc.php');
+//Test code to grab transit times
+// make sure to sleep(10);
+$boundingBoxes = Array(
+	"belconnen" => Array(
+		"startlat" => - 35.1828,
+		"startlon" => 149.0295,
+		"finishlat" => - 35.2630,
+		"finishlon" => 149.1045,
+	) , 
+	"north gungahlin civic" => Array(
+		"startlat" => - 35.2652,
+		"startlon" => 149.1045,
+		"finishlat" => -35.2955,
+		"finishlon" => 149.1559, 
+	) ,
+	"west duffy" => Array(
+		"startlat" => - 35.3252,
+		"startlon" => 149.0240,
+		"finishlat" => - 35.3997,
+		"finishlon" => 149.0676,
+	) , 
+	"central south" => Array(
+		"startlat" => - 35.3042,
+		"startlon" => 149.0762,
+		"finishlat" => - 35.3370,
+		"finishlon" => 149.1806,
+	) , 
+	"south" => Array(
+		"startlat" => - 35.3403,
+		"startlon" => 149.0714,
+		"finishlat" => - 35.4607,
+		"finishlon" => 149.1243,
+	) 
+	
+);
+$latdeltasize = 0.025;
+$londeltasize = 0.025;
+$from = "Barry Drive";
+$fromPlace = (startsWith($from, "-") ? $from : geocode($from, false));
+$startTime = "9:00 am";
+$startDate = "21/03/2011";
+$counter = 0;
+$regionTimes = Array();
+$testRegions = Array();
+$useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";
+if ($csv) echo "<pre>";
+if ($csv) echo "lat,lon,time,latdeltasize, londeltasize, region key name\n";
+
+foreach ($boundingBoxes as $key => $boundingBox) {
+	for ($i = $boundingBox['startlat']; $i >= $boundingBox['finishlat']; $i-= $latdeltasize) {
+		for ($j = $boundingBox['startlon']; $j <= $boundingBox['finishlon']; $j+= $londeltasize) {
+			$url = $otpAPIurl . "ws/plan?date=" . urlencode($startDate) . "&time=" . urlencode($startTime) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=" . $i . "," . $j . "&fromPlace=$fromPlace&intermediatePlaces=";
+			$ch = curl_init($url);
+			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+			curl_setopt($ch, CURLOPT_HEADER, 0);
+			curl_setopt($ch, CURLOPT_HTTPHEADER, array(
+				"Accept: application/json"
+			));
+			curl_setopt($ch, CURLOPT_TIMEOUT, 5);
+			$page = curl_exec($ch);
+			if (curl_errno($ch)) {
+				if ($csv) echo "Trip planner temporarily unavailable: " . curl_errno($ch) . " " . curl_error($ch);
+			}
+			else {
+				$tripplan = json_decode($page);
+				if (isset($tripplan->error)) var_dump($tripplan->error);
+				$times = Array();
+				if (is_array($tripplan->plan->itineraries->itinerary)) {
+					
+					foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary) {
+						$times[] = floor($itinerary->duration / 60000);
+					}
+
+				}
+				else {
+					$times[] = floor($tripplan->plan->itineraries->itinerary->duration / 60000);
+				}
+				if ($csv) echo "$i,$j," . min($times) . ",$latdeltasize, $londeltasize,$key\n";
+			}
+			flush();
+			ob_flush();
+			curl_close($ch);
+			$testRegions[] = Array ("lat" => $i, "lon" => $j, "time" => min($times), "latdeltasize" => $latdeltasize, "londeltasize" => $londeltasize, "regionname" => $key);
+			$regionTimes[] = min($times);
+			break;
+			}
+		break;
+	}
+}
+
+// http://www.geekpedia.com/code163_Generate-Gradient-Within-Hex-Range-In-PHP.html
+function Gradient($HexFrom, $HexTo, $ColorSteps)
+{
+        $FromRGB['r'] = hexdec(substr($HexFrom, 0, 2));
+        $FromRGB['g'] = hexdec(substr($HexFrom, 2, 2));
+        $FromRGB['b'] = hexdec(substr($HexFrom, 4, 2));
+       
+        $ToRGB['r'] = hexdec(substr($HexTo, 0, 2));
+        $ToRGB['g'] = hexdec(substr($HexTo, 2, 2));
+        $ToRGB['b'] = hexdec(substr($HexTo, 4, 2));
+       
+        $StepRGB['r'] = ($FromRGB['r'] - $ToRGB['r']) / ($ColorSteps - 1);
+        $StepRGB['g'] = ($FromRGB['g'] - $ToRGB['g']) / ($ColorSteps - 1);
+        $StepRGB['b'] = ($FromRGB['b'] - $ToRGB['b']) / ($ColorSteps - 1);
+       
+        $GradientColors = array();
+       
+        for($i = 0; $i <= $ColorSteps; $i++)
+        {
+                $RGB['r'] = floor($FromRGB['r'] - ($StepRGB['r'] * $i));
+                $RGB['g'] = floor($FromRGB['g'] - ($StepRGB['g'] * $i));
+                $RGB['b'] = floor($FromRGB['b'] - ($StepRGB['b'] * $i));
+               
+                $HexRGB['r'] = sprintf('%02x', ($RGB['r']));
+                $HexRGB['g'] = sprintf('%02x', ($RGB['g']));
+                $HexRGB['b'] = sprintf('%02x', ($RGB['b']));
+               
+                $GradientColors[] = implode(NULL, $HexRGB);
+        }
+        return $GradientColors;
+}
+
+if ($kml)  {
+$minTime = min($regionTimes);
+$maxTime = max($regionTimes);
+$rangeTime = $maxTime - $minTime;
+$colorSteps = 32;
+$deltaTime = $rangeTime / $colorSteps;
+
+$Gradients = Gradient("FF5B5B", "FFCA5B", $colorSteps);
+
+foreach ($testRegions as $testRegion) {
+	$band = (floor(($testRegion[time] - $minTime) / $deltaTime));
+			echo "<Placemark>
+  <name>".$testRegion['regionname']." time {$testRegion[time]} band $band</name>
+    <Style>
+        <PolyStyle>
+            <color>7f".$Gradients[$band]."</color>". // 7f = 50% alpha
+        "</PolyStyle>
+    </Style>
+   <Polygon>
+         <extrude>1</extrude>
+      <altitudeMode>relativeToGround</altitudeMode>
+    <outerBoundaryIs>
+      <LinearRing>
+        <coordinates>
+          ". ($testRegion['lon'] - ($testRegion['londeltasize']/2)) . "," . ($testRegion['lat'] - ($testRegion['latdeltasize']/2)).",0\n".
+	  ($testRegion['lon'] - ($testRegion['londeltasize']/2)) . "," . ($testRegion['lat'] + ($testRegion['latdeltasize']/2)).",0\n".
+	  ($testRegion['lon'] + ($testRegion['londeltasize']/2)) . "," . ($testRegion['lat'] + ($testRegion['latdeltasize']/2)).",0\n".
+	  ($testRegion['lon'] + ($testRegion['londeltasize']/2)) . "," . ($testRegion['lat'] - ($testRegion['latdeltasize']/2)).",0\n".
+          ($testRegion['lon'] - ($testRegion['londeltasize']/2)) . "," . ($testRegion['lat'] - ($testRegion['latdeltasize']/2)).",0\n".
+	  "
+	  
+        </coordinates>
+      </LinearRing>
+    </outerBoundaryIs>
+  </Polygon>
+</Placemark>";
+}
+echo "\n</Document></kml>\n";
+}
+if ($csv) echo "</pre>";
+
+?>
+