Browse Source

gis_plus permet d'jouter des markers et d'insérer une légende dans vos cartes GIS

master v1.2.0
touti 1 week ago
commit
c458b5de68
  1. 43
      README.txt
  2. 49
      base/gis_plus_ajouter_logos.php
  3. 66
      base/gis_plus_peupler_base.php
  4. 18
      demo/carte_gis_legende_articles.html
  5. 41
      gis_plus.css.html
  6. 34
      gis_plus.js.html
  7. 45
      gis_plus_administrations.php
  8. 54
      gis_plus_fonctions.php
  9. 19
      gis_plus_pipelines.php
  10. BIN
      images/_marker_defaut=.png
  11. BIN
      images/marker-icon-2x.png
  12. BIN
      images/marker-icon.png
  13. 10
      images/marker.svg
  14. BIN
      images/marker_bleu.png
  15. BIN
      images/marker_defaut_shadow.png
  16. BIN
      images/marker_noir.png
  17. BIN
      images/marker_orange.png
  18. BIN
      images/marker_rouge.png
  19. BIN
      images/marker_vert.png
  20. 22
      json/gis_articles.html
  21. 12
      lang/gis_plus_fr.php
  22. 14
      lang/paquet-gis_plus_fr.php
  23. 20
      legende_map.html
  24. BIN
      logo-gis-32.png
  25. 178
      modeles/carte_gis_legende.html
  26. 192
      modeles/carte_gis_watermark.html
  27. 25
      paquet.xml

43
README.txt

@ -0,0 +1,43 @@
10 dec 2021
Le plugin "gis_plus" GIS Surcharge / markers et legend
permet d'attribuer des icones aux points GIS liés à des articles et d'en afficher la légende
Il nécessite les plugins
- gis (gestion des cartes)
- saisies (je sais plus)
- mots_techniques (pour ne pas publier les mots-clefs utilisés dans le plugin)
- roles_documents (donne le role de logo aux images des mots-clefs), attention ce plugin est en dev, sauvegarder le base et le dossier IMG avant !
Comment ça fonctionne ?
- Le plugin lors de son installation créé le groupe de mot-clef "_marker_icon"
ainsi que cinq mots-clefs enfants et leur logo/icône de départ extraits du dossier d'images.
Ce groupe de mots-clés techniques permet de lier un de ses mot-clefs à des articles géolocalisés.
Ainsi le logo d'un mot-clef de ce groupe sera affiché comme marker du point GIS lié, d'autree part, son logo et son titre s'afficheront dans la légende de la carte.
Seules contraintes: ne pas modifier le titre du groupe '_marker_icon' et conserver le mot-clef '_marker_defaut='
qui sert à inscrire le titre par défaut à la suite, exemple de modification : '_marker_defaut=Légende des points par défaut'.
A part '_marker_defaut=' il est possible de modifier, supprimer ou d'ajouter d'autres mots-clefs avec titres et logos/icones de votre choix.
Qu'est ce qu'il faut faire pour que ça marche ?
- Prérequis: savoir à minima se servir du plugin GIS
- Attribuer un seul mot clef du groupe "_marker_icon" à l'article ayant un point GIS
- Opter pour un seul point GIS par article à cartographier (ou bien tous les points de l'article auront la même légende et logo que le mot-clef lié à l'article)
- Utiliser la carte en raccourci <carte_legend1|mots_legende=216+217>
- Voila, ça fonctionne déjà en utilisant le modele carte_gis.html
- Modifiez les titres des mots pour changer l'intitulé de la légende
- Modifiez le logo d'un mot pour changer l'icone GIS qui apparait sur la carte
Mais aussi ?
- Utilisez le champ "Lien hypertexte" des articles (configuration/Contenu du site) pour changer le lien de l'infobulle
- un petit cadeau pour afficher le logo de votre site sur la carte avec le modèle carte_gis_watermark
Le plugin remplace en le surchargeant le fichier json/gis_articles (ça je pense que c'est pas bien, je vais le renommer)
Il s'utilise avec le modele carte_gis_legende dans un squelette
[(#INCLURE{fond=modeles/carte_gis_legende, objets=articles, env, id_article=#LISTE{502,499,565}, mots_legende=#LISTE{216,217}})]
#LISTE facilitant ici l'écriture pour un #ARRAY
On peut également écrire dans le texte
<carte_gis_legende1|objets=articles|mots_legende=216+217>

49
base/gis_plus_ajouter_logos.php

@ -0,0 +1,49 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
function ajouter_logos_mots() {
include_spip('inc/utils');
include_spip('inc/charsets');
include_spip('action/editer_document');
include_spip('action/ajouter_documents');
// retrouver le logo du groupe
$id_groupe = sql_getfetsel('id_groupe','spip_groupes_mots',"titre LIKE '%_marker_icon%'");
spip_log("N° groupe des icones legende = $id_groupe",'gis_plus' );
// Pour ajouter les logos sur les mots-clefs de ce groupe
//1 lister les images du dossier images/logos_marker/
//2 importer ces images
//3 les lier aux mots avec le role "logo"
$result = sql_select('id_mot,titre', "spip_mots", "id_groupe=$id_groupe");
while ($row = sql_fetch($result)){
$id_mot = $row['id_mot'];
$titre = $row['titre'];
$titre_img = translitteration(corriger_caracteres($titre));
$titre_img = strtolower(str_replace(' ','_',$titre));
$source = find_in_path(_DIR_PLUGIN_GIS_PLUS.'images/'.$titre_img.'.png');
//logo_modifier($objet, $id_objet, $etat, $source);
//logo_modifier('mot', $id_mot, 'on', $source);
//$local = copie_locale($source);
$fichier = $source;
$files = array();
$files[] = array('tmp_name' => $fichier, 'name' => basename($fichier));
$ajouter_documents = charger_fonction('ajouter_documents', 'action');
$liste = array();
$id_document = $ajouter_documents('new', $files, '', 0, 'image', $liste);
include_spip('action/editer_liens');
objet_associer(
array('document' => $id_document),
array('mot' => $id_mot),
array('role' => 'logo')
);
}
}

66
base/gis_plus_peupler_base.php

@ -0,0 +1,66 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
function peupler_base_gis_plus() {
//retrouver le groupe créé
$id_groupe = sql_getfetsel('id_groupe','spip_groupes_mots',"titre LIKE '%_marker_icon%'");
if ($id_groupe > 0){
spip_log("groupe _marker_icon id $id_groupe existe deja","peupler_base_gis_plus");
return;
}
$id_groupe = sql_insertq('spip_groupes_mots', array(
'titre' => '_marker_icon',
'obligatoire' => 'non',
'descriptif' => stripcslashes("Ce groupe de mots-clés techniques permet de lier des articles géolocalisés à un de ses mot-clefs. \n\n
Le logo d'un mot-clef de ce groupe sera affiché comme marker du point GIS lié, son titre s'affichera dans la légende de la carte avec son logo. \n\n
<span style='color:red'>Attention ! </span>Ne pas modifier le titre du groupe '_marker_icon', il faut aussi garder le titre du mot-clef '_marker_defaut=' et ajouter votre titre à la suite. \n\n
Sauf '_marker_defaut=' il est possible de supprimer ou d'ajouter d'autres mots-clefs et de modifier tous les titres et les logos.
"),
'tables_liees' => 'articles',
'technique' => 'oui',
'minirezo' => 'oui',
'comite' => 'oui',
'forum' => 'non',
));
//parfois nécessaire si groupe arbo actif
sql_insertq('spip_groupes_mots', array('id_groupe_racine' => $id_groupe),'id_groupe='.intval($id_groupe));
if ($id_groupe > 0) {
sql_insertq_multi('spip_mots', array(
array(
'titre' => '_marker_defaut=',
'id_groupe' => $id_groupe,
'type' => '_marker_icon',
),
array(
'titre' => 'Marker rouge',
'id_groupe' => $id_groupe,
'type' => '_marker_icon',
),
array(
'titre' => 'Marker vert',
'id_groupe' => $id_groupe,
'type' => '_marker_icon',
),
array(
'titre' => 'Marker bleu',
'id_groupe' => $id_groupe,
'type' => '_marker_icon',
),
array(
'titre' => 'Marker orange',
'id_groupe' => $id_groupe,
'type' => '_marker_icon',
),
));
}
}

18
demo/carte_gis_legende_articles.html

@ -0,0 +1,18 @@
[(#REM)
plugin gis plus
]
#SET{array_articles,#ARRAY}
[(#INCLURE{fond=modeles/carte_gis_legende, env,
id_carte_gis=1,
height=510,
zoom=12,
objets=articles, [(#REM) utilise json/gis_articles]
id_article=#GET{array_articles},
autocenterandzoom=oui,
centrer_auto=oui,
overview=oui,
ajax=carto-mots,
mots_legende=#GET{array_mapico}
})]

41
gis_plus.css.html

@ -0,0 +1,41 @@
#HTTP_HEADER{'Content-Type: text/css'}
/*
css gis_plus
*/
/* par securite pas de border sur les liens si contenus dans un texte */
.leaflet-popup-content .title a{border:none}
.legende_map {
background: #F0F7EE;
margin: 1rem;
padding: 1rem;
width: auto;
color: #000;
border-radius: 0.2rem;
box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
.legende_map ul{margin:0; padding:0;}
.legende_map li {
font-family: Arial, sans-serif;
font-size: 120%;
list-style-type: none;
background-repeat: no-repeat;
background-size: contain;
background-position: 0 0;
padding-left: 20px;
margin-bottom: 6px;
}
<BOUCLE_mapicss(MOTS){type LIKE %_marker_icon%}{tout}{titre !LIKE %_marker_defaut%}>
[(#SET{class_css,[(#TITRE|strtolower|translitteration|corriger_caracteres|replace{' ','_'})]})]
.mapico[_(#GET{class_css})]{
background-image: url([(#LOGO_MOT|extraire_attribut{src})]);
}</BOUCLE_mapicss>
<BOUCLE_mapicdefaut(MOTS){type LIKE %_marker_icon%}{tout}{titre LIKE %_marker_defaut%}>
.mapico_defaut{
background-image: url([(#LOGO_MOT|extraire_attribut{src})]);
}
</BOUCLE_mapicdefaut>

34
gis_plus.js.html

@ -0,0 +1,34 @@
#HTTP_HEADER{'Content-Type: application/javascript'}
/*
js gis_plus
*/
//var map = map1;
function charger_legend(){
$('#map1').on('load', function(){
//console.log(this.map._container);
//this.map.container;
//dis moi ce qu'il y a dans options
console.log(this.map.options.mots_legende);
var array_mots = this.map.options.mots_legende; //array des id_mot icones necessaires
// alert(array_mots[0]);
$('#map1 .leaflet-bottom.leaflet-left').load("#URL_PAGE{legende_map}",{array:array_mots}, function() {
// alert( "Load was performed." );
});
[(#REM) ! php
//$('#map1 .leaflet-bottom.leaflet-left').html("[(#INCLURE{fond=inclure/legende_map,array=#GET{array_mapico}}|pas_retour_ligne)]");
]
});
}
$(document).ready(function(){
charger_legend();
onAjaxLoad(charger_legend);
});

45
gis_plus_administrations.php

@ -0,0 +1,45 @@
<?php
/**
* Fichier gérant l'installation et désinstallation du plugin gis_plus
*
* @plugin gis_plus
* @copyright 2021
* @author Anne-lise Martenot
* @licence GPL v3
* @package SPIP\gis_plus\Installation
*/
if (!defined("_ECRIRE_INC_VERSION")){
return;
}
include_spip('base/gis_plus_peupler_base');
include_spip('base/gis_plus_ajouter_logos');
function gis_plus_upgrade($nom_meta_base_version, $version_cible){
$maj = array();
$maj['create'] = array(
array('peupler_base_gis_plus'),
array('ajouter_logos_mots')
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
/**
* Fonction de désinstallation du plugin.
**/
function gis_plus_vider_tables($nom_meta_base_version) {
// suppression des mots et du groupe
sql_delete('spip_groupes_mots', "titre LIKE '%_marker_icon%'");
sql_delete('spip_mots', "type LIKE '%_marker_icon%'");
/**/
effacer_meta($nom_meta_base_version);
}

54
gis_plus_fonctions.php

@ -0,0 +1,54 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
function pas_retour_ligne($texte){
$texte = preg_replace('/[\r\n]+/', '', $texte);
return $texte;
}
/* a supprimer une fois tout est OK */
function tester_logo(){
include_spip('inc/utils');
include_spip('inc/charsets');
include_spip('action/editer_document');
include_spip('action/ajouter_documents');
// retrouver le logo du groupe
$id_groupe = sql_getfetsel('id_groupe','spip_groupes_mots',"titre LIKE '%_marker_icon%'");
spip_log("on a bien id_groupe = $id_groupe",'gis_plus');
// Pour ajouter les logos sur les mots-clefs de ce groupe
//1 lister les images du dossier images/logos_marker/
//2 importer ces images
//3 les lier aux mots avec le role "logo"
$result = sql_select('id_mot,titre', "spip_mots", "id_groupe=$id_groupe");
while ($row = sql_fetch($result)){
$id_mot = $row['id_mot'];
$titre = $row['titre'];
$titre_img = translitteration(corriger_caracteres($titre));
$titre_img = strtolower(str_replace(' ','_',$titre));
$source = find_in_path(_DIR_PLUGIN_GIS_PLUS.'images/'.$titre_img.'.png');
//logo_modifier($objet, $id_objet, $etat, $source);
//logo_modifier('mot', $id_mot, 'on', $source);
//$local = copie_locale($source);
$fichier = $source;
$files = array();
$files[] = array('tmp_name' => $fichier, 'name' => basename($fichier));
$ajouter_documents = charger_fonction('ajouter_documents', 'action');
$liste = array();
$id_document = $ajouter_documents('new', $files, '', 0, 'image', $liste);
include_spip('action/editer_liens');
objet_associer(
array('document' => $id_document),
array('mot' => $id_mot),
array('role' => 'logo')
);
}
}

19
gis_plus_pipelines.php

@ -0,0 +1,19 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
//Ajoute la css de la légende et des icônes des points GIS
function gis_plus_insert_head_css($flux) {
$css = generer_url_public('gis_plus.css');
$flux .= "<link rel='stylesheet' type='text/css' media='all' href='$css' />\n";
return $flux;
}
//Ajoute le js qui inclut la légende
function gis_plus_insert_head($flux) {
$js = generer_url_public('gis_plus.js');
$flux .= "<script src='$js' type='text/javascript'></script>\n";
return $flux;
}

BIN
images/_marker_defaut=.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
images/marker-icon-2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
images/marker-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

10
images/marker.svg

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="830.000000pt" height="1280.000000pt" viewBox="0 0 830.000000 1280.000000" preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.15, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,1280.000000) scale(0.100000,-0.100000)" fill="#009688" stroke="none">
<path d="M3855 12789 c-555 -44 -1043 -176 -1530 -414 -1457 -712 -2370 -2223 -2322 -3840 19 -605 152 -1155 406 -1680 109 -225 183 -353 331 -575 65 -96 856 -1369 1760 -2827 903 -1459 1646 -2653 1650 -2653 4 0 747 1194 1650 2652 904 1459 1695 2732 1760 2828 148 222 222 350 331 575 421 869 520 1869 279 2821 -244 958 -822 1795 -1640 2371 -696 491 -1551 759 -2404 752 -94 -1 -216 -5 -271 -10z m635 -1764 c440 -80 813 -271 1120 -575 769 -761 825 -1980 130 -2812 -335 -402 -817 -663 -1344 -728 -114 -14 -378 -14 -492 0 -853 105 -1550 715 -1764 1544 -141 545 -52 1136 243 1613 330 531 862 876 1497 968 130 19 481 13 610 -10z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
images/marker_bleu.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
images/marker_defaut_shadow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

BIN
images/marker_noir.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
images/marker_orange.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
images/marker_rouge.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
images/marker_vert.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

22
json/gis_articles.html

@ -0,0 +1,22 @@
<BOUCLE_art(ARTICLES){gis}{id_article ?}{id_rubrique ?}{id_secteur ?}{id_mot ?}{id_groupe ?}{id_auteur ?}{recherche ?}{0, #ENV{limit}}{","}>
[(#SET{marker,[(#LOGO_GIS|gis_icon_properties)]})]
<BOUCLE_logomot(MOTS){id_article ?}{type LIKE %_marker_icon%}{tout}>[(#SET{marker,[(#LOGO_MOT_NORMAL|gis_icon_properties)]})]</BOUCLE_logomot>
[(#URL_SITE|non)
[(#SET{title,
[(#URL_ARTICLE|lien_ou_expose{[(#TITRE_GIS*|sinon{#TITRE*}|extraire_multi|supprimer_numero)]})]
})]
]
[(#URL_SITE|oui)
[(#SET{title,
[(#URL_SITE|lien_ou_expose{[(#TITRE_GIS*|sinon{#NOM_SITE*}|extraire_multi|supprimer_numero)]})]
})]
]
{"type": "Feature",
["geometry": (#GEOMETRY|appliquer_filtre{wkt_to_json}|sinon{{"type": "Point", "coordinates": \[#LON, #LAT\]}}),]
"id":"#ID_GIS",
"properties": {
"title":[(#GET{title}|json_encode)],
"description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#GET{marker})][(#GET{marker}|sinon{[
(#LOGO_GIS|gis_icon_properties)]})][,
"styles": (#GEOMETRY_STYLES|appliquer_filtre{geometry_styles_to_json})]
}}</BOUCLE_art>

12
lang/gis_plus_fr.php

@ -0,0 +1,12 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
//voir les champs extra
);

14
lang/paquet-gis_plus_fr.php

@ -0,0 +1,14 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// T
'perso_infolettres_description' => 'GIS surcharge pour la cartographie, markers et legend',
'perso_infolettres_nom' => 'GIS+ surcharge pour la cartographie',
'perso_infolettres_slogan' => 'GIS surcharge pour la cartographie',
);

20
legende_map.html

@ -0,0 +1,20 @@
#HTTP_HEADER{'Content-Type: text/html'}
[(#REM)
S'utilise avec le js qui charge la légende
[(#INCLURE{fond=inclure/legende_map,array=#GET{array_mapico}}|pas_retour_ligne)]
]
<BOUCLE_mapicdefaut(MOTS){type LIKE %_marker_icon%}{tout}{titre LIKE %_marker_defaut%}>
[(#SET{titre_defaut,[(#TITRE|replace{'_marker_defaut=',''}|trim)]})]
</BOUCLE_mapicdefaut>
<B_logomot>
<div class='legende_map'>
<ul>
<li class='mapico_defaut'>#GET{titre_defaut}</li>
<BOUCLE_logomot(MOTS){id_mot IN #ENV{array}}{type LIKE %_marker_icon%}{tout}{titre !LIKE %_marker_defaut%}>
[(#SET{class_css,[(#TITRE|strtolower|translitteration|corriger_caracteres|replace{' ','_'})]})]
<li class='mapico[_(#GET{class_css})]'>#TITRE</li>
</BOUCLE_logomot>
</ul>
</div>
</B_logomot>

BIN
logo-gis-32.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

178
modeles/carte_gis_legende.html

@ -0,0 +1,178 @@
[(#REM)
Modele carte_gis
----------------
Parametres possibles :
- id_map|id_carte_gis = 1 id de la carte
- lat|latit|latitude = 48.3 latitude du centre de la carte
- lon|lonxit|longitude = -4.7 longitude du centre de la carte
- zoom = 5 zoom de la carte
- maxZoom = 13 zoom maximum autorisé
- minZoom = 13 zoom minimum autorisé
- default_layer = acetate nom de la couche affichée par défaut, "none" si on ne souhaite pas affiche de couche spécifique
- affiche_layers = openmapsurfer/acetate noms des couches proposées séparés par des /
- sw_lat = lat - 10° latitude du sud-ouest de la bounding box
- sw_lon = lon - 10° longitude du sud-ouest de la bounding box
- ne_lat = lat + 10° latitude du nord-est de la bounding box
- ne_lon = lon + 10° longitude du nord-est de la bounding box
- width|largeur = 100% largeur de la carte, 100% par defaut
- height|hauteur = 400px hauteur de la carte, 400px par defaut
- style = non ne pas styler la carte
- fullscreen = oui afficher un bouton pour passer la carte en plein écran
- zoom_molette|zoom_wheel = non désactiver le zoom avec la molette de la souris, actif par defaut
- control_type|controle_type = non ne pas afficher le contrôle de changement de couche
- control_type_collapsed = non afficher le contrôle de changement de couche replié (oui par défaut)
- no_control|aucun_controle = oui ne pas afficher les contrôles de la carte
- scale = oui afficher l'échelle de la carte
- overview = oui afficher une mini carte de situation
- autocenterandzoom|centrer_auto = oui centrer et zoomer la carte automatiquement pour afficher tous les marqueurs
- localize_visitor|localiser_visiteur = oui centrer la carte sur la position du visiteur (API geolocation HTML5)
- localize_visitor_zoom = 12 niveau de zoom sur la position du visiteur (par défaut la valeur de zoom de la carte)
- id_a_ouvrir id_gis de l'infobulle à afficher au chargement(marqueur uniquement)
- objets = gis type d'objets à afficher (fichier json/gis_xx qui génère la source de donnees)
- limit|limite = 500 nombre max de marqueurs à afficher, 500 par defaut
- langue = null langue des objets à récupérer (utile pour les multis notamment)
- tooltip = oui affiche un tooltip sur les points
- kml = 12 kml à superposer à la carte (id_document ou url ou liste d'url)
- gpx = 12 gpx à superposer à la carte (id_document ou url ou liste d'url)
- geojson = 12 geojson à superposer à la carte (id_document ou url ou liste d'url)
- topojson = 12 topojson à superposer à la carte (id_document ou url ou liste d'url)
- centrer_fichier = non permet de ne pas centrer la carte automatiquement sur les fichiers kml/gpx surperposés
- point = non si elle vaut "non" cette option n'affichera pas de points du tout (utile pour n'afficher qu'un kml par exemple)
- media = non permet de passer le critère 'media' (pour les documents)
- mots = #LISTE{1,4,7} plugin critere {mots} https://contrib.spip.net/Critere-mots
- path_styles=#ARRAY{color,#fff} options de style des éléments de la couche GeoJSON (voir http://leafletjs.com/reference.html#path-options)
- options=#ARRAY{option1,valeur1} options ajoutées à la carte (qui peuvent être récupérées dans la fonction de callback par exemple par la suite)
Uniquement si objets = point_libre :
- icone = chemin/vers/image image utilisée pour le marker
- titre titre du point
- description description du point
Clustering (regroupement de points proches) :
- cluster = oui Active le clustering
- clusterMaxZoom = 11 Regroupe les points jusque à ce zoom, mais pas au delà
- clusterShowCoverageOnHover = oui Affiche au survol du cluster le contour de la zone couverte par les points regroupés
- maxClusterRadius = 80 Le rayon maximal (en pixels) qu'un cluster couvrira (80 pixels par defaut)
- clusterSpiderfyOnMaxZoom = oui Active l'effet d'éclatement pour afficher les points qui se chevauchent
- singleMarkerMode = oui Utilise les icones de cluster pour tous les points (même ceux qui ne sont pas dans un cluster)
]
[(#SET{width,#ENV{width,#ENV{largeur,100%}}})]
[(#SET{height,#ENV{height,#ENV{hauteur,400px}}})]
[(#SET{id,#ENV{id_carte_gis,#ENV{id_map,#ENV{id,1}}}})]
[(#REM) -- compat gis v1 -- ]
[(#SET{lat,#ENV{lat,#ENV{latit,#ENV{latitude,#CONFIG{gis/lat,0}}}}})]
[(#SET{lon,#ENV{lon,#ENV{lonxit,#ENV{longitude,#CONFIG{gis/lon,0}}}}})]
[(#REM) On utilise la bounding box seulement si le centre n'a pas été donné et si les quatre valeurs de la bounding box sont renseignées
les valeurs par defaut sont "centre +/- 10°", ce qui est naze, mais c'est un cas normalement impossible
]
#SET{utiliser_bb, ''}
[(#ENV{lat}|ou{#ENV{lon}}|non|et{#ENV{sw_lat}}|et{#ENV{sw_lon}}|et{#ENV{ne_lat}}|et{#ENV{ne_lon}})
#SET{utiliser_bb, oui}
#SET{sw_lat,#ENV{sw_lat,#GET{lat}|moins{10}}}
#SET{sw_lon,#ENV{sw_lon,#GET{lon}|moins{10}}}
#SET{ne_lat,#ENV{ne_lat,#GET{lat}|plus{10}}}
#SET{ne_lon,#ENV{ne_lon,#GET{lon}|plus{10}}}
]
[(#REM) <carte_gis_legende|mots_legende=216+217> ]
[(#ENV*{mots_legende}|is_array|oui)
#SET{mots_legende,#ENV*{mots_legende}}
]
[(#ENV*{mots_legende}|is_array|non)
#SET{mots_legende,#VAL{/\W/}|preg_split{#ENV*{mots_legende}}}
]
<div id="map[(#GET{id})]" class="carte_gis"[(#ENV{style}|!={'non'}|?{' '})style="[width:(#GET{width});][ height:(#GET{height});]"]></div>
<script type="text/javascript">/*<!\[CDATA\[*/
var map[(#GET{id})];
var jQgisloader;
(function (){
if (typeof jQuery.ajax == "undefined"){jQuery(init_gis);}else {init_gis();}
function init_gis(){
// Charger le javascript de GIS une seule fois si plusieurs carte
if (typeof jQgisloader=="undefined"){
jQgisloader = jQuery.ajax({url: '[(#PRODUIRE{fond=javascript/gis.js})]', dataType: 'script', cache: true});
}
// et initialiser la carte (des que js GIS charge et des que DOM ready)
jQgisloader.done(function(){
jQuery(function(){
map[(#GET{id})] = new L.Map.Gis('map[(#GET{id})]',{
mapId: '[(#GET{id})]',
callback: (typeof(callback_map[(#GET{id})]) === "function") ? callback_map[(#GET{id})] : false,
center: [#GET{lat},#GET{lon}],
zoom: [(#ENV{zoom,#CONFIG{gis/zoom,0}}|trim)][,
maxZoom: (#ENV{maxZoom}|trim)][,
minZoom: (#ENV{minZoom}|trim)][,
default_layer: '(#ENV{default_layer}|trim)'][,
affiche_layers: (#ENV{affiche_layers}|trim|?{[(#ENV{affiche_layers}|trim|explode{/}|json_encode)],''})],
scrollWheelZoom: [(#ENV{zoom_molette,#ENV{zoom_wheel}}|trim|=={non}|?{false,true})],
zoomControl: [(#ENV{no_control,#ENV{aucun_controle}}|trim|!={oui}|?{true,false})],
fullscreenControl: [(#ENV{fullscreen}|trim|=={oui}|?{true,false})],
scaleControl: [(#ENV{scale}|trim|=={oui}|?{true,false})],
overviewControl:[(#ENV{overview}|trim|=={oui}|?{true,false})],
layersControl: [(#ENV{control_type,#ENV{controle_type}}|trim|=={non}|?{false,true})],
layersControlOptions: {
collapsed: [(#ENV{control_type_collapsed,#ENV{control_type_collapsed}}|trim|=={non}|?{false,true})]
},
noControl: [(#ENV{no_control,#ENV{aucun_controle}}|trim|=={oui}|?{true,false})],
utiliser_bb: [(#GET{utiliser_bb}|?{true,false})][,
sw_lat: (#GET{sw_lat})][,
ne_lat: (#GET{ne_lat})][,
sw_lon: (#GET{sw_lon})][,
ne_lon: (#GET{ne_lon})],
affiche_points: [(#ENV{point,''}|=={non}|?{false,true})][,
langue:'(#ENV{langue})'],
json_points:{
url: '[(#URL_PAGE{gis_json}|parametre_url{lang,#ENV{langue},&}|url_absolue)]'[,
objets: '(#ENV{objets,#ENV{class}}|trim)'],
limit: [(#ENV{limit,#ENV{limite,500}}|trim)],
env: [(#ENV*{args,#ENV*}|gis_modele_url_json_env|json_encode)][,
titre: (#ENV{titre}|?{#ENV{titre},''}|trim|json_encode)][,
description: (#ENV{description}|?{#ENV{description},''}|trim|json_encode)][,
icone: (#ENV{icone}|?{#ENV{icone},''}|trim|json_encode)]
},
tooltip: [(#ENV{tooltip}|=={oui}|?{true,false})],
cluster: [(#ENV{cluster}|=={oui}|?{true,false})],
clusterOptions: {
disableClusteringAtZoom: [(#ENV{clusterMaxZoom,null})],
showCoverageOnHover: [(#ENV{clusterShowCoverageOnHover}|?{true,false})],
spiderfyOnMaxZoom: [(#ENV{clusterSpiderfyOnMaxZoom}|?{true,false})],
maxClusterRadius: [(#ENV{maxClusterRadius,80})],
singleMarkerMode: [(#ENV{singleMarkerMode}|?{true,false})]
},
pathStyles: [(#ENV*{path_styles}|json_encode)],
autocenterandzoom: [(#ENV{autocenterandzoom,#ENV{centrer_auto,non}}|trim|=={non}|?{false,true})],
openId: [(#ENV{id_a_ouvrir,false})],
localize_visitor: [(#ENV{localize_visitor,#ENV{localiser_visiteur}}|trim|?{true,false})],
localize_visitor_zoom: [(#ENV{localize_visitor_zoom,#ENV{zoom,#CONFIG{gis/zoom,0}}}|trim)],
centrer_fichier: [(#ENV{centrer_fichier,oui}|trim|=={oui}|?{true,false})],
kml: [(#ENV{kml,''}|?{[(#ENV{kml}|gis_param_to_array|gis_kml_to_urls|json_encode)],false})],
gpx: [(#ENV{gpx,''}|?{[(#ENV{gpx}|gis_param_to_array|gis_kml_to_urls|json_encode)],false})],
geojson: [(#ENV{geojson,''}|?{[(#ENV{geojson}|gis_param_to_array|gis_kml_to_urls|json_encode)],false})],
topojson: [(#ENV{topojson,''}|?{[(#ENV{topojson}|gis_param_to_array|gis_kml_to_urls|json_encode)],false})],
options: [(#ENV*{options,#ARRAY}|json_encode)],
mots_legende: [(#GET{mots_legende}|json_encode)],
});
});
});
}
})()
/*\]\]>*/
</script>

192
modeles/carte_gis_watermark.html

@ -0,0 +1,192 @@
[(#REM)
Modele carte_gis
----------------
Parametres possibles :
- id_map|id_carte_gis = 1 id de la carte
- lat|latit|latitude = 48.3 latitude du centre de la carte
- lon|lonxit|longitude = -4.7 longitude du centre de la carte
- zoom = 5 zoom de la carte
- maxZoom = 13 zoom maximum autorisé
- minZoom = 13 zoom minimum autorisé
- default_layer = acetate nom de la couche affichée par défaut, "none" si on ne souhaite pas affiche de couche spécifique
- affiche_layers = openmapsurfer/acetate noms des couches proposées séparés par des /
- sw_lat = lat - 10° latitude du sud-ouest de la bounding box
- sw_lon = lon - 10° longitude du sud-ouest de la bounding box
- ne_lat = lat + 10° latitude du nord-est de la bounding box
- ne_lon = lon + 10° longitude du nord-est de la bounding box
- width|largeur = 100% largeur de la carte, 100% par defaut
- height|hauteur = 400px hauteur de la carte, 400px par defaut
- style = non ne pas styler la carte
- fullscreen = oui afficher un bouton pour passer la carte en plein écran
- zoom_molette|zoom_wheel = non désactiver le zoom avec la molette de la souris, actif par defaut
- control_type|controle_type = non ne pas afficher le contrôle de changement de couche
- control_type_collapsed = non afficher le contrôle de changement de couche replié (oui par défaut)
- no_control|aucun_controle = oui ne pas afficher les contrôles de la carte
- scale = oui afficher l'échelle de la carte
- overview = oui afficher une mini carte de situation
- autocenterandzoom|centrer_auto = oui centrer et zoomer la carte automatiquement pour afficher tous les marqueurs
- localize_visitor|localiser_visiteur = oui centrer la carte sur la position du visiteur (API geolocation HTML5)
- localize_visitor_zoom = 12 niveau de zoom sur la position du visiteur (par défaut la valeur de zoom de la carte)
- id_a_ouvrir id_gis de l'infobulle à afficher au chargement(marqueur uniquement)
- objets = gis type d'objets à afficher (fichier json/gis_xx qui génère la source de donnees)
- limit|limite = 500 nombre max de marqueurs à afficher, 500 par defaut
- langue = null langue des objets à récupérer (utile pour les multis notamment)
- tooltip = oui affiche un tooltip sur les points
- kml = 12 kml à superposer à la carte (id_document ou url ou liste d'url)
- gpx = 12 gpx à superposer à la carte (id_document ou url ou liste d'url)
- geojson = 12 geojson à superposer à la carte (id_document ou url ou liste d'url)
- topojson = 12 topojson à superposer à la carte (id_document ou url ou liste d'url)
- centrer_fichier = non permet de ne pas centrer la carte automatiquement sur les fichiers kml/gpx surperposés
- point = non si elle vaut "non" cette option n'affichera pas de points du tout (utile pour n'afficher qu'un kml par exemple)
- media = non permet de passer le critère 'media' (pour les documents)
- mots = #LISTE{1,4,7} plugin critere {mots} https://contrib.spip.net/Critere-mots
- path_styles=#ARRAY{color,#fff} options de style des éléments de la couche GeoJSON (voir http://leafletjs.com/reference.html#path-options)
- options=#ARRAY{option1,valeur1} options ajoutées à la carte (qui peuvent être récupérées dans la fonction de callback par exemple par la suite)
Uniquement si objets = point_libre :
- icone = chemin/vers/image image utilisée pour le marker
- titre titre du point
- description description du point
Clustering (regroupement de points proches) :
- cluster = oui Active le clustering
- clusterMaxZoom = 11 Regroupe les points jusque à ce zoom, mais pas au delà
- clusterShowCoverageOnHover = oui Affiche au survol du cluster le contour de la zone couverte par les points regroupés
- maxClusterRadius = 80 Le rayon maximal (en pixels) qu'un cluster couvrira (80 pixels par defaut)
- clusterSpiderfyOnMaxZoom = oui Active l'effet d'éclatement pour afficher les points qui se chevauchent
- singleMarkerMode = oui Utilise les icones de cluster pour tous les points (même ceux qui ne sont pas dans un cluster)
]
[(#SET{width,#ENV{width,#ENV{largeur,100%}}})]
[(#SET{height,#ENV{height,#ENV{hauteur,400px}}})]
[(#SET{id,#ENV{id_carte_gis,#ENV{id_map,#ENV{id,1}}}})]
[(#REM) -- compat gis v1 -- ]
[(#SET{lat,#ENV{lat,#ENV{latit,#ENV{latitude,#CONFIG{gis/lat,0}}}}})]
[(#SET{lon,#ENV{lon,#ENV{lonxit,#ENV{longitude,#CONFIG{gis/lon,0}}}}})]
[(#REM) On utilise la bounding box seulement si le centre n'a pas été donné et si les quatre valeurs de la bounding box sont renseignées
les valeurs par defaut sont "centre +/- 10°", ce qui est naze, mais c'est un cas normalement impossible
]
#SET{utiliser_bb, ''}
[(#ENV{lat}|ou{#ENV{lon}}|non|et{#ENV{sw_lat}}|et{#ENV{sw_lon}}|et{#ENV{ne_lat}}|et{#ENV{ne_lon}})
#SET{utiliser_bb, oui}
#SET{sw_lat,#ENV{sw_lat,#GET{lat}|moins{10}}}
#SET{sw_lon,#ENV{sw_lon,#GET{lon}|moins{10}}}
#SET{ne_lat,#ENV{ne_lat,#GET{lat}|plus{10}}}
#SET{ne_lon,#ENV{ne_lon,#GET{lon}|plus{10}}}
]
<div id="map[(#GET{id})]" class="carte_gis"[(#ENV{style}|!={'non'}|?{' '})style="[width:(#GET{width});][ height:(#GET{height});]"]></div>
<script type="text/javascript">/*<!\[CDATA\[*/
var map[(#GET{id})];
var jQgisloader;
(function (){
if (typeof jQuery.ajax == "undefined"){jQuery(init_gis);}else {init_gis();}
function init_gis(){
// Charger le javascript de GIS une seule fois si plusieurs carte
if (typeof jQgisloader=="undefined"){
jQgisloader = jQuery.ajax({url: '[(#PRODUIRE{fond=javascript/gis.js})]', dataType: 'script', cache: true});
}
// et initialiser la carte (des que js GIS charge et des que DOM ready)
jQgisloader.done(function(){
jQuery(function(){
map[(#GET{id})] = new L.Map.Gis('map[(#GET{id})]',{
mapId: '[(#GET{id})]',
callback: (typeof(callback_map[(#GET{id})]) === "function") ? callback_map[(#GET{id})] : false,
center: [#GET{lat},#GET{lon}],
zoom: [(#ENV{zoom,#CONFIG{gis/zoom,0}}|trim)][,
maxZoom: (#ENV{maxZoom}|trim)][,
minZoom: (#ENV{minZoom}|trim)][,
default_layer: '(#ENV{default_layer}|trim)'][,
affiche_layers: (#ENV{affiche_layers}|trim|?{[(#ENV{affiche_layers}|trim|explode{/}|json_encode)],''})],
scrollWheelZoom: [(#ENV{zoom_molette,#ENV{zoom_wheel}}|trim|=={non}|?{false,true})],
zoomControl: [(#ENV{no_control,#ENV{aucun_controle}}|trim|!={oui}|?{true,false})],
fullscreenControl: [(#ENV{fullscreen}|trim|=={oui}|?{true,false})],
scaleControl: [(#ENV{scale}|trim|=={oui}|?{true,false})],
overviewControl:[(#ENV{overview}|trim|=={oui}|?{true,false})],
layersControl: [(#ENV{control_type,#ENV{controle_type}}|trim|=={non}|?{false,true})],
layersControlOptions: {
collapsed: [(#ENV{control_type_collapsed,#ENV{control_type_collapsed}}|trim|=={non}|?{false,true})]
},
noControl: [(#ENV{no_control,#ENV{aucun_controle}}|trim|=={oui}|?{true,false})],
utiliser_bb: [(#GET{utiliser_bb}|?{true,false})][,
sw_lat: (#GET{sw_lat})][,
ne_lat: (#GET{ne_lat})][,
sw_lon: (#GET{sw_lon})][,
ne_lon: (#GET{ne_lon})],
affiche_points: [(#ENV{point,''}|=={non}|?{false,true})][,
langue:'(#ENV{langue})'],
json_points:{
url: '[(#URL_PAGE{gis_json}|parametre_url{lang,#ENV{langue},&}|url_absolue)]'[,
objets: '(#ENV{objets,#ENV{class}}|trim)'],
limit: [(#ENV{limit,#ENV{limite,500}}|trim)],
env: [(#ENV*{args,#ENV*}|gis_modele_url_json_env|json_encode)][,
titre: (#ENV{titre}|?{#ENV{titre},''}|trim|json_encode)][,
description: (#ENV{description}|?{#ENV{description},''}|trim|json_encode)][,
icone: (#ENV{icone}|?{#ENV{icone},''}|trim|json_encode)]
},
tooltip: [(#ENV{tooltip}|=={oui}|?{true,false})],
cluster: [(#ENV{cluster}|=={oui}|?{true,false})],
clusterOptions: {
disableClusteringAtZoom: [(#ENV{clusterMaxZoom,null})],
showCoverageOnHover: [(#ENV{clusterShowCoverageOnHover}|?{true,false})],
spiderfyOnMaxZoom: [(#ENV{clusterSpiderfyOnMaxZoom}|?{true,false})],
maxClusterRadius: [(#ENV{maxClusterRadius,80})],
singleMarkerMode: [(#ENV{singleMarkerMode}|?{true,false})]
},
pathStyles: [(#ENV*{path_styles}|json_encode)],
autocenterandzoom: [(#ENV{autocenterandzoom,#ENV{centrer_auto,non}}|trim|=={non}|?{false,true})],
openId: [(#ENV{id_a_ouvrir,false})],
localize_visitor: [(#ENV{localize_visitor,#ENV{localiser_visiteur}}|trim|?{true,false})],
localize_visitor_zoom: [(#ENV{localize_visitor_zoom,#ENV{zoom,#CONFIG{gis/zoom,0}}}|trim)],
centrer_fichier: [(#ENV{centrer_fichier,oui}|trim|=={oui}|?{true,false})],
kml: [(#ENV{kml,''}|?{[(#ENV{kml}|gis_param_to_array|gis_kml_to_urls|json_encode)],false})],
gpx: [(#ENV{gpx,''}|?{[(#ENV{gpx}|gis_param_to_array|gis_kml_to_urls|json_encode)],false})],
geojson: [(#ENV{geojson,''}|?{[(#ENV{geojson}|gis_param_to_array|gis_kml_to_urls|json_encode)],false})],
topojson: [(#ENV{topojson,''}|?{[(#ENV{topojson}|gis_param_to_array|gis_kml_to_urls|json_encode)],false})],
options: [(#ENV*{options,#ARRAY}|json_encode)]
});
///////
L.Control.Watermark = L.Control.extend({
onAdd: function(map[(#GET{id})]) {
var img = L.DomUtil.create('img');
img.src = ['(#LOGO_SITE_SPIP|image_reduire{200}|extraire_attribut{src})'];
img.style.width = '200px';
return img;
},
onRemove: function(map[(#GET{id})]) {
// Nothing to do here
}
});
L.control.watermark = function(opts) {
return new L.Control.Watermark(opts);
}
L.control.watermark({ position: 'bottomleft' }).addTo(map[(#GET{id})]);
//////
});
});
}
})()
/*\]\]>*/
</script>

25
paquet.xml

@ -0,0 +1,25 @@
<paquet
prefix="gis_plus"
categorie="communication"
version="1.2.0"
schema="1.0.0"
etat="dev"
compatibilite="[3.2.4;3.2.*]"
logo="logo-gis-32.png"
>
<nom>GIS Surcharge pour markers et legend</nom>
<!-- Surcharge GIS -->
<auteur lien='https://elastick.net'>Anne-lise Martenot</auteur>
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL V3</licence>
<necessite nom="gis" compatibilite="[4.50.6;]" />
<necessite nom="saisies" compatibilite="[3.2.0;]" />
<necessite nom="mots_techniques" compatibilite="[1.0.4;[" />
<utilise nom="roles_documents" compatibilite="[1.2.30;[" />
<pipeline nom="insert_head_css" inclure="gis_plus_pipelines.php" />
<pipeline nom="insert_head" inclure="gis_plus_pipelines.php" />
<pipeline nom="header_prive" action="gis_plus_insert_head_css" inclure="gis_plus_pipelines.php" />
</paquet>
Loading…
Cancel
Save