Une des problématiques pour un site hyperlocal glocal est de permettre à l’internaute de se positionner. Le choix est en général de permettre la saisie d’un code postal ou d’une ville. Mais comment transformer cette données en coordonnées géographiques, comment pouvoir ensuite adapter les requêtes de la base de données. Ce problème est tellement courant qu’on pourrait penser que la solution clé en main gratuite pour un serveur LAMP existe déjà…c’est pas tout à fait le cas!

1ère solution, la plus simple: utiliser les geocodeurs de Google ou de Yahoo: en rentrant un code postal ou une ville ces 2 API renvoient une position géographique…cool, oui sauf que la position est pas forcément très précise: notamment avec Google, et finalement les tests que j’ai réalisé montre que Yahoo dispose du meilleur géocodeur pour peu que l’on utilise celui disponible non pas dans l’API mais sur Yahoo Pipes (qui doit être basé sur la version 2 de l’API je suppose). Le pb, Yahoo limite le nombre de requête à son API ou à Pipes de façon très importante (de l’ordre de 5000 requetes par jour si mes souvenirs sont bons).

2ème solution: utiliser une base de données de code postaux/villes géolocalisés, et là c’est pas évident à trouver du tout. D’un coté, La poste propose une base des codes postaux mais elle n’est pas géolocalisée de l’autre l’INSEE propose une base de données des communes françaises. Pas de géolocalisation non plus…Il faut donc parvenir à croiser les données INSEE/La Poste puis géolocaliser le tout via les API Google, Yahoo ou Geonames. Certains ont déjà mâchés le travail: Je pense en particulier à Lion1906 et Galichon, ces bases sont hélas loin d’être parfaite et je suis tombé récemment sur celle-ci qui me semble être la plus complète, hélas impossible de contacter son auteur.

Et vous qu’utilisez-vous ?

Concernant la base de données, attaquer une base via la longitude et la latitude n’est pas forcément ce qui est le plus adapté, en fonction de la précision dont vous avez besoin, il sera sans doute judicieux de transformer vos coordonnées dans une projection permettant un calcul de distance plus simple. La projection Lambert est bien adaptée pour la France et permet un calcul de distance simple (racine carrée de deux soustractions). Les formules de transformations de coordonnées géographiques en coordonnées Lambert sont là:

http://www.ign.fr/telechargement/MPro/geodesie/CIRCE/transfo.pdf
http://www.ign.fr/telechargement/MPro/geodesie/CIRCE/NTG_80.pdf
http://www.ign.fr/telechargement/MPro/geodesie/CIRCE/NTG_71.pdf

Une autre possibilité: utiliser un moteur comme Sphinx qui dispose d’une fontion de geodistance native. Sphinx est un projet opensource extremement performant utilisé notamment par Dailymotion qui ferait tourner 40 serveurs MySQL+SphinxSE.

Et vous qu’utilisez-vous ?

Update: Pour PHP, voir aussi la deuxième partie