Classement par pays/régions/provinces/communes - Google Geocoding API

  • Auteur de la discussion Auteur de la discussion spout
  • Date de début Date de début
WRInaute accro
Bonjour,

Cela fait un moment que j'aimerais pouvoir classer des enregistrements par pays/régions/provinces/communes/localités.
J'ai bien trouvé des bases de données:
http://download.geonames.org/export/dump/
http://www.geobytes.com/FreeServices.htm (GeoWorldMap)
Mais c'est énormément de données et pas forcément simple à mettre en œuvre dans le sens où chaque pays a ses spécificités (cantons, provinces, communes, départements, états,...).

J'arrive à extraire les données de Google Geocoding API:
http://code.google.com/intl/fr/apis/maps/documentation/geocoding/index ... html#Types
Avec les types de données fourni par l'API, je peux connaitre toutes ces informations ainsi que la hiérarchie.

country > administrative_area_level_1 > administrative_area_level_2 > administrative_area_level_3 > colloquial_area > locality > sublocality

Venons en à la question:
Je pense enregistrer ces données sous forme de "tags" avec une hiérarchie (id / parent_id).
Code:
id
parent_id
content_id
type (administrative_area_level_1,  administrative_area_level_2,...)
title
lang
Ainsi je pourrais trier les données par chaque "tag" (régions, provinces, communes,...) et connaitre la hiérarchie entre les régions.

Pensez-vous que cette méthode pourrait être correcte / efficace ?

(NB: c'est bien pour utiliser Google Geocoding API conjointement à Google Maps API comme spécifié dans les conditions d'utilisation)

Merci d'avance pour vos réponses.
 
WRInaute passionné
Re: Classement par pays/régions/provinces/communes

Salut,

Personnellement j'utilise la même méthode.

Code:
LOCATION
loc_id
loc_intitule
location_id (le parent)
Avant j'avais un "niveau_id" mais je viens de me rendre compte qu'il n'a pas trop d'intérêt.
Code:
niveau 1 = pays
niveau 2 = région (en France, par exemple)
niveau 3 = département (en France, par exemple)
En effet le premier niveau à un parent à NULL, et le reste se déduit récursivement avec l'id du parent.


Par contre j'ai abandonné le fait de gérer des villes, trop compliqué à maintenir à jour et à gérer.


Je me pose d'ailleurs la question au niveau d'un formulaire d'inscription (exemple de la France Toujours)
> Niveau 1 : choix du pays (select, liste déroulante)
>> AJAX
> Niveau 2 : choix de la région (select, liste déroulante)
> AJAX
> Niveau 3 : choix du département (select, liste déroulante)
> AJAX
> Niveau 4 : choix de la ville (select, liste déroulante)
ou
> Niveau 1 : choix du pays (select, liste déroulante)
> Niveau 2 : auto-complétion (AJAX sur le nom, mais de quel niveau ? à partir du Code Postal, mais tous les pays n'en ont pas ?)
 
WRInaute accro
Re: Classement par pays/régions/provinces/communes

dorian53 a dit:
Je me pose d'ailleurs la question au niveau d'un formulaire d'inscription (exemple de la France Toujours)
> Niveau 1 : choix du pays (select, liste déroulante)
>> AJAX
> Niveau 2 : choix de la région (select, liste déroulante)
> AJAX
> Niveau 3 : choix du département (select, liste déroulante)
> AJAX
> Niveau 4 : choix de la ville (select, liste déroulante)
ou
> Niveau 1 : choix du pays (select, liste déroulante)
> Niveau 2 : auto-complétion (AJAX sur le nom, mais de quel niveau ? à partir du Code Postal, mais tous les pays n'en ont pas ?)

Réponse 2 mais sans le choix du pays, il se fait tout seul.
Je viens de mettre ceci en place: http://tech.cibul.org/geocode-with-google-maps-api-v3/ donc je viens de passer de 4 champs (pays, région/province, localité, adresse) à un seul champ: "lieu".
 
WRInaute passionné
Quelle est la pérennité du choix d'une telle solution ?
Totale dépendance de Google et son API.

Je ne sais pas dans quel contexte tu utilises cette fonctionnalité mais lorsque tu extraits le (pays, région/province, localité, adresse) sous quelle forme les stockes-tu par la suite dans ta base ?

Gères-tu des référentiels (liste de pays, régions, départements) lorsque l'on veut faire des recherches sur ton site ou naviguer par catégorie ?
 
WRInaute accro
dorian53 a dit:
Quelle est la pérennité du choix d'une telle solution ?
Totale dépendance de Google et son API.

Je ne sais pas dans quel contexte tu utilises cette fonctionnalité mais lorsque tu extraits le (pays, région/province, localité, adresse) sous quelle forme les stockes-tu par la suite dans ta base ?
Totale dépendance de l'API OK, mais par exemple si je prend les datas de Geonames, si ds qq temps je veux remettre ces datas à jour... personne ne px dire ce qui sera le plus pérenne. Quand même plus de chances avec Google que Geonames.

Pour le moment, juste les coordonnées GPS (latitude et longitude) et le code pays. A partir de ça j'extrais toutes les datas (reverse geocoding).

dorian53 a dit:
Gères-tu des référentiels (liste de pays, régions, départements) lorsque l'on veut faire des recherches sur ton site ou naviguer par catégorie ?
Encore rien, je suis tjs en train d'y réfléchir comment faire, d'où ce topic :wink:
 
WRInaute accro
Leonick a dit:
la hiérarchie de la réponse est très différente selon les pays
Oui mais elle respecte bien ceci:
country > administrative_area_level_1 > administrative_area_level_2 > administrative_area_level_3 > colloquial_area > locality > sublocality

non ?

Même si pour certains pays le administrative_area_level_2 est le même que administrative_area_level_3.
 
WRInaute accro
WRInaute accro
C'est 2 fois les mêmes latitude/longitude que tu montres ?

53.326157033345,-9.83928680419922
me retourne (json décodé en array et simplifié):
Code:
Array
(
    [locality] => Array
        (
            [long_name] => Carna
            [short_name] => Carna
        )

    [administrative_area_level_1] => Array
        (
            [long_name] => Galway
            [short_name] => Galway
        )

    [country] => Array
        (
            [long_name] => Irlande
            [short_name] => IE
        )

)
 
WRInaute accro
Pour 48.8296814609858,2.56316184997559:

Code:
Array
(
    [locality] => Array
        (
            [long_name] => Noisy-le-Grand
            [short_name] => Noisy-le-Grand
        )

    [administrative_area_level_2] => Array
        (
            [long_name] => Seine-Saint-Denis
            [short_name] => 93
        )

    [administrative_area_level_1] => Array
        (
            [long_name] => Ile-de-France
            [short_name] => IDF
        )

    [country] => Array
        (
            [long_name] => France
            [short_name] => FR
        )

    [postal_code] => Array
        (
            [long_name] => 93160
            [short_name] => 93160
        )

)

Donc oui c'est pas le même retour mais il me semble que ça respecte tjs bien la hierarchie que je cite ?

53.326157033345,-9.83928680419922: Irlande > Galway > Carna
48.8296814609858,2.56316184997559: France > Ile-de-France > Seine-Saint-Denis > Noisy-le-Grand
 
WRInaute accro
parce que dans ta "simplification" tu récupères les valeurs quels que soient leur position dans le fichier retour

Si on compare Paris http://maps.google.com/maps/geo?q=48.84563557663105,2.289420496961478 et Dublin http://maps.google.com/maps/geo?q=48.84563557663105,2.289420496961478
on voit que la ville, pour Dublin
Code:
"Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "Dublin",
         "Locality" : {
            "LocalityName" : "Dublin",
et pour Paris
Code:
"Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "Ile-de-France",
         "SubAdministrativeArea" : {
            "Locality" : {
               "LocalityName" : "Paris",
soit 1 niveau en dessous : ajout du niveau SubAdministrativeArea pour la France
 
WRInaute accro
WRInaute accro
- v2 dépréciée oui
- C'est bien la dernière version

D'ailleurs je ne vois plus la doc pour l'appel de l'API v2 en http, ça renvoie vers la doc de la nouvelle version:
http://code.google.com/intl/fr/apis/maps/documentation/javascript/v2/s ... ing_Direct

The Google Geocoding API has been significantly upgraded and enhanced. This document discusses this newest version of the Geocoding API (V3). Note that the legacy Geocoding API V2 has been deprecated. Users of that service should upgrade to this version.
 
WRInaute accro
Toujours pas d'idées pour la solution ultime ?

C'est très compliqué d'enregistrer la "hiérarchie" afin de pouvoir la réutiliser pour filtrer des résultats, et je n'ai toujours pas trouvé comment je pourrais faire.

Pour le moment je pense enregistrer (sans hiérarchie):
- Soit tout le retour JSON de l'API
- Soit dans une autre table de type clef/valeur, pour y enregistrer ces infos:
Code:
country
administrative_area_level_1
administrative_area_level_2
administrative_area_level_3
colloquial_area
locality
sublocality
postal_code

Si ça intéresse des gens, j'ai fait une petite classe pour y extraire les "GeocodingAddressTypes" à partir du retour JSON (le retour étant assez complexe à traiter):
http://pastebin.com/bgSNj5Mz
 
WRInaute passionné
spout a dit:
Leonick a dit:
la hiérarchie de la réponse est très différente selon les pays
Oui mais elle respecte bien ceci:
country > administrative_area_level_1 > administrative_area_level_2 > administrative_area_level_3 > colloquial_area > locality > sublocality

non ?

Même si pour certains pays le administrative_area_level_2 est le même que administrative_area_level_3.


Je me suis contenté de ça.
Code:
country > administrative_area_level_1 > administrative_area_level_2 > administrative_area_level_3 >  locality
Sans colloquial_area et sublocality, est-ce que je risque d'avoir des soucis ?
As-tu des exemples ?

colloquial_area indicates a commonly-used alternative name for the entity.
Ca je pense pouvoir faire sans.

sublocality indicates an first-order civil entity below a locality
Ici je ne vois pas ce que cela représente.
 
WRInaute accro
J'ai des exemples en Belgique où la "locality" c'est la commune, et le "sublocality" l'ancienne commune.
J'utilise ceci:
Code:
country > administrative_area_level_1 > administrative_area_level_2 > administrative_area_level_3 > colloquial_area > locality > sublocality
 
WRInaute accro
C'est pour mon petit patelin, l'ancienne commune est tjs un nom de village qui existe et c'est le village le plus proche connu par Google Maps (et d'autres trucs: GPS, ...).
Il faut que tu fasses des tests avec une liste d'adresses :wink:
 
WRInaute accro
Un ptit UP pour donner une piste envisageable:

spout a dit:
J'ai bien trouvé des bases de données:
http://download.geonames.org/export/dump/
http://www.geobytes.com/FreeServices.htm (GeoWorldMap)
Mais c'est énormément de données et pas forcément simple à mettre en œuvre dans le sens où chaque pays a ses spécificités (cantons, provinces, communes, départements, états,...).
J'ai testé, l'import de données dans MySQL est plutôt simple et faisable avec une tâche CRON.
http://forum.geonames.org/gforum/posts/list/15/80.page#4570

Il n'y a pas besoin d'importer le allCountries.txt, simplement les pays nécessaires, testé avec BE.txt
Une fois les données importées c'est possible de connaitre la hiérarchie via les "features codes":
http://www.geonames.org/export/codes.html
 
Discussions similaires
Haut