Geocodage avec Google Maps en php

Geocodage avec Google Maps en php - PHP - Programmation

Marsh Posté le 01-06-2007 à 12:05:53    

Bonjour,
 
Je travaille actuellement sur un applui google maps. Mon problème est de réaliser le script de geocodage.
En effet, je recupere les données d'adresses ds ma basse de données, je cherche une fonction google maps qui me permettrait de geocoder toutes les adresses et de récuperer la latitude et la longitude, pour ensuite les enregistrer dans ma base de données. Mon appli google maps allant dja pioché dans ma base de données pour afficher les marker de chaque adresse.
 
J'ai trouvé cette function :
function get_lat_long($q) {
   $gm = fopen('http://maps.google.com/maps?q=' . str_replace('
','+',$q) . '&output=js','r');
   $tmp = @fread($gm,30000);
   fclose($gm);
   $x = preg_replace ('/.*<point lat="([^"]*)" lng="([^"]*)".*/',
"|$1|$2|", nl2br(trim($tmp)));
   list ($dmy,$lat_value, $lng_value) = explode ("|",$x );
   return(array('latitude'=>$lat_value,'longitude'=>$lng_value));
 
}  
 
Mais apparemment la latitude qu'elle renvoit est une chaine de caractère et la longitude renvoit un objet NULL.
Quelqu'un pourrait t"il m'aider ?
 
Merci

Reply

Marsh Posté le 01-06-2007 à 12:05:53   

Reply

Marsh Posté le 01-06-2007 à 12:26:44    

C'est totalement illégal :/

Reply

Marsh Posté le 01-06-2007 à 12:40:43    

Pourquoi dis tu que c'est illegal?

Reply

Marsh Posté le 01-06-2007 à 17:08:05    

Je ne vois pas du tout en quoi c'est illégal! Si quelqu'un peut m'éclairer la dessus aussi.. lol

Reply

Marsh Posté le 01-06-2007 à 18:16:28    

Récuperer des données à l'insu d'un individu est illegal ^^ Surtout que ces données n'appartiennent certainement pas à Google :)

Reply

Marsh Posté le 02-06-2007 à 02:11:59    

Mxtrem a écrit :

Récuperer des données à l'insu d'un individu est illegal ^^ Surtout que ces données n'appartiennent certainement pas à Google :)


[:pingouino]

Reply

Marsh Posté le 04-06-2007 à 20:34:37    

J'ai réalisé une application de ce genre. Voici ce que j'ai écrit pour récupérer le géocode :
 
 // Formatting address : only lower alphanumeric without accent and only one separator space        
     $address = strtolower($address);
     $search  = array("/[^[:alnum:][:space:]']/","/[[:space:]]+/","/à/", "/é/", "/è/", "/ù/", "/ç/" ) ;
     $replace = array("", " ", "a", "e", "e", "u", "c" ) ;
     $address = preg_replace($search, $replace, $address);
 
 
        // geocode search in  Yahoo maps
        $url = 'http://api.local.yahoo.com/MapsService/V1/geocode';
        $url .= sprintf('?appid=%s&location=%s',$yahooappid,rawurlencode($address));
 
        $result = false;
        if($result = file_get_contents($url)) {
 
               preg_match('!<Latitude>(.*)</Latitude><Longitude>(.*)</Longitude>!U', $result, $match);
 
               if ( isset($match) )  {
 
                 // Obtain the geocode
                 $geocode = array('latitude'  =>  $match[1],
                                  'longitude' =>  $match[2]);
  }          
 
 }
 
J'ai en fait utilisé l'API de Yahoomaps qui me donnait de meilleurs résultats que celle de Googlemaps.

Reply

Marsh Posté le 05-06-2007 à 11:39:04    

function get_lat_long($q) {
   $gm = fopen('http://maps.google.com/maps?q=' . str_replace('
','+',$q) . '&output=js','r');
   $tmp = @fread($gm,30000);
   fclose($gm);
   $x = preg_replace ('/.*<point lat="([^"]*)" lng="([^"]*)".*/',
"|$1|$2|", nl2br(trim($tmp)));
   list ($dmy,$lat_value, $lng_value) = explode ("|",$x );
   return(array('latitude'=>$lat_value,'longitude'=>$lng_value));
 
}  
 
Donc en fait avec ma fonction je reconstruit l'URL que Google Maps envoit pour faire une rechercher. Voici un exemple d'adresse :
http://maps.google.fr/maps?f=q&hl= [...] e=UTF8&ll=48.825145,2.349631&spn=0.000773,0.002537&t=k&om=1
 
Donc la recherche etait pour l'adresse: 87 rue bobillot à paris  
Et donc Google Maps renvoit dans l'URL la latitude et la longitude.
 
Mon problème est de savoir ce qui ne va pas avec ma fonction au niveau de la creation de l'URL et également de savoir comment récuperer la latitude et la longitude dans l'URL.
 
Merci beaucoup

Reply

Marsh Posté le 05-06-2007 à 17:02:59    

Je ne suis pas certain que l'URL de l'API Géocode de Google Maps soit de la même forme que celle de la recherche (http://maps.google.fr/maps?f=q&hl= [...] e=UTF8&ll=48.825145,2.349631&spn=0.000773,0.002537&t=k&om=1).  
En d'autres termes, il me semble que tu ne peux pas utiliser l'URL de recherche pour récupérer un géocode, il faut utiliser une API. Et d'ailleurs, il me revient que dans les paramètres de l'API, il est nécessaire de fournir un identifiant d'application obtenu après inscription sur le Web. Cette inscription est gratuite mais c'est une étape préalable nécessaire.
 
D'autre part,comme je l'ai déjà indiqué, j'avais commencé par utiliser l'API Google Maps et j'avais constaté qu'un certain nombre de villes n'était pas reconnu et que j'obtenais de meilleurs résultats avec l'API de Yahoo. Je pense donc qu'il vaut mieux utiliser Yahoo à moins que Google ait amélioré son API depuis mes tests (= août 2006).    

Reply

Marsh Posté le 11-06-2007 à 15:25:31    

Bonjour,
 
Bon j'ai réussi! Si mon script interesse quelqu'un no problem. J'ia juste un probleme. Ma fonction geocode parfaitement sur paris mais des que je passe en region il ne trouve plus rien alors qu'en copiant/collant mes adresses directement dans Google Maps il me les trouve tout de suite..
 
Quelqu'un a t'il une idée?
Merciii

Reply

Marsh Posté le 11-06-2007 à 15:25:31   

Reply

Marsh Posté le 27-06-2007 à 15:55:31    

salut,
 
ouais moi je serai interessé, le probleme est que je ne comprends pas grand chose pour le moment.
 
en fait je cherche à faire :
 
quand un membre s'inscrit sur mon site il donne son cp, sa ville, son pays, avec ça je veux automatiquement ajouter sa position sur google maps, est-ce possible ?
quelqu'un connait un tuto en français qui expliquerait ça ?
 
merci

Reply

Marsh Posté le 04-07-2007 à 15:50:16    

petit up pour savoir si quelqu'un à la soluce ?

Reply

Marsh Posté le 19-07-2007 à 13:56:22    

Evidement, il faut ragarder par le biais de Geoname (je crois), qui trouve la latitude / longitude en fonction du code postal.
Tu incrémente lat & lon dans une bdd puis tu affiches les valeurs dans l'api gogole map :)

Reply

Marsh Posté le 31-07-2008 à 12:51:35    

Grumo2 a écrit :

Bonjour,
 
Bon j'ai réussi! Si mon script interesse quelqu'un no problem. J'ia juste un probleme. Ma fonction geocode parfaitement sur paris mais des que je passe en region il ne trouve plus rien alors qu'en copiant/collant mes adresses directement dans Google Maps il me les trouve tout de suite..
 
Quelqu'un a t'il une idée?
Merciii


 
 
Bonjour, je suis en train de faire un projet pour une grande entreprise ou je suis en stage depuis peu et j'ai absolument besoin de votre code!  lol
 
Si vous pouviez me l'envoyer à mon adresse mail perso : gaerebut@supinfo.com
 
merci à vous et bravo pour votre code  ;)

Reply

Marsh Posté le 31-07-2008 à 13:00:59    

super le stage, faire des copier coller  [:cytrouille]
T'es pas censé apprendre à faire toi même ces choses et à te dépatouiller  :??: et upper un topic qui a un an pour demander à ce qu'on te torche le travail, c'est limite...
Bref jete un oeil a l'api de google maps... et tu seras content d'y être arrivé seul, y a rien de bien difficile.

Message cité 1 fois
Message édité par Alisteroid le 31-07-2008 à 13:38:34
Reply

Marsh Posté le 06-02-2009 à 19:48:02    

Mxtrem a écrit :

Récuperer des données à l'insu d'un individu est illegal ^^ Surtout que ces données n'appartiennent certainement pas à Google :)


 
 
C'est pas illégal, c'est à ça que ça serre un WebService.

Reply

Marsh Posté le 06-02-2009 à 19:50:58    

ne copie colle pas les donnés dans une base a toi (sauf si c un cas particulier) tu peux utiliser les données de google directement.
 
voici une page qui explique bien (avec des exemples) comment utiliser l'API google. c'est fait pour ça...
 
http://code.google.com/intl/fr/api [...] vices.html

Reply

Marsh Posté le 07-02-2009 à 01:15:36    

Alisteroid a écrit :

super le stage, faire des copier coller  [:cytrouille]  
T'es pas censé apprendre à faire toi même ces choses et à te dépatouiller  :??: et upper un topic qui a un an pour demander à ce qu'on te torche le travail, c'est limite...
Bref jete un oeil a l'api de google maps... et tu seras content d'y être arrivé seul, y a rien de bien difficile.


 
Lol mais c'est pas possible ils sont tous nuls à supinfo  :pfff:  


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
Reply

Marsh Posté le 22-02-2009 à 17:21:11    

@thev : merci pour le bout de code pour yahoo maps, ça fonctionne bien :)
 
Selon toi, quel est le meilleur géocodeur ? google ou yahoo ? (avec google, sur + de 2000 adresses, j'ai 10% d'erreurs :( )
 
 
 :hello:

Reply

Marsh Posté le 24-02-2009 à 22:42:22    

thev a écrit :

J'ai réalisé une application de ce genre. Voici ce que j'ai écrit pour récupérer le géocode :
 
 // Formatting address : only lower alphanumeric without accent and only one separator space        
     $address = strtolower($address);
     $search  = array("/[^[:alnum:][:space:]']/","/[[:space:]]+/","/à/", "/é/", "/è/", "/ù/", "/ç/" ) ;
     $replace = array("", " ", "a", "e", "e", "u", "c" ) ;
     $address = preg_replace($search, $replace, $address);
 
 
        // geocode search in  Yahoo maps
        $url = 'http://api.local.yahoo.com/MapsService/V1/geocode';
        $url .= sprintf('?appid=%s&location=%s',$yahooappid,rawurlencode($address));
 
        $result = false;
        if($result = file_get_contents($url)) {
 
               preg_match('!<Latitude>(.*)</Latitude><Longitude>(.*)</Longitude>!U', $result, $match);
 
               if ( isset($match) )  {
 
                 // Obtain the geocode
                 $geocode = array('latitude'  =>  $match[1],
                                  'longitude' =>  $match[2]);
  }          
 
 }
 
J'ai en fait utilisé l'API de Yahoomaps qui me donnait de meilleurs résultats que celle de Googlemaps.


 
Et quel "pattern" tu appliquerais pour avoir la précision (ligne 3, cf ci-dessous) ? Sachant que le XML ressemble à ceci:
 

Code :
  1. <ResultSet xsi:schemaLocation="urn:yahoo:maps http://api.local.yahoo.com/MapsSer [...] &#034;&gt;
  2. <Result precision="address">
  3. <Latitude>4xxxx</Latitude>
  4. <Longitude>2xxx</Longitude>
  5. <Address>34, place xxxx</Address>
  6. <City>18xxxxxx</City>
  7. <State>France</State>
  8. <Zip/>
  9. <Country>FR</Country>
  10. </Result>
  11. </ResultSet>
  12. <!--
  13. ws03.search.re2.yahoo.com compressed/chunked Tue Feb 24 13:21:15 PST 2009
  14. -->


 
 
 :ange:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed