pas du tout
le point de départ et d'arrivée sont les mêmes... c'est peut être ça...
enfin c'est pas grave vu sa longueur
pas du tout
le point de départ et d'arrivée sont les mêmes... c'est peut être ça...
enfin c'est pas grave vu sa longueur
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
J'ai supprimé le dernier point et ça fonctionne correctement
http://partir-en-vtt.com/php/article...id_article=358
Par-contre, mes photos se géolocalisent moins bien, il faut que je re-regarde mon code de géolocalisation.
étonnant non, quand tu comprends que c'est un récursion cet algo
bizarre vu que les photo n'ont rien à voir... qu'est ce que tu appelles moins bien?
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
J'ai l'impression que toutes les photos ne trouvent pas toujours un points gps (liaison via la date). Je vais regarder ça en détails ou ouvrir un post pour optimiser ce script.
En tout cas, je te dois un grand merci pour ton aide. Maintenant l'affichage de ma carte openlayers, de mon profil d'altitude vont bien plus vite.
NB/ Je dois également améliorer mon script de génération de profil car comme tu l'as vu, je n'arrive pas à afficher le kilométrage total en fin de diagramme.
=> Résolu !
ça c'est normal idéalement tu dois les recaler sur le point le plus proche de ta courbe réduite...
tu as la formule pour le calcul de distance applique la sur le parcours des points originaux... lors du parcours dans le constructeur par exemple...
tu te rajoutes la formule comme méthode de la classe
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
On peut regarder si t'es en forme :
Voici le code que j'utilise pour localiser mes photos
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php function recursive_readdir ($dir) { $dir = rtrim ($dir, '/'); // on vire un eventuel slash mis par l'utilisateur de la fonction a droite du repertoire if(is_dir ($dir)) // si c'est un repertoire { $dh = opendir ($dir); // on l'ouvre } else { echo $dir, ' n\'est pas un repertoire valide'; // sinon on sort! Appel de fonction non valide exit; } while (($file = readdir ($dh)) !== false )//boucle pour parcourir le repertoire { if($file !== '.' && $file !== '..') { $path =$dir.'/'.$file; // construction d'un joli chemin... if (is_dir ($path)) //si on tombe sur un sous-repertoire { recursive_readdir ($path); // appel recursif pour lire a l'interieur de ce sous-repertoire } $path_parts = pathinfo($path); if($path_parts['extension'] == "jpg" OR $path_parts['extension'] == "JPG" ) { // envoie les images dans la base inserer_database_exif($path); } } } closedir ($dh); // on ferme le repertoire courant } //--------------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------------- function inserer_database_exif($chem_image) { $racine = $_SERVER['DOCUMENT_ROOT']; include($racine . '/inclusion/connect_pdo_v3.php'); //Récupèration des informations de l'image $tab_info = exif_read_data($chem_image,FILE); //si il a quelque chose dans le datetime photo if(!empty($tab_info['DateTimeOriginal'])) { $datetime = new DateTime($tab_info['DateTimeOriginal']); $newdate = $datetime->format('Y-m-d H:i:s'); /* Cherche dans tout les points de la balade, le point le plus proche*/ $sql_trouver_point = $bdd->prepare('SELECT a.id_fichier_gps, MIN(id_coord_gps) AS id_coord_gps' . ' FROM pevtt_coordonnee_gps a' . ' LEFT JOIN pevtt_fichier_gps_avec_article b ON a.id_fichier_gps = b.id_fichier_gps' . ' WHERE coord_gps_date >= ?' . ' AND id_article = ?'); if(!empty($_POST['id_prochain_article'])) { $id_article = intval($_POST['id_prochain_article']); } else { $id_article = intval($_POST['id_article_a_modifier']); } $sql_trouver_point->execute(array($newdate,$id_article)); $tab_trouver_point = $sql_trouver_point->fetch(); $pieces = explode("/", $chem_image); $nom_photo = end($pieces); $chem_image = str_replace($_SERVER['DOCUMENT_ROOT'],"",$chem_image); $id_pt_gpx = intval($tab_trouver_point['id_coord_gps']); $id_fichier_gps = intval($tab_trouver_point['id_fichier_gps']); $id_photo_gps = mt_rand(); if($id_pt_gpx != 0 OR $id_fichier_gps != 0) { $sql_update_pt_gpx = $bdd->prepare('INSERT INTO pevtt_photo_gps (id_fichier_gps,id_coord_gps,id_photo_gps,photo_gps_nom,photo_gps_url) VALUES(:id_fichier_gps,:id_coord_gps,:id_photo_gps,:photo_gps_nom,:photo_gps_url)'); $sql_update_pt_gpx->execute(array(':id_fichier_gps' => $id_fichier_gps, ':id_coord_gps' => $id_pt_gpx, ':id_photo_gps' => $id_photo_gps, ':photo_gps_nom' => $nom_photo, ':photo_gps_url' => $chem_image )); } } return $resultat; } //appel de la fonction recursive_readdir ($racine.'/upload/articles/images/'.$fsb->userdata('u_id').'/'.$id_type_article.'/'.$id_article.'/'); ?>
oui c'est une façon de le faire en extrayant le timecode de l'image s'il existe et en regardant le point le plus immédiatement avant en terme de timecode...
en fait faut que tu le fasses sur la table qui contient la forme réduite de la courbe, après sa génération...
là je suppose que ta table contient encore tous les positionnements liés à la version non réduite des courbes... faut donc les remettre à jour...
ensuite pourquoi perdre de la place à copier les coordonnées dans la table pevtt_photo_gps, alors que l'index de la trace et du point suffisent à faire un jointure pour les récupérer...
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
Y'a t-il une possibilité d'améliorer ce code ?
C'est ce que je faisen fait faut que tu le fasses sur la table qui contient la forme réduite de la courbe, après sa génération...
ensuite pourquoi perdre de la place à copier les coordonnées dans la table pevtt_photo_gps, alors que l'index de la trace et du point suffisent à faire un jointure pour les récupérer...Je ne réinsère pas le lat/lon dans la table photo
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ':id_coord_gps' => $id_pt_gpx, ':id_photo_gps' => $id_photo_gps, ':photo_gps_nom' => $nom_photo, ':photo_gps_url' => $chem_image
oups mal lu
et quand tu régénère entièrement pevtt_photo_gps ça recale pas les photos sur la courbe réduite?
ton code semble pas trop mal... après faut voir les index posés sur les différentes tables c'est ça qui devrait surtout booster le truc...
ensuite l'autre point c'est les requêtes de récupération et la façon don tu organise ton code pour générer les différentes pages en php
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
Si les photos sont de nouveau géolocalisées c'est jusque parfois, j'ai l'impression que certaines photos ne trouvent pas un point GPS. Je vais essayer de débusquer le moment où cela se produit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part et quand tu régénère entièrement pevtt_photo_gps ça recale pas les photos sur la courbe réduite?
J'aimerais que l'on regarde la génération du profil d'altitude. Comment pourrait-on faire en sorte d'afficher le kilométrage total en fin du graphique tout en découpant "logiquement" les tirets qui séparent le kilomètrage ?
Ex sur une trace de 21 km
Graphique
0-5-10-15-20-21 (km)
Ex : http://partir-en-vtt.com/php/article...id_article=395
N.B : Pour l'instant j'utilise artichow mais le projet semble mort. Faut-il recommencer sur un produit comme jpgraph ?
c'est pas très dur de faire un graph avec échelle automatique sans jpgraph... tu l'as vu avec ce que j'ai fait
je pense pour des raisons de performance qu'il vaudrait mieux générer la distance lors de l'insertion dans la table (pas de calcul à la volée ensuite) à partir de la trace réduite pour plus de cohérence en utilisant ta fonction qui tient compte de l'altitude
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
La distance est effectivement envoyée en base lors de l'envoi de la trace. J'effectue aussi à ce moment d'autres calculs (durée, vitesse...).
Voilà comment je m'y prend avec artichow (certainement comme un manche mais bon)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php $racine = $_SERVER['DOCUMENT_ROOT']; include($racine . '/inclusion/connect_pdo_v3.php'); $id_article = intval($_GET['id_article']); $sql_select_distance = $bdd->prepare('SELECT count(coord_gps_lat) as total_point, fichier_gps_distance' . ' FROM pevtt_statistique_fichier_gps a' . ' LEFT JOIN pevtt_fichier_gps_avec_article b ON a.id_fichier_gps = b.id_fichier_gps' . ' LEFT JOIN pevtt_coordonnee_gps c on a.id_fichier_gps = c.id_fichier_gps' . ' WHERE b.id_article = ?'); $sql_select_distance->execute(array($id_article)); $tab_data = $sql_select_distance->fetch(); $sql_select_altitude = $bdd->prepare('SELECT coord_gps_altitude' . ' FROM pevtt_coordonnee_gps a' . ' LEFT JOIN pevtt_fichier_gps_avec_article b ON a.id_fichier_gps = b.id_fichier_gps' . ' WHERE b.id_article = ?' . ' ORDER BY id_coord_gps'); $sql_select_altitude->execute(array($id_article)); $i = 0; $table = array(); $table_elevations = array(); //tant qu'il y a des points à manger while ($tab_data_altitude = $sql_select_altitude->fetch()) { array_push($table,$tab_data_altitude); array_push($table_elevations,ceil($tab_data_altitude['coord_gps_altitude'])); } // 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 = $tab_data['fichier_gps_distance']; /* * 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 = intval($tab_data['total_point']) ; $graph = new Graph(600, 300); $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/($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(); ?>
non c'est des lib qui sont ce qu'elles sont...
après tu peux faire tout aussi bien à la main (tu as vu le temps de génération de mon graph)
tu ne gardes que la distance totale ou celle de chaque point au précédent?
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
Je garde uniquement la distance totale dans la base.
Edit : Maintenant, la génération de mes graph sont très rapide (depuis qu'il ya moins de points). J'aimerais juste générer des intervalles logiques selon la distance et afficher la distance totale en fin de graph.
donc le graph est assez facile à faire...
tu peux te faire une classe ou une fonction qui te le fais...
c'est pas dur...
par contre, tes requêtes sont mal construites formellement tu mélanges des conditions de jointure avec la condition de restriction générale...
ensuite est ce bien utile de reproduire à la volée ces graph qui ne devraient être généré qu'en cas de changement d'une courbe... c'est pas des statistiques temps réel...
la tu bouffes un temps de génération considérable... pour rien...
bref... y a à repenser...
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
je veux bien quelques éclaircissements car le "c'est pas dur" dépend du niveau !
par rapport à la fonction qui génère la courbe correctement, je veux bien un peu d'aide sur l'algorithme que tu mettrais en place et tant qu'à faire, on pourrais utiliser jpgraph au lieu d'artichow voir du fait maison si c'est aussi joli.
Concernant la génération à la demande. Tu penses que générer une fois l'image et stocker cette dernière serait plus simple/efficace/logique ? Je trouve pas que ce soit long à générer dorénavant !
le graph est facile à faire mais 2 remarques déjà:
- ton graph devrait être générer à la création de la trace en bd pour des questions de performances
- ton graph est faux vu que tu ne places pas les altitudes à la bonne distance mais à équidistance... il faut donc générer la distance pour chaque point depuis le départ et la stocker dans la trace
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
Dans un premier temps on peut générer le graph à la demande puis ensuite on peut voir comment le générer une fois pour toute et le stocker l'image. Bien-sûr, il faudra re-calculer le graph si la trace venait à changer.ton graph devrait être générer à la création de la trace en bd pour des questions de performances
Un point est composé d'une date, puis d'un X,Y,Z. Dans la base, j'ai donc ces 4 paramètre pour chaque point. A partir de là on doit pouvoir générer un bon graph. J'attends avec impatience tes lumières sur le sujet.ton graph est faux vu que tu ne places pas les altitudes à la bonne distance mais à équidistance... il faut donc générer la distance pour chaque point depuis le départ et la stocker dans la trace
si tu faisais un graph (altitude/temps écoulé) oui...
après ça dépend ce que tu veux (distance/alti) ou (altitude/temps écoulé)
ça représente pas la même chose vu que l'un dépend des poses éventuelles, l'autre est indépendant de la façon de parcourir le trajet...
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
A l'origine, mon idée était de faire un graph altitude/distance afin de montrer la dénivellation générale du parcours mais aussi par exemple qu'à 4 km, la montée commence et se termine à 6 km.
Avec les données que j'ai, il est impossible de faire ce graph ? Pourtant c'est ce que je pensais faire : afficher l'altitude de chaque point par rapport à sa distance.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager