# 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: ``` Commune__point_GML 679240.481423,6154435.540671 679240.481423,6154435.540671 66049 Ceret 7289 1 ```