Bonsoir,

J'ai un script qui me permet de géolocaliser mes photos sur des points gps à partir de la date de la photo et du point gps.

Cela fonctionne mais pas correctement. Deux soucis persistent :

  • Les photos ne se géolocalisent pas au bon endroit
  • Toutes les photos ne se géolocalisent pas forcément


Si vous voyez des soucis ou des optimisations, je suis preneur. Par avance, merci.

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
<?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();
 
		$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.'/'); ?>
Edit : Exemple d'un résultat