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.

../../_images/mode_carto.jpgUtilisation GetFeatureInfo dans vMap

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).

../../_images/mode_carto_2.jpgSelection couches GetFeatureInfo

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.

../../_images/mode_carto.jpgUtilisation GetFeatureInfo dans vMap

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é.

../../_images/config_vmap.jpgActivation GetFeatureInfo

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.

../../_images/admin_couche.jpgAdministration couche GetFeatureInfo

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.

../../_images/admin_couche_2.jpgAdministration couche GetFeatureInfo

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.

../../_images/admin_calque.jpgAdministration couche GetFeatureInfo

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)

  • 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>