Pages: 1
- Sujet précédent - Mapserver, analyse thematique depuis plusieurs champs de table - Sujet suivant
#1 Tue 02 July 2024 22:23
- Bertrand_D
- Juste Inscrit !
- Lieu: Colmar
- Date d'inscription: 2 Dec 2005
- Messages: 7
Mapserver, analyse thematique depuis plusieurs champs de table
Bonjour,
Ma structure utilise Mapserver dans un site intranet cartographique avec une interface sous Géomoose.
Jusqu'à présent, la discrétisation, pour les représentations graphiques, se fait sur un seul champ de table à la fois.
Là où MapInfo et Qgis permettent de faire une analyse thématique bivariée, à ma connaissance, Mapserver ne le permet pas.
Ainsi, une table présentant des chutes de blocs pourra être décrite ainsi
CLASSITEM "code_alea"
CLASS
EXPRESSION "4"
NAME "Alea chute de blocs fort
- PAC Val d'Argent"
STYLE
OUTLINECOLOR 255 64 64
END
STYLE
SYMBOL "cercle_remplissage"
SIZE 6
COLOR 255 64 64
END
END
.................
tandis qu'une table présentant des glissements pourra être décrite de la sorte
CLASSITEM "code_alea"
CLASS
EXPRESSION "4"
NAME "Alea glissement semi profond fort
- PAC Val d'Argent"
STYLE
OUTLINECOLOR 255 64 64
END
STYLE
SYMBOL "point1"
SIZE 1
GAP 3
COLOR 255 64 64
END
END
CLASS
EXPRESSION "3"
.........................................
Ces deux tables se retrouvent désormais dans une table unique d'aléas mouvements de terrain, et le nom de la table ne permet plus de distinguer le type d'aléa, et le symbolisme associé
Dans les champs on a "type_alea" pour distinguer, respectivement, les glissements des chutes de blocs, et "code_alea" pour l'intensité des phénomènes.
Mapserver permet-il, à l'heure actuelle, d'associer les valeurs des deux champs "type_alea" et "code_alea", à commencer au niveau du CLASS_ITEM ?
Jusqu'à présent, face à un cas de figure comparable, nous passions par la création d'un champ de concaténation, ici, la valeur de "type_alea" et celle de "code_alea".
Devons nous continuer à passer par ce contournement ?
Merci d'avance pour vos éclaircissements
Hors ligne
#2 Thu 04 July 2024 12:15
- Blaise Picinbono
- Participant actif
- Date d'inscription: 8 Jan 2015
- Messages: 70
- Site web
Re: Mapserver, analyse thematique depuis plusieurs champs de table
Bonjour ;
Je ne suis pas certain d'avoir compris précisément, mais vous semblez vouloir créer des classes en fonction de la combinaisons de plusieurs champs d'une même table, est-ce bien cela ?
Vous pouvez avoir des expressions complexes dans la définition des lignes "EXPRESSION" du mapfile.
La doc est là :
https://mapserver.org/mapfile/expressions.html
Vous pourriez par exemple définir une classe en fonction de la valeur de deux champs différents de cette manière :
EXPRESSION ( ([type_alea] 42) AND ([code_alea] 4) )
(pas testé mais ça doit fonctionner)
pour définir une classe pour une valeur du champ type_area de 42 et une valeur du champ code_area de 4.
Cela répond-il à votre question ?
Hors ligne
#3 Fri 30 August 2024 14:49
- Bertrand_D
- Juste Inscrit !
- Lieu: Colmar
- Date d'inscription: 2 Dec 2005
- Messages: 7
Re: Mapserver, analyse thematique depuis plusieurs champs de table
Bonjour à tous,
J'ai essayé la solution proposée pour faire apparaître une analyse thématique sur deux champs distincts d'une couche d'informations géographique.
En tentant ce qui suit (les deux syntaxes sont possibles)
Début du mapfile [...]
CLASS
EXPRESSION (("lib_alea"="CB") AND ("niv_alea"="Fort"))
NAME "Alea chute de blocs fort"
STYLE
OUTLINECOLOR 255 64 64
END
STYLE
SYMBOL "cercle_remplissage"
SIZE 6
COLOR 255 64 64
END
END
CLASS
EXPRESSION (([lib_alea]="CB") AND ([niv_alea]="Faible"))
NAME "Alea chute de blocs faible"
STYLE
OUTLINECOLOR 160 160 255
END
STYLE
SYMBOL "cercle_remplissage"
SIZE 6
COLOR 160 160 255
END
END
[...] fin du mapfile
J'arrive à faire apparaître les éléments de légende correspondants dans la partie d'arborescence de l'intranet cartographique de ma structure... sauf que sur la fenêtre de carte à côté, ils ne s'affichent pas (dommage de ne pas pouvoir joindre de captures d'écran)
Ce que je fais depuis des années, ou que je demande de faire aux gestionnaires des couches, si des informations sont à prendre sur deux champs séparés (chose élémentaire avec MapInfo ou Qgis), est de créer un champ concaténant les valeurs des deux champs initialement séparés. Exemple ci-dessous
Début du mapfile [...]
CLASSITEM "code_them"
CLASS
EXPRESSION "CB-Fort"
NAME "Alea chute de blocs fort"
STYLE
OUTLINECOLOR 255 64 64
END
STYLE
SYMBOL "cercle_remplissage"
SIZE 6
COLOR 255 64 64
END
END
CLASS
EXPRESSION "CB-Faible"
NAME "Alea chute de blocs faible"
STYLE
OUTLINECOLOR 160 160 255
END
STYLE
SYMBOL "cercle_remplissage"
SIZE 6
COLOR 160 160 255
END
END
[...] fin du mapfile
Cette syntaxe fonctionne très bien, si ce n'est qu'elle représente une légère contrainte pour les producteurs des couches, qui n'ont pas besoin de ce champ supplémentaire pour une utilisation avec Qgis. Et j'imaginais que Mapserver devait être capable de gérer des analyses thématiques au moins bivariées.
Bon we à tous
Hors ligne
#4 Fri 30 August 2024 20:27
- Blaise Picinbono
- Participant actif
- Date d'inscription: 8 Jan 2015
- Messages: 70
- Site web
Re: Mapserver, analyse thematique depuis plusieurs champs de table
Bonjour,
Si,, on peut joindre des fichiers et des images ici, du moins on pouvait, je ne trouve plus la fonctionnalité. Sinon vous mettez vos images quelque part sur internet et vous mettez le lien ici...
Hmm, je ne pratique plus les mapfiles tous les jours actuellement, mais je suis persuadé que la classification selon plusieurs champs d'une même table est possible, la doc le prouve et je l'ai déjà mis en place il y a longtemps.
Je vois deux choses qui m'interpellent dans votre essai :
- pourquoi deux blocs STYLE pour la même CLASS, l'un avec OUTLINECOLOR et l'autre avec SYMBOL, SIZE et COLOR ? Pourquoi pas tout dans le même bloc STYLE, il ya peut-être un souci là ?
- pas évident de toujours bien comprendre la doc. Je vous recommande de faire quelques recherches sur la mailing list mapserver-users, on y trouve souvent des exemples fonctionnels.
Votre première expression est celle-ci :
Code:
EXPRESSION (("lib_alea"="CB") AND ("niv_alea"="Fort"))
L'exemple que je suggérais était :
Code:
EXPRESSION ( ([type_alea] 42) AND ([code_alea] 4) )
Je ne suis pas sûr que le signe égal ( fonctionne, je crois qu'il faut juste laisser un espace entre le nom du champ et la valeur, valeur entre guillemets si c'est une chaine de caractères, sans guillemets si c'est un nombre.
Je pense que vous n'êtes pas loin du but, je vais essayer de monter une exemple fonctionnel simple.
Quelle version de mapserver utilisez-vous ?
Hors ligne
#5 Mon 02 September 2024 17:02
- Blaise Picinbono
- Participant actif
- Date d'inscription: 8 Jan 2015
- Messages: 70
- Site web
Re: Mapserver, analyse thematique depuis plusieurs champs de table
Voilà, j'ai remonté la démo Itasca ici :
http://regattagame.org/georezo/mapserver_demo/
Dans la liste déroulante, il faut choisir le dernier élément "-- Adds dhtmlrubber-band box". Je dois débugger les autres modes, vu qu'il y a eu de petits changements sur le mapfile depuis la version 8 de mapserver.
J'ai ajouté une nouvelle couche vecteur de polygones nommée "Aleas" avec 3 champs dans la table attributaire : id, lib_alea et niv_alea.
J'ai dessiné 4 gros carrés dont voici les données :
1 | CB | Fort
2 | CB | Failbe
3 | CA | Fort
4 | CC | Faible
Voilà la définition de la couche dans le mapfile :
Code:
LAYER NAME aleas TYPE POLYGON STATUS OFF DATA aleas CLASS EXPRESSION ( ('[lib_alea]' eq 'CB') AND ('[niv_alea]' eq 'Fort') ) NAME 'Aleas CB Fort' TEMPLATE "templates/aleas.html" STYLE COLOR 255 0 0 END END CLASS EXPRESSION ( ('[lib_alea]' eq 'CB') AND ('[niv_alea]' eq 'Faible') ) NAME 'Aleas CB Faible' TEMPLATE "templates/aleas.html" STYLE COLOR 0 255 0 END END CLASS NAME 'Aleas Autre' TEMPLATE "templates/aleas.html" STYLE COLOR 0 0 255 END END HEADER "templates/aleas_header.html" FOOTER "templates/aleas_footer.html" TOLERANCE 3 ### DUMP TRUE # allow GML export METADATA WMS_TITLE "Aleas" WMS_ABSTRACT "Aleas" WMS_SRS "EPSG:26915" END END # aleas
Donc CB + Fort = rouge, CB + Faible = vert, autres combinaisons = bleu.
Il faut bien lire cette doc :
https://mapserver.org/mapfile/class.html#class
Notammente cet exemple :
Code:
EXPRESSION ([POPULATION] > 50000 AND '[LANGUAGE]' eq 'FRENCH')
Les noms de champs doivent être entre simple quote, les valeurs lorsque ce sont des chaines de caractères, également.
Enfin, ce n'est pas le signe égal ( qu'il faut utiliser, ni aucun signe comme je le supposais, mais l'opérateur eq (equal) pour des comparaisons entre chaines de caractères.
J'espère que cela vous permettra de simplifier votre production de données. Joyeuses EXPRESSIONs !
Hors ligne
Pages: 1
- Sujet précédent - Mapserver, analyse thematique depuis plusieurs champs de table - Sujet suivant