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

  • 7

    un article avec 2 points liés, la carte s’affiche, pas les points ni les outils de zoom.
    <carte_gis1|autocenterandzoom=oui|type=carte|control_zoom=large>
    De plus, à chaque recalcul, le message « Filtre json_encode non défini plugins/gis2/modeles/carte_gis.html »
    (idem openlayers ou googmaps)
    Que faire ?
    Le site ne contient qu’un article, pas d’autres plugins que les suivants...

    spip 2.1.16

    Afficher Objets 1.2.2
    CFG 1.16.0
    GIS 2.4.1
    Saisies 1.26.1
    SPIP Bonux 2.3.0 -

    php 5.1.6-39

    • bonjour,
      j’ajoute l’url (temporaire) :
      http://www.ubiquando.com/geo/spip.p...

      je ne pige pas...
      Merci,
      Sylvain

    • test fonctionnel en local.
      Y a-t-il besoin d’une version de php >5.1 ?

      sur la version en ligne, en partie privée les cartes n’affichent pas les contrôles. Pas possible non plus de visualier la carte en modification de point.

    • Vu ici :
      http://forums.ouvaton.org/viewtopic.php?pid=2233#p2233

      en ajoutant ce code dans squelettes/mes_fonctions.php, les contrôles des cartes apparaissent.
      J’ai dû l’ajouter également à la racine pour avoir les contrôles dans la partie privée.

      Et pour faire apparaître mes points, j’ai dû ajouter |id_article=1 dans mon appel de la carte.

      Est-ce que ce code est nécessaire pour php < 5.2 ?
      Je ne l’ai pas vu clairement indiqué ?
      Merci,
      Sylvain

    • Salut,

      Non, cette fonction est fournie par SPIP si elle n’est pas disponible nativement à cause d’une version de PHP trop basse :

      https://github.com/spip/SPIP/blob/spip-2.1/ecrire/inc/json.php#L65

      Ton hébergement dispose bien des fonctions json ? Tu peux le vérifier sur un php info en accédant à la page ecrire/ ?exec=info dans l’espace privé.

      ++

    • Peux-tu tester en ajoutant uniquement ce code dans gis_fonctions.php :

      include_spip('inc/json');

      Cela devrait corriger le problème pour les hébergements qui ne disposent pas d’une version de php fournissant json_encode. Si cela règle le problème, j’envoie le correctif dans gis d’ici demain.

      ++

    • non, toujours pas, mais le fichier est dans /ecrire, donc pas le bon chemin ?

    • en fait, ça va mieux en changeant les quotes... de l’include_spip (le mail reçu en html avait mis des backquotes)

      Donc cette fois c’est bon, super, merci !

    Répondre à ce message

  • Bonjour

    Cette fois j’essaie de modifier le formulaire d’édition de point : je souhaiterais rajouter des champs.

    D’apres ce que j’ai compris, cela se passe dans le fichier /plugins/GIS2/formulaires/editer_gis.html Jusque là, tout va bien, mon nouveau champ est créé. Par contre, il n’est pas enregistré. Je pense que cela doit venir de la fonction « formulaires_editer_gis_traiter_dist » (comme c’est un formulaire CVT ?), qui se trouve dans /plugins/GIS2/formulaires/editer_gis.php
    Comment faire pour qu’elle prenne en compte des nouveaux champs ?

    Merci !

    Répondre à ce message

  • 6

    Bonjour !

    Ce plugin à l’air très intéressant, mais je suis novice en Spip, et j’ai un petit souci : je n’arrive pas à afficher un fichier kml sur une carte.

    J’appelle la carte dans un article avec

    (chevron) carte_gis|type=relief|autocenterandzoom=oui|kml=doc1 (chevron)

    et j’ai auparavant joint le fichier kml à mon l’article. La carte s’affiche correctement, elle se centre en fonction des points géolocalisés liés à mon article, mais pas de trace du kml.
    Déjà, est-ce la bonne syntaxe pour appeler le kml ? Et comment faut il faire pour qu’il s’affiche ?

    J’utilise la version 2.1.12 de spip et la version 2.4.1 de GIS. Je suis en local.

    Merci beaucoup !

    • Salut, tu n’est pas loin du but :p

      kml = 12 kml à superposer à la carte (id_document ou url)

      Donc :

      <carte_gis|type=relief|autocenterandzoom=oui|kml=1>

      (sans le *doc* dans l’id du document)

      ++
      b_b

    • Merci pour cette réponse rapide !
      Malheureusement, je crois que cela ne marche toujours pas...

      En fait j’ai essayé plusieurs choses :
      Lorsque le kml décrit une ligne (par exemple un itinéraire), il n’apparait pas du tout sur la carte.
      Lorsque qu’il décrit un polygone, il est remplacé par un marqueur punaise (comme si c’était un simple point)

      Cela me semble tres bizarre !

    • File moi l’url des kmls en question que je les teste pour voir s’ils sont valides.

      ++

    • j’ai utilisé le lien donné sur la page de gis3 :

      http://www.gitesdegaule.fr/KaraMeLi...

      Cela donne accès à des kml qui décrivent les département français, et j’ai utilisé 38.kml

    • Je viens de tester le kml en question et il fonctionne sans problème sur un SPIP 2.1.16 avec GIS 2.4.1, je ne peux pas t’aider plus sans l’url de la page de ton site où je pourrais observer le problème.

      ++

    • Merci, j’essaie de mettre le site en ligne et je vois si le problème persiste. Je posterais le lien si c’est toujours le cas.

    Répondre à ce message

  • 4
    Françoise

    Bonjour

    Quels sont les fichiers qu’il faut modifier pour utiliser son propre script OpenLayers, c’est à dire faire appel « http://monsite.org/.../OpenLayers.js » plutôt que « http://openlayers.org/api/OpenLayers.js »
    En effet lorsque le site openlayers.org rame ou est en time out comme en ce moment ça rend monsite.org impraticable.

    (J’ai un peu cherché dans le plugin mais..)

    Merci de votre réponse. Et merci pour le plugin et pour y avoir mis OSM ;-)

    Françoise

    • Salut, c’est dans le fihcier gis_pipelines.php que ça se passe, ici :

      http://zone.spip.org/trac/spip-zone/browser/_plugins_/gis/branches/v2/gis_pipelines.php#L31

      Mais attention, il y a un bug introduit dans OpenLayers 2.12, je te conseille grandement de rester sur la version 2.11 de l’api tant que ce bug ne sera pas réglé par les devs d’OpenLayers :

      https://github.com/openlayers/openlayers/issues/559

      ++

    • Françoise

      Merci, ç’est OK. Ça tombe bien, j’avais un vieux dossier OL avec la version 2.11 sous la main. (Un nœud à mon mouchoir pour penser à changer l’adresse en cas de changement de serveur...)

      Une suggestion si je peux me permettre : ça me semble important de mettre sur le fond de carte OpenSteetMap son « copyleft ».
      En attendant est-ce que je peux coller quelque part la ligne « map.addControl(new OpenLayers.Control.Attribution()) ; » ?

      Françoise

    • Hmmm c’’est une bonne idée, mais la librairie Mapstraction ne le permet pas. Mais cela sera présent dans la version 4 de GIS que je devrais rendre public d’ici une ou deux semaines ;)

    • Françoise

      Super j’attends cette nouvelle version avec impatience.
      (Et en prime en lisant ce forum j’ai compris pourquoi mes modèles marchaient pas, MDR)
      Françoise

    Répondre à ce message

  • 2

    Bonjour,
    tout d’abord merci, c’est vraiment super :), ce plugin ouvre des possibilités assez énorme sur la façon de visualiser les informations

    quelques questions et remarques (sur version de SPIP 2.1.15 SVN [19588])
    -  pour cette carte "<carte_gis1|id_rubrique=2|objets=articles|zoom=8|autofocus_marker = oui>" : et pourtant on peut ouvrir plusieurs infobulles (alors que j’ai cru comprendre que cela forçait l’affichage d’une seule en fermant la précédente) : j’ai bien vu que quelqu’un à rencontrer un problème « similaire » mais je ne sais pas débugger comme lui : conflit entre un plugin multimédia et GIS2
    -  en back, dans un article, la fonction rechercher ne fonctionne plus, pourtant dans la configuration du plugin geocoder est bien activé
    -  en back, dans édition des points, quand je veux ajouter un nouveau point, j’ai trois cartes les unes sous les autres et je ne comprends pas comment faire
    -  et je n’ai pas trouvé si il est possible de faire l’affichage des points des articles publiés entre 2 dates données ?

    Merci encore

    PS : je ne suis pas informaticien et je n’ai accès qu’à la partie rédaction d’article et administration du site, donc je ne peux pas modifier les squelettes par exemple

    • Salut Vincent,

      j’ai bien vu que quelqu’un à rencontrer un problème « similaire » mais je ne sais pas débugger comme lui : conflit entre un plugin multimédia et GIS2

      Corrigé par http://zone.spip.org/trac/spip-zone/changeset/60861/

      en back, dans un article, la fonction rechercher ne fonctionne plus, pourtant dans la configuration du plugin geocoder est bien activé

      Oui, j’ai corrigé ce bug vendredi, cela vient d’un bug introduit dans la version 2.12 d’OpenLayers (je sais que c’est cette api que tu utilises :p) . J’ai corrigé en forçant l’utilisation d’OpenLayers 2.11 dans GIS en attendant que le bug soit corrigé dans OL.

      http://zone.spip.org/trac/spip-zone/changeset/63100

      en back, dans édition des points, quand je veux ajouter un nouveau point, j’ai trois cartes les unes sous les autres et je ne comprends pas comment faire

      Ce bug est corrigé aussi.

      et je n’ai pas trouvé si il est possible de faire l’affichage des points des articles publiés entre 2 dates données ?

      Pour ça il faut bidouiller et se faire un squelette perso inspiré de ceux présents dans le répertoires /json du plugin, mais comme tu n’as pas accès aux squelettes sur ton site cela ne te sera pas possible.

      ++

    • Merci, trop fort et rapide :)

      j’ai bien vu que quelqu’un à rencontrer un problème « similaire » mais je ne sais pas débugger comme lui : conflit entre un plugin multimédia et GIS2
      -  Corrigé par http://zone.spip.org/trac/spip-zone/changeset/60861/

      euh ben comment dire, en ayant ceci dans un article (<carte_gis1|id_rubrique=2|objets=articles|zoom=8|autofocus_marker = oui>) qui donnent ceci http://www.lespetitsdebrouillardsaquitaine.org/spip.php?article285&var_mode=recalcul et donc j’ai recalculé la page, j’ai toujours plusieurs infobulles qui s’affichent en même temps ?

      Sinon pour tous le reste, c’est super :)

      les 2 trucs en plus de folie (je ne peux pas aller dans le squelette et de toutes les façons je ne saurais pas quoi y faire :) :

      -  changer facilement le marqueur, je ne supporte plus le jaune :)

      -  faire que dans le titre d’un point, la balise (je ne sais pas si c’est le terme) plus d’infos fonctionne : toujours en sachant que je n’ai pas accès au squelette

      Encore merci

    Répondre à ce message

  • 7

    Bonjour,
    j’ai 2 sous rubriques avec chacune un point GIS attaché. Comment les faire apparaître dans une carte de la rubrique parent (insérée en modèle) ?
    http://spip.cnp.testenligne.net/defib/spip.php?rubrique10

    • Salut, comme ta rubrique 10 est un secteur (rubrique à la racine), tu peux le faire comme ça :

      <carte_gis|objets=rubriques|id_secteur=10>

      ++

    • Bonjour, merci de la réponse. Cela ne fonctionne pas. Une autre idée ?

    • Ha oui, tu viens de tomber sur un bug introduit par le changement de comportement des modèles dans SPIP 3. Il va falloir qu’on pense à régler ça dans SPIP, ou alors que je trouve une parade pour GIS. En attendant le correctif, tu peux effectuer l’appel de la carte depuis un squelette et cela fonctionnera sans souci.

      ++

    • squelette : je touche mes limites. vive le modèle ! Merci

    • j’ai créé un rubrique=10.html (dans un dossier squelettes) j’y ai inséré
      [(#INCLUREfond=modeles/carte_gis,
      objets=rubriques,
      id_secteur=10,
      zoom=7,
      lat=48.214378965824345,
      lon=-4.543704986572266
      )]
      et nada ...

    • Ok, c’est un bon début ;) Pour que ton squelette soit pris en compte il faut aussi déposer une copie de squelettes-dist/rubrique.html dans ton dossier squelettes/. Et puis je te conseille grandement de désactiver la compression du html dans la conf de ton spip, ce truc apporte pas mal d’ennuis (la compression css et javascript tu peux garder, ça ça fonctionne bien).

      ++

    • Bonjour
      toujours pas d’affichage de carte.
      mon spip n’est pas installé à la racine ;
      il est dans un répertoire defib/
      est ce que cela a des conséquences sur la prise en compte du squelette ?

    Répondre à ce message

  • 1
    nicolas

    Bonsoir,

    J’ai un souci sur un site, rien n’apparait ni au niveau squelette ni au niveau des articles.

    http://www.gite-jasseneuve.com/spip

    Répondre à ce message

  • 25

    Bonjour,

    Je suis en train de tester le plugin GIS2 (version 2.3.3 [58732]) sur une version de SPIP 2.1.12 [18732].

    J’ai créé pour cela 5 points géolocalisés : ils comportent chacun un titre et un descriptif. Dans les champs « descriptif », j’ai utilisé des raccourcis typographiques SPIP pour mettre en forme ce qui est affiché dans les bulles d’information des points géolocalisés dans les cartes Google.

    J’ai ensuite attaché ces 5 points chacun à une sous-rubrique enfant d’une de mes rubriques (id_parent=214) ainsi qu’à un même article (id_article=1179).

    Mon problème est le suivant : lorsque j’appelle dans un article le modèle sans le paramètre « objets »

    <carte_gis12
    |id_article=1179
    |autocenterandzoom=oui
    |type=carte
    |control_zoom=small>

    , les raccourcis typographiques placés dans les descriptifs des points géolocalisés sont correctement interprétés, mais lorsque j’utilise le modèle avec le paramètre « objets »

    <carte_gis7
    |objets=rubriques
    |id_parent=214
    |autocenterandzoom=oui
    |type=carte
    |control_zoom=small>

    les raccourcis typographiques placés dans les descriptifs ne sont plus interprétés. Cependant, en utilisant l’un ou l’autre des modèles, les points géolocalisés apparaissent correctement.

    Pour résoudre ce problème, j’ai tenté de personnaliser le modèle gis_rubriques.html (j’ai installé cette version modifiée dans /squelettes/modeles/) mais sans succès.

    Est-ce bien ce squelette qui contrôle cet affichage ? Si non, pouvez-vous m’indiquer quels fichiers gèrent l’affichage des bulles d’information ?

    Je vous remercie par avance.

    PS : pour avoir une idée du problème, vous pouvez le voir sur cette page. où les deux modèles sont appelés.

    • Salut, ok je vois le problème, les traitements typo ne sont pas appliqués aux pseudos balises ajoutées depuis l’introduction du critère gis dans les boucles des fichiers json du plugin. En attendant la prochaine version qui corrigera ce problème (elle devrait être dispo dans la journée) tu peux ajouter ça à ton fichier d’options pour corriger le problème :

      $table_des_traitements['DESCRIPTIF_GIS'][]= 'propre(%s)';

      ++

    • Et voilà le correctif est en place dans la version 2.3.4 du plugin :

      http://zone.spip.org/trac/spip-zone/changeset/59567

      Le zip sera à jour d’ici une heure environ ++

    • Merci beaucoup pour ta réactivité et ta clairvoyance.

      En effet, tes corrections apportées dans la version 2.3.4 du plugin solutionnent ce problème.

      En poursuivant mes tests, je viens de me rendre compte que je n’arrive pas non plus à utiliser le paramètre |autofocus_marker=oui dans le modèle. J’ai bien une seule info-bulle qui s’affiche dans l’aperçu de l’article, dans l’espace privé. Mais quand j’affiche la page en ligne, aucune bulle d’information ne s’affiche.

      Pour tester en ligne, j’ai placé le code suivant de 3 cartes dans l’article :

      <carte_gis1|objets=rubriques|id_parent=214|autocenterandzoom=oui|autofocus_marker=oui|type=carte|control_zoom=small>
      
      <carte_gis2|objets=rubriques|id_parent=214|autocenterandzoom=oui|type=carte|control_zoom=small>
      
      <carte_gis3
      |objets=rubriques
      |id_parent=214
      |autocenterandzoom=oui
      |type=carte
      |control_zoom=small
      >

      Voici la page en ligne que j’obtiens. La première carte ne prend pas en compte le paramètre |autofocus_marker=oui alors qu’il est mentionné et la dernière n’apparaît pas du tout car les paramètres du modèle s’étendent sur plusieurs lignes (la syntaxe étendue des modèles ne semble pas être prise en compte). Sais-tu d’où peuvent provenir ces petits bugs ?

      Merci encore d’avance pour les solutions que tu pourras nous apporter.

    • Oui je vois le bug, ta page génère une erreur js et à partir de là plus rien ne fonctionne comme prévu :p

      C’est l’appel du modèle avec les sauts de lignes qui génère ça. En attendant que je trouve une solution pour corriger le bug, reforme ton appel du modèle en le mettant sur une ligne et tout devrait rentrer dans l’ordre.

      ++

    • Bonjour. Merci encore pour ton analyse.

      En effet, en reformant le modèle en mettant tous les paramètres sur la même ligne, la carte s’affiche correctement avec les différents points géolocalisés. Cependant le paramètre |autofocus_marker=oui ne semble toujours pas être pris en compte.

      Penses-tu que cela soit lié au problème d’affichage du modèle avec les sauts de ligne ?

    • Et voilà, la version 2.3.5 corrige le bug généré par des appels du modèle gavés de sauts de ligne comme ceci :

      <carte_gis2
      |objets=articles
      |id_auteur=4
      |autocenterandzoom=oui
      |type=carte
      |control_zoom=small
      >

      http://zone.spip.org/trac/spip-zone/changeset/59648

      ++

    • Bonjour,

      A nouveau, un grand merci pour ta rapide correction de ce bug. L’affichage du modèle avec un saut de ligne pour chaque paramètre fonctionne maintenant parfaitement.

      Le seul problème qui persiste encore concerne le paramètre |autofocus_marker=oui (qui permet de n’afficher qu’une seule bulle d’information à la fois) que je n’arrive pas à faire fonctionner dans les pages de l’espace public (voir cet exemple).

      J’ai essayé les deux syntaxes de modèles possibles et, dans les deux cas, le paramètre n’est pas pris en compte lorsque la carte s’affiche dans l’espace public :

      <carte_gis1|objets=rubriques|id_parent=214|autocenterandzoom=oui|autofocus_marker=oui|type=carte|control_zoom=small>
      
      <carte_gis1
      |objets=rubriques
      |id_parent=214
      |autocenterandzoom=oui
      |autofocus_marker=oui
      |type=carte
      |control_zoom=small
      >

      Cependant, dans l’espace privé de SPIP, le paramètre est correctement interprété dans les aperçus des articles et, dans ce cas là, la fonctionnalité est active.

      Je ne comprends donc pas pourquoi cela fonctionne dans l’espace privé et pas dans l’espace public ??

      Aurais-tu des pistes pour résoudre ce problème ?

    • Ta page génère toujours une erreur javascript quand on clique sur un des marqueurs de la carte. Cela peut provenir d’un conflit avec un autre script présent dans la page, ou un problème de chargement d’un des scripts de gis, etc. Je ne vais pas me lancer dans une session débug complète de ton site, mais il me semble que le script gis.js s’exécute avant que les scripts de mapstraction soient chargés, du coup cela génère ces erreurs dans tes pages.

      Pour info la fonction autofocus_marker fonctionne très bien sur d’autres sites.

    • OK, merci encore pour tes indications.

      Je voulais en effet savoir si la fonction autofocus_marker fonctionnait correctement. Comme c’est le cas sur d’autres sites, je vais regarder du côté de mes scripts et de l’erreur javascript que tu m’indiques.

      Merci encore pour cet excellent plugin.

    • Bonjour,

      Sur tes dernières indications, j’ai effectué plusieurs tests pour voir d’où pouvait provenir l’erreur du script gis.js. En vérifiant s’il n’y avait pas des interférences avec d’autres plugins déjà installés sur mon site, je crois avoir découvert que le problème provient d’un conflit avec le plugin Lecteur multimedia.

      Quand je désactive ce plugin « Lecteur multimedia »,, les cartes de GIS s’affichent parfaitement y compris avec l’option |autofocus_marker, mais quand je le réactive, le problème se reproduit à nouveau. Dans ce cas là, en effet, une erreur javascript a lieu au chargement de la carte (« mxn.markers[i].openInfoBubble is undefined ») puis une autre à chaque clic sur un point géolocalisé (« map.markers[i].closeBubble() is not a function »).

      J’ai tenté une mise à jour du plugin « Lecteur multimedia », que je n’ai pas réussie à réaliser pour l’instant (voir mon commentaire dans la rubrique de ce plugin).

      Afin de savoir si je suis sur la bonne piste, est-ce que quelqu’un d’autre que moi a déjà constaté cette interférence entre les plugins GIS et Lecteur multimedia ?

      Je vous remercie par avance pour vos réponses.

    • Bonjour b_b,

      J’ai poursuivi mes recherches concernant un conflit supposé entre GIS2 et le plugin Lecteur multimedia (voir à ce sujet mon dernier commentaire dans la rubrique du plugin Lecteur multimedia).

      Voici ce que je constate : juste avant d’obtenir l’erreur mxn.markers[i].openInfoBubble is undefined, la valeur de i vaut "contains" au lieu d’être une valeur entière numérique !

      Pour tenter de contourner ce problème, j’ai fait un test en réécrivant la fonction gis_autofocus_marker(map) du script gis.js de la façon suivante :

      function gis_autofocus_marker(map) {
      	var mxn = eval('map'+ map);
      	for (var i = 0; i < mxn.markers.length; i++) {
      		mxn.markers[i].openInfoBubble.addHandler(function(name, source, args) {
      			gis_close_infowindows(map);
      		});
      	}
      }

      Cette modification corrige le problème rencontré [1], mais comme je ne suis pas expert en javascript, est-ce que cette correction est acceptable ? Y’a-t-il une différence avec l’utilisation de la syntaxe for ... in  ?

      Concernant le script player_enclosure.js, j’ai fait une recherche sur la chaîne de caractères «contains» et j’ai trouvé ce morceau de code suivant :

      // Nouvelle methode pour les tableaux
      // Retourne la premiere occurence correspondant, sinon false
      Array.prototype.contains = function (ele) {
      	for (var i = 0; i < this.length; i++) {
      		if (this[i] == ele) {
      			return true;
      		}
      	}
      	return false;
      };

      Je suspecte que ce soit cette fonction qui fasse que i prend la valeur «contains» lors de l’appel par le script javascript/gis.js mais là encore sans certitudes !!

      Que pensez-vous de tout ceci et des corrections proposées ?

    • Salut, content que tu aies trouvé la cause de cette incompatibilité :) Cela semble être un problème de variable i définie de façon globale par le lecteur multimédia.

      Ton message me fait remarquer que tu sembles utiliser une ancienne version du lecteur multimédia. Ce plugin a été mis à jour dernièrement, peux tu tester avec cette version et me dire si ton problème persiste ?

      http://zone.spip.org/trac/spip-zone/browser/_plugins_/player/branches/lm_v2/

      Si le problème est toujours là avec cette version, j’apporterai la correction à GIS pour ne plus avoir d’ennui avec le lecteur multimédia.

      ++

    • Merci,

      J’ai fait mes tests sur un spip 2.1.12 [18732] avec le plugin lecteur_multimedia en version 0.77.0 [54747]. Est-ce que la version du lecteur multimedia dont tu parles est plus récente que celle que j’utilise ?

      Si oui, puis-je la télécharger à partir du site Plugins SPIP (http://plugins.spip.net/player.html) ?

    • Bonjour b_b,

      Concernant la mise à jour récente du plugin Lecteur multimedia, j’ai regardé de plus près et je crois que le lien que tu me proposes permet d’accéder à la dernière version du Lecteur multimedia, compatible uniquement avec SPIP 3. Or, j’utilise encore SPIP 2.

      Cependant, grâce à ta remarque, j’ai fait plusieurs tests pour voir si le problème rencontré se produisait uniquement avec SPIP 2.

      Voici ce que je constate (j’ai pris soin de récupérer les dernières versions des plugins Lecteur multimedia et GIS compatibles avec SPIP 2.1 et SPIP 3) :

      • lorsque j’utilise SPIP 2.1.12 [18732] ou SPIP 2.1.13 [12292] avec les plugins Lecteur multimedia 0.77.0 [54747] et GIS 2.3.5 [59810], le conflit se produit.
      • lorsque j’utilise SPIP 3.0.0 RC [19216] et les plugins Lecteur multimedia 2.1.0 SVN [60544] et GIS 3.2.3 SVN [60059], le conflit ne se produit pas.

      Dans ce dernier cas, je ne retrouve pas trace du chargement du script player_enclosure.js dans le

      des pages publiques du site. C’est peut-être pour cela qu’il n’y a pas de conflit avec SPIP 3 ?

      Pour ceux, qui comme moi, ont encore leur site sous SPIP 2.1.x, est-il possible que tu apportes les corrections à GIS 2.3.5 pour ne plus avoir de conflit avec le lecteur multimédia 0.77.0 ? A moins qu’il soit préférable de faire la correction du côté du Lecteur multimedia 0.77.0 (javascript/player_enclosure.js) ??

    • Le version du lecteur multimédia que je pointais est bien compatible avec SPIP 2 mais celle-ci n’a jamais été diffusée par ses auteurs (on ne peut la récupérer que par svn). Elle fonctionne très bien sur un paquet de sites ;)

      J’apporte la correction nécessaire à GIS cet après midi (en plus d’une autre que j’ai sous le coude) et une nouvelle version sera dispo dans la foulée.

      ++

    • Ah OK, je ne savais pas que la version dont tu parlais ne se récupérait que par SVN. Je ne suis pas familier avec cet outil, je vais essayer de comprendre comment ça marche et comment je peux récupérer cette version et la tester.

      Merci beaucoup pour les corrections que tu vas faire sur GIS.

    • Si tu le souhaites, tu peux récupérer un zip depuis la zone sans passer par svn :

      http://lapsuske.brubel.net/Recuperer-un-zip-depuis-le-site-de-la-zone-SPIP

      ++

    • Et voilà, la version 2.3.6 de GIS sera dispo d’ici une heure au max :

      http://zone.spip.org/trac/spip-zone/changeset/60861

      ++

    • Merci beaucoup, à la fois pour la mise à jour de GIS2 et pour l’astuce permettant de récupérer un zip sur la zone sans SVN (je ne connaissais pas du tout !).

      Je vais tester avec cette version du lecteur multimedia et je te tiens au courant.

    • Bonjour b_b,

      Merci pour cette nouvelle version de GIS2. Seulement, en la testant j’ai à nouveau un petit souci : l’option |autofocus_marker=oui n’est plus prise en compte !! Dans gis.js, j’ai l’impression qu’il manque la méthode .length après mxn.markers dans les boucles for que tu as corrigées et que cela empêche l’entrée dans les boucles for.

      Concernant le test avec le lecteur multimedia v2 que tu m’avais indiqué, j’ai pu l’effectuer et je n’ai pas observé de conflit avec GIS2. J’ai cherché un peu dans le code de cette version 2 du lecteur multimedia et je n’ai pas trouvé, ni le script player_enclosure.js, ni la méthode Array.prototype.contains = function (ele) {   (...)   } suspectée d’être à l’origine du conflit. C’est peut-être pour cela qu’il n’y a pas de conflit ? Penses-tu qu’il faille indiquer sur le forum du plugin de lecteur multimedia que cette méthode Array.prototype.contains = function (ele) {   (...)   } peut être potentiellement à l’origine de conflit avec d’autres scripts ?

    • Oups, voilà qui corrige ma boulette :

      http://zone.spip.org/trac/spip-zone/changeset/60879

      Le zip sera à jour d’ici une heure.

      ++

    • Il n’y a pas de mal. Ça marche maintenant parfaitement. Merci beaucoup pour ton précieux travail.

    • nicodusud

      Bonsoir à tous, j’ai le meme probeme que certains quand je mets dans un squelette ou un article, rien n’apparait...

      http://gite-jasseneuve.com/spip/spip.php?article3
      J’ai bien un API google, par contre pour ceux qu’il l’utilise, il faut une API key browser apps ou server apps ?
      _

    • Salut, tu aurais pu ouvrir un nouveau fil de discussion, mais bon...

      Ton site génère une erreur javascript à cause de ce code :

      map1.setCenterAndZoom(new mxn.LatLonPoint(03&#039; 48&#039; 07&#039; E,43&#039; 55&#039; 33&#039; N),12);

      Quelles sont les coordonnées que tu as entré dans la configuration du plugin ? Elles ne semblent pas vraiment correctes et génèrent cette erreur.

      Concernant la clé, elle n’est pas nécessaire avec l’api v3 de google.

      ++

    • nicolas

      merci pour cette précision.

      j’avais mal rentré les coordonnées gps.

      Merci infiniement :D

    Répondre à ce message

  • 4

    Géocodage à partir de données FORM&TABLE

    Bonjour, j’ai réalisé un petit annuaire d’entreprise grâce à Form&Table.
    Une fiche « Entreprise » contient toutes les infos pour le géocodage notamment la ville.

    Je voudrais réaliser un modèle affichant toutes les entreprises de l’annuaire sur une carte.
    Boucler sur les données de Form&Table, je sais faire.
    Afficher une carte, cela n’a pas l’air compliqué.

    Par contre, je ne sais pas si il est possible de récupérer long. et lat. de chaque entreprise à partir de la ville ? puis de l’injecter dans la carte.

    Ce plugin permet-il de le faire ?

    MERCI

    • Salut, ce que tu souhaites faire ressemble beaucoup à ce qui est expliqué dans la doc de google maps api ici : https://developers.google.com/maps/articles/phpsqlgeocode

      ++

    • Merci b_b pour cette réponse ultra-rapide.

      Dans le lien que tu m’as donné, un script PHP met à jour une BDD avec les coord. géocodées.

      Je n’ai pas prévu de faire un script PHP. Il faudrait que je lance une recherche de géocodage au moment de l’enregistrement d’une fiche Entreprise. Mais l’enregistrement est gérée par FORM&TABLE et je ne crois pas qu’il soit possible d’ajouter un traitement spécifique ?

      Je souhaite donc tout faire avec un modèle (html + js) qui lit la BDD FORM&TABLE et construit la carte.

      Entre temps, j’ai vu que le géocodage peut être fait en JS en mode client : http://www.weboblog.fr/geocoder-adr...
      C’est peut-être vers cela que je dois m’orienter ?

      Peut-être même que je n’ai pas besoin du plugin GIS 2 ?

      Si j’ai bien compris l’exemple présenté dans le lien ci-dessus, les API de google map (classe JS) permettent de tout faire ?

    • Je me demande si je parts de zéro et je fais un modèle en collant le code javascript directement dedans ?

      Ou puis-je me exploiter le plugin GIS2 en partie ?

    • Bonjour

      Finalement, GIS2 ne correspondant à mon besoin, j’ai créer un nouveau plugin, qui permet de localiser sur une carte des enregistrements provenant de FORM&TABLE. C’est simplement un modèle dont les paramètres sont le n° de formulaire et le nom du champs contenant la ville, entre autres.
      Je vais porter le modèle pour FORMIDABLE aussi.

      Si j’ai des demandes, je mettrai le plugin sur la zone.

    Répondre à ce message

  • 4
    spipheure

    Bonjour
    J’essaye d’associer dans cette boucle contenu dans gis.html qui sert pour l’affichage de l’infobulle l’adresse et la description.
    Quelqu’un peut il m’aider
    « 
    "type" : "Feature",
    "geometry" : "type" : "Point", "coordinates" : [#LON, #LAT],
    "id" :"#ID_GIS",
    "title" :[(#TITRE*|supprimer_numero|json_encode)],
    "description" :(#ADRESSE[(#SETlogo_doc,’’)]
    [(#LOGO_GIS|oui)
    [(#SETlogo_doc,#LOGO_GIS|image_passe_partout32,32|image_recadre32,32)]]
    [(#LOGO_GIS|non)
    [(#CHEMINimages/marker_defaut.png|oui)[
    (#SETlogo_doc,#CHEMINimages/marker_defaut.png|image_passe_partout32,32|image_recadre32,32)]
    ]]
    [(#GETlogo_doc|oui)
    #SETicon_w,#GETlogo_doc|extraire_attributsrc|largeur
    #SETicon_h,#GETlogo_doc|extraire_attributsrc|hauteur
    [,"icon" : (#GETlogo_doc|extraire_attributsrc|url_absolue|json_encode)],
    "icon_size" : (#VAL91#GETicon_w,#GETicon_h(#VAL93,
    "icon_anchor" : (#VAL91[(#GETicon_w|div2)],[(#GETicon_h)](#VAL93
    ]
     »

    • Salut, c’est quoi la question ?

      ps : utilisez les raccourcis de code pour encadrer vos extraits de code, sinon c’est illisible.

    • spipheure

      Merci de répondre,

      La question est : j’essaye de modifier le fichier gis.html situé dans gis2/json afin de faire afficher dans mon infobulle au niveau de la description la balise #DESCRIPTIF et une autre balise par exmemple #ADRESSE mais je n’y arrive pas
      j’arrive pour le moment à afficher soit #DESCRIPTIF ou #ADRESSE et je galere grave
      merci beaucoup

    • Ha ben là je comprends mieux ;)

      "description":[(#DESCRIPTIF|concat{ #ADRESSE}|json_encode)]

      Avec ce code ça permet d’afficher les deux textes dans le descriptif. J’y utilise concat pour « fusionner » les deux textes avant de leur appliquer json_encode.

      ++

    • spipheure

      Merci beaucoup c’est génial et en plus j’apprends une fonction que je n’utilisais pas sous SPIP
      c’est une grande journée

    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