Carnet Wiki

Astuces GIS

Version 8 — Juillet 2013 b_b

Quelques astuces pour GIS qui à terme seront déplacées dans un article de la rubrique du plugin.

Définir le logo des points avec des mots clés

Depuis GIS v2 on peut ajouter un logo aux points. Dans la v1 du plugin il existait une astuce qui permettait de définir le logo des points à partir du logo des mots clés d’un groupe spécifique. Pour les nostalgiques, il est toujours possible d’obtenir le même résultat en procédant comme expliqué ci-dessous.

1) créez un groupe de mots-clés nommé marker_icon et attribuez un logo aux mots-clés de ce groupe.

2) attachez un mot de ce groupe aux articles liés à vos points.

3) créez un squelette JSON personnalisé nommé gis_articles_logomot avec le contenu suivant :

<BOUCLE_art(ARTICLES){gis}{id_article ?}{id_rubrique ?}{id_secteur ?}{id_mot ?}{id_auteur ?}{recherche ?}{0, #ENV{limit}}{","}>
{"type": "Feature",
"geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
"id":"#ID_GIS",
"properties": {
        "title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)],
        "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})]
        <BOUCLE_logomot(MOTS){id_article}{type=marker_icon}>[(#SET{logo_doc,#LOGO_MOT_NORMAL|image_passe_partout{32,32}|image_recadre{32,32}})]</BOUCLE_logomot>
        [(#GET{logo_doc}|oui)
        #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur}
        #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur}
        #SET{icon_anchorPoint,''}
        [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)],
        "icon_size": [(#VAL{91}|chr)]#GET{icon_w},#GET{icon_h}[(#VAL{93}|chr)],
        "icon_anchor": [(#VAL{91}|chr)][(#GET{icon_w}|div{2})],[(#GET{icon_h})][(#VAL{93}|chr)]]
}}</BOUCLE_art>

4) utilisez le code suivant pour afficher une carte qui sera alimentée par votre squelette JSON personnalisé :

[(#INCLURE{fond=modeles/carte_gis,objets=articles_logomot})]

Et voilà :)

Permettre l’ajout d’une géolocalisation dans le formulaire public de modification d’événement

En partant de l’excellente contribution de mj
http://contrib.spip.net/Squelette-d-Agenda-grace-au-plugin-Agenda

J’ai fait évoluer le code de mod_evenement.html en y ajoutant ce bloc.

<div>
                #BLOC_TITRE
                <:localiser:>
                #BLOC_RESUME
                <BOUCLE_agenda_gis(GIS){id_evenement}>
                        [(#INCLURE{fond=modeles/carte_gis_preview,id_objet=#ID_EVENEMENT,evenement})]
                </BOUCLE_agenda_gis>
                #BLOC_DEBUT
                [(#INCLURE{fond=prive/inclure/gis_objet_formulaires,objet=evenement,id_objet=#ID_EVENEMENT,ajax})]


#BLOC_FIN
        
</div>

Ce code doit figurer dans une boucle événement, à un endroit ou l’id_evenement est défini.

Dans le cas contrait il serait judicieux de faire afficher par le squelette un message signalant qu’il faut au préalable enregistre le nouvel évenement.

La boucle agenda_gis permet simplement de ne pas afficher de carte tant qu’il n’y a pas de point associé.

L’utilisation de des blocs dépliables n’est évidemment pas obligatoire (nécessite le couteau suisse) ; pour s’en passer, il suffit d’enlever toutes les balise commençant par #BLOC


proposition pour un nouveau paragraphe dans l’aide, par troOn

Appeler un point géolocalisé à partir d’un squelette

Il est parfois utile d’appeler un point sur une carte, directement à partir d’un lien ou d’un bouton contenu dans son squelette. Une fonction javascript a été ajoutée à cette effet (à partir de GIS 4.4.).

La fonction gis_focus_marker nécessite deux variables, d’abprd l’ID du point géolocalisé, ensuite l’ID de la carte.

Prenons l’exemple d’une carte, dont les titres des points géolocalisés sont affichés à la suite. Si l’on désire que ces titres permettent de localiser immédiatement le point sur la carte quand on clique dessus, il suffit de s’inspirer du code ci-dessous.

<BOUCLE_article(ARTICLES){id_article}>
        <BOUCLE_carte(ARTICLES){gis}{id_article}{0,1}> [(#REM|{on teste que des points géolocalisés sont bien liés à cet article})]
    [(#INCLURE{fond=modeles/carte_gis,id_article=#ID_ARTICLE})]


<B_points>
                <ul>
                <BOUCLE_points(GIS){id_article}{par titre}>
                <li><a href="#map1" onclick="javascript:gis_focus_marker(#ID_GIS,1);">#TITRE</a></li>
                </BOUCLE_points>
                </ul>
                </B_points>
                        
        </BOUCLE_carte>
</BOUCLE_article>

----

Essayons de regrouper des infos pour étendre GIS par ici pour en faire un bel article par la suite. (b_b)

Ajouter des fonds de carte personnalisés

Il est possible d’enrichir la liste des fonds de carte proposées par le plugin. Pour cela il suffit de compléter la variable globale $GLOBALS['gis_layers'] depuis votre fichier mes_fonctions.php :

$GLOBALS['gis_layers']['dede'] = array(
        'nom' => 'CloudMade',
        'layer' => 'L.tileLayer("http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png")'
);

Définition des valeurs à renseigner pour chaque couche ajoutée :

  • dede = identifiant technique de la couche
  • CloudMade = nom affiché pour la couche
  • layer = définition de la couche pour Leaflet (voir la documentation de Leafet)

API Javascript de GIS

version 4.1.9 : ajout de la possiblité de définir une fonction de callback appelée sur l’événement load de la map (cette fonction doit être déclarée de façon global pour être accessible depuis le modèle ou la saisie).

-* pour le modèle carte_gis la fonction doit être nommée callback_mapXXX avec XXX = l’id_map passé au modèle de la carte

  • pour la saisie la fonction doit être nommée callback_form_map
    Exemple d’utilisation : callback_map_album = function(map) { /* ici on a accès à l'objet de la carte dans la variable map */ };

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