GIS 2 / GIS 3

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.

Important : si vous souhaitez qu’on puisse vous aider lorsque vous postez dans le forum de cet article, pensez à fournir un lien vers le site en question sans quoi il nous sera impossible de vous dépanner.

Discussion

128 discussions

  • 2
    Julien VILLALARD

    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

    • Julien VILLALARD

      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

    • Julien VILLALARD

      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 :

    [(#INCLURE{fond=prive/inclure/gis_objet_formulaires, objet=evenement, id_objet=#ID_EVENEMENT, bloc_gis=rechercher,ajax})]

    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

  • 1

    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

  • 1

    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

  • 1

    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

  • 1

    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 :

    <BOUCLE_artG(ARTICLES){gis}{id_rubrique}{par date}{pagination}>

    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

  • 1

    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...

    Répondre à ce message

  • 6

    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

    • Graine de Jardins

      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 :

      <BOUCLE_gis(GIS){id_gis ?}{id_rubrique ?}{id_article ?}{id_breve ?}{id_document ?}{id_mot ?}{id_auteur ?}{id_syndic ?}{recherche ?}{0, #ENV{limit}}{","}>
      		{"type": "Feature",
      		"geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
      		"id":"#ID_GIS",#SET{lien_art,<a href="#URL_ARTICLE">#TITRE</a>}
      		"title":[(#GET{lien_art}|json_encode)],

      Et ça marche !

    • Graine de Jardins

      Avec les accolades, c’est encore mieux

      {"type": "Feature",
      "geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
      "id":"#ID_GIS",#SET{lien_art,<a href="#URL_ARTICLE">#TITRE</a>}
      "title":[(#GET{lien_art}|json_encode)],
    • 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

  • 5
    Christophe

    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.

      ++

    • Christophe

      Et j’ai oublié de préciser que pour compliquer l’histoire, j’ai des événements qui se répètent...
      Merci

    • Christophe

      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 ».

      		<BOUCLE_auteurs(AUTEURS){gis}{id_article ?}{id_auteur ?}{recherche ?}{0, #ENV{limit}}{","}>
      				<BOUCLE_membres_asso(ASSO_MEMBRES){id_auteur ?}{statut_interne==ok}>

      Pourtant la carte ne me retourne rien. S’il te faut un lien je peux la mettre en ligne.
      @+

    • Re

      J’essaie aussi

      <BOUCLE_membres_asso(ASSO_MEMBRES){gis}{statut_interne==ok}{0, #ENV{limit}}{","}>

      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 :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom