Forum Clubic

Geocoding Google Map

Bonjour à tous,

Pour transformer une adresse en coordonnées géographiques avec le service Geocoding de Google Maps,
j’essaye de faire marcher le script de Google Map avec la fonction “function get_coordonees_from_adresse”

Le problème est à la ligne 7 : file_get_contents($url);

J’ai un message comme quoi file_get_contents is not defined,
Quelqu’un peut il m’aider? Est-ce qu’il existe une librairie à inclure, et si oui comment?

Merci beaucoup

function get_coordonees_from_adresse($adresse)
{

$adresse = ‘5 place Sacré Cœur 12000 RODEZ’;
$googlekey = ‘ABQIAAAAkmj2n9u-yh0eajXY2ODfvRTZ-8DaNmJqQ4DZiHMEn4zyFwB_uRS5k_pWD1NMCv_ztgTVW2VD6fFXLA’;
$url = ‘http://maps.google.com/maps/geo?q=$adresse&output=xml&oe=utf8&gl=fr&sensor=false&key=&googlekey’;

$page = file_get_contents($url);

// Parse le résultat XML
$xml_result = new SimpleXMLElement($page);
// Vérifie que la requête a réussi
if ($xml_result->Response->Status->code != 200) return array();
// Charge les adresses
$adresses = array();
foreach ($xml_result->Response->Placemark as $place) {
list($longitude, $latitude, $altitude) = explode(’,’, $place->Point->coordinates);
// Ajoute au tableau
$adresses[] = array(‘adresse_complete’ => utf8_decode($place->address),
‘latitude’ => $latitude,
‘longitude’ => $longitude);
}

return $adresses;
}

Souvent, lors d’un file_get_contents, le serveur refuse car l’url vient d’un autre site pour éviter les failles. Exemple: Un pirate prend le controle de ton site et remplace par exemple un file_get_contents url=“page.php” par file_get_contents url=“sapagedepirate.php”
PHP, pour bloquer cela, a interdit de récupérer le contenu d’un site externe. Sur la plupart de sites, cette sécurité est enlevée, mais tu ferais bien de faire un tour dessus.

De plus selon la doc php (http://fr.php.net/manual/fr/function.file-get-contents.php ):

Merci mais quand je mets urlencode(), j’ai aussi un message d’erreur comme quoi il is not defined

$adresse = ‘5 place Sacré Cœur 12000 RODEZ’;
$adresse = urlencode($adresse);

Non XD ! urlencode c’est pour transformer un variable en url ! Genre:


$url = 'http://maps.google.com/maps/geo?q=$adresse&output=xml&oe=utf8&gl=fr&sensor=false&key=&googlekey';
$url = urlencode($url);

Et là, PHP comprend que tu parle d’une adresse web et non pas d’une simple chaine de caractère :wink:

Merci mais lorsque j’arrive à la ligne file_get_contents($url)
Ca met comme erreur : file_get_contents is not defined

function get_coordonees_from_adresse($adresse)
{
$adresse = ‘5 place Sacré Cœur 12000 RODEZ’;
/$adresse = urlencode($adresse);/
$googlekey = ‘ABQIAAAAkmj2n9u-yh0eajXY2ODfvRTZ-8DaNmJqQ4DZiHMEn4zyFwB_uRS5k_pWD1NMCv_ztgTVW2VD6fFXLA’;
$url = “http://maps.google.com/maps/geo?q=$adresse&output=xml&oe=utf8&gl=fr&sensor=false&key=$googlekey”;
$page = file_get_contents($url);


function get_coordonees_from_adresse($adresse)
{
$adresse = '5 place Sacré Cœur 12000 RODEZ';
/*$adresse = urlencode($adresse);*/
$googlekey = 'ABQIAAAAkmj2n9u-yh0eajXY2ODfvRTZ-8DaNmJqQ4DZiHMEn4zyFwB_uRS5k_pWD1NMCv_ztgTVW2VD6fFXLA';
$url = urlencode("http://maps.google.com/maps/geo?q=$adresse&output=xml&oe=utf8&gl=fr&sensor=false&key=$googlekey"); 
$page = file_get_contents($url);

Ca devrait peut-être aller mieux :slight_smile:

Après pas mal de recherche, ceci a l’air de fonctionner :
(dans php.ini , valider : extension=php_curl.dll )
( je conseille le livre “PHP clés en main” , éditions PEARSON , 218 pages; pour la maudite somme de 13 euros )

<?php // [maps.google.com...](http://maps.google.com/maps/geo?q=5) place Sacre Coeur 12000 RODEZ&output=xml&oe=utf8&gl=fr&sensor=false&key=ABQIAAAAkmj2n9u-yh0eajXY2ODfvRTZ-8DaNmJqQ4DZiHMEn4zyFwB_uRS5k_pWD1NMCv_ztgTVW2VD6fFXLA function recup_page($url, $post_parameters = null) { $query_string = null; if (!is_null($post_parameters)) { if (!is_array($post_parameters)) { die("POST parameters not in array format"); } /* build query string */ $query_string = http_build_query($post_parameters); } $ch = curl_init(); // descripteur de connexion if ( $query_string ) { // options de connexion curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $return_data = curl_exec($ch); curl_close($ch); return $return_data; } function get_coordonees_from_adresse($adresse) { // $adresse = "5 place Sacre Coeur 12000 RODEZ" ; $googlekey = "ABQIAAAAkmj2n9u-yh0eajXY2ODfvRTZ-8DaNmJqQ4DZiHMEn4zyFwB_uRS5k_pWD1NMCv_ztgTVW2VD6fFXLA"; $url = "http://maps.google.com/maps/geo?q=$adresse&output=xml&oe=utf8&gl=fr&sensor=false&key=$googlekey"; // $url = htmlentities ( urlencode($url) ); // protection, sécurité // $url = htmlentities ( $url ); //$url = urlencode($url) ; // protection, sécurité $qs = http_build_query( array( "key" => $googlekey , "q" => $adresse , "output" => "xml" , "oe" => "utf8" , "gl" => "fr" , "sensor" => "false" , )); $url2 = "http://maps.google.com/maps/geo?$qs" ; $page = recup_page( $url2 ); //$page = utf8_encode( $page ) ; $adresses = array(); $page = file_get_contents( $url2 ); //$page = file_get_contents( $page ); // Parse le résultat XML $page = simplexml_load_string( $page ) ; //$page = simplexml_load_file( "geoRODEZ.xml" ) ; $page = $page->asXML() ; $xml_result = new SimpleXMLElement( $page ); //$xml_result = $xml_result ->asXML() ; //print( $page) ; // Vérifie que la requête a réussi if ( $xml_result->Response->Status->code != 200 ) return array(); // Charge les adresses $adresses = array(); foreach ( $xml_result->Response->Placemark as $place) { list($longitude, $latitude, $altitude) = explode(',', $place->Point->coordinates); // Ajoute au tableau $adresses[] = array('adresse_complete' => utf8_decode($place->address), 'latitude' => $latitude, 'longitude' => $longitude); } return $adresses; } $adress = utf8_encode( "place Sacré Coeur 12000 RODEZ" ) ; $adress = "place 12000 RODEZ" ; // plusieurs réponses!! $adress = "5 place Sacre Coeur 12000 RODEZ"; $adress = "bvd Saint-Quentin 80000 AMIENS"; $adress = "70 bvd Saint-Quentin 80000 AMIENS"; // adresse du lycée ED. Branly à Amiens $res = get_coordonees_from_adresse( $adress ) ; print_r( $res ) ; // affichage récursif //var_dump( $res ) ; // affichage récursif echo "
\n"; while (list ($key, $val) = each ( $res)) echo "$key => $val
\n"; $count = count( $res ); echo "$count
\n"; for( $i =0 ; $i < $count ; $i++ ) { if( is_array( $res[$i] ) ) { $count2 = count( $res[$i] ); $tab = $res[$i] ; for( $j =0 ; $j < $count2 ; $j++ ) { echo key($tab) . " = ". $tab[key($tab)] . "
\n" ; // 'adresse_complete' ] ; next( $tab ) ; } } else echo $res[$i] . "
\n" ; // 'adresse_complete' ] ; } //$url = 'http://maps.google.com/maps/geo?q=$adresse&output=xml&oe=utf8&gl=fr&sensor=false&key=&googlekey'; //$url = urlencode($url); ?>