IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs Google Discussion :

Géolocalisation et stockage en base de données


Sujet :

APIs Google

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut 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 : 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.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 321
    Par défaut
    Peut on voir la fonction recup_adresse() ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut
    La voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function recup_adresse()
    {
        $query="SELECT accountaddressid, bill_city, bill_code, bill_street FROM vtiger_accountbillads where lat = '(0.0000000, 0.0000000)'";    
        $req = mysql_query($query);
        $res = mysql_fetch_array($req);
        $street = str_replace("\n","",$res['bill_street']);
        $street = str_replace("\r","",$street); 
        $values = array($res['accountaddressid'], $street." ".$res['bill_code']." ".$res['bill_city']);
        return $values;
    }
    Elle interroge la table qui contient les adresses à géolocaliser.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 321
    Par défaut
    Il manquerait bien une boucle quelque part.
    Car avec recup_adresse() tu récupère donc toute les adresses non géolocalisées (lat et long = 0).
    Mais ensuite lorsque tu appelle la fonction geocodage tu passes en parametre $adresse[0] il est donc normal que tu te retrouve finalement avec juste la premiere adresse géocodée.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut
    Je ne pense pas car je fais la procédure suivante:
    • Récupération du nombre d'adresses à géolocaliser: recup_nb_adresses()
    • Boucle for partant de 1 et avec limite max le nombre d'adresses
      • Je récupère les adresses à géolocaliser mais je ne retourne que la première dans l'array $values
      • Géocodage
      • Stockage en bdd

    Puis la boucle recommence. Du coup à chaque fois, je remplace la première adresse de l'array $adresse vu que je relance la fonction recup_adresse().

  6. #6
    Membre éclairé Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Par défaut Type résultats
    Bonsoir,

    Désolé de ne pas pouvoir t'aider pour ton problème mais j'aimerai avoir quelques petites précisions sur le code que tu nous présentes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    results[0].geometry.location
    La fonction de géolocalisation retourne une variable de type objet LatLng et non une chaine de caractères. Comment fais-tu pour enregistrer cette données dans ta base de données?

    Cordialement.

Discussions similaires

  1. Stockage en base de données d'objets sérialisés
    Par MagnetiK dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 07/06/2011, 08h52
  2. path de stockage des bases de données en easyphp
    Par rezguiinfo dans le forum Langage
    Réponses: 1
    Dernier message: 31/03/2011, 11h01
  3. [MySQL] Récupérer date et stockage dans base de données
    Par dreamquad dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/04/2010, 07h35
  4. [PHP 5.0] Upload d'image et stockage en base de données
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 20/05/2009, 21h58
  5. [MySQL] stockage image base de données
    Par digger dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/11/2005, 08h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo