Accueil > > > UTILISER API GOOGLE MAPS POUR LA CORRECTION D'ADRESSE
UTILISER API GOOGLE MAPS POUR LA CORRECTION D'ADRESSE
Information sur la source
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
- <?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));
<?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
Historique
- 25 septembre 2008 15:23:19 :
- Modification d'après quelques remarque (variable php5, try catch...)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Comment tester les fichiers PHP [ par Clem ]
Comment tester les fichiers PHP sans les publier sur son site ? Dans le genre de PWS avec l'asp
PWS version PHP ! [ par Clem ]
J'ai trouvé un PWS en mieux, et pour le PHP !Sur http://www.easyphp.org/, il suffit de télécharger la dernière version (8Mo) et de l'installer.L'avant
comment faire avec pws [ par arnaud ]
voila je veux me mettre au PHP je sais que je peux faire fonctionner PWS comme server pour PHP mais je trouve rien Alors pour ceux qui sont te,nte ai
Developpeur PHP rechercher. [ par Trafalio BlackHammer ]
Bonjour, je recherche un bon developpeur PHP, MySQL. Veuillez me contacter a trafalio@godsoft.orgMerci
statistiques ,graphique, php et mysql [ par mouss ]
connaissez vous des exemples mettant en oeuvre une base de donnée mysql ,php permettant de créer des courbes, nuages de points sur une feuille html (p
Extensions de PHP [ par zerg ]
je sais que l'on peut ajouter des extensions en php, ses propres extensions ou celle telechargeables mais difficiles a trouver.... ==> ces extensio
Mail et recup [ par H@lloWin___HiA ]
SalutJe sais envoyé un mail avec un script PHP sur un serveurMais peut on envoyer un mail depuis un script qui serait ds localhost (easy php)Le proble
Comment fait t-on pour executer des pages php [ par Arnaud ]
merci
Urgent svp !!! [ par Clem ]
Comment récupérer le nom d'un fichier a partir de son adresse internet ?(Par exemple obtenir le nom dex.php a partir de http://localhost/dex.php)
Démarrage sous PHP. [ par SurfSilver ]
Salut à tous.JE me suis m'y cette semaine à Php dans l'espoir de concevoir une appli en base de donnée. Cet avec interet que j'essaierai de donner mes
|
Derniers Blogs
MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg [MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|