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
Bonjour,
BRAVO pour ce plugin que j’utilise très souvent.
Je viens de découvrir une nouvelle fonction, le formulaire pour l’espace publique pour changer le point : #FORMULAIRE_EDITER_GIS
Mais peut-on cliquer sur la carte directement pour modifier le point ? Cela ne semble pas être le cas. Je ne peux pas donner une URL car c’est en extranet.
Une astuce pour offrir une carte cliquable pour sélectionner un point et le lier à l’article ?
Merci de votre aide !
Julien
Je complète :
- si l’article a déjà un point lié, alors on peut changer les coordonnées GPS. Mais si l’article n’est lié à aucun point, alors cela ne marche pas, aucun nouveau point n’est créé. Le script est celui de l’exemple
BOUCLE_unpoint(GIS)id_article=#ENVid_article0,1>
#SETid_gis,#ID_GIS
/BOUCLE_unpoint>
#SETid_gis,nouveau
//B_unpoint>
#FORMULAIRE_EDITER_GIS#GETid_gis,’article’,#ENVid_article,spip.php ?page=gis_reponse&id_article=#ENVid_article
- de plus le lien RECHERCHE (une adresse ne marche pas dans ce formulaire.
- enfin, pour avoir la fonction de création du point au clique sur la carte, est-ce que cela est du au type de carte (CloudMade Web) ? Cela serait-il la même chose avec Google Map ? serait-il possible d’ajouter un script en plus de la noisette ?
Merci de votre aide
Complément :
- tout marche bien avec la carto google, mais pas avec CloudMade Web.
- autre problème : avec #FORMULAIRE_EDITER_GIS, si l’article n’a pas déjà un point, il me semble qu’aucun point n’est alors ajouté.
Répondre à ce message
J’utilise le formulaire de localisation d’un événement de la sorte :
l’idée du paramètre bloc_gis=rechercher est d’inciter à chercher dans les points existant plutot que d’en créer un nouveau.
Quand un point est choisi, le formulaire est raffraichi, mais reste sur le mode rechercher, alors qu’il faudrait qu’il soit cette fois en mode bloc_gis=lies.
Comment faire varier le bloc qui s’affiche en fonction de la présence ou non d’un point lié ?
Répondre à ce message
J’utilise GIS2 pour afficher un plan dans une Popup.
La bulle qui s’affiche en cliquant sur la marqueur a des caractères bien trop grand.
Comment spécifier une taille de caractère inférieure ?
l’extension firefug m’a permis de connaitre la classe CSS.
J’ai créé une minifeuille de style ad-hoc appeleé depuis les squelette de ma popup.
Répondre à ce message
Bonjour,
dans des versions antérieures, il y avait des logos qu’on pouvait affecter aux articles par un mot-clé du groupe « marker_icon ».
Aujourd’hui, on peut ajouter un logo aux points, mais l’’affichage de logo par mot-clé n’est plus fonctionnel, n’est-ce pas ? Ou bien n’ai-je pas bien suivi... ?
MErci,
Sylvain
Salut, oui cette utilisation du plugin n’est plus disponible par défaut car on peut maintenant lier les points à plusieurs objets et chaque point peut avoir un logo spécifique.
Néanmoins, pour les nostalgiques, j’ai rédigé un début d’article orienté « astuces » qui ouvre la série en répondant à ta question :
http://contrib.spip.net/Astuces-GIS#1
À terme je publierai l’article en question dans la même rubrique que les articles de doc de GIS.
Répondre à ce message
Bonjour,
est-ce qu’il est possible de désactiver les formulaires gis associés aux rubriques et aux mots clés dans le back-office ?
Merci pour votre réponse.
Salut, oui cela est réglable depuis la page de configuration du plugin pour GIS 3.
Répondre à ce message
Hello,
Je trouve que ce plugin est un des plus aboutis de la communauté SPIP, bravo pour sa réalisation et sa maintenance.
Voici ma question . J’uilise le paramètre gis dans une boucle ARTICLES afin de pouvoir récupérer quelques infos liés à la localisation (le nom du lieu). Mais à ma grande surprise, je constate que s’il ya plusieurs articles liés au même lieu, il n’y a qu’un seul de ces articles qui est affiché. Quel est le problème dans ma boucle ? Dois-je ajouter des critères ?
La boucle :
Merci d’avance pour votre aide
Salut, merci pour le message, ça fait plaisir ;)
Pour faire ce que tu souhaites il faut prendre le « problème » dans l’autre sens, c’est à dire boucler d’abord sur les objets gis puis sur les articles. Tu devrais y arriver avec une jointure dans une boucle de ce type :
<BOUCLE_gis(ARTICLES gis_liens gis) ></BOUCLE_gis>
J’ai rédigé un article à ce sujet lors de la période où je développais le critère gis, cela devrait t’être utile :
http://www.weblog.eliaz.fr/article117.html
++
Répondre à ce message
it’s me or is not possible to read forum’s messages ?
even when I’m connected to the site I can’t read anyone...
now i can read... it’s my browser or what ? :X whatever... gonna read now
Répondre à ce message
Bonjour,
J’ai des sites qui utilisent GIS1. Sur la carte je fais apparaître différents marqueurs selon le mot clef attaché à l’article.
Je fais des tests pour passer à GIS2 mais mes marqueurs n’apparaissent pas sur les fonds de carte dans l’espace public.
A cause des mots clefs ?
merci
dd
Salut,
GIS 1 affichait par défaut les articles sur les cartes. Mais comme GIS 2 permet d’attacher des points à tous les types d’objets, il faut maintenant préciser quel type d’objet tu veux afficher sur tes cartes. Par exemple, si avec GIS 1 tu affichais les articles de la rubrique 1 comme ceci :
<carte_gis1|id_rubrique=1>
Il faut ajouter compléter ton appel du modèle comme ça :
<carte_gis1|id_rubrique=1|objets=articles>
++
merci,
Maintenant j’ai bien un marqueur pour les cartes dans mes articles (par contre pour ça je dois aller revalider le positionnement GIS de chacun des articles) mais le marqueur est celui par défaut et pas celui du logo du mot clé.
Et dans la bulle sur la carte il n’y a pas de lien vers l’article.
merci
dd
Bonjour,
le contrôle des infos qui apparaissent dans l’info-bulle se fait dans les fichiers gis_xxx.html qui sont dans le dossier json du plugin. Il est possible de les modifier en les copiant dans un dossier /squelettes/json.
Pour avoir un lien dans l’info-bulle je fais comme ça :
Et ça marche !
Avec les accolades, c’est encore mieux
Merci pour le coup de main.
J’ai un site avec plus de 500 cartes donc je galère un peu.
En revalidant à la main le positionnement GIS de chaque article j’arrive maintenant à voir le marqueur sur la carte mais ce n’est pas celui qui est défini comme logo du mot clé attaché à l’article (c’est celui par défaut qui s’affiche).
Comment faire ?
Merci
dd
Bonjour,
Graine de Jardins, j’essaie de faire la même chose que toi, mais en GIS4. Je n’y arive pas (cf forum460729).
Peux-tu nous (re)préciser ton squelette json_articles stp ?
Dans les échanges ci-dessus, je ne vois pas la différence entre avec et sans accolades dans les extraits que tu fournis.
Es-tu passé en GIS4 ?
D’avance merci.
Répondre à ce message
Salut,
J’aimerais utiliser le paramètre
{gis distance...}
par rapport au point du visiteur ou par rapport à une adresse donnée (renseignée directement par le visiteur par ex.)Est-ce possible ?
Merci,
Vincent
Répondre à ce message
Bonjour,
Merci pour ce plugin. Je cherche à afficher des événements sur une carte. J’arrive bien à tous les afficher ou n’en afficher qu’un seul pour un événement précis, mais je n’arrive pas à afficher uniquement les événements qui ne sont pas encore passés. Je ne peux pas mettre de lien car mon site est en local pour l’instant.
Pourrais-je avoir un peu d’aide ? Merci par avance.
Christophe
Salut, pour cela il faut :
1) te faire un squelette json perso, squelettes/json/gis_mesevents.html par exemple, en y copiant le contenu du squelette fourni par gis/json/gis_evenements.html.
2) passer le paramètre objets=mesevents à ta carte pour qu’elle utilise ton json perso
3) puis dans ton json perso, ajouter les paramètres d’agenda nécessaires pour filtrer les résultats renvoyés par la boucle
Reste un problème, la personne qui a ajouté la gestion des événements dans gis n’a pas ajouté la possibilité de passer des paramètres de date au modèle de la carte. Il faudrait qu’on définisse quelle liste de paramètres il manque dans ce modèle, en attendant tu peux surcharger le modèle de la carte en le copiant/modifiant dans ton dossier squelettes.
++
Et j’ai oublié de préciser que pour compliquer l’histoire, j’ai des événements qui se répètent...
Merci
Merci b_b. Ca confirme ce que je craignais, j’avais rentré le paramètre age<0 dans la boucle (GIS) et ça me renvoyait une erreur.
Merci pour l’astuce du squelette json, j’avais attaqué directement gis_evenements, au risque de voir tout effacé lors d’une mise à jour du plugin.
++
Yo b_b
J’ajoute un modèle pour les membres d’asso (plugin associaspip) à jour de leur cotisation. J’ajoute cette boucle pour tester si ’lid auteur est « ok ».
Pourtant la carte ne me retourne rien. S’il te faut un lien je peux la mettre en ligne.
@+
Re
J’essaie aussi
Mais rien ne passe que ce soit en une seule boucle ou en deux. Une idée ? Merci.
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 : |