Utiliser api google maps pour la correction d'adresse

Soyez le premier à donner votre avis sur cette source.

Vue 13 615 fois - Téléchargée 672 fois

Description

Utilise l'API Google Maps pour vérifier des adresses.
Utilise 3 classes :
La classe Google, la classe résultat qui étends d'une classe résultats utilisé avec d'autre geocoder.

Source / Exemple :


<?php
class GoogleGeocoder{
	
	private $key = "[votre clé]";
	private $url = "http://maps.google.com/maps/geo?output=xml";
	
	public $resultat;
	public $result_query = array(
		200=>"SUCCESS",
		400=>"BAD_REQUEST",
		500=>"SERVER_ERROR",
		601=>"MISSING_QUERY",
		601=>"MISSING_ADDRESS",
		602=>"UNKNOWN_ADDRESS",
		603=>"UNAVAILABLE_ADDRESS",
		604=>"UNKNOWN_DIRECTIONS",
		610=>"BAD_KEY",
		620=>"TOO_MANY_QUERIES"
	);
	public $accuracy_query = array(
		0=>"ACCURACY_UNKNOWN",
		1=>"ACCURACY_COUNTRY",
		2=>"ACCURACY_REGION",
		3=>"ACCURACY_SUBREGION",
		4=>"ACCURACY_TOWN",
		5=>"ACCURACY_POSTCODE",
		6=>"ACCURACY_STREET",
		7=>"ACCURACY_INTERSECTION",
		8=>"ACCURACY_ADDRESS"
	);
	
	/**

  • Recherche l'adresse passée en paramètre
  • @param string $query
  • /
function query($query){ try{ // Recherche des BP $query = str_replace(" ","+",trim($query)); $buffer = file_get_contents($this->url."&key=".$this->key."&q=$query"); $xml = new SimpleXMLElement(utf8_encode($buffer)); return $xml; //$this->resultat = new GoogleResult($xml); }catch(Exception $e){ echo $buffer; } } /**
  • Affiche le résultat de la recherche dans un tableau
*
  • /
function readableStatus($id){ return $this->result_query[$id]; } function readableAccuracy($id){ return $this->accuracy_query[$id]." ($id/8)"; } function toString(){ try{ echo "<h3> Nombre de résultats : ".$this->result->nbResults." (max 10)<br> Status de la requête : ".$this->readableStatus($this->result->status)."</h3>"; foreach($this->resultat->responses as $result){ echo "<table style=\"border:1px solid gray;float:left; margin:5px;\">"; foreach($result as $var=>$val){ if($var==status)$val = $this->readableStatus($val); if($var==accuracy)$val = $this->readableAccuracy($val); echo "<tr><th>$var</th><td>$val</td></tr>"; } echo "</table>"; } }catch(Exception $e){ echo "Erreur"; } } function getAccuracy(){ return $this->result->accuracy; } } class Google_result extends GeoCodedAddresses { function __construct($res){ $xml = $res->asXML(); preg_match_all("/<Placemark.*?>(.*?)<\/Placemark>/msi",$xml,$preg_response); $preg_response = $preg_response[1]; $i=0; $nb = count($preg_response); foreach($preg_response as $asxml){ preg_match("/Accuracy=\"([0-9]?)\"/msi",$asxml,$preg_accuracy); preg_match("/<CountryNameCode>(.*?)<\/CountryNameCode>/msi",$asxml,$preg_country); preg_match("/<AdministrativeAreaName>(.*?)<\/AdministrativeAreaName>/msi",$asxml,$preg_administrative_area); preg_match("/<SubAdministrativeAreaName>(.*?)<\/SubAdministrativeAreaName>/msi",$asxml,$preg_departement); preg_match("/<LocalityName>(.*?)<\/LocalityName>/msi",$asxml,$preg_locality); preg_match("/<DependentLocalityName>(.*?)<\/DependentLocalityName>/msi",$asxml,$preg_dependant_locality); preg_match("/<ThoroughfareName>(.*?)<\/ThoroughfareName>/msi",$asxml,$preg_dependant_rue); preg_match("/<PostalCodeNumber>(.*?)<\/PostalCodeNumber>/msi",$asxml,$preg_cp); $accuracy = $preg_accuracy[1]; $Country = $preg_country[1]; $region = $preg_administrative_area[1]; $departement = $preg_departement[1]; $City = $preg_locality[1]; $Street = $preg_dependant_rue[1]; $Zip = $preg_cp[1]; if($accuracy == 8 && $Country == "FR"){ $expl_adresse = explode(",",$Street); $HouseNo = $expl_adresse[0]; $Street = $expl_adresse[1]; }elseif($accuracy == 8 && $Country == "BE"){ preg_match("/([0-9]+$)/msi",$Street,$preg_adresse); $HouseNo = $preg_adresse[1]; $Street = preg_replace("/([0-9]+$)/msi","",$adresse); } $this->addResult($HouseNo,$Street,$City,$Zip,$Country); } } } ?> <?php /**
  • Mise en forme des résultats
*
  • /
class GeoCodedAddresses { public $arrayOfAddress; // Array of Address_result public $no_results; /**
  • Constructeur
  • Met le compteur à zéro
*
  • /
function __construct(){ $this->no_results = 0; } /**
  • Ajoute un adresse dans les résultats
*
  • @param String $house numéro de la maison
  • @param String $street nom de la rue
  • @param String $city no de la ville
  • @param String $zipcode code postal
  • @param String $country Pays
  • /
function addResult($house,$street,$city,$zipcode,$country){ $adresse = new Address_result($house,$street,$city,$zipcode,$country); $this->arrayOfAddress[] = $adresse; $this->no_results++; } } /**
  • Classe Address_result
  • Représente l'adresse
*
  • /
class Address_result { public $HouseNo; public $Street; public $City; public $ZipCode; public $Country; public $Quality; /**
  • Création d'une nouvelle adresse
*
  • @param String $house numéro de la maison
  • @param String $street nom de la rue
  • @param String $city no de la ville
  • @param String $zipcode code postal
  • @param String $country Pays
  • /
function __construct($house,$street,$city,$zipcode,$country,$quality=""){ $this->HouseNo = $house; $this->Street = $street; $this->City = $city; $this->ZipCode = $zipcode; $this->Country = $country; $this->Quality = $quality; } } ?> include "Google.class.php"; include "Resultat.class.php"; $query = "$street $house $zip $city"; $req = new GoogleGeocoder(); $google_result = new Google_result($req->query($query));

Conclusion :


Une alternative a une autre source que j'ai posté (Map24), la pas besoin de télécharger d'autres classes.
Nécessite juste une clé développeur pour l'API Google

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Portekoi
Messages postés
19
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
13 janvier 2010

Et quand je fais ceci : echo $req -> toString();

j'ai ca : "Warning: Invalid argument supplied for foreach() in C:\Program Files\EasyPHP5.3.0\www\Map\includes\Google.Class.php on line 63"

Ce qui n'est pas normal du tout...

Dommage, ca avait l'air sympa...
Portekoi
Messages postés
19
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
13 janvier 2010

En mettant ceci, je n'ai qui s'affiche alors que j'ai bien un résultat.

echo $google_result -> Street;

Ou est mon erreur?
Portekoi
Messages postés
19
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
13 janvier 2010

Bonjour,

Comment parcourir les résultats s'il y a plusieurs "corrections" ?

Cordialement
cs_JLN
Messages postés
373
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
17 juin 2013

Mea culpa, ok pour l'exemple... Comme quoi on ne lit vraiment pas tout !

Bonne prog
@+ JLN
RyoSensei
Messages postés
8
Date d'inscription
lundi 3 décembre 2007
Statut
Membre
Dernière intervention
29 décembre 2008

Il y avait un petit exemple a la fin :
# include "Google.class.php";
# include "Resultat.class.php";
# $query = "$street $house $zip $city";
# $req = new GoogleGeocoder();
# $google_result = new Google_result($req->query($query));

Le résultat se trouve dans l'objet $google_result

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.