Google maps avec une application rubyonrails : le gem qui geocode !

Avec l'api Google maps (v3 et antérieure) il est possible d'utiliser le géocoder de Google maps. Celui permet de trouver les positions longitude et latitude en fonction d'une adresse. Bien pratique (on est pas tous capable de faire ça de tête hein !). Le problème est qu'on est limité dans le nombre de requête (environ 10) via le géocoder par seconde. On se retrouve à faire des trucs bizarre en javascript.

C'est là que le gem geocoder nous aide bien dans un before_save il appelle l'API de Google Maps (mais pas que !) pour mettre à jour les positions dans la bdd. Il faut donc ajouter un champ latitude et longitude. Ne changez pas le nom de ces champs. Ensuite vous dites quel champs (ou méthode) renvoie l'adresse complète.

Dans le model :

# adresse complète
geocoded_by :full_address
# _changed? est une fonction de rails pour tous les attributs et renvoie true si le champ a changé !
after_validation :geocode, :if => :address_changed?
# Pour moi voici la méthode full_address :
def full_address
"#{self.address.gsub(/"/,'\"')}#{self.postcode}#{self.city}"
end

Et hop tout est transparent ! Plus qu'à se concentrer sur le javascript dans utiliser de geocoder en JS.

Doc : https://github.com/alexreisner/geocoder

Site officiel : https://www.rubygeocoder.com/