<?
/* variables d'entrée: $date: jour de la mesure: format 21.6.2011 $lat : latitude entre 30 et 60 pour l'europe $lon : longitude: 0=Greenwich, 2.3=Paris, 8.5=Zurich...
Exemple d'appel: http://localhost/soleil.php?date=17.6.2011&lat=48&lon=2.6
*/ function c($r,$v=-1,$b=-1) { //fonction pour le calcule de la couleur d'affichage if ($v==-1) { $v=$r; $b=$r; } return $r*65536+$v*256+$r; }
header("Content-Type: image/png"); $im = @imagecreatetruecolor(600, 400);
// Création du cadre et du libellé imagefill($im,1,1,c(255)); imagerectangle ($im,0,0,599,399,c(0)); imagestring($im, 3, 5, 5, 'Angle du soleil le '.$date.', Latitude:'.$lat.'°N', c(0));
// calcule du jour de l'année $dt=explode('.',$date); $jd=(gregoriantojd ($dt[1],$dt[0],$dt[2])-gregoriantojd (1,1,$dt[2]))-79; // en jour julien
// calcule de la déclinaison (angle du soleil par rapport a l'équateur) en fonction du jour $dec=deg2rad(23.45*sin(deg2rad(0.986*$jd)));
$lat=deg2rad($lat); // conversion de la latitude en radiant
// Libellé axe Y de 10 à 70° pour l'angle du soleil for ($i=1; $i<8; $i++) { imageline($im,0,400-$i*50, 600,400-$i*50,c(128)); imageline($im,0,400-$i*50+25, 600,400-$i*50+25,c(224)); imagestring($im, 2, 5, 400-$i*50, round($i*10).'°', c(0)); }
// Libellé axe X pour les heures (entre 6h et 17h heure solaire) for ($h=0; $h<12; $h+=1) { $rh=$h+$lon*0.0666666666666; imageline($im,$rh*50,30,$rh*50,400,c(128)); imageline($im,$rh*50+25,30,$rh*50+25,400,c(224)); imagestring($im, 2, $rh*50+2,385, round($h+6+2).'h', c(0)); }
// Calcule et affichage des angles en fonction de l'heure et du lieu $dls=1; // 1 pour heure d'été, 0 pour heure d'hiver for ($h=6; $h<18; $h+=0.01) { $ah=deg2rad(($h-6)*15-90); // calcule angle horaire $as=rad2deg(asin(cos($lat)*cos($dec)*cos($ah)+sin($dec)*sin($lat))); // calcule angle du soleil avec l'horizontale du lieu imagerectangle($im, ($h-6)*50, 400-$as*5,($h-6)*50+$dls, 400-$as*5, c(0)); // affichage de la valeur sur le graph. }
imagepng($im); imagedestroy($im);
?> |