--- a/labs/tripPlannerTester.kml.php +++ b/labs/tripPlannerTester.kml.php @@ -8,6 +8,50 @@ } else { return (($pBegin - $pEnd) * (1 - ($pStep / $pMax))) + $pEnd; + } +} +require ("../lib/rolling-curl/RollingCurl.php"); +function processResult_cb($response, $info, $request) +{ + global $testRegions, $regionTimes,$csv,$kml, $latdeltasize,$londeltasize; + $md = $request->metadata; + $tripplan = json_decode($response); + $plans = Array(); + //var_dump(Array($info, $request)); + if (is_array($tripplan->plan->itineraries->itinerary)) { + foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary) { + $plans[floor($itinerary->duration / 60000) ] = $itinerary; + } + } + else { + $plans[floor($tripplan->plan->itineraries->itinerary->duration / 60000) ] = $tripplan->plan->itineraries->itinerary; + } + if ($csv) echo "{$md['i']},{$md['j']}," . min(array_keys($plans)) . ",$latdeltasize, $londeltasize,{$md['key']}\n"; + if ($kml) { + $time = min(array_keys($plans)); + $plan = ""; + if (is_array($plans[min(array_keys($plans)) ]->legs->leg)) { + foreach ($plans[min(array_keys($plans)) ]->legs->leg as $legNumber => $leg) { + $plan.= processLeg($legNumber, $leg) . ","; + } + } + else { + $plan.= processLeg(0, $plans[min(array_keys($plans)) ]->legs->leg); + } + if (isset($tripplan->error) && $tripplan->error->id == 404) { + $time = 999; + $plan = "Trip not possible without excessive walking from nearest bus stop"; + } + $testRegions[] = Array( + "lat" => $md['i'], + "lon" => $md['j'], + "time" => $time, + "latdeltasize" => $latdeltasize, + "londeltasize" => $londeltasize, + "regionname" => $md['key'], + "plan" => $plan . '
original plan' + ); + $regionTimes[] = $time; } } function Gradient($HexFrom, $HexTo, $ColorSteps) @@ -49,22 +93,22 @@ //} //$walkingstep.= floor($step->distance) . "m"; //return $walkingstep; + } } $csv = false; $kml = true; +$gearthcolors = false; if ($kml) { - //header('Content-Type: application/vnd.google-earth.kml+xml'); + header('Content-Type: application/vnd.google-earth.kml+xml'); echo ' '; } 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, + "startlat" => - 35.1928, + "startlon" => 149.006, "finishlat" => - 35.2630, "finishlon" => 149.1045, ) , @@ -74,27 +118,27 @@ "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, - //) + "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.01; -$londeltasize = 0.01; +$latdeltasize = 0.005; +$londeltasize = 0.005; $from = "Wattle Street"; $fromPlace = (startsWith($from, "-") ? $from : geocode($from, false)); $startTime = "9:00 am"; @@ -103,85 +147,46 @@ $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 ($kml) echo " $from at $startTime on $startDate "; if ($csv) echo "
";
 if ($csv) echo "lat,lon,time,latdeltasize, londeltasize, region key name\n";
+$rc = new RollingCurl("processResult_cb");
+$rc->window_size = 2;
 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=440&wheelchair=false&toPlace=" . $i . "," . $j . "&fromPlace=$fromPlace";
-			$ch = curl_init($url);
-			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-			curl_setopt($ch, CURLOPT_HEADER, 0);
-			curl_setopt($ch, CURLOPT_HTTPHEADER, array(
+			//debug($url);
+			$request = new RollingCurlRequest($url);
+			$request->headers = 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);
-				$plans = Array();
-				if (is_array($tripplan->plan->itineraries->itinerary)) {
-					foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary) {
-						$plans[floor($itinerary->duration / 60000) ] = $itinerary;
-					}
-				}
-				else {
-					$plans[floor($tripplan->plan->itineraries->itinerary->duration / 60000) ] = $tripplan->plan->itineraries->itinerary;
-				}
-				if ($csv) echo "$i,$j," . min(array_keys($plans)) . ",$latdeltasize, $londeltasize,$key\n";
-				if ($kml) {
-					$time = min(array_keys($plans));
-					$plan = "";
-					if (is_array($plans[min(array_keys($plans)) ]->legs->leg)) {
-						foreach ($plans[min(array_keys($plans)) ]->legs->leg as $legNumber => $leg) {
-							$plan .= processLeg($legNumber, $leg).",";
-						}
-					}
-					else {
-						$plan .= processLeg(0, $plans[min(array_keys($plans)) ]->legs->leg);
-					}
-					$testRegions[] = Array(
-						"lat" => $i,
-						"lon" => $j,
-						"time" => $time,
-						"latdeltasize" => $latdeltasize,
-						"londeltasize" => $londeltasize,
-						"regionname" => $key,
-						"plan" => $plan . "
original plan" - ); - $regionTimes[] = $time; - } - } - flush(); - ob_flush(); - curl_close($ch); - } - } -} + ); + $request->metadata = Array( "i" => $i, "j" => $j, "key" => $key, "url" => $url); + $rc->add($request); + } + } +} +$rc->execute(); if ($kml) { - $colorSteps = 18; + $colorSteps = 9; //$minTime = min($regionTimes); //$maxTime = max($regionTimes); //$rangeTime = $maxTime - $minTime; //$deltaTime = $rangeTime / $colorSteps; - $Gradients = Gradient("66FF00", "FF0000", $colorSteps); + $Gradients = Gradient(strrev("66FF00") , strrev("FF0000") , $colorSteps); // KML is BGR not RGB so strrev foreach ($testRegions as $testRegion) { //$band = (floor(($testRegion[time] - $minTime) / $deltaTime)); - $band = (floor(($testRegion[time] / 10) *2)); + $band = (floor($testRegion[time] / 10)); if ($band > $colorSteps) $band = $colorSteps; echo " " . $testRegion['regionname'] . " time {$testRegion['time']} band $band - {$testRegion['plan']} + relativeToGround