Géolocalisation et stockage en base de données
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:
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:
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.