GIS : légende par mots clés - commentairesGIS : légende par mots clés2023-03-18T16:39:39Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5129522023-03-18T16:39:39Z<p>J'ai trouvé comment prendre le meilleur des 2 :<br class="autobr">
Je crée un formulaire de sélection des points :<br class="autobr">
Donc dans ma page principale j'ai :</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><div clas_='ajax'> [(#FORMULAIRE_GISMOTSLEGENDE)]
</div>
[(#MODELE{carte_gis,objets=touslesmots,id_groupe=1})]
</code></pre></div>
<p>Mon formulaire html se termine par :</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><textarea id='points'><INCLURE{fond=json/gis_motslegende,env}></textarea>
[<p clas_="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
</div>
</code></pre></div>
<p>Enfin mon « traiter » du formulaire contient :</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>function formulaires_gismotslegende_traiter_dist(){ $res = array(); $lsScript = <<<MLS
OK
<script type='text/javascript'> var loMap = $('#map1').get(0).map; loMap.removeAllMarkers(); loMap.parseGeoJson( JSON.parse( '{"type": "FeatureCollection", "features": ['+ $('#points').val()+ ']}' ));
</script>
MLS; $res['message_ok'] .= $lsScript; return $res;
}
</code></pre></div>
<p>Donc lorsque le formulaire est retourné, le Textarea contient la description des points à jour, puis la reponse_ok insère le script JS qui récupère le contenu du Textarea et l'envoie dans la carte.</p>
<p>Ainsi, seul le formulaire est rechargé par Ajax, le fond de carte n'a pas été rechargé.</p>
<p>(note : le clas_ remplace class pour que ce soit accepté dans les commentaires de cet article)</p>GIS : légende par mots clés2023-03-13T13:57:42Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5129212023-03-13T13:57:42Z<p>Oui cela recharge. Une solution pour simplement visible hidden par css (à coche/décoche ou validation input) aurait été mieux, dans certains cas. J'ai cherché un peu pas trouvé. Certainement c'est possible. J'ai des compétences limitées et plus de temps actuellement à y consacrer.</p>GIS : légende par mots clés2023-03-12T19:42:48Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5129172023-03-12T19:42:48Z<p>Bonjour, <br class="autobr">
Donc cette contribution recharge (il me semble) toute la carte (page) à chaque coche/décoche de mot-clé.<br class="autobr">
Et <a href='https://files.spip.net/Tutoriel-creer-une-carte-interactive-avec-GIS4' class="spip_in" rel='nofollow'>l'autre contribution de carte interactive</a> ne recharge pas la page mais n'affiche que les points liés à un seul mot-clé (pas de json à la volée).<br class="autobr">
Maintenant, comment faire une carte interactive (pas de recharge du fond de carte) qui permette de faire appel à une requête json xhr avec plusieurs mot-clés<small class="fine d-inline"> </small>?</p>GIS : légende par mots clés2023-01-27T11:49:31Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5126152023-01-27T11:49:31Z<p>Bonjour,<br class="autobr">
merci pour ce tuto.<br class="autobr">
Pour le faire fonctionner, j'ai dû :
<br>- appeler le modèle par un inclure plutôt que #MODELE :<br class="autobr">
<code class="spip_code spip_code_inline" dir="ltr">[(#INCLURE{fond=modeles/carte_gis,objets=motslegende,mots=#ENV{mots}})]</code>
<br>- enlever le commentaire html <code class="spip_code spip_code_inline" dir="ltr"><!--autre possibilité etc --></code> dans le fichier gis_motslegende.html
<br>- ajouter une virgule dans la boucle « gis » du même fichier pour que cela fonctionne quand on a un article qui a plusieurs points (sinon rien ne s'affiche, le json étant alors mal formé) : <code class="spip_code spip_code_inline" dir="ltr"><BOUCLE_gis(GIS){id_article}{","}></code><br class="autobr">
=> là ça marche, merci<small class="fine d-inline"> </small>!</p>GIS : légende par mots clés2022-04-13T11:01:25Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5107072022-04-13T11:01:25Z<blockquote class="spip">
<p>2 points géo qui ont pour mots clés : tonton (logo vert) et tata ( logo pourpre).</p>
</blockquote>
<p>Je réponds bien tardivement pour préciser (comme je l'avais fait pour jeromeD ci dessous) : le cas que je traite est celui où ce sont des objets (rubriques ou articles ou autres) qui sont associés à <br>- un mot clé (et un seul) ayant un logo <br>- un point gis (et un seul . Un objet étant à plusieurs endroits paraissant problématique<small class="fine d-inline"> </small>;)<br class="autobr">
Pour le cas où on associe des point GIS à un mot clé , la BOUCLE_obj(OBJETS) n'a évidemment aucun intérêt et une boucle GIS suffira sans doute :</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_gis(GIS){id_objet}{id_mot IN #ENV{mots}}{","}>
… "title": du point GIS
… <BOUCLE_mot(MOTS){id_gis} …</code></pre></div>
<p>qui devrais afficher les points GIS d'un objet (rubrique, article ou autre), avec le logo du mot qui lui est associé (au point GIS pas à l'objet<small class="fine d-inline"> </small>!).<br class="autobr">
C'est donc juste des besoins différents. Et d'autres sont sans doute possibles (par exemple afficher les points GIS d'articles sélectionnés par mots clés avec le(s) logo(s) du(des) mot(s) associé(s) à l'article … pour le choix d'une course d'orientation par exemple … )</p>GIS : légende par mots clés2019-12-13T15:56:01Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5033402019-12-13T15:56:01Z<p>Errata<small class="fine d-inline"> </small>!</p>
<p>Je n'avais pas vu un troisième point sur ma carte ( d'une autre rubrique)<br class="autobr">
je viens de l'enlever et cela fonctionne donc avec les 2 points cités en exemple dans mon message plus précédent.<br class="autobr">
Ce qui n'enlève pas le dysfonctionnement avec plusieurs points sur plusieurs rubriques .</p>
<p>Cordialement</p>GIS : légende par mots clés2019-12-13T08:29:28Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5033312019-12-13T08:29:28Z<p>re Bonjour,</p>
<p>Je me permet ici d'essayer d'expliquer une partie de mon problème :</p>
<p>Sur une rubrique j'ai respectivement <br class="autobr">
2 points géo qui ont pour mots clés :<br class="autobr">
tonton (logo vert) et tata ( logo pourpre).</p>
<p>1°) Sur la carte les couleurs de logo des points ne s'affichent pas, mais<br class="autobr"> en lieu et place les icônes par défaut de Gis (bleus) .</p>
<p>2°) La légende propose donc 2 points :</p>
<p>si je clique la checkbox «<small class="fine d-inline"> </small>tonton<small class="fine d-inline"> </small>», le point tonton s'affiche bien<br class="autobr">
si je clique une seconde fois sur la checkbox tata<br class="autobr">
(les deux checkbox sont donc activés) j'ai bien mais 2 points<br class="autobr">
par contre si je décoche tonton, logiquement tonton disparait<br class="autobr">
mais aussi tata alors que la checkbox tata est bien resté cochée.</p>
<p>Donc problème avec le point «<small class="fine d-inline"> </small>tata<small class="fine d-inline"> </small>»</p>
<p>Voilà où j'en suis , il faut dire que je tourne en rond, je ne sais pas comment <br class="autobr">
modifier les boucles dans Json , ou/et le formulaire de sélection .</p>
<p>Merci pour votre aide et votre patience.</p>
<p>Cordialement</p>GIS : légende par mots clés2019-12-10T13:14:36Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5032932019-12-10T13:14:36Z<p>Bonjour,<br class="autobr">
Je recrée un nouveau fil, pour demander de l'aide car j'ai bien tout suivi et ce tutoriel fonctionne.</p>
<p>Néanmoins si on a plusieurs points geo par rubrique, patatras cela ne fonctionne plus<small class="fine d-inline"> </small>! normalement. <br class="autobr">
Comment adapter tout ceci pour que cela fonctionne avec plusieurs points geo par rubriques ( ou articles) <br class="autobr">
Pas faute d'avoir essayé, je n'ai pas trouvé de solution<br class="autobr">
Merci d'avance</p>
<p>Cordialement</p>GIS : légende par mots clés2019-12-07T13:59:25Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5032682019-12-07T13:59:25Z<p>Merci d'avoir pris le temps de me répondre avec ces explications, cela fonctionne maintenant.</p>
<p>Je peux passer à l'étape suivante de mon projet<small class="fine d-inline"> </small>!<small class="fine d-inline"> </small>;-)</p>
<p>Cordialement</p>GIS : légende par mots clés2019-12-07T11:50:31Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5032672019-12-07T11:50:31Z<p><code class="spip_code spip_code_inline" dir="ltr"> <BOUCLE_gis(GIS){id_mot IN #ENV{mots}}{autre ...}{","}> </code><br class="autobr">
le critère « autre ... » ne doit pas exister … . <br class="autobr">
Ensuite, vous appliquez le même critère « id_mot IN #ENV[mots] » aux boucles _art(ARTICLES) et _gis(GIS), c'est redondant (même si ça ne devrait pas gêner si les mots clés sont bien affectés aux 2, mais quel intérêt alors<small class="fine d-inline"> </small>?)<br class="autobr">
Enfin de là, de ce choix, est-ce bien id_gis=#_gis:ID_GIS le bon critère pour BOUCLE_mot(MOTS) <br class="autobr">
(dans mon exemple les mots sont liés aux rubriques, si pour vous ils sont liés aux articles, cela devrait être id_article=#_art:ID_ARTICLE, s'ils sont bien liés aux point GIS a priori ça devrait être ok en supprimant id_mot IN #ENV<i>mots</i> de la BOUCLE_art(ARTICLES).</p>
<p>En espérant que ça vous aiguille sur la solution (je m'excuse pas avance je n'aurai plus guère le temps de répondre cette semaine)</p>GIS : légende par mots clés2019-12-07T09:02:49Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment5032572019-12-07T09:02:49Z<p>Bonjour, et surtout merci pour cette contribution<small class="fine d-inline"> </small>!</p>
<p>Voilà, ma carte fonctionne , j'ai bien mes points géo avec mots clés associés.<br class="autobr">
Pourtant à l'affichage de ma carte mes points n'apparaissent pas .<br class="autobr">
Même quand je clique sur la légende ( formulaire qui lui fonctionne).</p>
<p>Je vous mets ici mon json qui semble le coupable...</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_art(ARTICLES){gis}{id_mot IN #ENV{mots}}{","}>
<BOUCLE_gis(GIS){id_mot IN #ENV{mots}}{autre ...}{","}> {"type": "Feature", "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, "id":"#ID_GIS", "properties": { "description": [(#DESCRIPTIF|sinon{#_art:INTRODUCTION}|textebrut|concat{... <a href="#_art:URL_ARTICLE">En savoir plus</a>}|replace{"'","\'"}|json_encode)][(#SET{logo_doc,''})] <BOUCLE_mot(MOTS){id_gis=#_gis:ID_GIS}{id_groupe=1}{par hasard}{0,1}>[(#SET{logo_doc,#LOGO_MOT|image_passe_partout{32,32}})]
</BOUCLE_mot> [(#GET{logo_doc}|oui) #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]]
}}
</BOUCLE_gis>
</BOUCLE_art></code></pre></div>
<p>Si un spiper pouvait m'aider car je patauge depuis longtemps là dessus...!</p>
<p>Merci<br class="autobr">
Cordialement</p>GIS : légende par mots clés2019-01-06T18:59:44Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment4993272019-01-06T18:59:44Z<p>Mais oui on peut associer des mots clé à un point géolocalisé<small class="fine d-inline"> </small>! <br class="autobr">
Dans ce cas je pense que vous pouvez vous en tirez autrement, surtout si, au vu de votre remarque, vos mots clés (du groupe 7) n'ont pas d'intérêts à être liés aux articles. <br class="autobr">
Peut être alors simplement pour gis_motslegende.html :</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_gis(GIS){id_mot IN #ENV{mots}}{autre ...}{","}> {"type": "Feature",
etc.</code></pre></div>GIS : légende par mots clés2019-01-05T21:28:25Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment4993242019-01-05T21:28:25Z<p>Bonsoir, <br class="autobr">
En effet je confirme on peut associer des mots clé à un point géolocalisé, il suffit que le groupe de mots clés l'autorise (modifier un groupe de mots clés puis « Les mots-clés de ce groupe peuvent être associés — cocher points géolocalisés »</p>
<p>C'est donc ce que j'avais fait. J'ai donc modifier pour l'associer non pas au point mais à l'article et cela fonctionne.<br class="autobr">
Je vais finir le toilettage CSS et je reviens vers vous pour vous donner le lien de la carte. Merci pour l'aide en tout cas.<br class="autobr">
<i>Remarque </i> : Parfois on aimerait avoir un point géolocaliser sans article derrière juste pour situer un bâtiment avec les infos du points géolocalisés.</p>
<p>Bonne soirée</p>GIS : légende par mots clés2019-01-05T21:11:43Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment4993232019-01-05T21:11:43Z<blockquote class="spip">
<p>J'ai des articles ayant des point GIS. Ces points GIS sont associés à un mot clé (du groupe 7) et chaque mot clé à un logo (marqueur).</p>
</blockquote>
<p>Dans mon exemple si vous le suivez à la lettre en remplaçant rubrique par article, ce sont les articles qui sont associés à un mot clé, et ce sont les articles qui sont affichés sur la carte ...<br class="autobr">
Vous dites associer les points GIS à un mot clé<small class="fine d-inline"> </small>? c'est possible<small class="fine d-inline"> </small>? pas dans « mon » spip ...<br class="autobr">
Si c'est votre clavier qu'a fourché, et que c'est bien vos articles qui ont un mot clé (du groupe 7, avec logo, servant de marqueur), euh... :
<br>- vérifier que #ENV<i>mots</i> est bien présent : /spip.php<small class="fine d-inline"> </small>?articleX&var_mode=debugvar_mode=debug
<br>- commencer par tester le formulaire en affichant simplement la liste des articles ayant le(s) mot(s) clé(s) sélectionné(s)
<br>- ...</p>GIS : légende par mots clés2019-01-05T17:26:53Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment4993162019-01-05T17:26:53Z<p>Bonjour, Volontiers pour le lien pour un deuxième exemple lorsque j'y serai arrivé<small class="fine d-inline"> </small>;-)<br class="autobr">
Voilà où j'en suis : <br class="autobr">
J'ai des articles ayant des point GIS. Ces points GIS sont associés à un mot clé (du groupe 7) et chaque mot clé à un logo (marqueur).</p>
<p>J'ai créé le formulaire, déposé dans le dossier /formulaires de mon squelette</p>
<div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code><div class="formulaire_spip formulaire_aform" id="formulaire_aform">
<form method="post" action="#ENV{action}"> #ACTION_FORMULAIRE <div class="editer-groupe"> <BOUCLE_motsgeo(MOTS){id_groupe=7}{" "}> <div class="editer editer_checkbox"> <input type="checkbox" name="mots[]" id="mot#ID_MOT" value="#ID_MOT"[(#ENV{mots}|find{#ID_MOT}|oui) checked="checked"] onchange="this.form.submit();" /> <label class="checkbox-inline" for="mot#ID_MOT">#LOGO_MOT #TITRE</label> </div> [(#SET{choixcouleur,[(#ENV{mots, #ARRAY{}}|push{#ID_MOT})]})] </BOUCLE_motsgeo> </div>
</form>
</div></code></pre></div>
<p>J'ai créé le fichier gismotslegende.php que j'ai déposé dans le même dossier squelettes/formulaires</p>
<div class="precode"><pre class="spip_code spip_code_block language-php" dir="ltr" style="text-align:left;" data-language="php"><code><?php
function formulaires_gismotslegende_charger_dist(){ $valeurs = array('mots'=>_request('mots'),); return $valeurs;
}
function formulaires_gismotslegende_verifier_dist(){ $erreurs = array();
}
function formulaires_gismotslegende_traiter_dist(){ $res = array(); $mots[] = _request('mots[]'); return $res;
}
?></code></pre></div>
<p>Enfin j'ai créé et adapté à une boucle article le fichier gis_motslegende.html dans /squelettes/json</p>
<div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code><BOUCLE_art(ARTICLES){gis}{id_mot IN #ENV{mots}}{","}>
<BOUCLE_gis(GIS){id_article}> {"type": "Feature", "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, "id":"#ID_GIS", "properties": { "description": [(#DESCRIPTIF|sinon{#_art:INTRODUCTION}|textebrut|concat{... <a href="#_art:URL_ARTICLE">En savoir plus</a>}|replace{"'","\'"}|json_encode)][(#SET{logo_doc,''})]
<BOUCLE_mot(MOTS){id_article=#_art:ID_ARTICLE}{id_groupe=7}{par hasard}{0,1}>[(#SET{logo_doc,#LOGO_MOT|image_passe_partout{32,32}})]</BOUCLE_mot>
[(#GET{logo_doc}|oui) #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]]
}}
</BOUCLE_gis>
</BOUCLE_art></code></pre></div>
<p>Dans mon squelette, j'ai intégré les deux lignes suivantes</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#FORMULAIRE_GISMOTSLEGENDE)]
[(#MODELE{carte_gis,objets=motslegende,mots=#ENV{mots}})]</code></pre></div>
<p>J'ai bien le formulaire qui apparaît et la carte toutefois, je n'ai rien sur la carte même lorsque je sélectionne un élément de la légende<small class="fine d-inline"> </small>?</p>
<p>Auiez-vous une idée<small class="fine d-inline"> </small>?<br class="autobr">
Merci pour votre aide</p>GIS : légende par mots clés2019-01-05T13:10:54Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment4993052019-01-05T13:10:54Z<p>oui... la phrase est ambiguë (je devrais peut être plutôt écrire « Il faut donc créer un nouveau paramètre objet ... »)<br class="autobr">
C'est gis_motslegende.html qui crée l'objet à partir du moment où celui ci existe. Cet objet c'est un point GIS d'une rubrique (ou autre objet en modifiant le code) ayant un mot clé ayant un logo.<br class="autobr">
Vous n'avez donc qu'à créer les points GIS.</p>
<p>(Quand vous aurez fini si vous pouvez mettre un lien qu'on ait un autre exemple)</p>GIS : légende par mots clés2019-01-05T13:07:33Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment4993042019-01-05T13:07:33Z<p>oui... la phrase est ambiguë (je devrais peut être plutôt écrire « Il faut donc créer un nouveau paramètre objet ... »)<br class="autobr">
C'est gis_motslegende.html qui crée l'objet à partir du moment où celui ci existe. Cet objet c'est un point GIS d'une rubrique (ou autre objet en modifiant le code) ayant un mot clé ayant un logo.<br class="autobr">
Vous n'avez donc qu'à créer les points GIS.</p>GIS : légende par mots clés2019-01-05T12:37:14Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment4993022019-01-05T12:37:14Z<p>Bonjour et merci...je cherchais cela depuis un moment.<br class="autobr">
Je bloque juste sur ce passage : <br class="autobr">
«<small class="fine d-inline"> </small>Il faut donc créer un nouvel objet, appelons le «<small class="fine d-inline"> </small>motslegende<small class="fine d-inline"> </small>», et le modèles appelant, gis_motslegende.html , à enregistrer dans le dossier json de vos squelettes :»<br class="autobr">
J'ai copié le code et créé le fichier gis_motslegende.html déposé dans le dossier json de mon squelette. Mais par contre, pouvez-vous me préciser les actions de création d'un objet motlegende... car là je sèche.<br class="autobr">
Merci d'avance<br class="autobr">
Jérôme<br class="autobr">
PS : Bonne année</p>GIS : légende par mots clés2018-09-27T16:48:21Zhttps://files.spip.net/GIS-legende-par-mots-cles#comment4982742018-09-27T16:48:21Z<p>bonjour,</p>
<p>superbe article.<br class="autobr">
il serait bien que les admin de spip-contrib créent un mot-clé « contribution pédagogique », pour retrouver d'un lien ce genre d'articles.</p>
<p>merci.</p>