Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
Loading items

Target

Select target project
  • Documentation/doc_module_vmap
  • Gwendal/doc_module_vmap
  • carto/doc_module_vmap
3 results
Select Git revision
Loading items
Show changes
Commits on Source (102)
Showing
with 1658 additions and 25 deletions
# Documentation module vMap
Documentations des fonctionnalités de vMap
\ No newline at end of file
Documentation des fonctionnalités du module vMap
\ No newline at end of file
# Module anomalies
Aucune interface d'administration n'a été développée pour le module anomalie.
L'ensemble des paramètres à éditer sont disponibles dans le fichier :
/var/www/vmap/vas/rest/conf/anomalies/properties.inc
Ce fichier permet notamment de configurer le corps des emails qui sont envoyés.
## Paramètres variables et paramétrables dans les emails
Pour mettre des valeurs dynamiques dans un email il faut utiliser la syntaxe suivante :
```{{ anomaly.CLE }}```
Voici l'ensemble des variables qui peuvent être utilisées dans le corps des emails :
- **anomalies_id** -> Identifiant de l'anomalie
- **status_id** -> Identifiant du statut de l'anomalie
- **status_name** -> Nom du statut de l'anomalie
- **status_color** -> Couleur du statut de l'anomalie
- **theme_id** -> Identifiant du thème de l'anomalie
- **theme_name** -> Nom du thème de l'anomalie
- **theme_short_name** -> Abréviation du nom du thème de l'anomalie
- **title** -> Titre de l'anomalie
- **description** -> Description de l'anomalie
- **files** -> Nom des fichiers ajoutés avec le formulaire de l'anomalie
- **contact** -> Champ contact du formulaire de l'anomalie
- **user_id** -> Identifiant de l'utilisateur qui a créé l'anomalie
- **login** -> Login de l'utilisateur qui a créé l'anomalie
- **user_name** -> Nom de l'utilisateur qui a créé l'anomalie
- **user_email** -> Email de l'utilisateur qui a créé l'anomalie
- **anomalies_date** -> Date de la création de l'anomalie
- **last_update_date** -> Date de la dernière mise à jour de l'anomalie
- **closing_date** -> Date de clotûre de l'anomalie
- **map_id** -> Identifiant de la carte sur laquelle utilisateur était connecté lors de l'ajout de l'anomalie
- **admin_comment** -> Commentaire de l'administrateur
## Propriété importante
Pour que le module fonctionne correctement il est important de définir une valeur à cette propriété.
### $properties["anomalies_email_admin"]
Doit contenir l'adresse email de l'administrateur qui recevra les emails.
Aucune valeur par défaut n'a été définie.
## Propriété générales des emails
### $properties["email_object_user_create_anomaly"]
Objet de l'email envoyé à l'utilisateur lors de la création d'une anomalie
Valeur par défaut:
```
"L'anomalie VMAP n°{{anomaly.anomalies_id}} a été créé"
```
### $properties["email_user_create_anomaly"]
Contenu de l'email envoyé à l'utilisateur lors de la création d'une anomalie
Valeur par défaut:
``` HTML
"Bonjour,
<br/><br/>
Vous venez de créer une nouvelle anomalie le {{anomaly.anomalies_date}} :
<br/>
Identifiant : {{anomaly.anomalies_id}}
<br/>
Thème : {{anomaly.theme_name}}
<br/>
Titre : {{anomaly.title}}
<br/>
Description : {{anomaly.description}}
<br/>
Coordonnées pour vous recontacter : {{anomaly.contact}}
<br/><br/>
Nous vous remercions pour votre retour et y donnerons suite dès que possible.
<br/>
Vous pouvez suivre la prise en charge de votre demande depuis l’onglet « Anomalies » du MODULE ANOMALIES dans vmap.
<br/><br/>
Bien cordialement,
<br/>
L’équipe SIG"
```
### $properties["email_object_user_update_anomaly"]
Objet de l'email envoyé à l'utilisateur lors de la mise à jour d'une anomalie
Valeur par défaut:
```
"L'anomalie VMAP n°{{anomaly.anomalies_id}} a été mise à jour"
```
### $properties["email_user_update_anomaly"]
Contenu de l'email envoyé à l'utilisateur lors de la mise à jour d'une anomalie
Valeur par défaut:
``` HTML
"Bonjour,
<br/><br/>
La modification de votre anomalie n°{{anomaly.anomalies_id}} a bien été enregistrée le {{anomaly.last_update_date}}.
<br/>
Identifiant : {{anomaly.anomalies_id}}
<br/>
Thème : {{anomaly.theme_name}}
<br/>
Titre : {{anomaly.title}}
<br/>
Description : {{anomaly.description}}
<br/>
Coordonnées pour vous recontacter : {{anomaly.contact}}
<br/><br/>
Bien cordialement,
<br/>
L’équipe SIG"
```
### $properties["email_object_user_status_in_progress_anomaly"]
Objet de l'email envoyé à l'utilisateur lorsque le statut de l'anomalie change pour "En cours de traitement"
Valeur par défaut:
```
"L'anomalie VMAP n°{{anomaly.anomalies_id}} est en cours de traitement"
```
### $properties["email_user_status_in_progress_anomaly"]
Contenu de l'email envoyé à l'utilisateur lorsque le statut de l'anomalie change pour "En cours de traitement"
Valeur par défaut:
``` HTML
"Bonjour,
<br/><br/>
Votre anomalie n°{{anomaly.anomalies_id}} « {{anomaly.title}} » du {{anomaly.anomalies_date}} est en cours de traitement.
<br/><br/>
Bien cordialement,
<br/>
L’équipe SIG"
```
### $properties["email_object_user_status_waiting_anomaly"]
Objet de l'email envoyé à l'utilisateur lorsque le statut de l'anomalie change pour "En attente d'information"
Valeur par défaut:
```
"L'anomalie VMAP n°{{anomaly.anomalies_id}} est en attente d'information"
```
### $properties["email_user_status_waiting_anomaly"]
Contenu de l'email envoyé à l'utilisateur lorsque le statut de l'anomalie change pour "En attente d'information"
Valeur par défaut:
``` HTML
"Bonjour,
<br/><br/>
Nous sommes en attente d’informations pour le traitement de votre anomalie n°{{anomaly.anomalies_id}} « {{anomaly.title}} » du {{anomaly.anomalies_date}}.
<br/>
N’hésitez pas à nous recontacter pour plus de précisions.
<br/><br/>
Bien cordialement,
<br/>
L’équipe SIG"
```
### $properties["email_object_user_status_cancel_anomaly"]
Objet de l'email envoyé à l'utilisateur lorsque le statut de l'anomalie change pour "Annuler"
Valeur par défaut:
```
"L'anomalie VMAP n°{{anomaly.anomalies_id}} a été annulée"
```
### $properties["email_user_status_cancel_anomaly"]
Contenu de l'email envoyé à l'utilisateur lorsque le statut de l'anomalie change pour "Annuler"
Valeur par défaut:
``` HTML
"Bonjour,
<br/><br/>
Votre anomalie n°{{anomaly.anomalies_id}} « {{anomaly.title}} » du {{anomaly.anomalies_date}} a été annulée, à votre demande ou par votre administrateur SIG.
<br/>
N’hésitez pas à nous recontacter pour plus de précisions.
<br/><br/>
Bien cordialement,
<br/>
L’équipe SIG"
```
### $properties["email_object_user_status_finished_anomaly"]
Objet de l'email envoyé à l'utilisateur lorsque le statut de l'anomalie change pour "Terminer"
Valeur par défaut:
```
"L'anomalie VMAP n°{{anomaly.anomalies_id}} a été traitée"
```
### $properties["email_user_status_finished_anomaly"]
Contenu de l'email envoyé à l'utilisateur lorsque le statut de l'anomalie change pour "Terminer"
Valeur par défaut:
``` HTML
"Bonjour,
<br/><br/>
Votre anomalie n°{{anomaly.anomalies_id}} « {{anomaly.title}} » du {{anomaly.anomalies_date}} a été traitée, la demande est clôturée le {{anomaly.closing_date}}.
<br/>
Remarques éventuelles : {{anomaly.admin_comment}}.
<br/><br/>
Merci encore pour vos retours,
<br/><br/>
Bien cordialement,
<br/>
L’équipe SIG"
```
## Propriété des objets et contenus des emails pour l'administrateur
### $properties["email_object_admin_create_anomaly"]
Objet de l'email envoyé à l'administrateur lors de la création d'une anomalie.
Valeur par défaut:
```
"Anomalie VMAP n°{{anomaly.anomalies_id}} – {{anomaly.theme_name}} – {{anomaly.title}}"
```
### $properties["email_admin_create_anomaly"]
Contenu de l'email envoyé à l'administrateur lors de la création d'une anomalie.
Valeur par défaut:
``` HTML
"MODULE ANOMALIE VMAP
<br/><br/>
Une nouvelle anomalie a été signalée le {{anomaly.anomalies_date}} :
<br/>
Identifiant : {{anomaly.anomalies_id}}
<br/>
Thème : {{anomaly.theme_name}}
<br/>
Titre : {{anomaly.title}}
<br/>
Description : {{anomaly.description}}
<br/>
Coordonnées pour vous recontacter : {{anomaly.contact}}
<br/><br/>
Utilisateur : {{anomaly.login}}
<br/>
Coordonnées : {{anomaly.user_email}}"
```
### $properties["email_object_admin_update_anomaly"]
Objet de l'email envoyé à l'administrateur lors de la mise à jour d'une anomalie.
Valeur par défaut:
```
"Anomalie VMAP n°{{anomaly.anomalies_id}} – {{anomaly.theme_name}} – {{anomaly.title}}"
```
### $properties["email_admin_update_anomaly"]
Contenu de l'email envoyé à l'administrateur lors de la mise à jour d'une anomalie.
Valeur par défaut:
``` HTML
"MODULE ANOMALIE VMAP
<br/><br/>
L’ anomalie n°{{anomaly.anomalies_id}} a été modifiée le {{anomaly.last_update_date}}. :
<br/>
Identifiant : {{anomaly.anomalies_id}}
<br/>
Thème : {{anomaly.theme_name}}
<br/>
Titre : {{anomaly.title}}
<br/>
Description : {{anomaly.description}}
<br/>
Coordonnées pour vous recontacter : {{anomaly.contact}}
<br/><br/>
Utilisateur : {{anomaly.login}}
<br/>
Coordonnées : {{anomaly.user_email}}"
```
### $properties["email_object_admin_status_change_anomaly"]
Objet de l'email envoyé à l'administrateur lorsque le statut de l'anomalie change.
Valeur par défaut:
```
"Anomalie VMAP n°{{anomaly.anomalies_id}} – {{anomaly.theme_name}} – {{anomaly.title}}"
```
### $properties["email_admin_status_change_anomaly"]
Contenu de l'email envoyé à l'administrateur lorsque le statut de l'anomalie change.
Valeur par défaut:
``` HTML
"MODULE ANOMALIE VMAP
<br/><br/>
L’anomalie n°{{anomaly.anomalies_id}} « {{anomaly.title}} » du {{anomaly.anomalies_date}} a pris le statut {{anomaly.status_name}} le {{anomaly.last_update_date}}.
<br/><br/>
Utilisateur : {{anomaly.login}}
<br/>
Coordonnées : {{anomaly.user_email}}"
```
### $properties["email_object_admin_finished_anomaly"]
Objet de l'email envoyé à l'administrateur lorsque le statut de l'anomalie change pour "Terminer".
Valeur par défaut:
```
"Anomalie VMAP n°{{anomaly.anomalies_id}} – {{anomaly.theme_name}} – {{anomaly.title}}"
```
### $properties["email_admin_finished_anomaly"]
Contenu de l'email envoyé à l'administrateur lorsque le statut de l'anomalie change pour "Terminer".
Valeur par défaut:
``` HTML
"MODULE ANOMALIE VMAP
<br/><br/>
L’anomalie n°{{anomaly.anomalies_id}} « {{anomaly.title}} » du {{anomaly.anomalies_date}} a été clôturée le {{anomaly.closing_date}}.
<br/><br/>
Remarques : {{anomaly.admin_comment}}.
<br/><br/>
Utilisateur : {{anomaly.login}}
<br/>
Coordonnées : {{anomaly.user_email}}"
```
## Autre propriété
### $properties["anomalies_max_zoom"]
Nombre entre 1 et 24, défini le niveau de zoom maximum.
Valeur permettant de définir le niveau de zoom utilisé lorsqu'un utilisateur consulte (cartographiquement) une anomalie.
Cette valeur est une valeur maximale. Si l'anomalie est de type "multi-point" le centrage cartographique sera réalisé de telle manière à ce que l'ensemble des points soient visibles.
Cette valeur est comprise entre 1 et 24.
Valeur par défaut:
```
11
```
......@@ -38,6 +38,10 @@ Après avoir sélectionné le type de flux à exploiter, nommer le service, le d
Une fois testé, cliquer sur Créer pour confirmer la création du service.
### Le service xyz
Depuis la version 2020.02 deux paramètres ont été rajoutés pour les services XYZ. Un niveau de zoom minimum et un niveau de zoom maximum mettre de définir les niveaux à partir desquels les images ne seront plus chargées.
![](../images/service_xyz_zoom.png)
## Gestion des calques
......@@ -48,7 +52,9 @@ Dans vMap, un calque est un ensemble de couches provenant d'un seul et même ser
Dans vMap une carte est un ensemble de calques issues de un ou plusieurs services WMS.
### Clonage de carte
Le bouton cloner permet de cloner l'ensemble des paramètres d'une carte. Il reprend notemment l'ensemble des informations attributaires de la carte clonée mais aussi l'ensemble des calques et leurs caractéristiques (opacité, visibilité par défaut, superposition).
## Thèmes des calques
......
# Configuration du mode cartographie
Documentation en cours de rédaction..
......@@ -46,18 +46,118 @@ vous pouvez y intégrer le résultat d'un des attributs de la requête SQL Summa
- **Schéma :** schéma de la base de données
- **Table :** table de la base de données
- **SQL Summary :** requête SQL pour définir les champs à afficher dans
l’infobulle d’un objet, il est possible depuis la version 2018.01
d'intégrer des liens et des images en utilisant les balises HTML `<a>` et `<img>`
l’infobulle d’un objet.
- **Images et liens** : Il est possible depuis la version 2018.01.00 d'intégrer des liens et des images en utilisant les balises HTML `<a>` et `<img>`
- **Dates** : Il est possible depuis la version 2018.03.00 de formater les dates en fonction de la configuration de l'utilisateur en utilisant la fonction SQL `s_vitis.format_date()` exemple : `SELECT s_vitis.format_date(date_maj) as "Date MAJ" FROM ...`
![](../../images/infobulle.png)
- **SQL List :** requête SQL pour définir les champs à afficher dans la
liste des objets sélectionnés du requêteur, il est possible depuis la
version 2018.01 d'intégrer des liens et des images en utilisant les balises
HTML `<a>` et `<img>`
liste des objets sélectionnés du requêteur.
- **Images et liens** : Il est possible depuis la version 2018.01.00 d'intégrer des liens et des images en utilisant les balises HTML `<a>` et `<img>`
- **Dates** : Il est possible depuis la version 2018.03.00 de formater les dates en fonction de la configuration de l'utilisateur en utilisant la fonction SQL `s_vitis.format_date()` exemple : `SELECT s_vitis.format_date(date_maj) as "Date MAJ" FROM ...`
![](../../images/liste_requeteur.png)
### 2.1 Description de certains champs
#### Géométrie saisissable, modifiable
![](../../images/conf_bo/conf_bo_geom.png)
- Géométrie saisissable : Option disponible si le nom de la cononne géométrique est définie.
- Oui : Saisie d 'une nouvelle géométrie autorisée.
- Non : Impossibilité de saisir une nouvelle géométrie.
Ce paramétrage peut être utile si la table comporte un champ géométrique mais que la géométrie de l'objet est calculée dans un second temps (dans une vue par exemple).
Au moment de d'ajouter un objet ![](../../images/bouton_insertion.png), si l'option vaut non les éléments barrés n'apparaissent pas.
![](../../images/conf_bo/bo_geom_saisissable_non.png)
- Géométrie modifiable : Option disponible si le nom de la cononne géométrique est définie.
- Oui : Modification de la géométrie autorisée.
- Non : Impossibilité de modifier une géométrie.
Ce paramétrage peut être utile si la table comporte un champ géométrique mais que la géométrie de l'objet est modifiée dans un second temps (dans une vue par exemple).
Si l'option vaut non :
![](../../images/conf_bo/bo_geom_editable_non1.png)
![](../../images/conf_bo/bo_geom_editable_non2.png)
#### Mode de recherche du champ localisation
![](../../images/conf_bo/conf_bo_mode_recherche.png)
Les modes de recherche pour le champs localisation sont:
- Stricte
- Cherche exactement le texte
- Début de chaine
- Cherche le texte saisie (dans un seul bloc) en début de chaîne
- En sql, cela correspond à WHERE [le_champ] LIKE "texte_recherché%"
- Fin de chaine
- Cherche le texte saisie (dans un seul bloc) comme une fin de chaîne
- En sql, cela correspond à WHERE [le_champ] LIKE "%texte_recherché"
- Milieu de chaine
- Cherche le texte saisie (dans un seul bloc) dans tout la chaîne
- En sql, cela correspond à LIKE "%texte_recherché%"
- Texte plein
- Recherche un ou plusieurs mots de manière indépendante dans le texte.
- Corresponds à la recherche "plain text" de postgresql
- Le résultat d'une recherche "texte plein" sera prétraité, trié et retourné à l'utilisateur en fonction d'un "score". Les meilleurs résultats seront ceux dont le score sera le plus important.
Les avantages de la recherche texte plein sont:
- Une recherche plus large car chaque mot est cherché individuellement.
- Un tri plus pertinant grâce à un score attribué à chaque mot
Exemple:
Recherche en Debut de chaîne:
![](../../images/conf_bo/bo_recherche_milieu_chaine.png)
Recherche en Texte plein: La recheche texte plein cherche les mots individuellement.
![](../../images/conf_bo/bo_recherche_plein_text.png)
#### Objet localisable, sélectionnable et requêtable
![](../../images/conf_bo/conf_bo_loc_select_req.png)
![](../../images/conf_bo/conf_bo_generale.png)
- **Sélectionnable**: Affiche l'objet dans les listes des outils i et insertion
![](../../images/conf_bo/bo_selectionnable.png)
![](../../images/conf_bo/bo_insert.png)
- **Localisable**: Affiche l'objet dans la liste de l'outil de localisation
![](../../images/conf_bo/bo_localisable.png)
- **Requêtable**: Affiche l'objet dans les listes de l'outil i+
![](../../images/conf_bo/bo_requetable.png)
#### Objet disponible en édition multiple
![](../../images/conf_bo/conf_bo_multiple_edition.png)
- **Disponible en édition multiple**: Affiche dans le requêteur un bouton permettant de modifier plusieurs enregistrements
![](../../images/conf_bo/bo_multiple_edition.png)
Le bouton "modifier les enregistrements" ouvre le formulaire d'édition multiple.
## 3. Formulaires
### 3.1. Définitions
......@@ -105,7 +205,7 @@ formulaires des objets métier.
Le studio est accessible via la section Formulaire après avoir édité un
objet métier.
![](../../images/formulaire_studio.png)
![](../../images/creation_objet_metier.png)
#### 3.2.1. Génération automatique des formulaires
......@@ -139,7 +239,7 @@ La fenêtre suivante apparaît et l'utilisateur peut :
Le studio est divisé en quatre principales zones de gestion des
formulaires :
![](../../studio_4_zones.png)
![](../../images/studio_4_zones.png)
##### 3.2.2.1. La zone d'administration du fichier
......@@ -206,6 +306,18 @@ type d'attribut.
![](../../images/formulaire_zone_definition.png)
Depuis la version 2020.02 de vMap, il est possible d'accéder aux informations de connexion de l'objet métier directement dans les formulaires (consultation, saisi, modification).
3 nouvelles variables sont ainsi disponibles :
- database
- schema
- table
Exemple:
![](../../images/vmap_bo_studio_database.png)
#### 3.2.3. Utilisation du studio
Pour comprendre comment utiliser le studio consulter les documents suivants
......
......@@ -24,13 +24,30 @@ informations de chacun des éléments est généré.
## 2. Utilisation
Pour générer un rapport sur objet métier, sélectionner un objet sur la
carte en cliquant dessus, l'ajouter au panier, puis sélectionner les
objets dans le panier et enfin à l'aide du bouton "Rapports", générer le
rapport voulu.
### 1 - Depuis le panier
Pour générer un rapport sur objet métier depuis le panier, sélectionner un objet sur la carte en cliquant dessus et l'ajouter au panier
Une fois dans le panier, sélectionner les objets et générer le rapport voulu à l'aide du bouton "Rapports" (en haut à droite du panier).
![](../../images/creation_rapport_vmap.png)
Depuis vMap 2020.02, la création d'un rapport depuis le panier donne la possibilité de sélectionner un style. Il faut néemmoins que ce dernier soit associé au rapport ainsi qu'à l'utilisateur qui est connecté.
Si aucun style n'est associé au rapport, il se génère directement.
![](../../images/rapport_vmap_styles.png)
### 2 - Depuis l'infobulle
![](../../images/rapport_vmap_objet.png)
![](../../images/rapport_vmap_objets.png)
Pour générer un rapport sur objet métier depuis les infobulles de vMap, sélectionner un objet sur la carte en cliquant dessus puis cliquer pis ouvrir le menu déroulant de l'infobulle permettant de générer un "Rapport sur ces objets".
Si un style est associé à l'utilisateur connecté ainsi qu'au rapport, l'application permettra de choisir le style dans une fenêtre.
![](../../images/rapport_vmap_modal.png)
## 3. Administration
L'onglet Rapports du menu Développement permet la création, l'édition et
......@@ -45,6 +62,7 @@ Dans l'interface d'administration renseigner les éléments suivants :
- Objet métier : objet métier sur lequel le rapport doit être associé
- Rapport sur plusieurs éléments : pour générer un ou plusieurs
documents lors de sélections multiples
- Active les styles : permet d'ajouter un style à un rapport
- Définition HTML : permet de configurer la mise en page
- Objets JSON : permet une configuration plus avancée
......@@ -52,7 +70,7 @@ Dans l'interface d'administration renseigner les éléments suivants :
### 3.1. Configuration de la définition HTML
Le bloc de défintion HTML permet de configurer la mise en page du
Le bloc de définition HTML permet de configurer la mise en page du
rapport. Il est recommandé de procéder en trois parties :
- le style : balise style qui contiend la définition CSS à utiliser.
......@@ -123,7 +141,7 @@ Exemple:
"type":"map",
"target":"#map_image",
"map_id":120,
"resolution_coeff":1,
"features_zoom":400,
"scale_target":"map_scale"
}, {
"type":"webservice",
......@@ -151,8 +169,9 @@ de type "map" avec les paramètres suivants :
- target : cible sur laquelle doit se poser la carte ("\#" +
l'identifiant de votre balise image)
- map_id : identifiant de la carte à utiliser
- resolution_coeff : coefficient de résolution
- scale_target : nom de la variable qui contiend l'échelle de la
- features_zoom : coefficient de zoom par rapport à la feature où la valeur
100 correspondrait à un zoom maximum.
- scale_target : nom de la variable qui contient l'échelle de la
carte dans le template HTML
Exemple:
......@@ -162,7 +181,7 @@ Exemple:
"type":"map",
"target":"#map_image",
"map_id":120,
"resolution_coeff":1,
"features_zoom":400,
"scale_target":"map_scale"
}
```
......@@ -427,7 +446,7 @@ setTimeout(function () {
"type":"map",
"target":"#map_image",
"map_id":120,
"resolution_coeff":1,
"features_zoom":400,
"scale_target":"map_scale"
}, {
"type":"webservice",
......
# Interrogation GetFeatureInfo
*Disponible uniquement à partir de vMap 2018.03.00*
Dans vMap il est possible d'interroger les calques au travers d'objets métiers qui permettront en plus de la consultation des attributs, de mettre à jour la base de données, effectuer des jointures, visualiser des formulaires personnalisés interactifs etc...
Les objets métiers sont adaptés à l'utilisation dans vMap : ils ne permettront pas d'interroger une couche externe, ni d'interroger de façon attributaire une couche vMap depuis un logiciel tiers (FME, QGIS ...). Pour faire cela il faudra utiliser les fonctionnalités d'interrogation WMS par requête GetFeatureInfo.
Le GetFeatureInfo est une fonction du protocole WMS permettant d'intérroger une couche dans le but de recevoir les informations attributaires au format JSON, HTML, image ou texte. Dans la majeur partie des cas et dans vMap c'est le format HTML qui sera utilisé.
Depuis le mode cartographie, il suffira de cliquer sur la carte pour interroger toutes les couches actives au GetFeatureInfo. L'administrateur pourra définir à l'avance les couches interrogeables depuis le mode **calques et cartes** et l'utilisateur pourra à tout moment cocher/dé-cocher les couches interrogeables depuis le menu **jeux de données** situé sur la gauche.
![Utilisation GetFeatureInfo dans vMap](../images/getfeatureinfo/mode_carto.jpg)
## Utilisation dans le mode cartographie
### Sélection des calques et couches à interroger
L’administrateur aura déterminé à l’avance quels sont les calques interrogeables via GetFeatureInfo (voir partie administration), lors du dépliage du volet de gauche pour les calques définis comme interrogeables GetFeatureInfo une nouvelle boite à cocher apparaîtra et permettra à l’utilisateur de définir si le calque ainsi que ses couches seront interrogés.
Les boîtes à cocher peuvent avoir 3 états pour gérer les configurations intermédiaires (calques partiellement interrogeables).
![Selection couches GetFeatureInfo](../images/getfeatureinfo/mode_carto_2.jpg)
Les calques interrogeables sont ceux pour lesquels le service GetFeatureInfo a été défini. Cette définition n'est pas obligatoire, elle reste de la responsabilité du fournisseur de service.
### Clic sur la carte
Après avoir sélectionné la méthode d’interrogation, quand on clique sur un objet cartographique de la carte une fenêtre apparaît avec les différentes couches ainsi que le résultat HTML de la requête.
Comme la hauteur et la largeur du résultat peuvent être grandes, des barres de défilement apparaissent automatiquement.
![Utilisation GetFeatureInfo dans vMap](../images/getfeatureinfo/mode_carto.jpg)
On voit apparaître sur la carte en bleu le point qui a été cliqué, sur la droite de la carte une fenêtre résultante apparaît : on y retrouve la liste des couches potentiellement interrogeables de la carte, en cliquant sur un des éléments de cette dernière le résultat de la requête GetFeatureInfo correspondant s’inscrit sur la partie de droite de la fenêtre.
Sur la liste des couches interrogeables, on distinguera les couches avec et sans résultat.
Si pendant que la fenêtre résultante est affichée l’utilisateur effectue un autre clic sur la carte, alors les informations se rechargent, si une couche était sélectionnée dans la fenêtre elle restera affichée même si aucun résultat n’est ressorti.
La fermeture de la fenêtre contenant les informations entraîne la suppression du point bleu (localisation du clic).
Le résultat affiché est celui de la requête GetFeatureInfo, il peut donc être potentiellement incohérent si le serveur renvoie un message d'erreur ou des documents non html (xml, json…).
## Activation depuis l'interface d'administration
Pour activer les fonctionnalités d'interrogation WMS par requête GetFeatureInfo il faudra agir sur la **configuration de l'application**, sur les couches depuis le mode **MapServer** et sur les calques depuis le mode **calques et cartes**.
### Configuration
Dans le mode **configuration** puis dans la section **Configuration vMap** il est possible d'activer la fonctionnalité.
![Activation GetFeatureInfo](../images/getfeatureinfo/config_vmap.jpg)
### Mode MapServer
Pour que les couches puissent générer du GetFeatureInfo il faudra leur associer un **template**, pour cela il faudra le générer puis renseigner son emplacement dans la définition.
![Administration couche GetFeatureInfo](../images/getfeatureinfo/admin_couche.jpg)
Pour administrer le template il faudra de cliquer sur le bouton **Template GetFeatureInfo** qui va permettre d'éditer, générer et enregistrer le fichier au format HTML sur le serveur.
![Administration couche GetFeatureInfo](../images/getfeatureinfo/admin_couche_2.jpg)
Une fois le fichier enregistré, il faudra dans la définition de la couche placer dans chaque balise **CLASS** la ligne suivante :
```
TEMPLATE "../template/getfeatureinfo/{LAYER_NAME}.html"
```
Une dernière étape : renseigner le mime type au flux, pour cela il faudra ajouter dans le mode MapServer à l'objet web `"wms_feature_info_mime_type" "text/html"`
Exemple :
```
WEB
METADATA
"wms_title" "{WMSSERVICE_ID}"
"wms_onlineresource" "{WMSSERVICE_URL}"
"wms_feature_info_mime_type" "text/html"
"wms_srs" "EPSG:2154"
"wms_enable_request" "*"
END
# Les attributs TEMPLATE, IMAGEPATH et IMAGEURL sont ajoutés dynamiquement lors des tests. Ils sont inutiles en production
END
```
### Mode calques et cartes
Enfin il faudra au travers du formulaire du calque définir que ce dernier est interrogeable au travers de la requête GetFeatureInfo.
![Administration couche GetFeatureInfo](../images/getfeatureinfo/admin_calque.jpg)
### Retour du GetFeatureInfo au format GML
La configuration du GetFeatureInfo réalisée ci-dessus permet d'obtenir des résultats au format "text/html", le format exploité par vMap. Afin de retourner un résultat au format GML, plusieurs étapes sont à réaliser. Malgré tout, ce résultat ne pourra être exploité dans l'application. Seul un logiciel tier aura la possibilité de le faire. Dans la documentation qui va suivre, allons donc détailler l'ensemble des étapes à réaliser pour retourner en GML le résultat d'une requête GetFeareInfo. Toutes les étapes ci-dessous n'impacteront pas le fonctionnement normal de vMap. Ainsi :
* Etape 1 : Créer un nouvel objet web avec la définition ci-dessous en adaptant les paramètres (wms_onlineresource, wms_srs...) si nécessaire :
```
WEB
METADATA
"wms_title" "{WMSSERVICE_ID}"
"wms_onlineresource" "{MS_CGI_URL}public/{WMSSERVICE_ID}"
"wms_getfeatureinfo_formatlist" "application/vnd.ogc.gml"
"wms_feature_info_mime_type" "gml"
"wms_srs" "EPSG:4326 EPSG:2154 EPSG:3857"
"wms_enable_request" "*"
END
# Les attributs TEMPLATE, IMAGEPATH et IMAGEURL sont ajoutés dynamiquement lors des tests. Ils sont inutiles en production
END
```
Par rapport à un objet web "standard" de vMap, le paramètre `"wms_getfeatureinfo_formatlist" "application/vnd.ogc.gml"` a été ajouté, la valeur `"gml"` a remplacé la valeur `"text/html"` dans le paramètre `"wms_feature_info_mime_type"`.
* Etape 2 : Créer un nouveau Flux wms public et lui affecter l'objet web créé à l'étape 1.
* Etape 3 : Créer un nouvelle métadonnée contenant le paramètre `"gml_include_items" "all"`
Exemple :
```
METADATA
"wms_title" "{LAYER_TITLE}"
"wms_srs" "EPSG:3857 EPSG:2154 EPSG:4326"
"wms_name" "{LAYER_NAME}"
"wms_server_version" "1.3.0"
"wms_format" "image/png"
"wms_enable_request" "*"
"wms_extent" "-357823.2365 6037008.6939 1313632.3628 7230727.3772"
"gml_include_items" "all"
END
```
*Attention, veillez à modifier certains paramètres (wms_srs, wms_server_version, wms_extent...) si nécessaire.*
* Etape 4 : Cloner la couche que vous souhaitez interroger en GetFeatureInfo et dont le résultat sera retourné en GML.
Il serait possible de ne pas réaliser cette étape si et seulement si l'interrogation en GetFeatureInfo n'a pas pour but d'être réalisée sous vMap. Si c'est le cas, il est indispensable de cloner la couche auquel cas le GetFeatureInfo ne fonctionnera pas dans vMap pour cette dernière.
Idée : Vous pouvez nommer la couche du même nom que la couche cloner en la suffixant par "_GML". Exemple : Commune_point_GML.
* Etape 5 : Mettre à jour la couche créée à l'étape 4 et lui affecter la métadonnée créé à l'étape 3
Dans le même temps, s'assurer que la couche est bien interrogeable en GetFeatureInfo (cf. [Documentation ci-dessus](https://gitlab.veremes.net/Documentation/doc_module_vmap/blob/master/administration/getfeatureinfo.md#activation-depuis-linterface-dadministration))
* Etape 6 : Test
Pour tester cette nouvelle configuration, exécuter une requête GetFeatureInfo dans un navigateur sur la couche que vous avez paramétré. Ce dernier va alors télécharger un nouveau fichier dont le contenu se retrouve au format GML.
Exemple de requête GetFeatureInfo (modifier les paramètres nécessaires) :
```
https://[serveur]/wms/public/[nom_flux_public]?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&FORMAT=image/png&TRANSPARENT=true&QUERY_LAYERS=Commune__point_GML&LAYERS=Commune__point_GML&STYLES=&INFO_FORMAT=GML&I=50&J=50&CRS=EPSG%3A2154&WIDTH=101&HEIGHT=101&BBOX=642170.3063538198,6159025.597572117,661784.8780762318,6178640.16929453&vitis_version=3009
```
Attention : Le paramètre `INFO_FORMAT` doit impérativement avoir `GML` comme valeur.
Exemple de résultat:
```
<?xml version="1.0" encoding="UTF-8"?>
<msGMLOutput
xmlns:gml="http://www.opengis.net/gml"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Commune__point_GML_layer>
<gml:name>Commune__point_GML</gml:name>
<Commune__point_GML_feature>
<gml:boundedBy>
<gml:Box srsName="EPSG:2154">
<gml:coordinates>679240.481423,6154435.540671 679240.481423,6154435.540671</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<code>66049</code>
<nom>Ceret</nom>
<pop90>7289</pop90>
<nbr_service>1</nbr_service>
</Commune__point_GML_feature>
</Commune__point_GML_layer>
</msGMLOutput>
```
# Filtres sur les couches
Il est possible d'ajouter des formulaires de filtre sur les couches dans le but de visualiser certaines données uniquement.
Alors les utilisateurs du mode cartographique auront accès à un bouton faisant apparaître le formulaire de filtrage, sur la carte "Carte de France" créée par défaut lors de l'installation de l'application un filtre est mis en place à titre d'exemple.
Sur la couche "Commune" un bouton de filtre apparaît
![](../../images/filtres_couches_1.jpg)
En cliquant dessus le formulaire suivant est affiché dans une fenêtre modale
![](../../images/filtres_couches_2.jpg)
L'utilisateur peut alors filtrer la couche pour afficher uniquement les communes ayant une population comprise dans la fourchette saisie par l'utilisateur, ainsi si on saisit 50000 à "Population suppérieure à" nous obtenons la carte suivante:
<img src="../../images/filtres_couches_3.jpg" width="45%" /> <img src="../../images/filtres_couches_4.jpg" width="45%" />
Pour ce faire il faudra effectuer plusieurs étapes détaillées ci-dessous.
## 1 - Écrire le filtre sur la couche Mapserver
Après avoir saisit le filtre, vMap va ajouter aux URL permanentant de récupérer les tuiles les paramètres saisis, dans le module Mapserver il est possible de récupérer et d'utiliser ces valeurs. Bien évidemment cette opération est également fonctionnelle si vous utilisez un autre générateur de flux WMS.
Sur le module Mapserver il faudra se rendre dans la définition de la couche pour y renseigner un filtre, nous allons détailler l'exemple des communes, mais si vous voulez plus de détails vous trouverez toute l'information disponible sur la documentation Mapserver http://mapserver.org/fr/cgi/runsub.html#filters
Dans notre exemple voici ce qui est écrit:
```
FILTER ([pop90] > '%pop90_sup%' and [pop90] < '%pop90_inf%')
VALIDATION
'pop90_sup' '^[0-9]*$'
'default_pop90_sup' '0'
'pop90_inf' '^[0-9]*$'
'default_pop90_inf' '100000000'
END
```
**Dans la balise FILTER** on écria la condition à respecter, les noms des colonnes devrons être écrites entre crochets ex: [pop90] et les noms des attributs récupérés à travers le l'URL (c'est à dire le formulaire de filtre) devront être écris entre pourcentages ex: %pop90_sup%
**La balise VALIDATION est obligatoire** et on doit y écrire pour chaque attribut récupéré à travers l'URL (c'est à dire le formulaire de filtre) une expression régulière empéchant les personnes mal intentionnées de faire des injections SQL, dans notre exemple nous avons écrit '^[0-9]\*$' ce qui signifie autant de chiffres entre 0 et 9 que souhaité. **Pour que la carte affiche des valeurs lorsque les filtres sont vides** il faudra définir des valeurs par défaut en écrivant default_[nom de votre attribut], dans notre exemple par défaut la carte filtre les villes entre 0 et 100000000 d'habitants.
On peut également utiliser la balise **FILTERITEM** pour faire un filtre plus générique:
```
FILTERITEM "id_com"
FILTER /%id_com%/
VALIDATION
"id_com" "^[a-zA-Z0-9_|]*$"
"default_id_com" "^[a-zA-Z0-9_|]*$"
END
```
## 2 - Mettre en place un formulaire de filtre
Pour mettre en place le formulaire il faudra aller dans la partie **calques** et mettre Oui à "Calque filtrable (Mapserver)"
![](../../images/filtres_couches_5.jpg)
Après avoir mis à jour le calque, une nouvelle section "Formulaire de filtre" va apparaître dans lequel vous pourrez mettre en place votre filtre.
![](../../images/filtres_couches_6.jpg)
# Autres exemples d'utilisation des filtres dans vMap
## 1 - Filtre textuelle non obligatoire et fonctionnement similaire au LIKE en SQL
Dans le studio il faudra définir un champ de type texte ou une liste déroulante avec une source de données adaptée.
Il faudra définir votre filtre pour qu'il utilise une valeur par défaut qui permettra de court-circuiter le filtre. (Dans le cas présent **'empty'**)
Si vous voulez un fonctionnement plus proche d'un LIKE SQL utilisez **~** à la place de **=**. (voir exemple ci-dessous)
```
FILTER (([type] = '%type%' or '%type%' = 'empty') and ([liketext] ~ '%liketext%' or '%liketext%' = 'empty')
VALIDATION
'type' '^empty|value_type_1|value_type_2|value_type_3$'
'liketext' '^empty|.{1,}$'
'default_type' 'empty'
'default_liketext' 'empty'
END
```
## 2 - Filtre sur une colonne de type date/timestamp
Pour filtrer sur un attribut unique de type date/timestamp référez vous à la documentation de MapServer http://mapserver.org/ogc/wms_time.html.
## 3 - Filtre sur plusieurs colonnes de type date/timestamp
Vue que la spécification d'un champ de type date/timestamp se fait dans la partie **METADATA**, il est impossible pour MapServer de traiter deux champs de ce type en théorie.
En réalité par un moyen détourné, il est possible de gérer autant de champs date/timestamp que vous voulez.
Pour l'exemple, je vais prendre trois champs en base creation_date (date de création d'un objet, type postgres timestamp with time zone), date_debut_travaux (une date de début de travaux pour un objet métier par exemple, type timestamp with time zone), duree_travaux_jour (la durée des travaux en jours à partie de la date de début, type integer)
### a - Adapter votre vue
Pour permettre à MapServer de les traiter comme des entiers il va falloir que la vue retourne des entiers.
Exemple de code permettant de faire cela :
```sql
date_part('epoch'::text, table.creation_date)::integer AS mstmstp_creation_date,
date_part('epoch'::text, table.date_debut_travaux)::integer AS mstmstp_date_debut_travaux,
date_part('epoch'::text, table.date_debut_travaux + table.duree_travaux_jour * '1 day'::interval)::integer AS mstmstp_date_fin_travaux
```
### b - Adapter votre formulaire avec le studio
Ajouter les champs dates que vous voulez. Dans le cas présent on va laisser la possibilité de prendre une date au dessus, en dessous, ou d'encadrer la/les date(s).
Pour chaque champ date il faut un champ caché. Le champ date va renvoyer une valeur formatée du type 'DD/MM/YYYY' ou 'YYYY-MM-DD', mais nous voulons un timestamp. Nous allons voir dans la prochaine partie comment utiliser un champ date pour remplir un champ caché avec un timestamp.
![](../../images/filtres_couches_exemples_1.jpg)
### c - Permettre au formulaire de calculer les timestamps
Il va falloir ajouter du code javascript spécifique à ce formulaire. Pour ce faire il va falloir changer de mode d'utilisation du studio, pour pouvoir éditer du javascript.
![](../../images/filtres_couches_exemples_2.jpg)
Vous allez arriver devant un champ vide.
Voici le code permettant de remplir les champs cachés pour l'exemple :
```javascript
/* global angular, goog, moment, vitisApp, bootbox */
// goog fonctionne en mode décompilé mais pas en mode compilé
console.info("filtre_mapserver_couche_NOM loaded --> your functions are ready");
/***********************************************************************************
filtre_mapserver_couche_NOM Javascript
***********************************************************************************/
var oFormRequired = {
"sUrl": "",
"scope_": {},
"toDestructor": []
};
/**
* constructor_form
* Fonction appelée à l'initialisation du formulaire
* @param {type} scope
* @param {type} s_url
* @returns {undefined}
*/
var constructor_form = function (scope, s_url) {
oFormRequired.sUrl = s_url;
oFormRequired.scope_ = scope;
var formaterStringFrom = "DD/MM/YYYY";
var formaterStringTo = "X"; // timestamp UNIX
oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".creation_date_min_viz", function (value) {
if (typeof(value) !== "undefined" && value !== "") {
oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["creation_date_min"] = moment(value, formaterStringFrom).format(formaterStringTo);
} else {
oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["creation_date_min"] = null;
}
})
);
oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".creation_date_max_viz", function (value) {
if (typeof(value) !== "undefined" && value !== "") {
oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["creation_date_max"] = moment(value, formaterStringFrom).format(formaterStringTo);
} else {
oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["creation_date_max"] = null;
}
})
);
oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".tavaux_date_min_viz", function (value) {
if (typeof(value) !== "undefined" && value !== "") {
oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["travaux_date_min"] = moment(value, formaterStringFrom).format(formaterStringTo);
} else {
oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["travaux_date_min"] = null;
}
})
);
oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".tavaux_date_max_viz", function (value) {
if (typeof(value) !== "undefined" && value !== "") {
oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["travaux_date_max"] = moment(value, formaterStringFrom).format(formaterStringTo);
} else {
oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["travaux_date_max"] = null;
}
})
);
};
/**
* destructor_form
* Fonction appelée quand on quitte le formulaire (ne pas modifier)
* @returns {undefined}
*/
var destructor_form = function () {
console.log("Destructor");
for (var i = 0; i < oFormRequired.toDestructor.length; i++) {
oFormRequired.toDestructor[i] = undefined;
delete oFormRequired.toDestructor[i];
}
//supprimer la balise script du js pour pouvoir le recharger si on revient sur le formulaire plus tard
angular.element('[src="' + oFormRequired.sUrl + '?version=' + oFormRequired.scope_["oProperties"]["build"] + '"]').remove();
oFormRequired = undefined;
delete oFormRequired;
constructor_form = undefined;
delete constructor_form;
destructor_form = undefined;
delete destructor_form;
};
/**********************************************************************************/
```
Ce code créé une instance pour surveiller les changements des champs dates (**$watch**) et utilise une librairie intégrée à Vitis (**moment.js**) pour parser la date, la transformer en timestamp Unix et stocker le résultat dans le champ caché.
### d - Intégration du filtre dans la couche MapServer
```
FILTER (([mstmstp_date_debut_travaux] < '%travaux_date_max%' or [mstmstp_date_fin_travaux] < '%travaux_date_max%') and ([mstmstp_date_debut_travaux] < '%travaux_date_min%' or [mstmstp_date_fin_travaux] < '%travaux_date_min%') and ([mstmstp_creation_date] < '%travaux_date_max%') and ([mstmstp_creation_date] > '%creation_date_min%'))
VALIDATION
'creation_date_max' '^[0-9]{1,}$'
'creation_date_min' '^[0-9]{1,}$'
'travaux_date_max' '^[0-9]{1,}$'
'travaux_date_min' '^[0-9]{1,}$'
'default_creation_date_max' '10000000000000000000000000'
'default_creation_date_min' '0'
'default_travaux_date_max' '10000000000000000000000000'
'default_travaux_date_min' '0'
END
```
......@@ -7,4 +7,5 @@ Guide du développeur
../../../doc_module_studio/utilisation/index.rst
web_services
filtres_couches
exemples_objets_metier
This diff is collapsed.
......@@ -5,6 +5,7 @@ Administration de vMap
:maxdepth: 2
users
calques_cartes
mapserver/index.rst
impressions
......@@ -12,3 +13,4 @@ Administration de vMap
configuration
module_cadastre
guide_developpeur/index.rst
anomalies
......@@ -2,7 +2,7 @@
Documentation en cours de rédaction..
## Utiliser des mots de passe cryptés dans les mapfile du flux privé (à partir de 2018.01.00)
## Utiliser des mots de passe cryptés dans les mapfile du flux privé
Pour toute application ouverte à un certain nombre d'utilisateurs, il est utile voir indispensable de crypter les mots de passes situés à l'intérieur des mapfiles générés lors de l'utilisation de flux privés.
......@@ -10,7 +10,17 @@ Pour faire ceci, Mapserver propose la librairie **msencrypt** qui va crypter le
### Générer un fichier la clé de cryptage
Tout type de cryptage nécessite une clé de cryptage, pour cela il faudra lancer la commence ci-dessous qui va générer un fichier contenant cette clé.
Tout type de cryptage nécessite une clé de cryptage qu'il va falloir générer et copier dans le dossier " /var/www/vmap/vas/ws\_data/vm4ms/map/msencrypt/".
Etape 1 : Vérifier si ce dossier existe.
Etape 2 : Si ce dossier n'existe pas, le générer à partir de la commande ci-après.
```
sudo mkdir /var/www/vmap/vas/ws\_data/vm4ms/map/msencrypt/
```
Etape 3 : Générer la clef de cryptage dans le dossier créé ci-dessus. Puor ce faire, exécuter la commande suivante :
```
sudo /var/www/vmap/vas/server/mapserver/bin/msencrypt -keygen /var/www/vmap/vas/ws_data/vm4ms/map/msencrypt/vm4ms_key.txt
......@@ -26,4 +36,4 @@ CONFIG "MS_ENCRYPTION_KEY" "/var/www/vmap/vas/ws_data/vm4ms/map/msencrypt/vm4ms_
### Modifier les properties du module Mapserver
Pour activer le cryptage des mots de passe par le module Mapserver, il faudra modifier le fichier de properties vmap/vas/rest/conf/properties\_post.inc et mettre la propertie **use_msencrypt** à true
Pour activer le cryptage des mots de passe par le module Mapserver, il faudra modifier le fichier de properties vmap/vas/rest/conf/vm4ms/properties\_post.inc et mettre la propertie **use_msencrypt** à true
# Flux WFS
Bien que l’interface ne soit pas prévu pour, vMap est en mesure de publier des flux au format WFS sans problème **pour les serveurs Linux**.
## 1. Objet Web
La première des choses à faire c'est de créer un objet web pour l'utilisation du WFS, pour ceci saisir un nom puis la définition suivante.
```
WEB
METADATA
"wfs_title" "{WMSSERVICE_ID}"
"wfs_onlineresource" "{MS_CGI_URL}public/{WMSSERVICE_ID}"
"wfs_srs" "EPSG:4326 EPSG:2154 EPSG:3857"
"wfs_abstract" "This text describes my WFS service."
"wfs_enable_request" "*"
END
END
```
## 2. Flux public
Ensuite il faudra créer un flux, pour ceci il faudra se rendre sur l'onglet **Flux WMS publics** puis **Ajouter un flux wms public** et y ajouter la définition suivante.
```
MAP
NAME Flux_WFS_public
STATUS ON
SIZE 400 300
SYMBOLSET "../symbols/symbols.sym"
EXTENT -180 -90 180 90
UNITS DD
FONTSET "../fonts/fonts.list"
CONFIG "MS_ERRORFILE" "{MS_LOG_FILE}"
CONFIG "PROJ_LIB" "{MS_PROJ_DIR}"
DEBUG {MS_DEBUG_MODE}
PROJECTION
"+init=epsg:4326"
END
{WEB}
{LAYERS}
END
```
Il faudra bien entendu utiliser l'objet web décrit précédemment
## 3. Métadonnées
La troisième étape consiste à créer une métadonnée qui sera utilisée dans les couches, pour cela utilisez la définition ci-dessous.
```
METADATA
"wfs_title" "{LAYER_TITLE}"
"wfs_srs" "EPSG:2154 EPSG:3857 EPSG:4326"
"gml_include_items" "all"
"gml_featureid" "{TABLE_ID}"
"wfs_enable_request" "*"
END
```
## 4. Couche
La dernière étape est de créer la/les couche(s) que l'on souhaite publier, pour cela on choisira obligatoirement une connexion publique, pour le reste il faudra la configurer comme on le fait d'habitude avec les couches WMS de type vecteur.
![couche wfs](../../images/mapserver_wfs_1.jpg)
## 5. Publier le flux
Enfin, retournez sur le flux précédemment crée, associez la couche puis sauvegardez le flux.
Votre flux est désormais disponible sur `https://[votre serveur]/wms/public/[nom du flux]?service=wfs&version=1.1.0&request=GetCapabilities`
......@@ -12,3 +12,4 @@ Le mode MapServer permet la publication de flux WMS avec MapServer.
connexion
flux_publics
flux_prives
flux_wfs
# Configuration avancée des utilisateurs vMap
L'édition d'un utilisateur vMap rend disponible une section "vMap" dans laquelle plusieurs paramètres sont paramétrables :
![](../images/administration/config_user_vmap.png)
## 1 Carte par défaut
La "carte par défaut" permet de choisir la carte qui s'ouvre lorsque l'utilisateur lance l'application.
Si aucune carte n'est sélectionnée pour l'utilisateur, l'application s'ouvrira sur la carte ayant "l'ordre" le plus petit, parmis l'ensemble des cartes disponibles pour l'utilisateur.
## 2 Etendue par défaut
"L'étendue" permet de définir l'étendue sur laquelle s'ouvre la carte quand l'utilisateur lance l'application.
Si l'étendue par défaut n'est pas définie pour l'utilisateur, la carte s'ouvrira sur l'étendue par défaut de la carte.
Ce paramétrage peut être très utile pour définir, par exemple, une étendue à certains utilisateurs ayant une restriction communale.
## 3 Styles d'impression
Le "style d'impression" permet d'attribuer à chaque utilisateur un style personnalisé. Ce paramètre est utilisé dans les impressions et les rapports.
Si aucun style n'est définit pour l'utilisateur, ce dernier ne pourra en sélectionner au moment de la génération d'une impression ou d'un rapport.
\ No newline at end of file
# Configuration du mode cartographie
La configuration du monde cartographique peut se faire de manière totalement graphique depuis l'interface mais pour des fonctions plus poussés elle se fait également en modifiant certains fichiers sur le serveur.
## Depuis l'interface de configuration
![Interface de configuration de vMap](../images/configuration_vmap_1.png)
### Général
#### Répertoire FOP
Chemin vers le répertoire où est installé FOP (nécessaire pour le module cadastre)
Défaut: */var/www/vmap/vas/server/fop*
#### Chemin vers PhantomJS (executable)
Chemin vers le répertoire où est installé PhantomJS (nécessaire pour les impressions)
Défaut: */var/www/vmap/vas/server/phantomjs/bin/phantomjs*
#### Alias pintserver
Alias Apache utilisé pour les impressions
Défaut: *printserver*
#### API Veremap
(Optionnelle) URL vers l'API de Veremap pour utiliser les flux privés de ce dernier
### Affichage
#### Largeur des tuiles WMS (en px)
Largeur en pixels des tuiles pour les flux WMS
Défault: *512*
#### Hauteur des tuiles WMS (en px)
Hauteur en pixels des tuiles pour les flux WMS
Défault: *512*
#### Style CSS des popup
Style CSS à appliquer aux info-bulles, ceci permet entre autres de gérer la taille de ces dernières
Défault: *max-height: 350px;max-width: 500px;min-width: 240px;*
#### Groupes de calques repliées par défaut dans "Jeux de données"
Définit si par défaut, dans la partie "Jeux de données" du bandeau de gauche, les groupes de calques sont repliés
#### Fenêtre "Jeux de données" repliée par défaut
Définit si par défaut, la partie "Jeux de données" du bandeau de gauche est repliée
#### Fenêtre "Table des matières" repliée par défaut
Définit si par défaut, la partie "Table des matières" du bandeau de gauche est repliée
#### Fenêtre "Légende" repliée par défaut
Définit si par défaut, la partie "Légende" du bandeau de gauche est repliée
### Outils
#### Contrôles
![](../images/administration/admin_controls.png)
Active ou désactive les outils de cartographie suivants
- Slider de zoom <br>
![Interface de configuration de vMap outils 2](../images/configuration_vmap_slider_zoom.png)
- Zoom <br>
![Interface de configuration de vMap outils 3](../images/configuration_vmap_zoom.png)
- Carte de supervision <br>
![Interface de configuration de vMap outils 4](../images/configuration_vmap_carte_supervision.png)
- Échelle graphique <br>
![Interface de configuration de vMap outils 5](../images/configuration_vmap_echelle_graphique.png)
- Échelle numérique <br>
![Interface de configuration de vMap outils 6](../images/configuration_vmap_echelle_numerique.png)
- Nom de la carte <br>
![Interface de configuration de vMap outils 7](../images/configuration_vmap_nom_carte.png)
- Projection en cours <br>
![Interface de configuration de vMap outils 8](../images/configuration_vmap_proj_en_cours.png)
- Rafraichissement auto <br>
Rafaichit automatiquement grâce à la technologie websocket les couches quand deux utilisateurs modifient la même donnée.
#### Outils des infobulles
![](../images/administration/admin_infobulles.png)
Permet de gérer les outils présents dans les infobulles
![](../images/carto_infobulle.png)
- Rapports: ![](../images/administration/admin_infobulle_rapports.png)
- Google street view: ![](../images/administration/admin_infobulle_google_street_view.png)
- Mapillary: ![](../images/administration/admin_infobulle_mapillary.png)
- Lien vers l'objet: ![](../images/administration/admin_infobulle_lien_vers.png)
### Sélection
#### Nombre maximal de popups
Nombre maximal d'info-bulles affichables simultanément (valeur conseillée: 1)
#### Nombre maximal de sélections dans la liste
Nombre maximal d'enregistrements affichables simultanément dans le requêteur (valeur conseillée: 50)
## Configuration serveur avec properties_server.inc
En modifiant le fichier *vmap/vas/rest/conf/properties_server.inc* il est possible de configurer des fonctions plus approfondies.
#### $properties['schema_vmap']
Nom du schéma vMap utilisé par l'applicaiton
Défaut: *"s_vmap"*
#### $properties['use_proxy_for_tiles']
True pour utiliser le proxy pour charger les tuiles, ceci va diminuer les performances mais améliorera la gestion du cross-origin.
Défaut: *false*
#### $properties['cadastre']['api']
Api du module cadastre à utiliser
Défaut: *"cadastreV2"*
#### $properties['print']['equality_timeout']
Correspond au temps durant lequel le nombre de tuiles chargées est égal aux nombres de tuiles a charger a été mis en place.
En utilisant des services tuilés certaines tuiles peuvent mettre énormément de temps à se générer (certaines ne se généreront peut être jamais).Pour éviter que ceci bloque certaines impressions le paramètre equality_timeout l'impression se lancera même si certaines tuiles n'ont pas encore été chargées.
Augmenter equality_timeout améliorera vos chances d'avoir une meilleure impression mais augmentera le temps nécessaire à une impression
Défaut: *1000*
#### $properties['print']['tile_size']
Taille des tuiles durant une impression, en augmentant ce chiffre on diminue les performances mais on diminue aussi le risque qu'un libellé placé entre deux tuiles soit tronqué.
Défaut: *1024*
#### $properties['print']['features_zoom']
Pourcentage de zoom à appliquer quand on imprime une géométrie
Défaut: *100*
#### $properties['print']['quality']
Pourcentage de qualité d'impression
Défaut: *100*
#### $properties['use_veremap_api']
Définit si il faut utiliser l'API Veremap pour générer des flux privés
Défaut: *false*
#### $properties['use_vm4ms_api']
Définit si il faut utiliser l'API du module Mapserver pour générer des flux privés
Défaut: *true*
#### $properties['owner_login']
Login à utiliser pour effectuer les actions de super utilisation
Défaut: *$properties["vitis_owner_login"]*
#### $properties['owner_pass']
Mot de passe à utiliser pour effectuer les actions de super utilisation
Défaut: *$properties["vitis_owner_pass"]*
#### $properties['vmap_log_dir']
Chemin où écrire les fichiers de log
Défaut: *"{$properties['vas_home']}/log/vmap"*
#### $properties['vmap_map_log_file']
Chemin où écrire les fichiers de log pour l'utilisation des cartes
Défaut: *$properties['vmap_log_dir'] . '/map/' . date($properties["log_period"]) . '/map.log'*
#### $properties['vmap_geocoders']
Géocodeurs à utiliser par défaut
Défaut:
```
{"osm":{"title":"OpenStreetMap","url":"https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=[limit]&extratags=1&namedetails=1&polygon_geojson=1&countrycodes=fr&q=[search]","data_field":"data","title_field":"display_name","geojson_field":"geojson","summary_fields":[{"key":"address.country","label":"Pays"},{"key":"address.state","label":"Région"},{"key":"address.postcode","label":"Code postal"},{"key":"extratags.population","label":"Population"}]},"national_adresse":{"title":"Base nationale","url":"https://api-adresse.data.gouv.fr/search/?q=[search]&limit=[limit]","data_field":"data.features","title_field":"properties.label","geojson_field":"geometry","summary_fields":[{"key":"properties.context","label":"Département"},{"key":"properties.city","label":"Ville"},{"key":"properties.postcode","label":"Code postal"}]}}'
```
Il est possible de modifier la liste des géocoders.
- Pour retirer les 2 geocoders par défaut il suffit mettre la valeur suivante
```$properties['vmap_geocoders'] = ''```
- Pour ne conserver que OSM :
```$properties['vmap_geocoders'] = '{"osm":{"title":"OpenStreetMap","url":"https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=[limit]&extratags=1&namedetails=1&polygon_geojson=1&countrycodes=fr&q=[search]","data_field":"data","title_field":"display_name","geojson_field":"geojson","summary_fields":[{"key":"address.country","label":"Pays"},{"key":"address.state","label":"Région"},{"key":"address.postcode","label":"Code postal"},{"key":"extratags.population","label":"Population"}]}'```
- Pour ne conserver que la Base nationale :
```$properties['vmap_geocoders'] = '"national_adresse":{"title":"Base nationale","url":"https://api-adresse.data.gouv.fr/search/?q=[search]&limit=[limit]","data_field":"data.features","title_field":"properties.label","geojson_field":"geometry","summary_fields":[{"key":"properties.context","label":"Département"},{"key":"properties.city","label":"Ville"},{"key":"properties.postcode","label":"Code postal"}]}}'```
#### $properties['vmap_default_geocoders']
Géocodeur à utiliser par défaut
Défaut: *'osm'*
#### $properties['vmap_export']['gtf_api_url']
Permet l'extraction des données par GTF.
URL vers l'API de l'instance GTF à utiliser
#### $properties['vmap_export']['gtf_workspace_id']
Permet l'extraction des données par GTF.
Workspace id à utiliser lors de l'export
#### $properties['vmap_export']['gtf_priority_id']
Permet l'extraction des données par GTF.
Défaut: *'1'*
#### $properties['vmap_export']['gtf_email_option_id']
Permet l'extraction des données par GTF.
Défaut: *'1'*
#### $properties['vmap_export']['gtf_public_token']
Permet l'extraction des données par GTF.
Token public de l'instance GTF
Défaut: *'publictoken'*
#### $properties['vmap_export']['gtf_export_formats']
Permet l'extraction des données par GTF.
Formats supportés par GTF
Défaut:
```
$properties['vmap_export']['gtf_export_formats'] = '[{"label": "Shapefile", "value": "shape"}]'
```
#### $properties['vmap_export']['gtf_export_coordsys']
Permet l'extraction des données par GTF.
Systèmes de coordonnées supportés par GTF
Défaut:
```
$properties['vmap_export']['gtf_export_coordsys'] = '[{"label":"2154 Lambert 93","value":"2154"},{"label":"3857 WGS84 Spherical Mercator","value":"3857"},{"label":"4326 WGS84 Longitude latitude","value":"4326"},{"label":"27561 Lambert I Nord","value":"27561"},{"label":"27562 Lambert II Centre","value":"27562"},{"label":"27563 Lambert III Sud","value":"27563"},{"label":"27564 Lambert IV Corse","value":"27564"},{"label":"27571 Lambert I Carto","value":"27571"},{"label":"27572 Lambert II Carto","value":"27572"},{"label":"27573 Lambert III Carto","value":"27573"},{"label":"27572 Lambert IV Carto","value":"27572"}]'
```
#### $properties['vmap_export']['gtf_2020']
Permet l'extraction des données par GTF en version 2020.
Si GTF est en version 2020 ou suppérieure il faudra écrire `$properties['vmap_export']['gtf_2020'] = true;`
## Configuration client avec properties.json
En modifiant le fichier *vmap/client/conf/properties.json* il est possible de configurer la partie client de l'application
#### Mode mobile
En passant `mobile_interface` à `true` les utilisateurs utilisant des smartphones pourront utiliser le mode cartographie en version mobile.
Cet interface est étidié pour être utilisé depuis le navigateur chrome de tout smartphone dont l'écran est de au moins 4 pouces, il peut être également utilisé depuis un autre navigateur mais il se peut que cela engendre certains bugs.
Il faudra activer le GPS du périphérique et autoriser la localisation depuis le navigateur pour utiliser les outils de localisation.
```
"mobile_interface": "true"
```
images/administration/admin_controls.png

20.4 KiB

images/administration/admin_infobulle_google_street_view.png

2.83 KiB

images/administration/admin_infobulle_lien_vers.png

2.49 KiB