L'évolution des précipitations mensuelles au fils des années
Modérateurs : jturlier, Météo Villarzel
- PascalWMR
- Messages : 328
- Enregistré le : 16 févr. 2014, 09:28
- Localisation : CONFLANS EN JARNISY (F54800)
- Contact :
L'évolution des précipitations mensuelles au fils des années
Salut les amis
Tous comme pour l'évolution de la température moyenne mensuelle au fils des années, dont j'ai fait un tuto ,
voici l'évolution des précipitations mensuelles au fils des années.
Une légère adaptation du code des températures est nécessaire. Rien de bien compliqué .
A+
Pascal
Tous comme pour l'évolution de la température moyenne mensuelle au fils des années, dont j'ai fait un tuto ,
voici l'évolution des précipitations mensuelles au fils des années.
Une légère adaptation du code des températures est nécessaire. Rien de bien compliqué .
A+
Pascal
Modifié en dernier par PascalWMR le 10 mars 2019, 10:49, modifié 1 fois.
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Météo Conflans-en-Jarnisy
- Météo Villarzel
- Administrateur du site
- Messages : 524
- Enregistré le : 06 févr. 2014, 09:48
- Contact :
Re: L'évolution des précipitations mensuelles au fils des an
Salut Pascal,Une légère adaptation du code des températures est nécessaire. Rien de bien compliqué .
rien de compliqué, mais j'ai quand même mis 4 soirs pour comprendre
En fait je ne sais pas si j'ai fait tout juste, mais comme la température était prise sur une moyenne et la pluviométrie sur un total, pour les normales mensuelles j'ai créé un variable qui calcule le nombre d'années présentes dans le graphique en faisant
$Nans = $AnneeFin-$AnneeInit;
ensuite j'ai divisé la somme par $Nans
Bon il me semble que le résultat est correct
http://www.boock.ch/meteo/graphiques_ph ... eparan.php
A un moment j'ai cru devoir appeler à l'aide, mais je voulais quand même essayer d'arriver tous seul comme un grand
Encore merci pour cet excellent tuto
A+
- PascalWMR
- Messages : 328
- Enregistré le : 16 févr. 2014, 09:28
- Localisation : CONFLANS EN JARNISY (F54800)
- Contact :
Re: L'évolution des précipitations mensuelles au fils des an
Salut Pierre-André
Tu as raison c'est comme cela qu'il fallait raisonner . Cependant il y a un petit bémol .
J'avais aussi raisonné comme cela au début. Mais avec ce raisonnement, le problème est que le calcul est juste pour les mois déjà écoulés de l'année . Mais pour les mois non encore écoulés, le calcul est faux , car pour obtenir la moyenne tu divise par le nombre d'années présentes dans la BDD. Or pour les mois non encore écoulés, le diviseur doit être le nombre d'années présentent moins une.
Pour cela, il faut introduire deux nouvelles variables que j'ai appelé $MoisEnCours et $MoisExtrait[$i]. Dans la requête SQl, j’extrais le mois de recdateTZ, et dans la boucle while, je dis que si le mois extrait est supérieur au mois en cours, alors le diviseur est le nombre d'années -1, sinon le diviseur est égal au nombre d'années.
Ceci c'est pour le code du dernier graphique, celui des courbes de comparaison des normales.
Dans la partie Initialisation des années de début et de fin, j'initialise également le mois en cours en utilisant la fonction PHP date("m") comme ceci
$MoisEnCours=date("m");
Pour la partie extraction des données, ça donne ça:
Pour les graphiques mensuels, juste après la partie détermination du nom des séries à encoder, il faut rajouter ceci
Ici on ne compare plus $MoisExtrait[$i] mais $mois.
Bon tout ça c'est bien joli mais cette solution ne fonctionne que si l'enregistrement des données a commencé le 1er janvier de la première année .
Je me suis aperçu de ce problème car j'ai fait les même graphiques pour les heures d'ensoleillement. Or mes enregistrements commencent un 1er octobre.
Il faut donc indiquer à tout le schmilblic calculateur que pour les mois qui précèdent le premier enregistrement il y a donc une année de mois à diviser
Il faut donc rajouter une condition if .
Et ça donne donc ça pour le premier code
Le nombre 10 auquel on compare $MoisExtrait[$i] est tout simplement le mois ou commence l'enregistrement des données.
Et ça pour le deuxième
Bon j'ai pas encore mis les graphiques d'ensoleillement en ligne car comme je suis un peu pointilleux, je n'aime pas l'affichage des heures avec des décimales. J'ai une fonction qui convertis les heures décimales en heures et minutes.
Mais je bloque sur un problème. L'affichage dans le tooltip ne veux pas marcher.
Ca fonctionne avec un tooltip défini par une fonction JS mais pas avec le tooltip HTML. Mai je vais trouver. C'est quand même pas de code qui va me faire c....
A+
Pascal
Tu as raison c'est comme cela qu'il fallait raisonner . Cependant il y a un petit bémol .
J'avais aussi raisonné comme cela au début. Mais avec ce raisonnement, le problème est que le calcul est juste pour les mois déjà écoulés de l'année . Mais pour les mois non encore écoulés, le calcul est faux , car pour obtenir la moyenne tu divise par le nombre d'années présentes dans la BDD. Or pour les mois non encore écoulés, le diviseur doit être le nombre d'années présentent moins une.
Pour cela, il faut introduire deux nouvelles variables que j'ai appelé $MoisEnCours et $MoisExtrait[$i]. Dans la requête SQl, j’extrais le mois de recdateTZ, et dans la boucle while, je dis que si le mois extrait est supérieur au mois en cours, alors le diviseur est le nombre d'années -1, sinon le diviseur est égal au nombre d'années.
Ceci c'est pour le code du dernier graphique, celui des courbes de comparaison des normales.
Dans la partie Initialisation des années de début et de fin, j'initialise également le mois en cours en utilisant la fonction PHP date("m") comme ceci
$MoisEnCours=date("m");
Pour la partie extraction des données, ça donne ça:
Code : Tout sélectionner
$sql1="SELECT SUBSTR(recdateTZ,5,2) AS Mois, SUM(Rain_jour) AS NormPluieMoy FROM MiniMaxidata GROUP BY Mois";
$query = mysqli_query($conn,$sql1);
$i=0;
while ($list = mysqli_fetch_assoc($query)) {
$MoisExtrait[$i]=$list['Mois'];
if ($MoisExtrait[$i] > $MoisEnCours){
$Diviseur= $NbAnnee-1;}
else {$Diviseur= $NbAnnee;}
//echo $MoisEnCours . ' --> '. $MoisExtrait[$i]. ' : ' .$Diviseur .'<br>';
$NormStation[$i]=$list['NormPluieMoy']/$Diviseur;
$NormMF[$i]=$NormaleMF[$i+1];
$EcartNorm[$i]=$NormStation[$i]-$NormMF[$i];
$i++;
}
Code : Tout sélectionner
// Détermination du diviseur (nb années de calcul)
if ($mois > $MoisEnCours){
$Diviseur = $NbAnnee-1;}
else {$Diviseur= $NbAnnee;}
Bon tout ça c'est bien joli mais cette solution ne fonctionne que si l'enregistrement des données a commencé le 1er janvier de la première année .
Je me suis aperçu de ce problème car j'ai fait les même graphiques pour les heures d'ensoleillement. Or mes enregistrements commencent un 1er octobre.
Il faut donc indiquer à tout le schmilblic calculateur que pour les mois qui précèdent le premier enregistrement il y a donc une année de mois à diviser
Il faut donc rajouter une condition if .
Et ça donne donc ça pour le premier code
Code : Tout sélectionner
$sql1="SELECT SUBSTR(recdateTZ,5,2) AS Mois, SUM(h_soleil_jour) AS NormSoleil FROM sundata GROUP BY Mois";
$query = mysqli_query($conn,$sql1);
$i=0;
while ($list = mysqli_fetch_assoc($query)) {
$MoisExtrait[$i]=$list['Mois'];
if ($MoisExtrait[$i] < 10){
$NbAnnee = $AnneeFin-$AnneeInit-1;}
else {$NbAnnee= $AnneeFin-$AnneeInit;}
if ($MoisExtrait[$i] > $MoisEnCours) {
$Diviseur= $NbAnnee-1;}
else {$Diviseur= $NbAnnee;}
//echo $MoisEnCours . ' --> '. $MoisExtrait[$i]. ' : ' .$Diviseur .'<br>';
$NormStation[$i]=$list['NormSoleil']/$Diviseur;
$NormMF[$i]=$NormaleMF[$i+1];
$EcartNorm[$i]=$NormStation[$i]-$NormMF[$i];
$i++;
}
Et ça pour le deuxième
Code : Tout sélectionner
// Détermination du diviseur (nb années de calcul)
if ($mois < 10){
$NbAnnee = $AnneeFin-$AnneeInit-1;}
else {$NbAnnee= $AnneeFin-$AnneeInit;}
if ($mois > $MoisEnCours) {
$Diviseur= $NbAnnee-1;}
else {$Diviseur= $NbAnnee;}
Mais je bloque sur un problème. L'affichage dans le tooltip ne veux pas marcher.
Ca fonctionne avec un tooltip défini par une fonction JS mais pas avec le tooltip HTML. Mai je vais trouver. C'est quand même pas de code qui va me faire c....
A+
Pascal
Modifié en dernier par PascalWMR le 05 mars 2016, 08:15, modifié 2 fois.
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Météo Conflans-en-Jarnisy
- Météo Villarzel
- Administrateur du site
- Messages : 524
- Enregistré le : 06 févr. 2014, 09:48
- Contact :
Re: L'évolution des précipitations mensuelles au fils des an
Et moi qui était fier d'avoir trouvé ça
J'ai encore du chemin à faire.
A+
J'ai encore du chemin à faire.
A+
- PascalWMR
- Messages : 328
- Enregistré le : 16 févr. 2014, 09:28
- Localisation : CONFLANS EN JARNISY (F54800)
- Contact :
Re: L'évolution des précipitations mensuelles au fils des an
Bonjour tous le monde
J'ai créé un fonction supplémentaire dans le fichier statevolutiontempmois.js qui convertis les heures décimale en heures et minutes. La voici
J'ai également créé son équivalent en PHP car sur mon graphique de comparaison des normales, l'écart entre les totaux mensuels et le total annuel étant trop important, ça écrasait les courbes mensuelles.
La dernière colonne Année qui apparaissait sur le graphique des températures n'apparait plus sur les graphiques pluie et soleil. Cependant, ces données apparaissent dans la div d'info sous le graphique.
Voici le résultat pour les heures d'ensoleillement
https://www.monsite-meteo.eu/Page/stats ... lparan.php
En fin de compte, ça n'est pas documenter dans la doc Highcharts, a moins que je ne l'ai pas trouvé, mais on peut très bien insérer du HTML dans la fonction formatter: et en particulier les balises <table> <tr> et <td>
Par contre, je n'ai pas réussi à insérer l'appel d'une fonction javascript dans le code HTML du tooltip
Pour cela, dans le code du tooltip, à la place de headerFormat, pointFormat et footerFormat il suffit de mettre ceci
Dans le code php, il faut supprimer les lignes qui inséraient une série de données de valeur NULL et faire suivre par ça
Pour afficher le résultat dans la div, il suffit simplement de faire appel à un <?php echo $NormMFTotal ?>, <?php echo $NormStationTotal ?> et <?php echo $EcartNormTotal ?>
A+
Pascal
Je te le disait Pierre-André. Çà allait pas mes les ... bien longtempsPascalWMR a écrit :
Bon j'ai pas encore mis les graphiques d'ensoleillement en ligne car comme je suis un peu pointilleux, je n'aime pas l'affichage des heures avec des décimales. J'ai une fonction qui convertis les heures décimales en heures et minutes.
Mais je bloque sur un problème. L'affichage dans le tooltip ne veux pas marcher.
Ca fonctionne avec un tooltip défini par une fonction JS mais pas avec le tooltip HTML. Mai je vais trouver. C'est quand même pas de code qui va me faire c....
J'ai créé un fonction supplémentaire dans le fichier statevolutiontempmois.js qui convertis les heures décimale en heures et minutes. La voici
Code : Tout sélectionner
function customtimetooltip(pointy) {
var heure = pointy - pointy%1;
var minute = Math.floor(Math.abs(pointy%1)*60);
if (minute < 10) {
minute = '0'+minute};
pointy = heure + ' h ' + minute + ' mn '
return pointy;
}
La dernière colonne Année qui apparaissait sur le graphique des températures n'apparait plus sur les graphiques pluie et soleil. Cependant, ces données apparaissent dans la div d'info sous le graphique.
Voici le résultat pour les heures d'ensoleillement
https://www.monsite-meteo.eu/Page/stats ... lparan.php
En fin de compte, ça n'est pas documenter dans la doc Highcharts, a moins que je ne l'ai pas trouvé, mais on peut très bien insérer du HTML dans la fonction formatter: et en particulier les balises <table> <tr> et <td>
Par contre, je n'ai pas réussi à insérer l'appel d'une fonction javascript dans le code HTML du tooltip
Pour cela, dans le code du tooltip, à la place de headerFormat, pointFormat et footerFormat il suffit de mettre ceci
Code : Tout sélectionner
formatter: function() {
var s = '<span style="color:#FF0000; text-shadow:#900; font-size:14px"><b>' + this.x + '</b></span><table width="270px" style="border-top:ridge; font-size:12px">';
$.each(this.points, function(i, point) {
s = s + '<tr><td style="color:#0099FF">' + point.series.name + '</td><td style="text-align: center"><b>:</td>'
s = s + '<td style="text-align: right"><b>' + customtimetooltip(point.y)+ '</b></td></tr>'
});
s = s +'</table>'
return s;
},
Code : Tout sélectionner
// Requête pour récupérer les heures d'ensoleillement moyenne totale de la BDD
$sql2="SELECT SUM(h_soleil_jour) AS SoleilTotal FROM sundata";
$query = mysqli_query($conn,$sql2);
$list = mysqli_fetch_assoc($query);
$NST=$list['SoleilTotal']/($NbMois/12);
$heure = (int)$NST;
$minute = round(($NST - $heure) * 60,0);
$NormStationTotal= $heure.' h '.$minute.' mn';
$NMFT=$NormaleMF[13];
$heure = (int)$NMFT;
$minute = round(($NMFT - $heure) * 60,0);
$NormMFTotal=$heure.' h '.$minute.' mn';
$ENT=$NST-$NMFT;
$heure = (int)$ENT;
$minute = round(($ENT - $heure) * 60,0);
if ($minute < 0) {$minute=$minute*-1;}
$EcartNormTotal=$heure.' h '.$minute.' mn';
A+
Pascal
Modifié en dernier par PascalWMR le 10 mars 2019, 10:50, modifié 1 fois.
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Météo Conflans-en-Jarnisy
-
- Messages : 263
- Enregistré le : 15 févr. 2014, 09:23
- Localisation : San Sebastián, España
- Contact :
Re: L'évolution des précipitations mensuelles au fils des an
J'ai essayé d'obtenir le graphique "statpluiemensuelleparan.php" , mais je n'ai pas:
http://kocher.es/meteotemplate/plugins/ ... eparan.php
J'ai décidé de demander de l'aide
http://kocher.es/meteotemplate/plugins/ ... eparan.php
J'ai décidé de demander de l'aide
Davis Vantage Pro2 +, Windows 10, Windows 7 (64), Graphweather 3.0.15, Weatherlink 6.0.3, template Pierre-André, template Jachym
- PascalWMR
- Messages : 328
- Enregistré le : 16 févr. 2014, 09:28
- Localisation : CONFLANS EN JARNISY (F54800)
- Contact :
Re: L'évolution des précipitations mensuelles au fils des an
Bonjour Javier
Regarde bien le topic 1560
Pour les précipitations, il ne s'agit plus de faire des moyennes. Il faut faire des totaux et pour la moyenne du mois il faut diviser le total par le nombre d'années.
J'ai mis des morceaux de code qui faut mettre à la place du code des températures.
Il y a également des variables à ajouter $MoisEnCours ,$MoisExtrait[$i]. Il faut aussi créer et calculer une variable $Diviseur
De plus Javier comme tes enregistrements ne commencent pas le 1er janvier 2012 , il faut appliquer la solution que j'ai trouvé pour les graphiques solaire.
Bon courage
Pascal
Ou est-ce que tu bloque.Javier a écrit :J'ai essayé d'obtenir le graphique "statpluiemensuelleparan.php" , mais je n'ai pas:
http://kocher.es/meteotemplate/plugins/ ... eparan.php
J'ai décidé de demander de l'aide
Regarde bien le topic 1560
Pour les précipitations, il ne s'agit plus de faire des moyennes. Il faut faire des totaux et pour la moyenne du mois il faut diviser le total par le nombre d'années.
J'ai mis des morceaux de code qui faut mettre à la place du code des températures.
Il y a également des variables à ajouter $MoisEnCours ,$MoisExtrait[$i]. Il faut aussi créer et calculer une variable $Diviseur
De plus Javier comme tes enregistrements ne commencent pas le 1er janvier 2012 , il faut appliquer la solution que j'ai trouvé pour les graphiques solaire.
Bon courage
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Météo Conflans-en-Jarnisy
-
- Messages : 263
- Enregistré le : 15 févr. 2014, 09:23
- Localisation : San Sebastián, España
- Contact :
Re: L'évolution des précipitations mensuelles au fils des an
J'ai essayé d'appliquer ces critères, mais, pour moi, est facile, beaucoup très facile de rater. .PascalWMR a écrit :Bonjour Javier
Ou est-ce que tu bloque.Javier a écrit :J'ai essayé d'obtenir le graphique "statpluiemensuelleparan.php" , mais je n'ai pas:
http://kocher.es/meteotemplate/plugins/ ... eparan.php
J'ai décidé de demander de l'aide
Regarde bien le topic 1560
Pour les précipitations, il ne s'agit plus de faire des moyennes. Il faut faire des totaux et pour la moyenne du mois il faut diviser le total par le nombre d'années.
J'ai mis des morceaux de code qui faut mettre à la place du code des températures.
Il y a également des variables à ajouter $MoisEnCours ,$MoisExtrait[$i]. Il faut aussi créer et calculer une variable $Diviseur
De plus Javier comme tes enregistrements ne commencent pas le 1er janvier 2012 , il faut appliquer la solution que j'ai trouvé pour les graphiques solaire.
Bon courage
Pascal
Voici mon code PHP:
Code : Tout sélectionner
<?php
// appel du script de connexion
require("../../../graficos-highcharts/mysqli_connect2.php");
// Détermination des normales Fuenterrabia (Aeropuerto) 1981-2010
$NormaleMF[1]=141;
$NormaleMF[2]=110;
$NormaleMF[3]=113;
$NormaleMF[4]=138;
$NormaleMF[5]=120;
$NormaleMF[6]=90;
$NormaleMF[7]=86;
$NormaleMF[8]=117;
$NormaleMF[9]=111;
$NormaleMF[10]=159;
$NormaleMF[11]=169;
$NormaleMF[12]=151;
$NormaleMF[13]=1507;
// Calcul de la variable indiquant le nombre de mois de collecte des données
$sql="SELECT SUBSTR(recdateTZ,1,6) AS AnMois FROM MiniMaxidata GROUP BY AnMois";
$query = mysqli_query($conn,$sql);
$NbMois = mysqli_num_rows($query);
// Initialisation des années de début et de fin
$sql="SELECT MIN(SUBSTR(recdateTZ,1,4)) AS AnneeInit FROM MiniMaxidata";
$query = mysqli_query($conn,$sql);
$list = mysqli_fetch_assoc($query);
$AnneeInit=$list['AnneeInit']*1;
$AnneeFin = date("Y")+1;
$MoisEnCours=date("m");
// ----------------------------- Début code graphique Comparaison des normales --------------------------------
// code pour le tab d'évolution des normales (avec récupération de la Normale Station)
//Requête pour récupérer la pluie totale moyenne de chaque mois sur la totalité de la BDD
$sql1="SELECT SUBSTR(recdateTZ,5,2) AS Mois, SUM(Rain_jour) AS NormtPluie' FROM sundata GROUP BY Mois";
$query = mysqli_query($conn,$sql1);
$i=0;
while ($list = mysqli_fetch_assoc($query)) {
$MoisExtrait[$i]=$list['Mois'];
if ($MoisExtrait[$i] < 3){
$NbAnnee = $AnneeFin-$AnneeInit-1;}
else {$NbAnnee= $AnneeFin-$AnneeInit;}
if ($MoisExtrait[$i] > $MoisEnCours) {
$Diviseur= $NbAnnee-1;}
else {$Diviseur= $NbAnnee;}
//echo $MoisEnCours . ' --> '. $MoisExtrait[$i]. ' : ' .$Diviseur .'<br>';
$NormStation[$i]=$list['NormtPluie']/$Diviseur;
$NormMF[$i]=$NormaleMF[$i+1];
$EcartNorm[$i]=$NormStation[$i]-$NormMF[$i];
$i++;
}
// On force une série de variables à avoir la valeur NULL pour sauter une colone dans le graphique
$NormStation[$i]=NULL;
$NormMF[$i]=NULL;
$EcartNorm[$i]=NULL;
$i=$i+1;
// Requête pour récupérer la pluie moyenne totale de la BDD
$sql2="SELECT SUM(Rain_jour) AS PluieMoyTotal FROM MiniMaxidata";
$query = mysqli_query($conn,$sql2);
$list = mysqli_fetch_assoc($query);
$NormStation[$i]=$list['PluieMoyTotal']*1;
$NormMF[$i]=$NormaleMF[$i];
$EcartNorm[$i]=$NormStation[$i]-$NormMF[$i];
// Détermination du diviseur (nb années de calcul)
if ($mois < 3){
$NbAnnee = $AnneeFin-$AnneeInit-1;}
else {$NbAnnee= $AnneeFin-$AnneeInit;}
if ($mois > $MoisEnCours) {
$Diviseur= $NbAnnee-1;}
else {$Diviseur= $NbAnnee;}
// ----------------------------- Fin code graphique Comparaison des normales --------------------------------
// ----------------------------- Début code graphique de chaque mois --------------------------------
// Recupération des Pluviométrie moyennes de chaque année pour chaque mois
for ($mois=1 ; $mois<13 ; $mois++){
// Détermine le nom des séries encodées en json qui servira au paramètre data des graphiques Highcharts
$SeriePluieExtMoy='PluieExtMoy'.$mois;
$SerieNormaleMF='NormaleMF'.$mois;
$SerieEcart='Ecart'.$mois;
$SerieEcartANS='EcartANS'.$mois;
$SerieAnnee='Annee'.$mois;
// Détermination du diviseur (nb années de calcul)
if ($mois < 3){
$NbAnnee = $AnneeFin-$AnneeInit-1;}
else {$NbAnnee= $AnneeFin-$AnneeInit;}
if ($mois > $MoisEnCours) {
$Diviseur= $NbAnnee-1;}
else {$Diviseur= $NbAnnee;}
// Récupération des données proprement dites dans la BDD
$i=0;
for ($an=$AnneeInit ; $an < $AnneeFin; $an++){
$sql3="SELECT SUBSTR(recdateTZ,5,2) AS Mois, SUBSTR(recdateTZ,1,4) AS Annee, SUM(Rain_jour) AS PluieMoy FROM MiniMaxidata WHERE SUBSTR(recdateTZ,5,2)=$mois AND SUBSTR(recdateTZ,1,4)=$an";
$query = mysqli_query($conn,$sql3);
$list = mysqli_fetch_assoc($query);
$MoisSql3 = $list['Mois'];
if (isset($MoisSql3)){
$Annee[$i]=$an;
$PluieMoy[$i]=$list['PluieMoy']*1;
$NMF[$i]=$NormaleMF[$mois];
$Ecart[$i]=$PluieMoy[$i]-$NMF[$i];
$EcartANS[$i]=$PluieMoy[$i]- $NormStation[$mois-1];
$i++;
}
else {
$Annee[$i]= $an;
$PluieMoy[$i]=NULL ;
$NMF[$i]=NULL ;
$Ecart[$i]=NULL ;
$EcartANS[$i]=NULL;
$i++;
}
}
// Calcul de la Pluviométrie moyenne totale pour chaque mois (normale de la station) affichée dans la dernière colonne du graphique
$sql4="SELECT SUBSTR(recdateTZ,5,2) AS Mois, SUM(Rain_jour) AS PluieMoyMois, ROUND(AVG(Rain_jour),1) as avgPluie FROM MiniMaxidata WHERE SUBSTR(recdateTZ,5,2)= $mois";
$query = mysqli_query($conn,$sql4);
$list = mysqli_fetch_assoc($query);
$Annee[$i]='Normale<br>station';
$PluieMoy[$i]=$list['PluieMoyMois']*1;
$NMF[$i]=$NormaleMF[$mois];
$Ecart[$i]=$PluieMoy[$i]-$NMF[$i];
$EcartANS[$i]=NULL;
?>
<script type="text/javascript">
eval(<?php echo "'var $SeriePluieExtMoy = ".json_encode($PluieMoy)."'" ?>);
eval(<?php echo "'var $SerieAnnee = ".json_encode($Annee)."'" ?>);
eval(<?php echo "'var $SerieNormaleMF = ".json_encode($NMF)."'" ?>);
eval(<?php echo "'var $SerieEcart = ".json_encode($Ecart)."'" ?>);
eval(<?php echo "'var $SerieEcartANS = ".json_encode($EcartANS)."'" ?>);
</script>
<?php
}
Modifié en dernier par Javier le 10 avr. 2017, 14:01, modifié 1 fois.
Davis Vantage Pro2 +, Windows 10, Windows 7 (64), Graphweather 3.0.15, Weatherlink 6.0.3, template Pierre-André, template Jachym
-
- Messages : 263
- Enregistré le : 15 févr. 2014, 09:23
- Localisation : San Sebastián, España
- Contact :
Re: L'évolution des précipitations mensuelles au fils des an
Merci à ton aide, il semble que les données "Station normale" sont maintenant correctes.
L'erreur que je faisais était de ne pas avoir divisé par $Diviseur:
Le dernier problème est dans l'onglet de données "Comparaison de la normale"
http://kocher.es/meteotemplate/plugins/ ... eparan.php
L'erreur que je faisais était de ne pas avoir divisé par $Diviseur:
Code : Tout sélectionner
$NormStation[$i]=$list['PluieMoyTotal']/$Diviseur*1;
http://kocher.es/meteotemplate/plugins/ ... eparan.php
Davis Vantage Pro2 +, Windows 10, Windows 7 (64), Graphweather 3.0.15, Weatherlink 6.0.3, template Pierre-André, template Jachym
- PascalWMR
- Messages : 328
- Enregistré le : 16 févr. 2014, 09:28
- Localisation : CONFLANS EN JARNISY (F54800)
- Contact :
Re: L'évolution des précipitations mensuelles au fils des an
Salut Javier
Grosse erreur dans ton code
$sql1="SELECT SUBSTR(recdateTZ,5,2) AS Mois, SUM(Rain_jour) AS NormtPluie' FROM sundata GROUP BY Mois";
MiniMaxidata serait peut être mieux
Après $sql2, il n'est nul besoin de remettre le code de détermination du diviseur.
Pour calculer $NormStation[$i]
$list['PluiMoyTotal']/($NbMois/12); est quand même mieux que $list['PluieMoyTotal']*1;
idem pour $sql4
ROUND(AVG(Rain_jour),1) as avgPluie n'a rien à faire ici; Doit être supprimé
enfin
$PluieMoy[$i]=$list['PluieMoyMois']/$Diviseur;
c'est quand même mieux que
$PluieMoy[$i]=$list['PluieMoyMois']*1;
Bon allez voici le bon code
Attention, j'ai désactivé le code qui insère une colonne nulle car dans le graphique de comparaison des normales, la normale annuelle n'est plus affichée sur le graphique mais dans les div d'explication sous les graphiques.
J'ai fait cela car la valeur de la normale annuelle étant beaucoup plus importante que les mensuelles, cela aplatissait la courbe mensuelle.
Voici donc ci-dessous le code html pour afficher cela dans les div d'info sous les graphiques.
Voila
A+
Pascal
Grosse erreur dans ton code
$sql1="SELECT SUBSTR(recdateTZ,5,2) AS Mois, SUM(Rain_jour) AS NormtPluie' FROM sundata GROUP BY Mois";
MiniMaxidata serait peut être mieux
Après $sql2, il n'est nul besoin de remettre le code de détermination du diviseur.
Pour calculer $NormStation[$i]
$list['PluiMoyTotal']/($NbMois/12); est quand même mieux que $list['PluieMoyTotal']*1;
idem pour $sql4
ROUND(AVG(Rain_jour),1) as avgPluie n'a rien à faire ici; Doit être supprimé
enfin
$PluieMoy[$i]=$list['PluieMoyMois']/$Diviseur;
c'est quand même mieux que
$PluieMoy[$i]=$list['PluieMoyMois']*1;
Bon allez voici le bon code
Code : Tout sélectionner
<?php
// appel du script de connexion
require("../Scripts/mysqli_connect.php");
// Détermination des normales Météo France
$NormaleMF[1]=64.2;
$NormaleMF[2]=56.9;
$NormaleMF[3]=61.3;
$NormaleMF[4]=50.5;
$NormaleMF[5]=58.9;
$NormaleMF[6]=61.7;
$NormaleMF[7]=63.7;
$NormaleMF[8]=60.8;
$NormaleMF[9]=62.7;
$NormaleMF[10]=71.8;
$NormaleMF[11]=64;
$NormaleMF[12]=78.8;
$NormaleMF[13]=755.3;
// Calcul de la variable indiquant le nombre de mois de collecte des données
$sql="SELECT SUBSTR(recdateTZ,1,6) AS AnMois FROM MiniMaxidata GROUP BY AnMois";
$query = mysqli_query($conn,$sql);
$NbMois = mysqli_num_rows($query);
// Initialisation des années de début et de fin
$sql="SELECT MIN(SUBSTR(recdateTZ,1,4)) AS AnneeInit FROM MiniMaxidata";
$query = mysqli_query($conn,$sql);
$list = mysqli_fetch_assoc($query);
$AnneeInit=$list['AnneeInit']*1;
$AnneeFin = date("Y")+1;
$NbAnnee= $AnneeFin-$AnneeInit;
$MoisEnCours=date("m");
// ----------------------------- Début code graphique Comparaison des normales --------------------------------
// code pour le tab d'évolution des normales (avec récupération de la Normale Station)
//Requête pour récupérer les précipitations totale de chaque mois sur la totalité de la BDD
$sql1="SELECT SUBSTR(recdateTZ,5,2) AS Mois, SUM(Rain_jour) AS NormPluieMoy FROM MiniMaxidata GROUP BY Mois";
$query = mysqli_query($conn,$sql1);
$i=0;
while ($list = mysqli_fetch_assoc($query)) {
$MoisExtrait[$i]=$list['Mois'];
if ($MoisExtrait[$i] < 3){
$NbAnnee = $AnneeFin-$AnneeInit-1;}
else {$NbAnnee= $AnneeFin-$AnneeInit;}
if ($MoisExtrait[$i] > $MoisEnCours) {
$Diviseur= $NbAnnee-1;}
else {$Diviseur= $NbAnnee;}
//echo $MoisEnCours . ' --> '. $MoisExtrait[$i]. ' : ' .$Diviseur .'<br>';
$NormStation[$i]=$list['NormPluieMoy']/$Diviseur;
$NormMF[$i]=$NormaleMF[$i+1];
$EcartNorm[$i]=$NormStation[$i]-$NormMF[$i];
$i++;
}
// // On force une série de variables à avoir la valeur NULL pour sauter une colone dans le graphique
// $NormStation[$i]=NULL;
// $NormMF[$i]=NULL;
// $EcartNorm[$i]=NULL;
// Requête pour récupérer les précipitations moyenne totale de la BDD
$sql2="SELECT SUM(Rain_jour) AS PluiMoyTotal FROM MiniMaxidata";
$query = mysqli_query($conn,$sql2);
$list = mysqli_fetch_assoc($query);
$NormStationTotal=$list['PluiMoyTotal']/($NbMois/12);
$NormMFTotal=$NormaleMF[13];
$EcartNormTotal=$NormStationTotal-$NormMFTotal;
// ----------------------------- Fin code graphique Comparaison des normales --------------------------------
// ----------------------------- Début code graphique de chaque mois --------------------------------
// Recupération des températures moyennes de chaque année pour chaque mois
for ($mois=1 ; $mois<13 ; $mois++){
// Détermine le nom des séries encodées en json qui servira au paramètre data des graphiques Highcharts
$SeriePluieMoy='PluieMoy'.$mois;
$SerieNormaleMF='NormaleMF'.$mois;
$SerieEcart='Ecart'.$mois;
$SerieEcartANS='EcartANS'.$mois;
$SerieAnnee='Annee'.$mois;
// Détermination du diviseur (nb années de calcul)
if ($mois < 3){
$NbAnnee = $AnneeFin-$AnneeInit-1;}
else {$NbAnnee= $AnneeFin-$AnneeInit;}
if ($mois > $MoisEnCours) {
$Diviseur= $NbAnnee-1;}
else {$Diviseur= $NbAnnee;}
// Récupération des données proprement dites dans la BDD
$i=0;
for ($an=$AnneeInit ; $an < $AnneeFin; $an++){
$sql3="SELECT SUBSTR(recdateTZ,5,2) AS Mois, SUBSTR(recdateTZ,1,4) AS Annee, SUM(Rain_jour) AS PluieMoy FROM MiniMaxidata WHERE SUBSTR(recdateTZ,5,2)=$mois AND SUBSTR(recdateTZ,1,4)=$an";
$query = mysqli_query($conn,$sql3);
$list = mysqli_fetch_assoc($query);
$MoisSql3 = $list['Mois'];
if (isset($MoisSql3)){
$Annee[$i]=$an;
$PluieMoy[$i]=$list['PluieMoy']*1;
$NMF[$i]=$NormaleMF[$mois];
$Ecart[$i]=$PluieMoy[$i]-$NMF[$i];
$EcartANS[$i]=$PluieMoy[$i]- $NormStation[$mois-1];
$i++;
}
else {
$Annee[$i]= $an;
$PluieMoy[$i]=NULL ;
$NMF[$i]=NULL ;
$Ecart[$i]=NULL ;
$EcartANS[$i]=NULL;
$i++;
}
}
// Calcul de la température moyenne totale pour chaque mois (normale de la station) affichée dans la dernière colonne du graphique
$sql4="SELECT SUBSTR(recdateTZ,5,2) AS Mois, SUM(Rain_jour) AS PluieMoyMois FROM MiniMaxidata WHERE SUBSTR(recdateTZ,5,2)= $mois";
$query = mysqli_query($conn,$sql4);
$list = mysqli_fetch_assoc($query);
$Annee[$i]='Normale<br>station';
$PluieMoy[$i]=$list['PluieMoyMois']/$Diviseur;
$NMF[$i]=$NormaleMF[$mois];
$Ecart[$i]=$PluieMoy[$i]-$NMF[$i];
$EcartANS[$i]=NULL;
?>
<script type="text/javascript">
eval(<?php echo "'var $SeriePluieMoy = ".json_encode($PluieMoy)."'" ?>);
eval(<?php echo "'var $SerieAnnee = ".json_encode($Annee)."'" ?>);
eval(<?php echo "'var $SerieNormaleMF = ".json_encode($NMF)."'" ?>);
eval(<?php echo "'var $SerieEcart = ".json_encode($Ecart)."'" ?>);
eval(<?php echo "'var $SerieEcartANS = ".json_encode($EcartANS)."'" ?>);
</script>
<?php
J'ai fait cela car la valeur de la normale annuelle étant beaucoup plus importante que les mensuelles, cela aplatissait la courbe mensuelle.
Voici donc ci-dessous le code html pour afficher cela dans les div d'info sous les graphiques.
Code : Tout sélectionner
<div id="explic1" class="legende_div_avec_normales" style="width:1060px">La valeur <span class="extreme_mini">Précipitations</span> de la colonne de droite intitulée <span class="extreme_maxi">Normale station</span> représente la “Normale mensuelle” pour la station, calculée à partir des données recueillies par la station depuis <?php echo $NbMois ?> mois.
<br><br>
Les normales Météo France utilisées dans ce graphique, proviennent de la station Météo France la plus proche de Conflans en Jarnisy,<br>
soit la station de Metz Marly Frescaty.</div>
<div id="explic2" class="legende_div_avec_normales" style="width:1060px; display:none">
La valeur de la <span class="extreme_maxi">Normale Station</span>, est calculée à partir des données recueillies par la station depuis <?php echo $NbMois ?> mois.<br><br>
La normale annuelle Météo France est de <span class="texte_dans_tableau_vert"><?php echo number_format($NormMFTotal,2) ?> mm</span>; La normale de la station est de <span class="texte_dans_tableau_rouge"><?php echo number_format($NormStationTotal,2) ?> mm</span>. L'écart entre les deux est de <span class="sous_titre_4"><?php echo number_format($EcartNormTotal,2) ?> mm</span>.<br><br>
Les normales Météo France utilisées dans ce graphique, proviennent de la station Météo France la plus proche de Conflans en Jarnisy,<br>
soit la station de Metz Marly Frescaty.</div>
A+
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Météo Conflans-en-Jarnisy