Coordonnées GPS d'une liste d'adresse

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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

Cette réponse a aidé l'auteur du sujet

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…

HTTP/1.1 418 I’m a teapot

+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?

+0 -0
Auteur du sujet

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

Édité par Angelo

+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.

+0 -0
Auteur du sujet

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

Édité par Angelo

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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