|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
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
Sources en rapport avec celle ci
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
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|