Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/05/2011, 10h49   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2010
Messages : 43
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 43
Points : 10
Points : 10
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 :
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 :
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

Citation:
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.
chuckichucki est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 11h06   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pourquoi faire SimpleXMLElement + file_get_contents ?
pour créer une adresse c'est avec http_build_query
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 13h22   #3
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
voilà teste ce code:

Code :
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'
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 13h25   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par omar24 Voir le message
voilà teste ce code:

Code :
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 15h06   #5
Candidat au titre de Membre du Club
 
Inscription : mai 2010
Messages : 43
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 43
Points : 10
Points : 10
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 :
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);
 
}
chuckichucki est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 15h25   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
ton strtr et ton $bad + replace servent pas a grand chose on plus

Code :
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);
}
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 16h23   #7
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
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.
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 17h41   #8
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
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 :
1
2
3
 
$latitude  = (string) $xml->result->geometry->location->lat;
    $longitude = (string) $xml->result->geometry->location->lng;
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 17h42   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
il faut vérifie la réponse c'est possible qu'il n'est rien trouvé et que donc les valeur n'existe pas
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 17h43   #10
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
non pour le code que je vous ai montré ça me rend des valeurs
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 17h44   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
montre un exemple d'adresse qui marche sur le tien et pas sur le mien
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 17h49   #12
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
j'ai une autre question est ce que pour une adresse ip le nombre d'adressses calculées est limité?
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 17h52   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 17h55   #14
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
voila teste toi meme:

Code :
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'];
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 17h58   #15
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
mais c'est pas la même API la...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 18h03   #16
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
c'est à dire?
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 18h04   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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 :
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 :
1
2
3
4
5
6
Array
(
    [0] => 47.7481440
    [1] => 7.3498454
    [2] => OK
)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 18h06   #18
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
D'accord merci infiniment
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h50.


 
 
 
 
Partenaires

Hébergement Web