Coordonnées GPS d'une liste d'adresse

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

J’ai besoin de récupérer les coordonnées pour une liste d’adresse stocker pour le moment dans un fichier excel (c’est des adresses postale classique comme par exemple 7 rue du savoir, 75000 LaVille du Zeste)

La liste est assez longue donc il est fastidieux de rechercher une à une les coordonnées GPS. En effet, j’ai vu que certain site proposait ce service

J’ai donc fait des recherches et j’ai trouvé 2 choses intéressantes :
- utiliser Google maps
- utiliser un autre système

Problème, ils ont l’air de travailler également sur une seule adresse

Du coup, comment je pourrai faire pour généraliser à une liste d’adresse ?

J’ai pensé interroger cette page :

1
http://maps.googleapis.com/maps/api/geocode/json?address=7 rue du savoir, 75000 LaVille du Zeste&sensor=false 

pour chaque adresse.

Comment faire l’envoi pour chacune des adresses ?
Comment récupérer le résultat de chacune des requêtes?

+0 -0

Ou en PHP… mais à partir de données dans un fichier CSV.

Contenu du CSV avant :

1
2
3
4
Champ de Mars,5 Avenue Anatole France
Place de l'Hôtel de Ville,75004 Paris
Musée du Louvre,75001 Paris
3 Rue de Paris,59000 Lille

Ensuite le script PHP qui va pointer sur l'API de Goole Map :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
header('Content-Type: text/html; charset=utf-8');

// Adresse du fichier
$file_path = 'adresses.csv';

// Ouverture du fichier
$file = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// Lecture du fichier
foreach ($file as $line => $content)
{
    // Récupération de l'URL au bon format
    $url_gmap    = 'http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($content) . '&sensor=false';
    // Ouverture de l'URL au format JSON (sous forme d'un tableau de type Array)
    $json        = json_decode(file_get_contents($url_gmap), true);
    // Récupération des coordonnées dans le fichier JSON
    $coord       = $json['results']['0']['geometry']['location'];
    // Ajout des coordonnées (lattitude et longitude) dans notre nouvelle ligne
    $file[$line] = $content . ',' . $coord['lat'] . ',' . $coord['lng'];
}

// Retour à la ligne pour chaque ligne
$file = implode("\n", $file);
// Insertion des données
file_put_contents($file_path, $file);
?>

Ce qui donne un fichier CSV modifié :

1
2
3
4
Champ de Mars,5 Avenue Anatole France,48.8588871,2.2944861
Place de l'Hôtel de Ville,75004 Paris,48.8567522,2.3510529
Musée du Louvre,75001 Paris,48.862926,2.33603
3 Rue de Paris,59000 Lille,50.6370502,3.0651922

Par contre le script n'est à exécuter qu'une seule fois…

+1 -0

Bonjour,

Après recherche, j’ai trouvé votre poste qui répond parfaitement à ma problématique. Après avoir copier / coller le script dans un fichier puis importer celui-ci sur un serveur ainsi que le fichier csv et le fichier php, j’appelle l’url. Mon fichier .csv à bien été modifié mais je ne récupère par la lat et long de Google Map. J’ai juste les 2 séparateurs ’,’ qui apparaisse logiquement à la fin de chaque ligne.

Je me suis demandé, si depuis la date de votre poste Google Api avait changé. Mais en testant directement ’http://maps.googleapis.com/maps/api/geocode/json?address=’, je n’ai pas l’impression. Google demande t-il maintenant une API Key?

Pourriez-vous m’éclairer? Par la même, EtienneR, vous expliquez que le script n’est à exécuter qu’une seule fois??? Pourriez-vous préciser svp?

Bonjour De mémoire, l’API google est gratuite pour un certain nombre de requête par jour
Peut être avez vous atteins la limite (si vous le faite sur un grand nombre d’adresse)
Personnellement, j’ai été obligé de le faire sur plusieurs jours pour arriver à mes fins.
Ceci été possible dans mon cas, car ce traitement n’était pas récurent mais je suppose que google doit proposer une solution payante pour ça

+0 -0

Bonjour,

Merci de me répondre. Non, ce n’est pas un problème de limite, car via un module Prestashop qui attaque l’API Google, j’ai pu importer le fichier. La limite de l’API est de 2500 requête par 24 heures, après il faut effectivement payer.

Je viens d’essayé à nouveau et cela ne fonctionne toujours pas. Y a t-il une erreur dans le coquille dans le code php que, par connaissance vous auriez modifié? Vous ne le faîte pas en local?

Merci de votre aide.

La seule petit changement que j’ai fait est un test pour m’assurer que j’ai bien un résultat dans le tableau (ligne 21)
En effet, certaine adresse n’arrive pas à être récupérée et, dans ce cas, le script s’arrête et ne va pas plus loin (chose assez pénible quand l’adresse en question est dans les premières lignes)
J’ai également ajouté une ligne d’affichage pour savoir si l’adresse était convertit ou non

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php

header('Content-Type: text/html; charset=utf-8');

// Adresse du fichier
$file_path = 'adresses - Copie.csv';

// Ouverture du fichier
$file = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// Lecture du fichier
foreach ($file as $line => $content)
{

    // Récupération de l'URL au bon format
    $url_gmap    = 'http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($content) . '&sensor=false';
    // Ouverture de l'URL au format JSON (sous forme d'un tableau de type Array)
    $json        = json_decode(file_get_contents($url_gmap), true);

    // Récupération des coordonnées dans le fichier JSON
    if (array_key_exists('0', $json['results']))
    {
        $coord       = $json['results']['0']['geometry']['location'];
        // Ajout des coordonnées (lattitude et longitude) dans notre nouvelle ligne
        $file[$line] = $content . '@' . $coord['lat'] . '*' . $coord['lng'];
        print "OK==== ". ($line + 1) . " : " ;
    } 
    else
    {
        print "BAD=== ". ($line + 1) . " : " . urlencode($content) . " : " ;
    }

    print $content;
    print "<br />";
}

// Retour à la ligne pour chaque ligne
$file = implode("\n", $file);
// Insertion des données
file_put_contents($file_path, $file);
?>

Et effectivement, je le fais en local. Cela à une incidence ?
Je viens d’essayer et je n’ai pas de soucis particuliers

+0 -0

Bonjour à tous,

Je suis très intéressé par ce post, mais je ne comprends absolument rien....

J’ai enregistré en CSV mon fichier avec les adresses, copier/coller le "code" sur blocnote, et après ?

Comment obtenir les résultats ? Ou dois je faire interagir ces deux fichiers ?

En vous remerciant,

Non, tu n’as besoin que d’une page et elle doit être avec l’extension .php

Tu peux tout à fait enregistrer en php avec blocnote : il suffit de sélectionner "Tous les fichiers (.)" et d’écrire un nom de fichier avec l’extension .php ("page.php" par exemple)

Bonjour à tous, Merci pour ces idées très intéressantes. Je suis dans la même situation que zgouroff. Après avoir installé Wampserver et créer mon bloc note en php, que dois-je faire sur wampserver pour arriver à retrouver les données GPS de mon fichier CSV? Merci beaucoup par avance, pour votre aide, j’en ai vraiment besoin. Bien à vous, A. Roudaut

Bonjour AlfredRoudaut,

Il faut placer le fichier php dans le répertoire dédié par WampServer.
Tu peux retrouver ce répertoire à l’aide de l’interface de WampServer: lorsque tu clic sur l’icône, tu as "Répertoire www".
Dans ma configuration, mon répertoire www est sur C:\wamp64\www.
Une fois le fichier copier dans ce répertoire, tu peux exécuter le code en allant sur l’url localhost/page.php (si ton fichier se nomme page.php)

( ! ) Warning: file_get_contents(http://maps.googleapis.com/maps/api/geocode/json?address=3+Rue+nationale+%2C59000+Lille&amp;sensor=false): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in C:\wamp\www\GOOG\zestedusavoir2.php on line 10

je bloque sur json MERCI DE M AIDER à COMPRENDRE L ERREUR DU JSON

j’ai juste besoin d’une adresse à la fois (pour mon annuaire-famille.livehost.fr ) j’ai donc limité votre script

<?PHP // zestedusavoir1 $content = "3 Rue de Paris,59000 Lille" ; $content = "3 Rue nationale ,59000 Lille" ; // https://zestedesavoir.com/forums/sujet/5502/coordonnees-gps-dune-liste-dadresse/ // Récupération de l'URL au bon format $url_gmap = 'http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($content) . '&sensor=false'; // Ouverture de l'URL au format JSON (sous forme d'un tableau de type Array) $json = json_decode(file_get_contents($url_gmap), true); // Récupération des coordonnées dans le fichier JSON if (array_key_exists('0', $json['results'])) { $coord = $json['results']['0']['geometry']['location']; // Ajout des coordonnées (lattitude et longitude) dans notre nouvelle ligne echo "ooooooooook <br> coord : $coord <br>"; echo "ooooooooook <br>"; //echo "$coord['lat'] . '*' . $coord['lng'] " ; echo "OK==== " ; } else { echo "BAD=== ". " : " . ($content) . " : " ; } echo "<p> 32 ... " ; echo $content; ?>

MERCI

Bonjour Angelo, J’ai essayé plusieurs fois en suivant tes etapes mais ça n’a pas marché avec mois !! BAD=== 55 : 2180%2C+rue+Br%E9beuf%2C%2C : 2180, rue Br�beuf,, BAD=== 56 : 400+avenue+Saint-Charles+Pavillon+P%2C%2C : 400 avenue Saint-Charles Pavillon P,, BAD=== 57 : 275%2C+boulevard+Gouin%2C%2C : 275, boulevard Gouin,, BAD=== 58 : 215%2C+rue+Champagnat%2C%2C : 215, rue Champagnat,,

voilà ce je recois! Aidez-moi SVP

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte