--- 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>"; + +?> +