| 12
 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
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 
 | <?php
	//-----------------------------------------------------------------------------//
	// Fonction permettant un calcul 3d entre 2 points GPS-------------------------//
	//-----------------------------------------------------------------------------//
 
	function distance($lat1, $lon1, $lat2, $lon2, $alt1, $alt2) 
	{
		//rayon de la terre
		$r = 6366;
		$lat1 = deg2rad($lat1);
		$lat2 = deg2rad($lat2);
		$lon1 = deg2rad($lon1);
		$lon2 = deg2rad($lon2);
 
		//recuperation altitude en km
		$alt1 = $alt1/1000;
		$alt2 = $alt2/1000;
 
		//calcul précis
		$dp= 2 * asin(sqrt(pow (sin(($lat1-$lat2)/2) , 2) + cos($lat1)*cos($lat2)* pow( sin(($lon1-$lon2)/2) , 2)));
 
		//sortie en km
		$d = $dp * $r;
 
		//Pythagore a dit que :
		 $h = sqrt(pow($d,2)+pow($alt2-$alt1,2));
 
		return $h;
	}
 
	//-----------------------------------------------------------------------------//
	//-----------------------------------------------------------------------------//
 
	$id_balade = intval($_GET['id_balade']);
	$id_periple = intval($_GET['voir_periples']);
 
	//on cherche a trouve la distance de montée et la distance de descente et la distance totale en km 
	//on requête la base de données des points gps
	$racine = $_SERVER['DOCUMENT_ROOT'];
	include($racine . '/inclusion/connect_pdo.php');
 
	if(!empty($id_periple))
	{
		$sql_select_data = $bdd->prepare('SELECT lon,lat,ele FROM pts_gpx_periples where id_periple = ?');
		$sql_select_data->execute(array($id_periple));
	}
	else
	{
		$sql_select_data = $bdd->prepare('SELECT lon,lat,ele FROM pts_gpx where id_balade = ?');
		$sql_select_data->execute(array($id_balade));
	}
 
	$i = 0;
	$table =array();
	$table_elevations =array();
	//tant qu'il y a des points à manger
	while ($tab_data = $sql_select_data->fetch())
	{
		array_push($table,$tab_data);
		array_push($table_elevations,ceil($tab_data['ele']));
	}
 
	for ($i=1; $i<count($table);$i++)
	{
			//latitude
			$lat1 = $table[$i-1]['lat'];
			$lat2 = $table[$i]['lat'];
			//longitude
			$lon1 = $table[$i-1]['lon'];	
			$lon2 = $table[$i]['lon'];
			//elevation
			$ele1 = $table[$i-1]['ele'];
			$ele2 = $table[$i]['ele'];
			$distance_total = $distance_total + (round(distance($lat1, $lon1, $lat2, $lon2, $ele1, $ele2), 2));
 
	}
	//Calcul de la distance totale
	//fin calcul distance 3d et calcul distance montée et descente
	//resultat en km arrondi à 2 chiffres après la virgule
	//-------------------------------------------------------------------------------------------------------------------------------------//
 
	// Fonction d'affichage du graphe de l'altitude
	include($racine . '/js/Artichow/LinePlot.class.php'); 
	// En fonction de la distance totale on va créer le nombre de séparateur
 
   // Changer ces valeurs !!!!
	$nb_separateur = 7;
	$distance = $distance_total;
 
	 /*
	 * Les valeurs concernant les altitudes sont retournée par la requête dans le tableau $table_elevation
	 * ce tableau ne contient que des valeurs entières !
	 */
 
	$nb_pts_altitude = count($table_elevations);
 
	$graph = new Graph(600, 300);
 
	//$values = array(1, 8, 3, 2.5, 5, -4.5, -5);
   $values = $table_elevations;
 
 
   $plot = new LinePlot($values);
   //couleur du cadre
   $plot->setBackgroundColor(new Color(240, 240, 240));
   $plot->hideLine(FALSE);
	//couleur de l'interieur de la ligne
   $plot->setFillColor(new Color(30, 147, 66,15));
   $plot->grid->setBackgroundColor(new Color(62, 171, 255, 35));
   $black = new Black(50);
   $plot->grid->setColor($black) ;
	//nb de virgule
   $plot->yAxis->setLabelPrecision(0);
   //etiquette
   $plot->yAxis->title->set("Altitude (m)");
   $plot->yAxis->title->setPadding(0, 15, 0, 0);
 
   //on reduit par 30 le nombre de point pour aller plus vite
   //$plot->reduce(30);
 
   /*
	* On a un nombre de point $nb_pts_altitude, une distance totale $distance
	* et un nombre de séparateur $nb_separateur on va donc chercher la fréquence
	* d'affichage des étiquettes càd le nombre de point séparant chaque etiquette
	*/
 
   $espace_distance = round(($distance / $nb_separateur),1);
   // distance en km entre deux tirets sur le graphe
   $tab_tirets = array(0);
   for($i=1; $i <($nb_separateur+1); $i++) // pour i de 1 à 9 dc 8 tours
   {
		$valeur_tiret = ($i*$espace_distance);
		$valeur_tiret_2 = $valeur_tiret;
		array_push($tab_tirets, $valeur_tiret_2);
		// On rajoute un huitieme, deux huitieme, ... huit huitiemes
   }
 
   // ici on va calculer la distance en km entre deux points !
   $distance_km_points = ($distance_total/($nb_pts_altitude - 1)); // ex: 1/8 : 8points = 1km (totalement fictif)
   // Sachant qu'on a la distance en kilomètre entre deux tirets $espace_distance : ici 3km (24/8)
   // On calcule le nombre de points correspondant :
   $nb_points_entre_tirets = ceil($espace_distance / $distance_km_points);
   // par exemple 3km = 3/ (1/8) = 3*8 = 24 points
   // ce qui veut dire que le point 24 = 2km
   // mais le 1/8 est cité comme exemple pour simplifier !
 
   // On va donc remplir le tableau avec pour l'indice 0 bah 0
   // a l'indice 24 la premiere valeur de $tab_tirets soit un huitieme du parcourt, etc ...
 
   $tab_ordonnees = array();
   $tab_ordonnees[0] = 0;
 
   for ($i=1; $i<($nb_separateur+1);$i++) // pour i allant de 1 à 9 donc 8 tours
   {
		$tab_ordonnees[($i*$nb_points_entre_tirets)] = $tab_tirets[$i];
		// Pour le premier tour $tab_ordonnees[1*24] = $tab_tirets[1]
		// Soit tab_ordonne[24]= un huitieme de la distance
		// rappel $tab_tiret[0] =0 (ligne 110)
   }
 
   //Et donc d'un point de vue de la fréqence d'affichage f= nb_point_entre_tiret
   $plot->xAxis->setLabelText($tab_ordonnees);
   //frequence des point de distance
   $frequence = $nb_points_entre_tirets;
 
  //grid (trait) horzontal vertical
   $plot->grid->setInterval(1,$frequence ); 
 
   $plot->xAxis->setLabelInterval($frequence);
 
	//etiquette
   $plot->xAxis->title->set("Distance (km)");
   $plot->xAxis->title->setPadding(5, 0, 0, 0);
	//vertical horizontale frequence grid
 
	// On ajoute 6 % d'espace en haut de la courbe
	$plot->setSpace(
	  0, /* Gauche */
	  0, /* Droite */
	  5, /* Haut */
	  0 /* Bas */
   );
 
   $graph->add($plot);
   $graph->draw(); ?> | 
Partager