Good colorscheme for trip planner tester
[busui.git] / labs / tripPlannerTester.kml.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
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>";
 
?>