Bonjour,

Je développe actuellement un petit script permettant d'afficher des adresses présentes dans une base de données sur une Google Map.

Afin de ne pas géolocaliser à chaque fois les adresses, je commence par géolocaliser les adresses nouvelles et je stocke la latitude et la longitude dans la base de données puis j'affiche la carte.

Le script est donc un mélange de php / mysql + du javascript:
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
 
<head>
<script src="communs/script.js" type="text/javascript"></script>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
	google.load("maps", "3",  {other_params:"sensor=false"});
	google.load("jquery", "1.3.2");
</script>
</head>
 
<body>
 
<?php 
	include("communs/fonctions.php");
	//Récupération du nombre d'adresses à géolocaliser
	$nb_adresse = recup_nb_adresse();
	//Boucle pour géolocaliser les adresses
	for($i=1;$i<=$nb_adresse;$i++)
	{
		//Récupération de l'adresse dans la base de données
		$adresse = recup_adresse();
		//Appel du geocoder 
		echo '<script>';
		echo "geocodage('".$adresse[0]."','".$adresse[1]."')";
		echo '</script>';
		echo '<div id="coord" style="display:inline;"></div>';
		//Temporisation d'1 seconde pour éviter le OVER_QUERY_LIMIT du geocoder
		sleep(1);
	}
?>
</body>
Le fichier javascript:
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
 
/* Fonction de géocodage des adresses
Paramètre: l'id de l'adresse et l'adresse
*/
function geocodage(id,adresse)
{
	//Instanciation d'un objet Geocoder pour conversion des adresses postales en coordonnées GPS
	geocoder = new google.maps.Geocoder();
	//Géocodage de l'adresse   
	geocoder.geocode( { 'address': adresse}, function(results, status) 
	{
		if (status == google.maps.GeocoderStatus.OK) 
		{
			go_geocod(id, results[0].geometry.location);
		}
		else
		{
			go_geocod(id, "geoloc failed");
		}
	});	
}
 
function getXhr()
{
	var xhr = null; 
	if(window.XMLHttpRequest) // Firefox et autres
		xhr = new XMLHttpRequest(); 
	else if(window.ActiveXObject){ // Internet Explorer 
		try {
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	else { // XMLHttpRequest non supporté par le navigateur 
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
		xhr = false; 
	} 
	return xhr;
}
 
/**
* Méthode qui appel le fichier geocod.php dynamiquement
*/
function go_geocod(id, coord_gps)
{
	var xhr = getXhr();
	// On défini ce qu'on va faire quand on aura la réponse
	xhr.onreadystatechange = function(){
	// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
	if(xhr.readyState == 4 && xhr.status == 200)
	{
		leselect = xhr.responseText;
	// On se sert de innerHTML pour rajouter les options a la liste
		document.getElementById('coord').innerHTML = leselect;
	}
	}
	// Passage en POST au fichier geocod.php
	xhr.open("POST","geocod.php",true);
	// ne pas oublier ça pour le post
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	// Les arguments passés au fichier geocod
	xhr.send("id="+id+"&lat_lng="+coord_gps);
}
Le fichier geocod.php contient uniquement l'update de la base de données avec la latitude et la longitude à insérer.

Le géocodage fonctionne sauf qu'il ne fait que la première adresse à chaque fois. Je pense que c'est le mélange php et javascript qui ne dois pas aller car l'un s'exécute côté serveur et l'autre côté client.

Pouvez vous m'aider à corriger mon problème?

Merci d'avance pour votre aide.