Blog arrow Technologie arrow Microformat, json et API google maps


Microformat, json et API google maps

Version imprimable Suggérer par mail
Technologie - Microformat
Écrit par Serge Boué   
10-02-2008
Google Maps présente  les résultats de recherche sous forme de microformat (hcard). Mais ces API ne permettent pas encore de lire directement une page contenant des microformats pour positionner des marqueurs sur une carte.  En se basant sur le formatage hcard présent dans un CV, cet article décrit comment placer sur une carte les sociétés qui m'ont employé.

Mon CV met en oeuvre le microformat hresume en associant une hcard aux sociétés citées.CV de Serge Boué sous forme de carte Chaque hcard précise soit l'adresse soit la position géographique (latitude, longitude). Ainsi, ce document possède les informations nécessaires pour placer les sociétés sur une carte.
Cependant, les API Google Maps ne supportent pas nativement le format hcard en entrée. Il est donc nécessaire de décomposer les hcard pour les soumettre à Google Maps.

La solution nécessite d'extraire les informations de la page microformatée puis de les soumettre à l'API pour géocodage et affichage.

Ainsi, Drew McLellan propose un extracteur de hCard pour PHP : hkit

Ce développement repose sur une classe simple à utiliser qui décompose chaque hcard. Avec peu d'efforts, le résultat de l'extraction peut  être présenté sous forme json.

Ce flux json est récupéré pour alimenter l'API Google Maps. Le site numabilis.com propose un exemple de code traitant des données au format json pour les afficher sur une carte Google Map.

La réalisation consiste  à assembler ces deux morceaux et à prévoir potentiellement le géocodage des adresses. En effet,  deux situations doivent être prévues. Lorsque les coordonnées latitude et longitude de la société sont précisées dans la hcard, il suffit d'afficher le marqueur sur la carte.  En revanche il est nécessaire de solliciter une première fois le géocodeur de Google si seule l'adresse est connue.

Mais quelques subtilités apparaissent.

Le microformat contient une balise « postal-code ». Il faut supprimer le « - » pour que cela devienne un variable valide en javascript.

Google est plus lent pour géocoder une adresse que pour afficher un point sur une carte. Lorsqu'il y a plusieurs adresses à géocoder, un décalage apparaît entre les informations envoyées par Google Map et l'affichage des points sur la carte. Les libellés associés aux marqueurs deviennent incohérents.
Une temporisation entre chaque géocodage doit donc être introduite.

Le site www.wotton.org propose  un batch  pour géocoder plusieurs adresses. Son code a été adapté à notre exemple.

Au final, les sociétés apparaissent les unes après les autres sur la carte. Une bulle donne le nom de la société.
Voici le résultat : un cv à la carte

Cet exemple peut être généralisé à d'autres CV, comme ceux par exemple de LinkedIn qui utilise les microformats. Cependant il existe une seule hcard dans ces CV : celle du possesseur du CV. Pire, Ziki  qui s'appuie sur les CV de LinkedIn, supprime cette référence.

Une prochaine évolution pourrait être l'amélioration du développement de Drew McLellan afin de gérer le microformat hresume. Les informations relatives au poste occupé pourraient figurer dans la bulle des marqueurs.