Geo coding php pour google maps ou autre

Soyez le premier à donner votre avis sur cette source.

Snippet vu 21 997 fois - Téléchargée 20 fois

Contenu du snippet

Il sert à localiser l'utilisateur "géographiquement" par coordonnés latitude longitude et pour lui afficher des infos spécifiques pour sa région par exemple.
Il utilise le site hostip pour récupérer certaines informations.
Il utilise une base de données mysql pour y stocker les ips et les coordonnées associés pour éviter de trop pomper le site hostip. ( je vous conseille d'y participer d'ailleurs )
Il utilise les cookies pour limiter les requêtes mysql.

Source / Exemple :


// Base mysql à creer :
/*
CREATE TABLE `geocodes` (
  `id` int(20) NOT NULL auto_increment,
  `ip` varchar(30) NOT NULL default '',
  `ville` varchar(255) NOT NULL default '',
  `latitude` varchar(15) NOT NULL default '0',
  `longitude` varchar(15) NOT NULL default '0',
  PRIMARY KEY  (`id`)
)

  • /
// Connection $host = ""; $user = ""; $pass = ""; $bdd = ""; $link=mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données"); // Le @ ordonne a php de ne pas afficher de message d'erreur mysql_select_db($bdd, $link) or die("Impossible de se connecter à la base de données"); // Lance la fonction au début d'un script geocode(); // La fonction function geocode() { // Test si les infos (ip..) sont dans un cookie if ($_COOKIE["session"]!="") { $session=split('|',$_COOKIE["session"]); //echo "RECUPERATION DU GEOCODE DANS LE COOKIE<br>"; $ip=$session[0]; $ville=$session[1]; $latitude=$session[2]; $longitude=$session[3]; } else { // Test si l'ip est dans la base //echo "RECUPERATION DU GEOCODE DANS LA BASE<br>"; $ip=$_SERVER['REMOTE_ADDR']; $query="SELECT * FROM geocodes WHERE ip='".$ip."'"; $mysql_result = mysql_query($query,$link); $nom_table = mysql_fetch_array($mysql_result); $num_rows = mysql_num_rows($mysql_result); if ($num_rows>0) {$ville=$nom_table['ville'];$latitude=$nom_table['latitude'];$longitude=$nom_table['longitude'];} // Si elle n'est pas dans la base on va l'y ajouter if ($num_rows==0) { //echo "CREATION DU GEOCODE DANS LA BASE<br>"; ob_start(); // on recupere notre ville et latitude longitude sur le site hostip // je vous conseille d'ailleurs d'y participer include('http://api.hostip.info/get_html.php?ip='.$ip.'&position=true'); $geocode=ob_get_contents(); ob_end_clean(); $tab_geocode=split ("\n", $geocode, 5); $vil_geocode=split (" ", $tab_geocode[1], 5); $lat_geocode=split (" ", $tab_geocode[2], 5); $lon_geocode=split (" ", $tab_geocode[3], 5); $ville=$vil_geocode[1]; $latitude=$lat_geocode[1]; $longitude=$lon_geocode[1]; $query="INSERT INTO geocodes VALUES('','".$ip."','".$ville."','".$latitude."','".$longitude."')"; //echo $query; $mysql_result = mysql_query($query,$link); } // Création du cookie qui expire à la fin de la session s'il n'existe pas pour éviter/économiser les requêtes //echo "CREATION DU GEOCODE DANS LE COOKIE<br>"; setcookie("session",$ip."|".$ville."|".$latitude."|".$longitude); } }

A voir également

Ajouter un commentaire

Commentaires

dylpaco
Messages postés
1
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
2 juin 2013
-
Bonjour
merci baucoup pour votre code car j'ai vraiment besoin

mais sa ne fonctionne pas il me donne ce code d'erreur:

Deprecated: Function split() is deprecated in on line 18

Warning: split() [function.split]: REG_EMPTY in on line 18

merci
falken80
Messages postés
2
Date d'inscription
dimanche 25 décembre 2005
Statut
Membre
Dernière intervention
19 juillet 2011
-
Hum 6000charleroi tu sais une ville couvre plusieurs latitudes et longitudes et donc on est obligé de le faire par IP.
Ce qui rend aussi beaucoup plus précise la localisation.
Bien sûr la base du coups est amenée à grossir énormément ou d'avoir des résultats incorrects pour les réseaux d'entreprise à IP unique et sur plusieurs villes mais sinon ça fonctionne.
cs_kymm
Messages postés
6
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
4 mars 2008
-
Pour les webmasters qui le désirent, je fournis un script PHP sur mon site Internet http://www.WeLive.fr dans la rubrique Géolocalisation par IP.
Le script PHP vous retourne les informations sous forme de variables PHP : Pays, Drapeau du pays, Région-Département-Code Postal pour la France, Ville.
Celui-ci nécessite une inscription préalable aux fins d'éviter que n'importe qui l'utilise.

A bientôt

WeLive.fr
6000charleroi
Messages postés
2
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
12 août 2007
-
Sorry. Ci-dessus, bien lire :
"la structure de la base de données est irrationnelle".

Si, si j'avais relu, je le jure ! :-)
6000charleroi
Messages postés
2
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
12 août 2007
-
Ce code est très intéressant. Merci.
Une chose saute cependant aux yeux : la structure de la base de données des irrationnelles. Il n'est pas utile de stocker le nom de la ville + latitude et longitude pour chaque IP.

Il faudrait donc une table "villes" comprenant un ID unique, le nom, la latitude et la longitude (et pourquoi pas le pays, ce serait utile),et la table "geocodes" devrait contenir uniquement l'adresse IP et l'ID de la ville.

Dans plusieurs pays, on peut trouver sur les sites des Postes des listes complètes des localités du pays, avec leur code postal (souvent sous forme de fichiers Excel, qu'on peut récupérer facilement dans une table MySQL). Pour la France, avec le code postal on connaît aussi la région.
On devrait donc pouvoir créer sans trop de difficulté une table avec toutes les localités des pays dont proviennent la plupart des visites sur un site, avec nom de la ville, code postal (donc région) et bien entendu latitude et longitude. A partir de là, afficher une carte ou une photo satellite devient relativement enfantin avec l'aide de Google Maps.

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.