geocoder

Consultez la formation Google Maps, News, Images de WebRankInfo / Ranking Metrics

Fourmie
WRInaute discret
WRInaute discret
 
Messages: 57
Inscription: 7 Fév 2007

geocoder

Message le Ven Nov 07, 2008 17:22

J'ai déjà lu un post à ce sujet.... mais ma question est légèrement différente et c'est plus pour information que pour dépannage car ma carte fonctionne plutôt bien!

Donc voilà ma question..... pourquoi quand on va chez google map, il connait et localise bien une adresse X et que quand on utilise le script via le geocoder, il ne connait pas cette adresse et renvoi une erreur ???

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

Message le Ven Nov 07, 2008 18:04

Quelle adresse ?


bproductiv
WRInaute accro
WRInaute accro
 
Messages: 4173
Inscription: 27 Déc 2004

Message le Ven Nov 07, 2008 18:48

Quel script ?

Fourmie
WRInaute discret
WRInaute discret
 
Messages: 57
Inscription: 7 Fév 2007

Message le Ven Nov 07, 2008 21:24

Pour l'adresse qui merdouille... en voici une par exemple que maps google.fr trouve "63 Avenue Lucien Coudert, 81100 Castres"... mais qui demandée par le site renvoi une erreur URL not loading....

Je me suis inspiré du code fourni par google http://code.google.com/support/bin/answer.py?answer=80200&topic=11364&ctx=sibling

Et le code est le suivant... enfin le bout interressant!
Code: Tout sélectionner
while ($geocode_pending) {
    $address = $row["address"];
    $id = $row["id"];
    $request_url = $base_url . "&q=" . urlencode($address);
    $xml = simplexml_load_file($request_url) or die("url not loading");

    $status = $xml->Response->Status->code;
    if (strcmp($status, "200") == 0) {
      // Successful geocode
      $geocode_pending = false;
      $coordinates = $xml->Response->Placemark->Point->coordinates;
      $coordinatesSplit = split(",", $coordinates);
      // Format: Longitude, Latitude, Altitude
      $lat = $coordinatesSplit[1];
      $lng = $coordinatesSplit[0];

      $query = sprintf("UPDATE markers " .
             " SET lat = '%s', lng = '%s' " .
             " WHERE id = '%s' LIMIT 1;",
             mysql_real_escape_string($lat),
             mysql_real_escape_string($lng),
             mysql_real_escape_string($id));
      $update_result = mysql_query($query);
      if (!$update_result) {
        die("Invalid query: " . mysql_error());
      }
    } else if (strcmp($status, "620") == 0) {
      // sent geocodes too fast
      $delay += 100000;
    } else {
      // failure to geocode
      $geocode_pending = false;
      echo "Address " . $address . " failed to geocoded. ";
      echo "Received status " . $status . "\n";
    }
    usleep($delay);
  }


Pour un certain nombre d'adresse comme celle là, l'algo merdouille.... et il faut simplifier l'adresse comme simplement castres avec code postal..... ceci étant, pour mon application ce n'est pas génant... bref, c'est juste pour avoir votre avis et ou expérience en la matière!
Nota, dans mon script, je ne balance pas à la volée une multitude d'adresse à encoder... en fait, chaque utilisateur est libre de demander quand bon lui semble l'encodage de son adresse... qu'il rentre lui même et que je ne conserve pas... J'ai trouvé celà plus démocratique :lol: Et évite les requètes multiples...

Fourmie
WRInaute discret
WRInaute discret
 
Messages: 57
Inscription: 7 Fév 2007

Message le Dim Nov 09, 2008 11:01

Bon.... je creuse, je creuse et décidemment, je trouve pas!

un autre exemple d'adresse qui merdouille!

rue bénédit 13004 marseille

Si je récupère l'adresse générée par le script et que je balance cette URL, j'obtiens le code suivant donné par google...
Code: Tout sélectionner
<?xml version="1.0" encoding="UTF-8" ?>
- <kml xmlns="http://earth.google.com/kml/2.0">
- <Response>
  <name>rue bénédit 13004 marseille</name>
- <Status>
  <code>200</code>
  <request>geocode</request>
  </Status>
- <Placemark id="p1">
  <address>Rue Bénédit, Marseille, France</address>
- <AddressDetails Accuracy="6" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
- <Country>
  <CountryNameCode>FR</CountryNameCode>
  <CountryName>France</CountryName>
- <AdministrativeArea>
  <AdministrativeAreaName>Provence-Alpes-Côte d'Azur</AdministrativeAreaName>
- <SubAdministrativeArea>
  <SubAdministrativeAreaName>Bouches-du-Rhône</SubAdministrativeAreaName>
- <Locality>
  <LocalityName>Marseille</LocalityName>
- <Thoroughfare>
  <ThoroughfareName>Rue Bénédit</ThoroughfareName>
  </Thoroughfare>
  </Locality>
  </SubAdministrativeArea>
  </AdministrativeArea>
  </Country>
  </AddressDetails>
- <Point>
  <coordinates>5.392362,43.307465,0</coordinates>
  </Point>
  </Placemark>
  </Response>
  </kml>


J'en conclue que google a bien trouvé....cependant, le script me renvoi "url not loading" !

Une idée??? Au secours!

lalelilo
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 13 Nov 2008

Message le Jeu Nov 13, 2008 15:28

je confirme que ce script fourni par google fonctionne correctement, mais pose problème dès lors que le résultat XML contient un accent.

Exemple pour Marseille, le ô de Côte-d'Azur semble bloquer la fonction php simplexml_load_file qui du coup n'arrive pas à charger le flux XML.
Si on effectue une recherche sur Paris ou Bordeaux, pas de souci pour simplexml_load_file car il n'y a pas d'accent dans le résultat XML...

c'est un pb lié au contenu XML généré par l'API.
cela peut-etre mis en évidence par l'analyse de l'erreur renvoyée (libxml_get_last_error):
    level:3
    code:9
    column:147
    message:Input is not proper UTF-8, indicate encoding ! Bytes: 0xF4 0x74 0x65 0x20
    file:http://maps.google.com/maps/geo?output=xml&BaseCountryCode='fr'&key=Key&q=marseille
    line:10


sous IE en tapant directement l'URL, on obtient :
Code: Tout sélectionner
  <?xml version="1.0" encoding="UTF-8" ?>
- <kml xmlns="http://earth.google.com/kml/2.0">
- <Response>
  <name>marseille</name>
- <Status>
  <code>200</code>
  <request>geocode</request>
  </Status>
- <Placemark id="p1">
  <address>Marseille, France</address>
- <AddressDetails Accuracy="4" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
- <Country>
  <CountryNameCode>FR</CountryNameCode>
  <CountryName>France</CountryName>
- <AdministrativeArea>
  <AdministrativeAreaName>Provence-Alpes-Côte d'Azur</AdministrativeAreaName>
- <SubAdministrativeArea>
  <SubAdministrativeAreaName>Bouches-du-Rhône</SubAdministrativeAreaName>
- <Locality>
  <LocalityName>Marseille</LocalityName>
  </Locality>
  </SubAdministrativeArea>
  </AdministrativeArea>
  </Country>
  </AddressDetails>
- <Point>
  <coordinates>5.3832209,43.2983438,0</coordinates>
  </Point>
  </Placemark>
  </Response>
  </kml>

Je cherche désespérement depuis près de 3heures une solution à ce problème d'accent, mais je n'ai rien trouvé de concluant pour l'instant. Sauf ce message trés pertinent au regard de mon pb (je me sents moins seul :wink: )

Si quelqu'un a une idée, je suis preneur, sachant que l'on ne peut pas maitriser le contenu du fichier XML, ce dernier étant directement généré par l'API googlemap.
D'avance merci pour votre aide.

lalelilo
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 13 Nov 2008

Message le Jeu Nov 13, 2008 18:32

Bon j'ai trouvé une parade.
Je sais pas expliquer pourquoi, alors me demandez pas... 8O
Bug API google ???

Si on remplace
Code: Tout sélectionner
$base_url = "http://" . MAPS_HOST . "/maps/geo?output=xml" . "&key=" . $apiKey;

par:
Code: Tout sélectionner
$base_url = "http://" . MAPS_HOST . "/maps/geo?output=kml" . "&key=" . $apiKey;


C'est subtil, il suffit juste de remplacer le paramètre de sortie XML par KML.
Dès lors, il n'y a plus de pb de format UTF_8, et la fonction php simplexml_load_file fonctionne à nouveau correctement, qu'il y'ait ou pas des accents dans le fichier résultat.
Attention cependant à utiliser éventuellement utf8_decode() pour récupérer les libellés avec accents correctement.

Fourmie
WRInaute discret
WRInaute discret
 
Messages: 57
Inscription: 7 Fév 2007

Message le Jeu Nov 13, 2008 19:30

Là, il ya un truc que je pige plus... mais je vais essayé ton truc... De ma propre expérience, se ne sont pas forcemment les accents qui font bug... mais bon, vu qu'on est semble t'il les deux seuls à avoir le soucis...!
Mon expérience montre que pour une adresse donnée ( celle dont je fait référence sur marseille par exemple)... ben dés fois celà marche ( rare)... des fois celà marche pas ( la plupart du temps)... Bref, le soucis c'est le petit pourcentage où celà marche... :roll:
Enfin, le programme que j'utilise marche heureusement pour un bon nombre d'internautes... il y a cependant des adresses on se demande pourquoi pour lesquelles, celà ne marche pas alors qu'en allant direct sur google map, il match à tous les coups.... Grand mystère... Cependant, on est bien OK tous deux sur la fonction simple_xmlload... qui marche pas forcemment... pourquoi.... sais pas, tu énnonce les acents.. Bon... mais alors mon adresse qui marche de manière aléatoire....???

lalelilo
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 13 Nov 2008

Message le Jeu Nov 13, 2008 22:10

Et oui Fourmie, moi non plus je pige pas tout. Comme je le disais, faut pas me demander...
Ce qui est d'autant plus fort, c'est qu'après analyse du fichier kml généré, il semble parfaitement identique au fichier xml,
à la seule différence de retours à ligne en moins dans le kml.

Pour info, tous les tests que j'ai pu faire avec le geocoder en javascript fonctionnent sans pb.
Le pb semble donc bien venir de l'interprétation du fichier xml par la fonction php simplexml_load_file...
J'ai identifié le pb des accents car chaque fois que je demande une adresse avec un accent ou que la réponse comporte un accent (Lyon, Marseille, Dijon), je tombe sur le même message d'erreur. Ce qui n'est jamais le cas quand il n'y a pas d'accent (Paris, Bordeaux, Lille).
Losque je récupère les résultats dans le fichier kml brut, les noms avec accent sont mal interprétés sauf si j'utilise la fonction de retraitement php utf8_decode.

Comme toi, je suis étonné que nous soyons les seuls à évoquer ce pb.
Mes recherches sur le net n'ont pas donné grand chose en rapport avec ce pb, et c'est un peu en désespoir de cause que j'ai trouvé cette solution.
De mon coté le pb semble bien résolu, j'éspère que ce sera le cas pour toi également. :wink:


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Message le Jeu Nov 13, 2008 23:20

Fourmie a écrit:Mon expérience montre que pour une adresse donnée ( celle dont je fait référence sur marseille par exemple)... ben dés fois celà marche ( rare)... des fois celà marche pas ( la plupart du temps)...
Ca ne serait pas parce que ce n'est pas toujours le même serveur auquel tu fais appel (load balancing de la part de google) ?

Fourmie
WRInaute discret
WRInaute discret
 
Messages: 57
Inscription: 7 Fév 2007

Message le Ven Nov 14, 2008 8:23

Bien, j'ai remplacé comme toi xml par kml..... et effectivement, il semble que celà fonctionne! Je constate comme toi que le fichier généré est quasi identique à l'encodage prés de certains caractères! Merci du tuyau.... je te tiens informé si clà plante encore de temps à autres..... :wink:

aXi
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 3 Déc 2008

Message le Mer Déc 03, 2008 12:32

J'ai le même problème... En pire j'ai l'impression.

Je suis hébergé chez Free.

D'après mes recherches la fonction file_get_contents semble bloquée chez Free.fr

J'ai donc mis un .htaccess à la racine de mon serveur pour passer en PHP 5 et utiliser simplexml_load_file. Mais j'obtiens toujours url not loading en utilisant des adresses avec ou sans accent, et en tapant sur xml ou kml, c'est tout pareil :-(

Est-ce que Free.fr bloque aussi simplexml_load_file ?

D'après phpinfo() allow_url_fopen = off, c'est pas bon ça :-(

Fourmie
WRInaute discret
WRInaute discret
 
Messages: 57
Inscription: 7 Fév 2007

Message le Mer Déc 03, 2008 18:12

Je ne suis pas un grand expert en la matière et encore moins en hébergement surtout lorsqu'il s'agit d'hébergements "non pro" tels que les hébergements orange free etc...
Perso, je passe par un hébergeur pro pour pas grand chose dans le fond... 60 euros l'année avec 25Go de disque illimité courrier etc... et un tas de fonctionnalités + un service assisatnce 24/24 7 jours sur 7...dont je n'ai jamais eu à redire... Je sais que certains hébergeur comme free ou orange posent des problèmes notamment sur le SMTP... savais pas qu'ils bloquaient certaines fonctions...
Celà me semble étonnant.... si j'étais toi.... je ferais du pas à pas... en récupérant l'URL fournie par ton script et en l'nvoyant direct pour voir ce qui est généré par google....etc... Car dans mon cas comme celui de mon prédessesseur, ce n'est ni google n l'hébergeur en cause mais IE qui reconnait pas forcemment le tout....
Enfin, il serait bon de faire un test avec Mozilla....moins chiant... juste histoire de voir et de comprendre d'où le bug provient!

aXi
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 3 Déc 2008

Message le Jeu Déc 04, 2008 9:25

Et bien le problème ne semble pas venir du navigateur. J'ai tapé l'url directement dans la barre d'adresses de mon gentil renard de feu et j'obtiens un fichier XML tout propre. Avec IE, Opéra et Safari c'est pareil. Mais ça ne doit pas venir de mon navigateur puisque l'erreur apparait au niveau php, donc au niveau serveur, indépendamment du navigateur qui appel la page.

Je reste persuadé que ça vient de Free :-(

Une solution serait de récupérer les coordonnées de mes points par javascript et de les envoyer dans le formulaire pour que php les rentre dans la base de données. Mais c'est pas propre :-(

Un passage en hébergement chez OVH est à l'étude...

aXi
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 3 Déc 2008

Message le Mar Déc 09, 2008 11:12

Voili voilou... C'est fait :-)

Vous pouvez voir le résultat sur
http://pushyourlimit.net/

Après j'ai encore un soucis avec un dossier protégé par htaccess, et une synchronisation svn/ftp par script shell :-(

Donc la solution : ça marche pas chez Free :-( mais chez OVH :-)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation Google Maps, Google News et Google Images : apprenez comment optimiser le référencement de votre site pour la recherche universelle et notamment Google Maps, Google Actualités et Google Images. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité