Geolocalisation

Mammouth du PHP | 643 Messages

13 oct. 2014, 18:55

Salut tout le monde.
Je me retourne vers vous afin de connaitre vos retours d'éxpérience sur la géolocalisation.

Je souhaiterai géolocalisé le visiteur ( sa ville ou son code postal ) peut importe mais un des deux.
Je cherche la perle rare ( c'est a dire fiable et gratuit ). Merci à tous

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 oct. 2014, 22:36

Bonjour,

J'ai justement trouvé une librairie le week-end dernier qui est vachement bien réalisée :
http://geocoder-php.org
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

14 oct. 2014, 13:13

salut,
merci pour le lien j'ai regardé et le tout à l'air très bien mais me semble assez complexe est lour n'a t il pas plus simple pour pouvoir avoir la ville du visiteur du site via son ip ?

Mammouth du PHP | 571 Messages

14 oct. 2014, 17:17

il existe une extension php geoip.Cette extension est installée chez pas mal d'hébergeurs.
Sinon c'est très simple à installer.c'est possible de l'installer à partir des dépôts ubuntu/debian le paquet s'appelle php5-geoip.
un exemple pris dans la doc:

<?php
$record = geoip_record_by_name('192.1.1.1');
if ($record) {
    print_r($record);
}
?>

cet exemple affichera:

Code : Tout sélectionner

Array ( [continent_code] => NA [country_code] => US [country_code3] => USA [country_name] => United States [region] => CA [city] => Marina Del Rey [postal_code] => [latitude] => 33.9776992798 [longitude] => -118.435096741 [dma_code] => 803 [area_code] => 310 )

Il y a aussi l'API HTML de géolocalisation qui est très simple d'utilisation :geolocation

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 oct. 2014, 16:26

salut,
merci pour le lien j'ai regardé et le tout à l'air très bien mais me semble assez complexe est lour n'a t il pas plus simple pour pouvoir avoir la ville du visiteur du site via son ip ?
J'avoue la doc manque d'exemples mais ce n'est pas très compliqué à mettre en place :
require_once 'src/autoload.php';
$geocoder = new \Geocoder\Geocoder();
$adapter  = new \Geocoder\HttpAdapter\CurlHttpAdapter();
$result = $geocoder->registerProvider(new \Geocoder\Provider\HostIpProvider($adapter))
    ->geocode('78.223.254.30');
var_dump($result->getCity()); // Nantes
L'avantage c'est que tu peux changer de fournisseur de données simplement en remplaçant son nom par celui indiqué sur le site geocoder...
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 1 Messages

16 oct. 2014, 08:05

Salut,

Après avoir relu des messagas au-dessus, je me donne une question, tout ce qu'il concerne est hord de ma connaissance. Et je m'a appris quelques mes aims dont les réponds n'étaient pas clair.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 oct. 2014, 10:03

Après avoir relu des messagas au-dessus, je me donne une question, tout ce qu'il concerne est hord de ma connaissance. Et je m'a appris quelques mes aims dont les réponds n'étaient pas clair.
#-o
On la refait en français ? ;-)
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

16 oct. 2014, 14:00

salut arthur me suis penché du coup sur ton truc.... j'ai peut du mal a tout décrypter mais bon.
J'ai mis en place le script.
Le problème est que même en changent l'ip ça me retourne Nantes, J'habites à Grenoble.
Pour le test j'ai donc mis mon ip

Le but est de localiser le visiteur sa ville ou son code postal peut importe donc j'utiliseré en version final $_SERVER["REMOTE_ADDR"]
<?php
// on va chercher le fichier
require_once 'src/autoload.php';
$geocoder = new \Geocoder\Geocoder();
$adapter  = new \Geocoder\HttpAdapter\CurlHttpAdapter();
$result = $geocoder->registerProvider(new \Geocoder\Provider\HostIpProvider($adapter))
// test avec mon ip
    ->geocode($_SERVER["REMOTE_ADDR"]);
	// je prefere avec echo :)
	echo $result->getCity();
?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 oct. 2014, 16:22

En fait la géolocalisation par IP n'est pas une science exacte et nécessite une mise à jour régulière des bases qui gèrent les infos de GeoIP.
Du coup cela arrive régulièrement d'avoir des résultats inexactes.
La société qui a le plus d'expérience et qui a les données les plus à jour est MaxMind et ils indiquent de façon transparente la précision de leur géolocalisation par IP ici :
https://www.maxmind.com/fr/geoip2-city-accuracy

L'intérêt de la librairie que je t'ai recommandé, c'est justement de pouvoir tester différents fournisseurs de géolocalisation en en changeant quasiment rien dans son code.

Liste des fournisseurs de géoIP gérés par geocoder :
  • FreeGeoIpProvider as IP-Based geocoding provider;
  • HostIpProvider as IP-Based geocoding provider;
  • IpInfoDBProvider as IP-Based geocoding provider (city precision); // API key nécessaire
  • GeoipProvider, the PHP extension, as IP-Based geocoding provider; // à installer
  • GeoPluginProvider as IP-Based geocoding provider;
  • GeoIPsProvider as IP-Based geocoding provider; // API key nécessaire
  • MaxMindProvider web service as IP-Based geocoding provider (City/ISP/Org and Omni services); // API key nécessaire
  • MaxMindBinaryProvider Binary Files as IP-Based geocoding provider; // à installer
Et si tu changes de fournisseur pour utiliser GeoPlugin, tu obtiens comme résultat "Charavines" qui doit être plus proche de chez toi.
<?php
// on va chercher le fichier
require_once 'src/autoload.php';
$geocoder = new \Geocoder\Geocoder();
$adapter  = new \Geocoder\HttpAdapter\CurlHttpAdapter();
$result = $geocoder->registerProvider(new \Geocoder\Provider\GeoPluginProvider($adapter))
// test avec mon ip
    ->geocode($_SERVER["REMOTE_ADDR"]);
        echo $result->getCity();
Un truc important, il faut que tu évalues ton besoin pour être sûr que tu ne dépasses pas ce qui est possible de faire gratuitement car tous ces services ont une offre de base gratuite mais sont limitées en nombre de requêtes, par exemple GeoPlugin est limité à 120 demandes de géolocalisation par minutes, au delà, ils ont une version payante. Ou alors, il faut regarder du côté des autres fournisseurs, c'est pour cela qu'il est souvent nécessaire de créer un compte pour avoir une clé d'API.
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

16 oct. 2014, 20:17

Salut alors ca tombe juste avec ton script nikel c pil poil la ou jabite sachant que c'est un village de 2000 habitants c'est pas mal.
Mamind à l'air bien mais petit problème la précision à l'air d'être faible.

Maitenant grace au script je recupere sous la forme d'une variable la ville et je pourrais associé ce nom de ville à un code postal et faire ainsi un affichage au visiteur en fonction de sa localisation.

Maxmind
Ps: j'ai mis en place maxmind mais sans succes j'ai tjr le meme message : Erreur
J'ai fait ce tuto mais ca ne marche pas http://fr.openclassrooms.com/informatiq ... -a-leur-ip

Ca merde avec ce code, la base de donnée est bien importé et les repertoires sont correct mais j'ai sur ma page uniquement : Erreur
Pourtant ca l'air bien
<?php
include("geoipcity.inc");
include("geoipregionvars.php");

$gi = geoip_open(realpath("GeoLiteCity.dat"),GEOIP_STANDARD);

$record = geoip_record_by_addr($gi,$_SERVER['REMOTE_ADDR']);

$la = $record->latitude;
$lo = $record->longitude;

$url = "http://maps.google.com/maps/geo?output=csv&q=".$la.",".$lo;

if($csv = file_get_contents($url))
{
   if(substr($csv,0,3)!=200)
   {
      die("Erreur");
   }
   else
   {
      $adresse = substr($csv, 7, -1);
      echo $adresse;
   }
}
else
{
   echo "Erreur";
}


geoip_close($gi);

?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 oct. 2014, 21:05

Salut alors ca tombe juste avec ton script nikel c pil poil la ou jabite sachant que c'est un village de 2000 habitants c'est pas mal.
Mamind à l'air bien mais petit problème la précision à l'air d'être faible.

Maitenant grace au script je recupere sous la forme d'une variable la ville et je pourrais associé ce nom de ville à un code postal et faire ainsi un affichage au visiteur en fonction de sa localisation.
Va peut être falloir que tu lises la doc du script que je te recommande car il y a une raison si je te l'ai recommandé ;)
getCoordinates() will return an array with latitude and longitude values;
getLatitude() will return the latitude value;
getLongitude() will return the longitude value;
getBounds() will return an array with south, west, north and east values;
getStreetNumber() will return the street number/house number value;
getStreetName() will return the street name value;
getCity() will return the city;
getZipcode() will return the zipcode;
getCityDistrict() will return the city district, or sublocality;
getCounty() will return the county;
getCountyCode() will return the county code (county short name);
getRegion() will return the region;
getRegionCode() will return the region code (region short name);
getCountry() will return the country;
getCountryCode() will return the ISO country code;
getTimezone() will return the timezone.
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

16 oct. 2014, 22:31

si je dis ca c'est que par exemple en ce qui me concerne ca ne me renvoi rien pour getzipcode
la bdd que j'ai de l'autre coté est à jour, voilà pourquoi je souhaite associé l'un par rapport à l'autre.

Je suppose que ceci marche uniquement pour le ip fixe.
J'avoue que j'ai lu en diagonale mais je regarderais a fond demain ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 oct. 2014, 22:50

getLatitude() et getLongitude() te donne directement les coordonnées ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

16 oct. 2014, 23:18

ui ca me renvoi bien les infos jsui d'accord mais pas le code postal.
j'ai peut etre pas compris ce ke tu ma dis :)

le getzipcode ne renvoi rien je verrais avec un autre et je regarderé en profondeur le truc demain, ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

17 oct. 2014, 00:25

ui ca me renvoi bien les infos jsui d'accord mais pas le code postal.
j'ai peut etre pas compris ce ke tu ma dis :)
Ah, je croyais que tu voulais le code postal uniquement pour en ressortir la latitude, longitude par un autre moyen.

En fait suivant les provider, il y a + ou - de données, effectivement GeoPlugin ne semble pas renvoyer le code postal. A toi de tester les autres. :)
Quand tout le reste a échoué, lisez le mode d'emploi...