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

Langage PHP Discussion :

PHP et API Google Maps V3


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 54
    Points : 30
    Points
    30
    Par défaut PHP et API Google Maps V3
    Bonjour,

    je souhaite récupérer les coordonnées latitude et longitude à partir d'une adresse. Mon problème c'est que ma fonction ne me renvoie aucune donnée et je ne comprends pas pourquoi.

    J'utilise la fonction suivante :

    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
     
    function toCoordinates($address)
    {
        $bad = array(
            " " => "+",
            "," => "+",
            "?" => "",
            "&" => "",
            "=" => ""
        );
    	// nettoyage de l'adresse 
     
    	$address = strtr($address,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
        $address = str_replace(array_keys($bad), array_values($bad), $address);
        $data = new SimpleXMLElement(file_get_contents("http://maps.googleapis.com/maps/api/geocode/xml?address=".$address."&sensor=false"));
    	echo "<br>data  $data<br>";
    	$latitude = $data->result->geometry->location->lat;
    	$longitude = $data->result->geometry->location->lng;
    	$response = $data->GeocodeResponse->status;
    	return array($latitude, $longitude, $response);
     
    }
    J'appelle cette fonction et je récupère le résultat de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tab_localisation = toCoordinates($adresse);
    	$latitude = $tab_localisation[0];
    	$longitude = $tab_localisation[1];
    	$reponse = $tab_localisation[2];
    	echo "<br>Reponse: $reponse";
    	echo "<br>Latitude Longitude : $latitude $longitude ";
    Ce qui est étrange c'est que la fonction ne me renvoie rien pour la valeur suivante par exemple

    57 rue du Faubourg Montmartre, Paris, France 75009
    Alors que si j'appelle directement l'API de Google maps cela me renvoie bien des résultats.

    http://maps.googleapis.com/maps/api/geocode/xml?address=57%20rue%20du%20Faubourg%20Montmartre,%20Paris,%20France%2075009&sensor=false


    Donc je ne vois pas pourquoi je ne recupere aucune information.

    Par avance merci de votre aide.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pourquoi faire SimpleXMLElement + file_get_contents ?
    pour créer une adresse c'est avec http_build_query

  3. #3
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    voilà teste ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function getCoordonnees($adresse){
       // $apiKey = "DEMO";//Indiquez ici votre clé Google maps !
        $url = "http://maps.google.com/maps/geo?q=".urlencode($adresse)."&output=csv";
        $csv = file($url);
        $donnees = split(",",$csv[0]);
       // return $donnees[2].",".$donnees[3]; 
       return array('address'=>$adresse,'latitude'=>$donnees[2],'longitude'=>$donnees[3]); 
    }
    pour l'adresse essaye de l'écrire sous la forme: 'adresse, code postale ville pays'

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par omar24 Voir le message
    voilà teste ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function getCoordonnees($adresse){
       // $apiKey = "DEMO";//Indiquez ici votre clé Google maps !
        $url = "http://maps.google.com/maps/geo?q=".urlencode($adresse)."&output=csv";
        $csv = file($url);
        $donnees = split(",",$csv[0]);
       // return $donnees[2].",".$donnees[3]; 
       return array('address'=>$adresse,'latitude'=>$donnees[2],'longitude'=>$donnees[3]); 
    }
    pour l'adresse essaye de l'écrire sous la forme: 'adresse, code postale ville pays'
    file + split = beurk
    file bouffe plein de ressource
    split est un alias

    bref pour lire du csv c'est SplFileObject ou fgetcsv

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    Merci Stealh et omar pour votre aide.

    J'ai réussi avec le code suivant, en effet SimpleXMLElement + file_get_contents c'etait un peu compliqué...

    Je n'ai pas encore intégré la fonction dont tu parles http_build_query , je le ferai par la suite.
    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
     
    function toCoordinates($address)
    {
     
    	$bad = array(
            " " => "+",
            "," => "+",
            "?" => "",
            "&" => "",
            "=" => ""
        );
    	// nettoyage de l'adresse 
     
    	$address = strtr($address,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
        $address = str_replace(array_keys($bad), array_values($bad), $address);
    ;
    	$url_query = "http://maps.googleapis.com/maps/api/geocode/xml?address=".$address."&sensor=true";
    	$xml = simplexml_load_file($url_query);
    	$response = $xml->status;
    	$latitude = $xml->result->geometry->location->lat;
    	$longitude = $xml->result->geometry->location->lng;
    	echo "<br>reponse : $response<br>";
        return array($latitude, $longitude, $response);
     
    }

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    ton strtr et ton $bad + replace servent pas a grand chose on plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function toCoordinates($address)
    {
        $address = urldecode($address);
     
        $url = "http://maps.googleapis.com/maps/api/geocode/xml?address=".$address."&sensor=true";
     
        $xml = simplexml_load_file($url);
     
        $response  = (string) $xml->status;
        $latitude  = (string) $xml->result->geometry->location->lat;
        $longitude = (string) $xml->result->geometry->location->lng;
     
        return array($latitude, $longitude, $response);
    }

  7. #7
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    salut stealth35;
    Donc est ce que vous pensez que le dernier code est mieux que le mien si oui dites le à moi pour que je remplace mon code par le votre.

  8. #8
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    stealth35 j'ai essayé le dernier code qu t'as écrit mais il ne fonctionne pas il e donne l'erreur suivante:

    <b>Warning</b>: simplexml_load_file(http://maps.googleapis.com/maps/api/...e/xml?address= 79 rue du G&eacute;n&eacute;ral de Gaulle,68440 HABSHEIM France&sensor=true) [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request
    <br />
    <b>Notice</b>: Trying to get property of non-object in <b>C:\Program Files\Apache Group\Apache2\htdocs\geo\functions.php</b> on line <b>45</b><br />
    <br />
    <b>Notice</b>: Trying to get property of non-object in <b>C:\Program Files\Apache Group\Apache2\htdocs\geo\functions.php</b> on line <b>46</b><br />

    plus précisément dans les lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $latitude  = (string) $xml->result->geometry->location->lat;
        $longitude = (string) $xml->result->geometry->location->lng;

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    il faut vérifie la réponse c'est possible qu'il n'est rien trouvé et que donc les valeur n'existe pas

  10. #10
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    non pour le code que je vous ai montré ça me rend des valeurs

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    montre un exemple d'adresse qui marche sur le tien et pas sur le mien

  12. #12
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    j'ai une autre question est ce que pour une adresse ip le nombre d'adressses calculées est limité?

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par omar24 Voir le message
    j'ai une autre question est ce que pour une adresse ip le nombre d'adressses calculées est limité?
    je sais plus, regarde dans la doc de l'api

  14. #14
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    voila teste toi meme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    function getCoordonnees($adresse){
        $url = "http://maps.google.com/maps/geo?q=".urlencode($adresse)."&output=csv";
        $csv = file($url);
        $donnees = split(",",$csv[0]);
       return array('address'=>$adresse,'latitude'=>$donnees[2],'longitude'=>$donnees[3]); 
    }
    $adresse = '19 rue de Tunis ,68200 MULHOUSE France';
    $cord = getCoordonnees($adresse);
    echo $cord['latitude'].':'.$cord['longitude'];

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    mais c'est pas la même API la...

  16. #16
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    c'est à dire?

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par omar24 Voir le message
    c'est à dire?
    tu voix pas que c'est pas le même lien ? et pas le même format ? et que ton retour est différent

    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
    function toCoordinates($address)
    {
        $address = urldecode($address);
     
        $url = "http://maps.googleapis.com/maps/api/geocode/xml?address=".$address."&sensor=true";
     
        $xml = simplexml_load_file($url);
     
        $response  = (string) $xml->status;
        $latitude  = (string) $xml->result->geometry->location->lat;
        $longitude = (string) $xml->result->geometry->location->lng;
     
        return array($latitude, $longitude, $response);
    }
     
    $adresse = '19 rue de Tunis ,68200 MULHOUSE France';
    print_r(toCoordinates($adresse));
    ça me rend

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Array
    (
        [0] => 47.7481440
        [1] => 7.3498454
        [2] => OK
    )

  18. #18
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    D'accord merci infiniment

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Google Maps] Transmettre variable javascript -> PHP (API Google maps V.3)
    Par petchi dans le forum APIs Google
    Réponses: 1
    Dernier message: 17/11/2013, 20h42
  2. [Google Maps] IE6 refuse d'ouvrir ma page
    Par Shyboy dans le forum APIs Google
    Réponses: 5
    Dernier message: 03/10/2006, 08h47
  3. [Google Maps] Intégrer de nouvelles icônes
    Par Shyboy dans le forum APIs Google
    Réponses: 7
    Dernier message: 01/10/2006, 00h30

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