Présentation et nouveautés
GIS2 est une mise à jour majeure du plugin GIS Escoitar. Le plugin permet d’attacher des points géolocalisés aux objets de SPIP afin de les afficher sur des cartes dans les pages de votre site.
GIS2 utilise une librairie javascript qui permet de jouer avec les cartes de plusieurs APIs et de basculer d’un fournisseur à un autre sans avoir à modifier le code des cartes. Cette librairie d’abstraction s’appelle Mapstraction. Elle est distribuée sous licence BSD sur github.
Grâce à Mapstraction, GIS2 permet d’afficher les cartes de Google Maps API v2 et v3, Openlayers, Yahoo Maps, Microsoft Bing, etc.
Un autre avantage de Mapstraction est qu’elle permet aussi aux développeurs de coder leurs cartes persos avec le code natif de chaque API quand c’est nécessaire (pour jouer avec un système de cluster de marqueurs par exemple).
Le plugin a été totalement recodé, voici quelques unes des modifications les plus importantes :
- les points sont maintenant des objets autonomes qui peuvent être liés à n’importe quel type d’objet SPIP (article, rubrique, auteur, etc) ;
- chaque point dispose d’un titre, d’un descriptif et d’un logo personnalisé ;
- un point peut être lié à plusieurs objets et un objet peut être lié à plusieurs points ;
- la balise
#LONX
a été renommée en#LON
; - les cartes utilisent du JSON pour charger les marqueurs ;
- le plugin prend en charge la migration des données depuis GIS v1 ;
- un nouveau critère distance permet de filtrer les points d’une boucle (voir plus bas).
Certaines APIs permettent d’utiliser des fonctions de géocodage et de gécodage inversé. Le géocodage (ou geocoding) consiste à récupérer les coordonnées géographiques d’une adresse. Le géocodage inverse (ou reverse geocoding) consiste à récupérer l’adresse de coordonnées géographiques.
Fonctions disponibles dans les différentes APIs
Les APIs marquées par une * nécessitent une clé pour être utilisées.
API | Cartes et marqueurs | Logo des marqueurs | KML | Geocoder |
---|---|---|---|---|
Cloudmade * | oui | oui | non | non |
Google Maps V2 * | oui | oui | oui | oui |
Google Maps V3 | oui | oui | oui | oui |
OpenLayers | oui | oui | oui | oui |
Ovi Nokia | oui | oui | non | non |
Yandex * | oui | oui | non | oui |
Installation et configuration
Ce plugin nécessite la librairie externe Mapstraction. Lors de son activation, SPIP vous proposera de récupérer la librairie automatiquement dans le dossier /lib situé à la racine de votre site (pensez à créer ce dossier s’il n’existe pas sur votre installation).
Ce plugin nécessite aussi les plugins suivants :
- Saisies
- Spip Bonux
- Afficher Objets
- CFG
GIS2 n’est pas compatible avec le plugin Google Maps API. Il faut donc désactiver ce dernier avant d’activer GIS2.
Une fois installé, le plugin est configurable depuis la page ecrire/?exec=cfg&cfg=gis
:
Cette page permet de définir les options suivantes :
- Coordonnées et zoom par défaut à utiliser dans les cartes ;
- API de cartographie à utiliser ;
- Utiliser les fonctions du geocoder ;
- Afficher les champs d’adresse dans les formulaires d’édition des points ;
- Centrer la carte sur l’emplacement de l’utilisateur lors de la création d’un point (API de géolocalisation HTML5).
Utilisation dans l’espace privé
Le plugin ajoute un bloc sur les pages des éléments de SPIP dans l’espace privé. Ce bloc se déplie au survol de la souris. Les liens situés en tête du bloc déplié permettent de basculer d’un panneau à une autre :
- Points liés affiche la liste des points liés à l’objet en cours avec la possibilité de détacher ou supprimer chaque point ;
- Rechercher un point affiche un formulaire pour rechercher un point existant et le lier à l’objet en cours ;
- Lier un nouveau point affiche le formulaire d’édition de point pour en créer un nouveau et l’attacher à l’objet en cours .
Une page de gestion des points du site est accessible depuis le menu Édition > Points géolocalisés.
Depuis cette page, vous pouvez accéder à la fiche d’édition de chaque point afin d’en modifier les coordonnées, les champs d’adresse ou le logo.
Utilisation du modèle pour insérer des cartes dans vos pages
Pour insérer une carte dans un squelette, utilisez le modèle fourni par le plugin en insérant le code suivant à l’endroit où vous souhaitez afficher la carte :
[(#MODELE{carte_gis, zoom=X, type=xxx, control_zoom=xxx})]
Vous pouvez aussi utiliser le modèle fourni par le plugin pour afficher une carte depuis le contenu d’un article. Pour cela, il suffit d’ajouter ce code dans le texte de votre article :
<carte_gis1|zoom=X|type=xxx|control_zoom=XXX>
Lire la documentation à propos des modèles sur spip.net.
Paramètres du modèle
paramètre | valeurs |
---|---|
id_carte_gis | id unique de la carte (à définir si plusieurs cartes sont affichées sur une même page) |
lat = 48.3 | latitude du centre de la carte |
lon = -4.7 | longitude du centre de la carte |
zoom = 5 | zoom de la carte |
width = 100% | largeur de la carte, 100% par défaut |
height = 400px | hauteur de la carte, 400px par défaut |
style = non | ne pas styler la carte |
zoom_molette = non | désactiver le zoom avec la molette de la souris, actif par defaut |
type = carte | type de la carte : carte, satellite, relief ou hybride |
control_zoom = large | type des contrôles pour le zoom : large, small |
control_pan = non | ne pas afficher les contrôles de déplacement dans la carte |
control_type = non | ne pas afficher les contrôles de changement de type |
no_control = oui | ne pas afficher les contrôles de la carte |
overview = oui | afficher une mini carte de situation |
scale = oui | afficher l’échelle de la carte |
limit = 500 | nombre max de marqueurs à afficher, 500 par défaut |
objets = gis | type d’objets à afficher (fichier json/gis_xx qui génère la source de données) |
autocenterandzoom = oui | centrer et zoomer la carte automatiquement pour afficher tous les marqueurs |
autofocus_marker = oui | permet de forcer l’affichage d’une seule infobulle à la fois |
id_a_ouvrir | id_gis de l’infobulle à afficher au chargement (marqueur uniquement) |
kml = 12 | kml à superposer à la carte (id_document ou url) |
localiser_visiteur = oui | centrer la carte sur la position du visiteur (API géolocalisation HTML5) |
point = non | si elle vaut « non » cette option n’affichera pas de points du tout (utile pour n’afficher qu’un kml par exemple) |
Le paramètre objets
Ce paramètre vous permet de spécifier quel type d’objet vous souhaitez afficher sur la carte. Il peut prendre les valeurs suivantes : gis (valeur par défaut), articles, auteurs, mots.
Si le paramètre « objets » vaut « articles », vous pouvez utiliser en paramètre du modèle tous les critères utilisables sur une boucle ARTICLES.
D’un point de vue technique, le paramètre objets permet de définir quel fond sera utilisé pour générer les données JSON qui alimenteront la carte. Lorsque le paramètre « objets » vaut « auteurs », c’est le squelette plugins/gis/json/auteurs.html
qui est utilisé.
Quelques exemples de cartes
Afficher les articles de la rubrique n°2 et superposer le KML correspondant au document n°2 :
[(#INCLURE{fond=modeles/carte_gis,
objets=articles,
id_rubrique=2,
zoom=7,
lat=48.214378965824345,
lon=-4.543704986572266,
kml=2})]
Afficher le ou les points liés à l’article n°2 et centrer la carte automatiquement pour afficher tous les points :
[(#INCLURE{fond=modeles/carte_gis,
autocenterandzoom=oui,
id_article=2})]
Afficher les points liés aux articles de l’auteur n°1 :
[(#INCLURE{fond=modeles/carte_gis,
objets=articles,
id_auteur=1,
zoom=5})]
Afficher les auteurs du site :
[(#INCLURE{fond=modeles/carte_gis,
objets=auteurs,
zoom=5})]
Boucles et balises
Voici la liste des balises disponibles dans une boucle GIS : #ID_GIS
, #TITRE
, #DESCRIPTIF
, #LAT
, #LON
, #ZOOM
.
Et si vous avez activé le geocoder ou que vous avez rempli les champs d’adresse à la main : #ADRESSE
, #PAYS
, #CODE_PAYS
, #REGION
, #VILLE
, #CODE_POSTAL
.
Critère gis
Depuis la version 2.2.0, le critère {gis}
permet de forcer une jointure sur la table GIS dans les boucles des autres objets. Ainsi, une boucle ARTICLES qui comporte le critère {gis}
, affichera uniquement les articles attachés à un point.
Les informations de ce point pourront être affichées avec les balises suivantes : #TITRE_GIS
et #DESCRIPTIF_GIS
, #ADRESSE_GIS
, #PAYS_GIS
, #CODE_PAYS_GIS
, #REGION_GIS
, #VILLE_GIS
, #CODE_POSTAL_GIS
.
Remarque : les balises sont suffixées afin d’éviter tout problème de champ homonyme avec un autre plugin.
<BOUCLE_gis(ARTICLES){gis}{id_rubrique ?}>
#ID_GIS - #LAT - #LON - #ZOOM <br/>
Titre de l'article : #TITRE <br />
Descriptif de l'article : #DESCRIPTIF <br />
Titre du point : #TITRE_GIS <br />
Descriptif du point : #DESCRIPTIF_GIS <br />
</BOUCLE_gis>
Critère distance
Le critère {gis distance<XX}
permet de filtrer les résultats d’une boucle GIS en fonction de la distance (en kilomètres) par rapport au point présent dans l’environnement.
Par exemple, pour lister les points situés à moins de 50 kilomètres du point numéro 1 :
<BOUCLE_m(GIS){id_gis=1}>
<p>#TITRE / #LAT / #LON</p>
<BOUCLE_b(GIS){gis distance<50}>
<p>#ID_GIS / #TITRE / #DISTANCE km</p>
</BOUCLE_b>
Formulaire d’édition de point
Le formulaire #FORMULAIRE_EDITER_GIS
permet de créer ou modifier un point. Vous pouvez l’utiliser dans vos squelettes en respectant la syntaxe suivante :
#FORMULAIRE_EDITER_GIS{id_gis, objet, id_objet, retour, ajaxload}
Définition des paramètres du formulaire :
- id_gis : identifiant numérique du point ou vide pour créer un nouveau point
- objet : le type d’objet auquel est attaché le point
- id_objet : id_objet de l’objet auquel est attaché le point
- retour : url de retour vers laquelle le formulaire redirigera après validation
- ajaxload : initialiser la carte à chaque onAjaxLoad()
Par exemple, voici un extrait de code qui permet de modifier le point attaché à un article ou d’en créer un nouveau s’il n’y en a pas déjà un attaché à l’article.
<BOUCLE_unpoint(GIS){id_article}{0,1}>
#SET{id_gis,#ID_GIS}
</BOUCLE_unpoint>
#SET{id_gis,nouveau}
<//B_unpoint>
#FORMULAIRE_EDITER_GIS{#GET{id_gis},'article',#ID_ARTICLE,#URL_ARTICLE}
Personnalisation
Icône par défaut des marqueurs
Il est possible de définir une icône par défaut pour les marqueurs des cartes. Pour cela, il suffit de déposer l’image de votre icône personnalisée dans votre dossier squelettes :
squelettes/images/marker_defaut.png
L’icône utilisée par défaut dans GIS est une image de 24x32 pixels.
Discussions par date d’activité
128 discussions
J’ai voulu essayer OpenLayers, mais le controle de Zoom ne s’affiche pas quelque soient mes tentatives.
Le problème est-il connu ? Comment faire ?
Salut, comme d’habitude il nous faut plus d’infos pour t’aider :
++
Coté code, j’’ai essayé avec autant de combinaison des paramètres que j’ai pu penser, sans résultat
Le code de base reste (dans une bouche articles)
Ce qui est frustrant, c’est que l’outil de zoom s’affiche sans soucis sur le plan dans la partie privée, mais rien de tel dans la partie publique.
Même la molette est fonctionnelle.
Desolé, le site est en localhost, et je n’ai pas le droit de rendre accessible, sauf si tu me file ton IP en direct pour l’autoriser explicitement.
Ha ben dommage, comme je le signale dans le PS de cet article, impossible d’aider sans lien vers la page qui pose problème. Bon courage ++
Comme signalé, si tu m’envoies ton IP, tu pourras regarder. Je tache te te capter sur le chat.
Bonsoir, est-ce que c’est possible Dut que tu mettes ici comment tu as solutionné ton pb avec control_zoom ?Je rencontre le même... Merci
Bonjour,
b_b sur le chat à confirmé le problème et à commité le correctif ici même.
Merci pour l’info et surtout maerci pour le correctif !
Répondre à ce message
Bonjour,
je souhaiterais utiliser ce plugin avec openlayers, mais le plugin open_layers n’est plus dispo sur la zone... Y a-t-il une autre façon de faire ?
merci
Salut, le plugin openlayers n’est plus nécessaire, GIS2 importe automatiquement la librairie Mapstraction qui permet de gérer les cartes des différents fournisseurs listés au début de cet article.
++
Super, merci !
Répondre à ce message
Je viens de mettre à jour le plug sur mon site, tout fonctionne bien :-)
Par contre, il ne faudrait pas qu’après avoir télécharger la nouvelle librairie, il supprime l’ancienne ?
Car là, nous sommes obliger de le faire via FTP, cela ne sert à rien qu’elle reste, surtout quand il n’y a pas d’autres plug qui l’utilise
Salut,
C’est le comportement normal de SPIP de ce côté (c’est le core qui gère les chargements des libraires). Si tu considères que c’est un bug il faut le signaler sur la liste spip-dev. Cela ne pose pas de problème technique, mis à part le fait que les vielles libs restent sur le serveur. Mais bon, à moins de 200Ko la lib ça devrait pas trop bouffer d’espace.
++
Répondre à ce message
Bonjour tout le monde,
J’utlise ce plugin dans les onglets du CS (Découpe en pages et onglets), mais la carte ne se charge pas ! voir image jointe . Par contre avec google map quand je placé le #INSERT_HEAD aprés le #TEXTE la carte s’affiche sans problème mais avec GIs2 impossible
J’ai quelque chose de tout à fait similaire :
http://www.spip-contrib.net/Des-blocs-depliables#forum454552
J’en avais après les blocs dépliables, car c’est dans ce contexte que ça apparait.
J’ajoute qu’avec les fonds openLayer, je ne rencontre par ce soucis.
Merci pour votre réponse, c’est vrai qu’avec openlayer on dirait le problème disparait, mais serait bien de l’avoir en google maps v3. Est ce que quelqu’un d’autre peux nous aidé à corriger ce problème ? Merci
Répondre à ce message
Bonjour et bravo pour ce plugin qui marche merveilleusement bien.
Est-il possible de limiter les objets auxquels le plugin ajoute le bloc GIS ?
Exemple : je souhaiterais que dans l’espace privé, le bloc GIS n’apparaisse que pour l’édition des auteurs.
Il y a probablement un fichier (ou plus) à modifier...
Merci z’en tout cas.
Apparemment dans le SVN, Rastapopoulos avait déjà étudié la question (Changeset 54899), mais il semble que sa contribution n’ait pas encore été intégrée...
Salut, oui cette fonctionnalité n’est pour l’instant présente que dans la version dev de GIS compatible avec SPIP 3. Il n’y a plus qu’à attendre que quelqu’un soit motivé pour la reporter sur la version pour SPIP 2.1.
++
Bonjour,
Dans la continuité de cette idée, est-il envisagé d’étendre gis à d’autres objets, en particulier aux événements du plugin Agenda ?
Merci.
Salut, comme l’indique la description du plugin, il est déjà possible d’attacher des points à tous les objets de SPIP (ceux du core et les autres). Par défaut GIS ne s’insère que sur les objets du core. Je ne pense pas que ça soit à GIS de décider s’il doit afficher le bloc d’édition de carte sur les objets des autres plugins.
Le code qui permet d’afficher le bloc de GIS sur la page d’un objet passe par le pipeline affiche_milieu et se trouve ici :
http://zone.spip.org/trac/spip-zone/browser/_plugins_/gis/branches/v2/gis_pipelines.php#L89
Pour afficher le bloc de GIS sur les événements de l’agenda (ou sur des patates ou des chats) il faut ajouter une déclaration similaire dans un fichier d’options perso (ou celui du plugin qui le nécessite).
++
Bonjour,
Merci b_b pour ta réponse et ce plugin...
Voici le code que j’ai ajouté à mon fichier mes_options.php pour que GIS soit utilisable avec les événements du plugin Agenda2 :
Remplacer le nom_de_la_fonction par ce que vous voulez (attention à ne pas choisir un nom dont le préfixe correspond à un des plugins installés sur votre spip).
Merci pour ce code ! effectivement cela permet de localiser une entrée d’agenda.
Par contre le marqueur ne n’affiche pas lors de la restitution
mon code :
Répondre à ce message
Hello !
Est-ce que vous arrivez à utiliser le paramètre control_zoom avec large ? Car chez moi il ne l’interprète pas et affiche toujours le zoom dans sa version petite.
Voici mon code :
Merci à vous pour les pistes éventuelles... :)
Sebbesac
Répondre à ce message
Salut !
Merci pour ce plugin. j’ai vraiment plaisir à l’utiliser.
Y-a quand même des choses que je souhaiterai personnaliser.
Y-a moyen de surcharger, par exemple, le fichier ./json/gis_sites.html , avec un autre squelette ??
Si oui, comment ?
J’ai essayé en plaçant un fichier avec le même nom et la même arborescence dans un plugin différent, et ... pas bon.
A suivre ...
Salut Ludo,
Oui, comme l’indique la doc, le paramètre « objets » du modèle est prévu pour ça. S’il vaut toto alors le fond utiliser pour alimenter la carte sera json/toto.html.
Oui c’est aussi possible, mais un plugin qui veut surcharger un autre plugin doit le déclarer dans son plugin.xml avec la balise utilise.
http://programmer.spip.org/Gestion-des-dependance
++
Répondre à ce message
Bonjour,
Ce plugin me parait excellent et semble correspondre à mon besoin.
Je suis en train de tester le site. Malheureusement, j’ai un souci :
- J’ai installé le plugin,
- J’ai mis une adresse dans l’espace privé et la carte apparait correctement dans l’espace privé.
- Par contre, sur le site public... La carte qui apparait, c’est celle qui est par défaut... et non celle que je vois dans l’espace privé.
Voici mon site de test avec l’article fautif :
http://messemonde.free.fr/SPIP2/spip.php?article7
C’est un site qui utilise les crayons, donc vous pouvez voir ce que j’ai mis comme paramètre pour faire apparaitre la carte en cliquant sur le petit crayon à droite du champs.
Dans l’article en lien, En bas, j’ai mis une image de l’écran que je vois dans la partie privé et je voudrai faire apparaitre la carte de la même manière dans la partie publique.
Salut, la première chose à faire est de configurer la position par défaut des cartes depuis la page de configuration du plugin.
Ensuite, il faut que tu passes la paramètre adéquat à ta carte pour que celle-ci se centre automatiquement sur le point que tu souhaites afficher : autocenterandzoom=oui devrait t’être utile.
Pour info, je ne peux pas voir le code que tu as utilisé sur ton site (les crayons sont réservés aux personnes enregistrées par défaut).
Tout d’abord merci pour cette réponse rapide.
Le paramétrage du crayon semble fonctionner pour tous ; c’est pour faire une espèce de wiki-annuaire (je viens de tester avec un autre navigateur où je ne suis pas connecté et j’ai vu le crayon en haut à droite du champ modifiable)
Pour revenir à GIS, je viens d’ajouter le paramètre autocenterandzoom=oui et voici les paramètres que j’ai mis :
<carte_gis3|zoom=7|type=carte|control_zoom=small|autocenterandzoom=oui>
Maintenant la carte se centre sur l’ensemble des points que j’ai mis sur le site et non sur le point 3 associé à l’article en cours, comme on voit dans la partie privée.
Voir ci-dessous le paramétrage général de GIS2
Je précise ma demande : Dans chaque article, j’ai une adresse. Grâce au géocodage, j’obtiens un point qui affiche un marqueur.
Dans la partie publique, je voudrais afficher une carte centrée sur le marqueur correspondant à l’article. Cela doit être possible et même surement facile, vu que cela fonctionne dans la partie privée ?
Salut, dans ce cas il faut spécifier quel points tu veux afficher sur ta carte avec les paramètres suivants :
objet=articles|id_article=7
(tout ça est dans la doc ci-dessus bien sûr).Mais si tu veux automatiser tout ça il serait pus simple d’appeler la carte directement depuis tes squelettes et non pas depuis le texte de l’article.
++
YEEES ! Merci beaucoup.
Comme j’utilisai le modèle par défaut, j’ai lu la doc et je me basai sur le tableau « Paramètres du modèle » qui ne traite pas de ces paramètres.
Oui, pour l’automatisation, je vais le faire. Je me débrouille avec les squelettes spip. Mais je voulais d’abord valider les fonctionnalités tels que les crayons et GIS2.
Merci pour ta réactivité et je te prie de m’excuser pour le dérangement.
Bonne soirée
Emmanuel
Cool que ton problème soit réglé.
Calomnie ! ^^ Le tableau de description des paramètres du modèle mentionne bien le paramètre objets et un paragraphe dédié est situé juste en dessous du tableau ;)
++
Oui tu as raison ; c’est juste que je n’avais pas compris l’enchaînement.
Répondre à ce message
J’ai juste oublié de demander : aider moi s’il vous plait, dites moi ce que j’ai mal fait.
Merci par avance
Emmanuel
Répondre à ce message
Salut
Magnifique intégration, bravo !
Concurremment installé avec le plugin agenda, j’ai eu un soucis quand j’ai voulu afficher l’adresse d’un point sur ma carte. La boucle de
json/gis_articles.html
allait chercher l’adresse de l’événement au lieu de celle du point gis.En ajoutant les codes suivantes dans le fichier
gis_fonctions.php
, j’ai pu régler ce problème :- ligne 118 :
- ligne 166ss :
Dès lors il est possible d’appeler la balise #ADRESSE_GIS en levant l’ambiguïté avec la balise #ADRESSE de événement.
olé
Salut Yannick et merci pour le signalement. Je regarde si je peux corriger ça dès que possible. Je vais essayer de trouver une solution sans créer une balise ADRESSE_GIS car je sens qu’on finira par créer une balise PAYS_GIS, etc. ;)
++
Et voilà qui corrige le bug :
http://zone.spip.org/trac/spip-zone/changeset/57827
Je corrige la doc dans la foulée, merci encore ++
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |