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:
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 <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 geocod.php contient uniquement l'update de la base de données avec la latitude et la longitude à insérer.
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 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.
Partager