Geolocalisation

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Geolocalisation

Re: Geolocalisation

par @rthur » 17 oct. 2014, 23:53

Si payer n'est pas un problème, prends le webservice MaxMind (et pas GeoLite qui est leur version gratuite moins fiable), c'est le plus fiable de tout ceux que tu peux trouver.

Re: Geolocalisation

par yoann38 » 17 oct. 2014, 20:42

Je l'ai tous fait ...
Sauf maxmind que je n'arrive pas a mettre j'ai suivi les tutos mais ca ne marche pas .
http://fr.openclassrooms.com/informatiq ... -a-leur-ip

Le script actuel ne m'affiche plus la ville aujourd'hui ca fait pas sérieux tout ca ....
Payer n'est pas un pbm si le truc est sérieux et si le prix est raisonable bien sur

As tu déjà utilisé maxmind ?
Si oui en est tu content ?
Tu a utilisé la version payante ou gratuite ?

Je tiens à préciser les fichiers sont au bon endroits c'est juste le code qui marche pas pourquoi je ne sais pas et la bdd à bien était importé
<?php
include("geoipcity.inc");
include("geoipregionvars.php");

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

$record = geoip_record_by_addr($gi, '78.223.254.33');

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

$url = "http://maps.google.com/maps/api/geocode/json?address=".$la.",".$lo;
if($json = file_get_contents($url)) {
	
$informations = json_decode($json, true);
   if($informations['status'] != 'OK')
   {
      die("Erreur");
   }
   else
   {
      echo 'Code postal = '.$informations['results'][0]['address_components'][6]['long_name'];
   }
}
else
{
   echo "Erreur";
}


geoip_close($gi);

?>
Merci pour tes conceils

Re: Geolocalisation

par @rthur » 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. :)

Re: Geolocalisation

par yoann38 » 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, ;)

Re: Geolocalisation

par @rthur » 16 oct. 2014, 22:50

getLatitude() et getLongitude() te donne directement les coordonnées ;)

Re: Geolocalisation

par yoann38 » 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 ;)

Re: Geolocalisation

par @rthur » 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.

Re: Geolocalisation

par yoann38 » 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);

?>

Re: Geolocalisation

par @rthur » 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.

Re: Geolocalisation

par yoann38 » 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();
?>

Re: Geolocalisation

par @rthur » 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 ? ;-)

Re: Geolocalisation

par Tempark » 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.

Re: Geolocalisation

par @rthur » 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...

Re: Geolocalisation

par yann18 » 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

Re: Geolocalisation

par yoann38 » 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 ?