--- a/displayHeatmap.php +++ b/displayHeatmap.php @@ -1,1 +1,95 @@ - +<?php + + +include('../lib/common.inc.php'); + +$year = 2006; +$ZeroX = 112.5; +$MaxX = 157; +$ZeroY = -9; +$MaxY = -45; + +$XRange = $MaxX - $ZeroX; +$YRange = abs($MaxY) - abs($ZeroY); +$xdivs = 250; +$xdivlength = $XRange / $xdivs; +$ydivs = 250; +$ydivheight = $YRange / $ydivs; + +$borderLeft = 100; +$borderTop = 35; +$width = 497; +$height = 457; +//echo "http://dev.openstreetmap.org/~pafciu17/?module=map&bbox=".$ZeroX.",".$ZeroY.",".$MaxX.",".$MaxY."&width=".$width."&height=".$height; +//$handle = ImageCreate ($width, $height) or die ("Cannot Create image"); +$handle = imagecreatefrompng('../images/australia.png'); +$white = imagecolorallocate($handle, 0, 0, 0); +imagecolortransparent($handle, $white); + +$query = "SELECT supplierPostcode, sum(value) as value, lat, lon FROM `contractnotice`,`postcodes` where childCN = 0 AND supplierCountry = 'Australia' AND YEAR(contractStart) >= '$year' AND supplierPostcode = postcode GROUP BY supplierPostcode"; +$result = mysql_query($query); + +$left = "FFFF50"; +$right= "EF0050"; +$leftR = hexdec(substr($left,0,2)); +$leftG = hexdec(substr($left,2,2)); +$leftB = hexdec(substr($left,4,2)); +$rightR = hexdec(substr($right,0,2)); +$rightG = hexdec(substr($right,2,2)); +$rightB = hexdec(substr($right,4,2)); +for($i=0;$i<250;$i++) { + $colorset[$i] = imagecolorallocatealpha($handle, $leftR + ($i*(($rightR-$leftR)/250)), $leftG + ($i*(($rightG-$leftG)/250)), $leftB + ($i*(($rightB-$leftB)/250)),117 - ($i/250)*40); +} + +while ($row = mysql_fetch_array($result, MYSQL_BOTH)) +{ + $xpage = round((($XRange - ($MaxX - $row['lon'])) / $xdivlength)); + if ($row['lat'] < -40.25) $row['lat']-= 0.75; + $ypage = round(($YRange - (abs($MaxY) - abs($row['lat']))) / $ydivheight); + @$pagevalues[$xpage][$ypage] += $row['value']; + //echo $ypage." ".$xpage."<br>"; +} + +$max = 0; +$min = 0; +for ($i = 0;$i < $xdivs; $i++ ) { + for ($j = 0;$j < $ydivs; $j++ ) { + if (@$pagevalues[$i][$j]) + { + if (@$pagevalues[$i][$j] > $max) $max = @$pagevalues[$i][$j]; + if ($min == 0 || @$pagevalues[$i][$j] < $min) $min = @$pagevalues[$i][$j]; + } else { + @$pagevalues[$i][$j] = ((@$pagevalues[$i][$j] + (@$pagevalues[$i+1][$j] + @$pagevalues[$i][$j+1] + + @$pagevalues[$i-1][$j] + @$pagevalues[$i][$j-1])/4) /2)-9; + @$pagevalues[$i-1][$j] = ((@$pagevalues[$i-1][$j] + (@$pagevalues[$i][$j] + @$pagevalues[$i-1][$j+1] + + @$pagevalues[$i-2][$j] + @$pagevalues[$i-1][$j-1])/4) /2)-9; + @$pagevalues[$i][$j-1] = ((@$pagevalues[$i][$j-1] + (@$pagevalues[$i+1][$j-1] + @$pagevalues[$i][$j] + + @$pagevalues[$i-1][$j-1] + @$pagevalues[$i][$j-2])/4) /2)-9; + } + } +} +//echo $max." ".$min; +//echo "<table width='100%'>"; +for ($i = 0;$i < $xdivs; $i++ ) { +// echo "<tr>"; + for ($j = 0; $j < $ydivs; $j++ ) { +// echo ("<td>". log10(@$pagevalues[$i][$j])/log10($max) ."</td>"); + if ((@$pagevalues[$i][$j]) > $min) { + $x = $i*($width/$xdivs); + $x1 = $borderLeft + $x -($width/$xdivs); + $x2 = $borderLeft + $x +($width/$xdivs); + $y = $j*($height/$ydivs); + $y1 = $borderTop + $y - ($height/$ydivs); + $y2 = $borderTop + $y + ($height/$ydivs); + imagefilledrectangle ($handle, $x1, $y1, $x2, $y2, $colorset[(int)((log10(@$pagevalues[$i][$j])/log10($max))*249)]); + } + } +//echo "</tr>"; +} +//echo "</table>" + +header ("Content-type: image/png"); +ImagePng ($handle); + + +?>