Le géocodage (comparaison)

Dans ce premier post un peu plus technique, je vous présente quelques considérations sur le géocodage. Le géocodage est l’action d’attribuer des coordonnées géographiques à un lieu décrit par une adresse. Cela peut être aussi bien l’adresse d’un magasin, qu’un lieu-dit comme par exemple le sommet du Matherhorn. Le géocodage permet donc le géoréférencement de données, c’est la base de tout travaux cartographiques. Avec la place toujours plus grande prise par les données dans notre société, nous sommes de plus en plus confrontés à la nécessité de géocoder pour les exploiter au mieux.

Dans le cadre d’un projet de data-mining, diverses options de géocodage s’offrent à nous. Prenons par exemple les 5 options suivantes, sous forme d’API (ce n’est très certainement pas exhaustif) :

– Google via son API de géocodage,

– Nokia avec son API Here, peut être un peu moins connue,

Nominatim qui se base sur les données libres d’OpenStreetMap, plus confidentiel tout comme,

Opencage (un package R) qui se base également sur OpenStreetMap mais également sur d’autres sources.

La cinquième option me direz vous, … je vais tester le package R (ggmap) qui a une fonction de géocodage liée à l’API de Google. Je cherche juste à m’assurer de la stabilité des résultats, on est jamais trop prudent avec des données tierces. Je ne vais pas parler programmation ici, nombreuses sont les sources pour vous former dans le domaine, cela ne ferait qu’allonger inutilement ce post.

Ici, pour notre petit test, les adresses sont récupérées dans le cadre de ce projet. J’ai segmenté la base de données pour obtenir celles du canton de Neuchâtel, en Suisse. Le format des adresses n’est pas de mon ressort, ce sont des données brutes récoltées telles quelles. Je ne vous présente pas le tableau montrant le résultat du géocodage (les coordonnées géographiques), mais plutôt celui de la distance entre les points géoréférencés pour une même adresse , car c’est plus parlant. Ici, les résultats de l’API de Nokia sont utilisés comme point de comparaison (c’est un choix arbitraire). Cette distance est obtenue en utilisant la fonction distVincentyEllipsoid() disponible dans le package R « geosphere ».

Tableau 2: Ecarts de géocodage donnés en mètres.  « NOK_GOO »,    « NOK_OPEN » et   « NOK_OSM »  sont respectivement les écarts entre l’API Here de Nokia et l’API de Google, le package R Opencage, l’API de Nominatim. « GOO_GGMAP » représente les écarts issus de l’API Google, sans et avec le package R ggmap. L’API Here et Google ayant retournées des coordonnées pour toute les adresses, toute absence d’écart dans une colonne est à imputer à une absence de codage retourné par l’API qui est comparée (un exemple notable: NOK_OSM).

 

Ce sont donc les résultats de Nokia et Google qui sont les plus homogènes et j’imagine les plus précis (note pour plus tard, aller sur ce site et relever les coordonnées pour toute discussion sérieuse de cet aspect). Avec un écart médian à 0.43m (premier quartile : 0.28m ; troisième quartile : 2.63m) entre ces deux API, ça touche à la perfection !

Il y a quand même des écarts notables avec l’écart le plus important à près de 3 km. L’origine des écarts n’est pas unique :

– d’une part il y a les adresses imprécises, ne mentionnant pas de numéro de rue. C’est le cas par exemple de « Draizes   2000 Neuchâtel » mais aussi d’ « Avenue des Cadolles   2000 Neuchâtel » générant respectivement des écarts de 460m et 210m. Les deux API font ici au mieux et doivent attribuer une valeur (moyenne ?) pour la rue. Au regard de l’étendue des deux rues la différence entre les écarts semble bien liée à l’étendue de ces objets dans l’espace.

– d’autre part, il y a le format de l’adresse. L’écart le plus important est d’environ 3km et correspond à « F.C. de Marval 8   2000 Neuchâtel ». Pour une autre adresse, « Rue Frédéric-Carl-de-Marval 1   2000 Neuchâtel », il y a 10m d’écart entre les deux géocodages. Il s’agit de la même rue s’inscrivant dans un rectangle de 290mx35m… En regardant de plus près les coordonnées obtenus, il semble que ce soit le moteur de Nokia qui rate la cible pour la première adresse, c’est sans doute un effet de l’abréviation de l’adresse.

Concernant les autres sources de géocodage, la qualité chute drastiquement. Le graphique ci-dessous montre les différences de géocodage entre Here et Nominatim. Comme le montrent les lignes bleues reliant un à un les coordonnés attribués aux adresses (identiques), les écarts de géocodage sont importants, les pointages les plus éloignés sont à plus de … 100km !!

 

 

Le graphique ci-dessous montre les différences de géocodage entre Here et Opencage. Comme le montrent les lignes vertes construites sur le modèle du graphique précédent, les pointages les plus éloignés, sont à près de 90km. Ici, un problème supplémentaire est à souligner. De nombreuses adresses (64/81) sont géocodées en un même point (entouré en rouge: si le cercle rouge n’est pas visible, rechargez la page svp,  je pense que wordpress ou le plugin Wp pour D3 ne fonctionne pas parfaitement parfois)!

 

 

Quelles conclusions tirer de ce test ?

Premièrement, ce test est réalisé avec des adresses en Suisse, on peut s’attendre à des comportements différents suivant les pays.

Considérant Nominatim et Opencage, le premier n’a pas de limite définie quant au nombre de codages, hormis qu’il ne faut pas abuser de leurs serveurs. Nominatim ne renvoie pas toujours un résultat par contre. Le second limite les codages à 2’500 par jour et retourne toujours un résultat. Tout deux donnent par contre des résultats dont la précision laisse grandement à désirer.

Si l’on recherche de la précision, Google et Nokia vous fourniront les meilleurs services. Après plusieurs tests sur d’autres sets d’adresses, si Google fait moins de fautes de codage, il ne donne pas toujours de résultats (mais c’est assez rare), contrairement à Nokia. Autre aspect à prendre en compte, le nombre de codage, 2’500/jour pour Google et 15’000/mois pour Nokia, le tout gratuitement. Vous pouvez bien évidemment payer pour plus de codages.

Attention toutefois aux conditions générales d’utilisations (si vous les suivez), Google impose que toutes visualisations utilisant leurs données soient réalisées avec googlemap. En d’autres termes, vous n’êtes pas censé les utiliser sur une carte de votre conception, ce qui est bien dommage ! Quant à Nokia, les conditions générales ne stipulent pas ce type de restriction.

Et cette 5ème option ? Les résultats obtenus par l’API Google avec ou sans le « filtre » du package R (ggmap) ne sont pas identiques !?! 4 adresses sur les 81 testées nous retournent des coordonnées différents avec des erreurs de 15m à 300m et une adresse n’est pas codée, soit 6% de différence tout de même.

Il faut donc bien prendre garde de ne pas mixer vos sources ni vos outils de géocodage pour ne pas introduire d’erreurs, souvent importantes. Ceci est vrai si c’est vous qui réalisez ce géoréférencement, mais il faut également se poser  cette question si c’est une tierce personne qui l’a réalisé!

Connaitre ses données est un prérequis à toute analyse.

Bon géocodage !

Mise à jour:  pour de plus amples informations, je viens de trouver ce site où de très nombreuses sources sont comparées (pour les Etats Unis).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *