Géolocalisation des objets et rendu cartographique finement paramétrable.
Le plugin GMap permet de géolocaliser les objets de SPIP (rubriques, articles, documents, brèves, mots-clefs et auteurs) et d’insérer, dans les squelettes et les articles, des cartes qui représentent ces objets. Il est surtout caractérisé par une grande souplesse de paramétrage et de personnalisation.
Plus explicitement, le plugin permet :
Les cartes peuvent utiliser plusieurs fournisseurs de service cartographique, les API Google Maps V2 ou V3 sont implémentée nativement dans le plugfin. Le plugin GMapMXN propose une implémentation basée sur la librairie Mapstraction et donne accès à d’autres fournisseurs, comme Open Layers, Bing et Yahoo. Une implémentation native Open Layers sera bientôt disponible.
À quoi sert ce plugin ?
Compatibilité et installation
Configuration
Géolocalisation
Cartographie
Boucles, balises et modèles
Extensions et personnalisations
Dans la partie privée, le plugin GMap permet d’associer aux objets SPIP une à plusieurs positions. La saisie se fait directement sur une carte. Les objets supportés sont les rubriques, les articles, les documents (il faut installer le plugin Médiathèque pour avoir accès à l’interface de géolocalisation), les brèves, les mots-clefs et les auteurs.
Dans la partie publique, il permet d’ajouter des cartes, soit dans les squelettes soit directement dans un texte édité sous SPIP, pour représenter les objets géolocalisés, des fichiers KML ou encore des points spécifiques.
GMap a été conçu pour permettre de le paramétrer à plusieurs niveaux.
Au niveau du site on peut définir précisément l’apparence des cartes dans le paramétrage : choix du fournisseur de cartes, des commandes affichées, du fond de carte, etc. Tous ces paramètres peuvent être redéfinis ponctuellement, à l’exception du fournisseur de carte qui concerne forcément l’ensemble du site.
À un niveau plus fin, il est possible de redéfinir l’apparence des points sur les cartes et le contenu des bulles d’information pour une rubrique, une branche ou sur un objet spécifique.
Il est également possible de personnaliser la recherche des points à afficher en définissant des requêtes spécifiques sous la forme de squelettes.
GMap est utilisé dans les parties Carnets de Voyages et Galerie Photo de ce site (mais tous les objets ne sont pas géolocalisés… ça viendra).
GMap est prévu pour fonctionner sur une version 2 de SPIP supérieure à 2.0.9. La majeure partie des tests ont été menés sur une version 2.1.10.
En modifiant le fichier plugin.xml, il pourrait probablement fonctionner sur des versions antérieures (le développement ayant débuté sur une version 1.9.2), mais ce n’est pas garanti.
En prérequis, il faut installer SPIP Bonux en version 1.8.1 minimum et, pour la géolocalisation des documents, le plugin Médiathèque.
Le plugin s’installe de façon classique : téléchargement du fichier zip, décompression et copie sur le site, activation par l’interface "Gestion des plugins" de SPIP.
Attention si vous mettez à jout d’une version antérieure à 0.2.0 : les fichiers de définition des requêtes ont changés de noms. Ils se nomment maintenant gmap-kml-** au lieu de gmap-query-**.
Après l’installation, une icone "GMap" apparaît dans le menu de configuration :
Pour que le plugin soit fonctionnel il faut au minimum définir les clefs nécessaires
sur la page de configuration.
Actuellement, GMap permet de créer des cartes Google Maps V2 et V3. Le plugin GMapMXN, qui s’ajoute à GMap, utilise la librairie Mapstraction qui donne accès aux cartes d’autres fournisseurs, notamment Open Layers, Bing et Yahoo.
Par défaut le plugin est paramétré pour utiliser Google Maps API V3, aucune clef n’est nécessaire pour utiliser l’API, mais il en faut une pour profiter de l’extension Google Earth.
Le menu de paramétrage se présente sous la forme suivante :
Le plugin insère dans les pages d’édition des objets SPIP (rubrique, article, document, brève, mot-clef et auteur) une interface qui permet de géolocaliser l’objet. Pour les documents, il faut avoir installé le plugin Médiathèque pour avoir accès à la page de modification d’un document.
L’interface comporte principalement une carte, une zone d’édition des marqueurs et un bouton "Enregistrer" qui permet d’enregistrer les modifications en base de données.
Il est possible d’associer plusieurs points à chaque objet SPIP (la base de données supporte également l’inverse mais je n’ai pas encore implémenté cette fonctionnalité).
L’interface est constituée d’un tableau des marqueurs défini, dont un seul, surligné en rouge est actif sur la carte :
On peut modifier la position, le facteur de zoom associé et le type de marqueur. On peut également ajouter de nouveau marqueur grâce à la commande "ajouter un marqueur" située en dessous du tableau et supprimer les marqueurs grâce à la petite croix rouge à la fin de chaque ligne.
Normalement le positionnement du marqueur actif se fait en cliquant sur la carte et la modification du zoom est modifiant le zoom de la carte. Il est également possible d’éditer directement les valeurs mais cela ne met pas à jour la position de la carte (on peut considérer que c’est un bug).
Les types de marqueurs peuvent être édités depuis l’interface de paramétrage du plugin :
Cette fonction n’est disponible que si l’implémentation de carte offre la fonctionnalité de geocoding.
Après avoir cliqué sur le bouton "Rechercher", une liste des résultats possibles est affichée, chaque point est également représenté sur la carte. On peut copier les coordonnées sur le point en cours d’édition en cliquant sur le petit signe plus à droite du tableau.
Pour les articles et les documents seulement (car ils sont datés), GMap permet de rechercher les cooordonnées des points associés à des objets de même type proches dans le temps et l’espace.
L’interface permet de définir les contraintes de la recherche (temps, position, arborescence) et le nombre de points affichés. Après la recherche, les meilleurs points sont affichés dans le tableau et sur la carte. On peut copier les coordonnées sur le point en cours d’édition en cliquant sur le petit signe plus à droite du tableau.
Par défaut, seule la page de modification accessible par la médiathèque permet de géolocaliser le document, la popup qui s’ouvre depuis l’édition d’un article n’y donne pas accès (c’est un bug que je n’ai pas pu corriger : l’appel à l’interface se faisant en ajax, je n’arrive pas à initialiser les cartes correctement… Si quelqu’un a une idée…).
Pour palier ce petit désagrément, j’ai ajouté un paramétrage dans le plugin pour désactiver automatiquement l’ouverture du popup : le bouton "modifier" renvoie alors sur la page d’édition d’un document.
Pour activer ce comportement, il faut cocher la case "Désactiver l’édition des documents par boîte modale depuis un article" dans la partie "Accès à l’interface de géolocalisation" de l’onglet "Géolocalisation" du paramétrage du plugin.
Après avoir géolocalisé les objets, il reste à produire des cartes pour les représenter sur le site. GMap offre plusieurs moyen de le faire, présenté ci-dessous. Vous trouverez dans la suite une description plus détaillée des balises, modèles et boucles qui permettent de créer des cartes, ce premier survol est surtout destiné à permettre une prise en main rapide du plugin.
GMap propose deux moyens d’intégrer des cartes dans le site public :
Ajouter une balise #GEOMAP permet d’afficher des cartes sur toutes les pages qui utilisent le squelette. C’est donc un moyen partique de généraliser la représentation cartographique des objets, par exemple si vous envisagez de géolocaliser tous les articles ou tous les documents d’une rubrique.
Par exemple, le code ci-dessous, blacé dans une boucle ARTICLES, permet d’ajouter une carte qui représente tous les documents d’un article :
À l’inverse, si la présence de carte reste exceptionnelle sur le site, il est préférable d’utiliser un modèle directement ajouté dans le texte d’un article, d’une rubrique ou de tout autre objet SPIP dont le texte peut contenir des modèles.
Par exemple, le texte ci-dessous permettra de représenter la position d’un unique article géolocalisé, sur une carte de 400 par 200 pixels au zoom 3 :
Ce qui donne (certains exemples de cet article sont des vrais cartes, puisque GMap est actif sur ce site, elles sont entourées d’une bordure) :
L’apparence des cartes peut beaucoup varier, même en conservant la même implémentation (le même fournisseur de service cartographique) : on peut choisir le fond de carte, les commandes présentes (échelle, choix du fond, zoom, etc.).
Pour faciliter la mise au point du site, GMap propose une interface de configuration par laquelle on peut définir l’apparence de la carte et visualiser immédiatement le résultat produit. Ce paramétrage sera valable pour tout le site, à moins qu’il ne soit surcharger localement.
Par exemple, l’ajout du paramètre type dans le texte précédent permet de changer le fond de carte :
Ce qui donne :
Tous les paramètres d’affichage peuvent être surchargés, mais le paramétrage global offre un confort que ne permettent pas les paramètres. Reportez-vous à la documentation intégrée au plugin, reproduite sur l’Océanique, pour plus d’informations.
GMap offre de multiples façons d’ajouter des points sur les cartes. L’éventail des possibilités peut être cerné en lisant la documentation des balises.
Pour commencer, il y a deux techniques :
markers
de la balise #GEOMAP (ou du modèle Le paramètre markers
est utilisable sur la balise #GEOMAP aussi bien que sur la balise #GEOMARKER.
Il a deux modes de fonctionnement :
L’utilisation de la balise #GEOMARKER offre des possibilités plus inédites comme :
Le paramètre markers
permet de désigner une requête permettant d’extraire du site une collection de points géographiques. Ces requêtes sont définies sous forme de squelettes qui renvoient des fichiers aux formats KML ou GeoJSON.
markers=query
, elle permet de récupérer les coordonnées des objets associés à un objet de référence. Pour une rubrique, ce sont les sous-rubriques, les articles, les documents, les brèves et les mots-clefs ; pour un article, les documents et les mots-clefs ; pour un mots-clefs, tous les objets qui y sont liés.markers=articles
) permettant de récupérer les coordonnées de tous les articles, d’un article particulier ou des articles d’une rubrique, d’un auteur, liés à un mot-clef, etc.markers=documents
) permettant de récupérer les coordonnées de tous les documents, d’un document particulier ou des documents liés à un article ou une rubrique.markers=rubriques
) permettant de récupérer les coordonnées de toutes les rubriques, d’une rubrique particulière ou des rubriques ayant un même parent ou d’un même secteur, ou partagenat un mot-clef.markers=racine
) permettant de récupérer les coordonnées des rubriques à la racine du site.markers=auteurs
) permettant de récupérer les coordonnées de tous les auteurs, d’un auteur particulier ou des auteurs d’un article.markers=breves
) permettant de récupérer les coordonnées de toutes les brèves, d’une brève particulière ou des brèves d’un secteur liées à un mots-clefs.markers=mots
) qui permet de récupérer les coordonnées de tous les mots, d’un mot particulier ou des mots liées à un objet.markers=recherche
) qui ajoute les coordonnées des objets répondants à un critère de recherche, cette requête est spécialement destinée à l’ajout d’une carte dans le squelette recherche.html.Ces requêtes étant formalisées par des squelettes, il est possible de les surcharger. En outre, GMap permet d’appeler par le paramètre markers
de nouvelles requêtes conçues pour des besoins qui ne seraient pas couverts par les requêtes déjà prévues (voir le dernier chapitre de cet article sur la personnalisation de GMap).
Voici quelques exemples de ce qu’il est possible de cartographier à l’aide de GMap.
Certains exemples sont donnés avec l’écriture utilisant les balises, pour les squelettes, d’autres en utilisant les modèles, pour les textes. Ces deux écritures sont totalement équivalentes, malgré quelques incohérences dans le nommage des paramètres.
La balise #GEOMARKER permet d’ajouter un point en donnant directement ses coordonnées. Il suffit pour cela de renseigner les paramètres latitude
et longitude
.
Il est également possible d’ajouter un point désigné par une adresse. GMap utilise alors le geocoder pour récupérer dynamiquement les coordonnées du point.
Outre le confort de ne pas avoir à recopier les coordonnées, cette option permet de représenter des objets qui ne sont pas géolocalisé mais comportent une indication d’adresse. Le risque est bien sûr que l’adresse ne soit pas reconnue par le geocoder, auquel cas aucun point n’est affiché.
Par exemple :
Donne :
C’est ce que fait la requête par défaut de GMap. Il suffit d’intégrer une carte avec markers=query
en paramètre :
Ou dans un squelette :
On utilise la requête sur les auteurs, en ne donnant aucune contrainte :
Ce qui donne :
On utilise ici la requête sur les articles en lui donnant une contrainte sur l’identifiant d’un auteur :
Ce qui donne :
Pour permettre le localisation géographique des résultats d’une recherche, GMap contient une requête spécifique : markers=recherche
.
Dans le squelette recherche.html
de la distribution SPIP, la carte s’insère en ajoutant :
Ce qui donne :
Toutes les requêtes contenues dans GMap peuvent être surchargées : ce sont des squelettes que l’on peut spécialier en fonction d’une rubrique (squelette=XX) ou d’une branche (squelette-XX).
Par exemple, en plaçant un fichier gmap-kml-article-54.html
dans le dossier squelettes, on redéfinit la requête par défaut (utilisée quand markers=query
pour les articles de la rubrique 54 et des rubriques descendantes.
De la même manière, on peut surcharger l’apparence des points sur la carte. Pour surcharger l’apparence de points représentant les articles de la rubrique 11, il suffit de placer un fichier gmap-marker-article-11.gmd
dans le dossier squelettes. Il s’agit d’un fichier XML à la syntaxe simple permettant de définir une icone :
Sur les cartes, les points peuvent apparaître avec des icones différentes :
Quand une carte commence à contenir beaucoup de points, il arrive souvent que les icones se chevauchent.
Pour contourner ce problème, GMap propose une fonction de regroupement des bulles d’information qui permet de naviguer entre les descriptions des différents points affichés. La barre de navigation permet également de zoomer la carte pour différencier les points.
Cette fonction est désactivée par défaut, elle s’active depuis le paramétrage de l’interface.
Cette fonction est spécifique à l’implémentation, elle est implémentée pour Google Maps V2 et V3 mais ne le sera pas obligatoirement sur d’autres implémentations.
Pour transmettre les points à afficher au navigateur, GMap utilise par défaut le format KML. Il est donc tout à fait possible de télécharger un fichier KML représentant les points, par exemple pour l’afficher dans Google Earth.
On peut par exemple ajouter dans un squelette :
Ce qui produira un lien sur le fichier :
http://mondomaine/spip.php?page=gmap-query-default&id_rubrique=1&mime=application%2Fvnd.google-earth.kml%2Bxml
La balise #GEOMAP permet d’afficher une carte et, optionnellement, d’y ajouter des points géographique.
Ces caractéristiques ont déjà été illustrées dans le chapitre Cartographie ci-dessus.
La balise essaye toujours de trouver un point de référence parmi les paramètres qui lui sont fournis et le contexte de l’appel (donc les boucles dans lesquelles se trouve la balise).
L’objet de référence est utilisé de façon différente selon qu’on se place du point de vue de la carte ou du point de vue des points à représenter :
viewport
, le paramètre focus
ou les paramètres latitude, longitude, zoom
.Ce double rôle a ses avantages et ses inconvénients : d’un côté il permet de maitriser depuis l’interface de géolocalisation quelle sera l’étendue de la carte, d’un autre il peut amener des effets de bords étonnants. Dans ce dernier cas, on pourra décomposer l’appel à #GEOMAP en deux : un appel de #GEOMAP sans le paramètre markers
suivi d’un appel à #GEOMARKER.
Pour fonctionner correctement, il faut cependant que la balise #GEOMAP soit intégrée dans une div
ayant une hauteur explicite (en pixels), la largeur peut être exprimée en pourcentage. Dans le cas contraire la carte ne peut s’afficher correctement. Si la carte est intégrée dans un bloc dimensionnable ou qui peut être caché (par exemple dans des onglets), il sera nécessaire d’envoyer un évènement resize sur le bloc qui contient la carte afin qu’elle se redimensionne correctement.
La balise #GEOMAP accepte de nombreux autres paramètres qui permettent de surcharger toute l’apparence de la carte (et dont beaucoup dépendent de la couche d’implémentation de la carte). Ce serait long de tout détailler ici, référez-vous à la documentation intégrée au plugin.
Cette balise permet d’ajouter manuellement des points sur la carte. Les coordonnées peuvent être fournies explicitement, ou elle peuvent provenir d’un élément géolocalisé dans SPIP.
Si plusieurs balises GEOMAP sont présentes, on peut utiliser le paramètre map=X
pour donner un numéro à la carte et lever les ambiguïtés. Sans ce paramètre, le marqueur sera ajouté sur la dernière carte créée au moment où la balise GEOMARKER est interprétée.
Cette balise permet d’ajouter un fichier KML sur la carte.
Si plusieurs balises GEOMAP sont présentes, on peut utiliser le paramètre map=X
pour donner un numéro à la carte et lever les ambiguïtés. Sans ce paramètre, le marqueur sera ajouté sur la dernière carte créée au moment où la balise GEOKML est interprétée.
Ce sont les équivalents des balises #GEOMAP et #GEOMARKER pour l’insertion dans les textes des éléments de SPIP.
L’utilisation et les paramètres sont les mêmes, à une exception notable près : tous les identifiants doivent être accompagnés d’une valeur numérique car le modèle n’accède pas au contexte.
On peut donner un numéro à la carte par le paramètre carte
, ceci permet de placer les marqueurs avant ou après la carte elle-même :
Note : pour une raison que je saisi mal, un modèle sans paramètre (seulement <map>
ne fonctionne pas. On peut s’en sortir en mettant un paramètre quelconque :
Le plugin introduit également une boucle GEOPOINTS qui permet de parcourir les points associés à un objet et une boucle GEOTEST qui permet de tester si un objet ou ses descendants sont géolocalisés.
GMap a été conçu pour être personnalisable, il offre donc de nombreuses possibilités pour redéfinir les cartes.
La personnalisation est basée sur un mécanisme très proche de celui qu’utilise SPIP au niveau des squelettes : les requêtes sur les points, les icones et le contenu des info-bulles sont définis par des squelettes que l’on peut surcharger pour l’ensemble du site, pour une rubrique ou pour une branche. De plus, les icones et le contenu des info-bulles peuvent être définis selon le type d’objet et le type de point qu’ils représentent.
La combinaison des paramètres markers
et query
des balises #GEOMAP
et #GEOMARKER
permet de récupérer les points à afficher en exécutant une requête sur le serveur. Cette requête est définie dans un squelette qui renvoie un fichier au formats KML ou GeoJSON. Il est assez facile de redéfinir des fichiers de requête et de les intégrer dans le fonctionnement de GMap.
Ces fichiers sont traités comme des squelettes qui renvoient un fichier XML, ils peuvent donc contenir des boucles.
GMap contient plusieurs fichiers de requête qui peuvent servir d’exemple : gmap-kml-default.html
, gmap-kml-articles.html
, gmap-kml-documents.html
, etc.
Une description plus détaillée des la surcharge des requête est disponible dans l’aide en ligne du plugin et reproduite sur loceanique.org.
GMap permet également de définir des icones spécifiques pour chaque type d’objet, chaque type de point et par rubrique ou branche.
Il ne permet par contre pas, dans la version actuelle, de choisir une représentation spécifique depuis la partie privée du site, il faut forcément ajouter des fichiers sur le serveur.
Les icones utilisées sur les cartes ne sont pas de simples images :
Pour cette raison, il ne suffit pas de fournir une image pour changer l’apparence des marqueurs. GMap utilise donc un fichier XML de définition des icones qui porte l’extension .gmd.
Comme les fichiers de requêtes (voir ci-dessus), les fichiers de définition des icones peuvent être surchargés selon les objets, les types de points ou les rubriques auxquelles appartiennent les objets représentés.
Selon le même principe, le contenu des bulles d’information est défini dans des fichiers squelettes dans lesquels on peut utiliser des boucles SPIP.
Le stylage des info-bulles est contenu dans un fichier style/gmap-balloon.css
, il permet de redéfinir le look des bulles sans toucher à leur contenu.
Attention : en redéfinissant les fichiers gmap-info-*.html, on pourrait penser s’affranchir de gmap-balloon.css, mais ce n’est vrai que pour les fichiers KML lus dans Google Earth. En effet, en interne, seul le contenu de la balise <body></body>
est conservé et le style des info-bulle se fait en intégrant gmap-balloon.css dans la page HTML qui contient la carte.
Lorsque la fonction de regroupement des info-bulles est activée, l’apparence de la barre de navigation est figée, on ne peut la modifier qu’en redéfinissant le fichier style/gmap-balloon.css
.