Sauf mention contraire dans les contenus, l'ensemble de ce site relève de la législation française et internationale sur le droit d'auteur et la propriété intellectuelle.
Foire Aux Questions - Légende et gestion des couches (layers.ini, etc.)
Auteur : Marie
- Pour l'ordre des couches dans l'onglet légende :
L'ordre des couches correspond à l'ordre de déclaration des groupes de couches et des couches dans le fichier /cartoweb3/projects/mon_projet/server_conf/mon_mapID/layers.ini.
Exemple :
layers.root.className = LayerGroup
layers.root.children = mon_GroupeB, mon_GroupeA
layers.mon_GroupeA.className = LayerGroup
layers.mon_GroupeA.children = layer1, layer2, layer3
layers.mon_GroupeB.className = LayerGroup
layers.mon_GroupeB.children = layer4, layer6, layer5
Dans cet exemple, les couches et groupes de couches apparaitront dans cet ordre dans la légende :
mon_GroupeB layer4 layer6 layer5 mon_GroupeA layer1 layer2 layer3
Ici, le groupe B est le premier enfant de "root", il est donc le premier à s'afficher, même si sa description suit celle du groupe A. Même principe pour les couches.
- Pour l'ordre des couches sur la carte :
Quelle que soit l'ordre d'affichage des couches dans la légende, l'ordre d'affichage des couches sur la carte dépend uniquement de l'ordre d'écriture dans le mapfile (fichier /cartoweb3/projects/mon_projet/server_conf/mon_carte/ma_carte.map)
Ainsi, les premières couches écrites dans le mapfile, seront les premières affichées et les dernières viendront alors s'afficher par dessus. Il est donc recommandé de décrire en premier dans le mapfile les couches de types raster, les couches de polygones et en dernier les couches d'objets ponctuels et linéaires. C'est également pour cette raison que, lorsque le module outline est activé, les couches outline doivent être rajoutées en fin de mapfile pour être toujours visibles.
Par ailleurs, malgré toutes ces précautions (raster en début de mapfile, etc.), il arrive souvent que l'utilisateur veuille changer la superposition des couches sur la carte. Un module permet de laisser la possibilité à l'utilisateur de modifier dynamiquement l'ordre de visibilité des couches ainsi que leur transparence : il s'agit du plugin layerReorder. Exemple d'impémentation dans la démo DemoPlugins
Pas assez clair ? Aller plus loin ? Posez une question en lien avec ce problème ici.
Auteur : Marie
Ajouter cette ligne dans la définition de la layer ou du layerGroup (fichier projects/mon_projet/server_conf/mon_map_id/layers.ini) :
layers.ma_layer.icon = mon_icone.png
Le fichier mon_icone.png doit être mis dans le répertoire : projects/mon_projet/server_conf/mon_map_id/icons/
Ensuite, il est nécessaire de lancer le script d'installation pour que le lien (la copie sous windows) soit fait dans le répertoire htdocs de cartoweb (script cw3setup.php).
Il peut être également nécessaire dans certains cas de supprimer le(s) paramètre(s) dans la définition des CLASS de la LAYER dans le mapfile.
Auteur : yjacolin
Il suffit de rajouter le paramètre autoClassLegend dans le fichiers layers.ini, côté serveur :
autoClassLegend = true
Côté mapfile, vous devez définir un objet CLASS pour chaque couche et chaque classe thématique :
LAYER NAME "msLayer" ... CLASS NAME "étiquette de légende" STYLE ... END END END
Auteur : Marie
Dans le fichier <macarte>.ini (côté server donc), il ajouter les paramètres suivants :
mapInfo.initialMapStates.default.layers.ma_couche.selected = true mapInfo.initialMapStates.default.layers.ma_couche.hidden = true
Ensuite si la fonctionnalité d'export en pdf est activée et que l'on veut également supprimer cette couche de la légende, il faudra ajouter le paramètre suivant dans le fichier mon_projet/client_conf/exportPdf.ini :
blocks.legend.content = "!ma_couche"
Pas assez clair ? Aller plus loin ? Posez une question en lien avec ce problème ici.
Auteur : Marie
Il faut :
- grouper toutes ces couches dans un même layerGroup dans le fichier layers.ini (monGroupe),
- toujours ds le fichier layers.ini, agréger monGroupe de sorte que seul le nom du layerGroup apparaisse dans la légende : ajouter à la définition du layerGroup layers.monGroupe.aggregate = true,
- dans le mapfile, définir des zoom min et max pour chacune des couches de sorte que les plages de zoom ne se recoupent pas,
De fait, lorsque que monGroupe est coché dans la légende, et que la carte est au zoom Z, seule la couche dont la plage de zoom contient la valeur Z s'affichera !
Exemple :
Dans le fichier layers.ini :
layers.monGroupe.className = LayerGroup layers.monGroupe.children = maCouche1, maCouche2 layers.monGroupe.rendering = block layers.monGroupe.aggregate = true
layers.maCouche1.className = Layer layers.maCouche1.label = ma couche 1 layers.maCouche1.msLayer = macouche1
layers.maCouche2.className = Layer layers.maCouche2.label = ma couche 2 layers.maCouche2.msLayer = macouche2
Dans le mapfile :
LAYER NAME "macouche1" ... MAXSCALE 50000 MINSCALE 25000 ... END
LAYER NAME "macouche2" ... MAXSCALE 100000 MINSCALE 50100 ... END
Le groupe mon Groupe s'affichera dans la légende et du zoom 1/25 000 au 1/50 000 (inclu), seule la couche 1 s'affichera puis du 1/50 100 au 1/1 000 000, seule la couche 2 s'affichera.
Pas assez clair ? Aller plus loin ? Posez une question en lien avec ce problème ici.
Auteur : yjacolin
Pour aggréger plusieurs couches dans un groupe, c'est à dire, avoir une case à cocher qui permet de charger plusieurs couches en une fois, ajoutez ce paramètre dans le fichier layers.ini :
layers.layerId.aggregate = true
Plus d'informations dans la documentation au chapitre Couches.
Admettons que vous ayez un groupe "ligne de métro" et que dans ce groupe vous avez plus de deux couches : une couche "stations", une couche "ligne RER", "ligne métro", ... Voici comment paramétrer votre fichier layers.ini :
layers.transport.className = LayerGroup layers.transport.label = "Ligne de transport" layers.transport.children = station, rer, metro, bus layers.transport.aggregate = true layers.station.className = layers layers.station.label = "Stations" layers.station.msLayer = station layers.rer.className = layers layers.rer.label = "Ligne de RER" layers.rer.msLayer = rer layers.metro.className = layers layers.metro.label = "Ligne de métro" layers.metro.msLayer = metro ...
D'autre part, il est possible d'avoir une couche dont on désire changer l'icône en fonction du zoom (notamment sa taille). Les différentes tailles d'icône vont apparaitre dans la légende, ce qui n'est pas toujours voulut. Vous pouvez enlevez le paramètre NAME dans tous les paramètres CLASS sauf un.
Voici un exemple, admettons que vous voulez faire varier la taille de l'icône des stations de métro en fonction du zoom. Vous ne voulez pas que les trois icônes (une pour chaque niveau de zoom) apparaissent dans la légende, une seule suffira. Voici comment votre mapfile se présentera :
LAYER NAME nomCouche DATA ... CLASS NAME "Station de métro" MAXSCALE 20000 MINSCLAE 500 STYLE ... END END CLASS MAXSCALE 100000 MINSCLAE 20000 STYLE ... END END CLASS MAXSCALE 2000000 MINSCLAE 100000 STYLE ... END END END
Pas assez clair ? Aller plus loin ? Posez une question en lien avec ce problème ici.
Auteur : Marie
Il faut recopier les fichiers nam.png et nap.png dans le répertoire icons dans server_conf/nom_du_projet/.
Vous les trouverez par exemple dans cartoweb3/projects/test_main/server_conf/test/icons/
N'oubliez pas de relancer le script d'install ensuite.
Pour ce qui est de cacher les couches purement et simplement dans la légende, il faut alors intervenir sur le template qui gère l'affichage de la légende mais c'est plus risqué.
Pas assez clair ? Aller plus loin ? Posez une question en lien avec ce problème ici.
Auteur : Marie
Par défaut, les noms qui apparaissent dans la légende sont les noms qui figurent apres la balise NAME dans le mapfile (.map). Dans le fichier layers.ini, il est possible de définir un label pour chaque couche :
layers.nom_couche.label = nom de ma couche
Il est ensuite possible de traduire cette chaîne via le système de traduction de cartoweb (l'internationalisation) :
Dans le fichier serveur.mon_map_id.fr.po (situé dans le dossier projects/mon_projet/po/), rajouter :
# layers.ini ou autre commentaire jugé utile ! msgid "nom de ma couche" msgstr "Nom de la couche personnalisé"