Objectif
Pour réexploiter une couche géographique, un visualiseur très simple suffit souvent. Limiter les fonctionnalités à l'essentiel permet de toucher un public plus large habitué aux fonctions élémentaires de la cartographie web. Il existe plusieurs produits sur le marché - dont l'API GéoPortail en première ligne - mais tous nécessitent un peu de développement pour personnaliser l'apparence et le contenu. Le visualiseur simple GéoBretagne doit donner la capacité de fabriquer un visualiseur personnalisé affichant les couches hébergées sur GéoBretagne, sans développement. On peut le voir comme un service délivrant des visualiseurs personnalisés à la demande.
On utilise pour ceci des arguments encodés dans l'URL : titre, couches, KML, filtres... Cette URL permet ensuite d'incorporer la carte dans un site existant, soit par IFRAME
, soit par simple lien.
Le code source en GPLv3 peut être récupéré sur http://github.com/georchestra/sviewer/ pour adaptation et installation sur une autre plateforme.
Fonctionnalités
- géolocalisation par service OpenLS du GéoPortail. La localisation est faite sur le premier lieu trouvé. La carte est recadrée sur le lieu trouvé. La taille du cadre varie en fonction du type d'objet trouvé : adresse, rue, lieu-dit, ville.
- permalien. Un lien et un QR code associé transmettent le titre, le centre de la carte, le niveau de zoom, la liste des couches WMS, le KML, les filtres CQL. Le type de fond (plan, satellite) n'est pas encore préservé.
- ajout de couches interrogeables WMS. Ajouter l'argument
layers=nomdelacouche1,nomdelacouche2...
superpose ces couches au fond de plan. Elles sont considérées comme interrogeables : un clic sur la carte demande au service des informations encapsulées en HTML, et affiche le résultat dans la bulle. La mise en forme du texte est à l'initiative de la bulle, non du visualiseur. La couche doit être hébergée sur la plateforme GéoBretagne. Les métadonnées associées aux données sont récupérées par interrogation des capacités et affichées dans l'onglet "à propos". Par souci de performance, cette fonctionnalité exploite la capacité de GeoServer de fournir un service virtuel par couche, ce qui limite la taille des capacités. - ajout d'une données KML. Ajouter l'argument
kml=URLdesdonnees
superpose le vecteur au fond de plan. Les données doivent être localisées en EPSG:4326. - Dictionnaire du service
paramètre | R/O | contenu | description et exemple |
---|---|---|---|
title | O | titre du visualiseur | le titre apparaîtra dans l'en-tête, dans les signets enregistrés, dans la barre de titre du navigateur. exemple : title=Tableau d'avancement des PLU |
layers | O | liste de noms de couches WMS | noms de couches WMS, le séparateur entre chaque couche est la virgule. Sur GéoBretagne il faut spécifier le nom complet : préfixe et nom, avec ":" entre les deux. On peut trouver ce nom dans les capacités des services ou dans les fiches de métadonnées des données. exemple : layers=dreal_b:ae_casparcas |
layers** | O | filtre CQL sur les couches WMS |
pour utilisation avancée avec le Common Query Language. La requête est mise à la suite du nom de la couche précédé du caractère "**" |
kml | O | URL de données publiées au format KML | le fichier KML doit être publié sur l'internet et sur une ressource non filtée (pas de mot de passe). La forme compressée KMZ n'est pas supportée. Pour réduire les temps de chargement, il est souhaitable que le serveur publiant la couche active la compression. Le type MIME doit être application/vnd.google-earth.kml+ xml ou text/xml .exemple : kml=http://www2.ac-lyon.fr/enseigne/biologie/IMG/kml/KMZ11_Les_marees_vertes_en_Bretagne.kml |
Pour plus de détail, vous pouvez voir le fichier readme directement sur GitHub.
Exemples
Ces exemples sont basés sur la carte "Accidentologie mortelle en Bretagne" maintenue par les DDTM et la DREAL Bretagne.
Incorporation dans un site
Pour incorporer la carte dynamique dans un site ou sur une page existante, ajouter le segment de code HTML suivant. Largeur et hauteur peuvent être redimensionnés.
<iframe frameborder="1" height="400" scrolling="no" src="https://geobretagne.fr/m/" width="800" > </iframe>
Si le site utilisé n'accepte pas les IFRAME, on utilise une capture d'écran à laquelle on ajoute un lien vers le visualiseur.
Personnalisation du titre et des couches WMS
On déclare la liste des couches avec le paramètre layers. Dans notre exemple, nous ajoutons les contours départementaux (ign:departement_metro), une couche d'accidentologie (dreal_b:route_accidents_mortels) et nous déclarons le titre de l'application : Accidentologie mortelle en Bretagne
<iframe frameborder="1" height="400" scrolling="no" src="https://geobretagne.fr/m/?title=Accidentologie%20mortelle%20en%20Bretagne&layers=ign:departement_metro,dreal_b:route_accidents_mortels" width="800" > </iframe>
En utilisant le bouton "A propos", on constate que titre, résumé, légende et source de chaque couche sont affichés. Il est indispensable de renseigner avec soin le service délivrant la couche : c'est celui-ci qui fournir au visualiseur les (seuls) renseignements auxquels l'utilisateur aura accès pour comprendre ce qu'il voit.
Personnalisation de l'emprise
Pour personnaliser l'emprise, il suffit de charger dans un navigateur la carte précédente, de cadrer l'emprise souhaitée, puis d'utiliser la fonction "permalien". Le lien dans la barre d'adresse contient alors le cadre. Nous cadrons ci-dessous le Morbihan. On remarquera que le lien préserve le centre et le niveau de zoom, mais pas le cadre - sauf si l'écran est de même largeur et hauteur. Ce choix permet de conserver le niveau de détail affiché (niveau qui varie souvent selon le niveau de zoom) au détriment du respect du cadre. Il faut donc s'efforcer de fabriquer le lien à partir d'un visualiseur redimensionné pour l'usage final.
<iframe frameborder="1" height="400" scrolling="no" src="https://geobretagne.fr/m/?x=-297401&y=6084661&z=8&lb=0&layers=ign%3Adepartement_metro%2Cdreal_b%3Aroute_accidents_mortels&title=Accidentologie+mortelle+en+Bretagne" width="800" > </iframe>
Filtre sur les données
Le language CQL (voir une introduction) permet d'exprimer des requêtes simples sur les couches WMS. Il est correctement supporté par GeoServer. Avec CQL et WMS, nous pouvons spécifier pour chaque couche un ensemble de règles bâties sur les attributs des objets et sur des opérateurs :
- opérateurs de comparaison : =, <>, >, >=, <, <=
- expressions arithmétiques : +, -, *, /
- opérateurs géométriques : INTERSECTS, DWITHIN, CONTAINS...
Pour chaque couche réclamée dans le paramètre layers, on ajoute le caractère ** puis on rentre notre requête cql urlencodée. On peut utiliser le filtre neutre INCLUDE si l'on ne souhaite pas appliquer de filtre particulier à une couche.
Attention : il faut urlencoder les filtres dans l'URL. "=" devient %3D, ";" devient %3B ... Un outil comme ce formulaire d'encodage est pratique pour encoder/décoder la requête.
Alors que la carte ci-dessus affiche tous les accidents mortels sur la Bretagne, nous souhaitons établir les accidents mortels récents dans le Morbihan. Nous allons d'abord filtrer la couche ign:departement_metro pour ne faire apparaître que le contour du département, et nous n'appliquons pas de filtre sur la deuxième couche.
&layers=ign%3Adepartement_metro**insee_dep%3D56 (c'est à dire insee_dep=56 pour les départements et pas de filtre pour dreal_b:route_accidents_mortels)
Résultat :
Nous appliquons ensuite le fitre anciennete < 30 AND departement=56 pour n'afficher que les accidents des 30 derniers jours en Morbihan, et nous modifions le titre de notre visualiseur.
https://geobretagne.fr/m/?x=-297401&y=6084661&z=8&lb=0&layers=ign%3Adepartement_metro%2Cdreal_b%3Aroute_accidents_mortels**departement%3D%2756%27AND+anciennete%3C30&title=Accidentologie+mortelle+en+Morbihan+datant+de+moins+de+30+jours
Cette adresse indigeste sera plus aisée à partager avec un raccourcisseur d'URL : https://tinyurl.com/yyn4l9sv ou avec un code QR :
Infobulle sur interrogation de couche
Il est possible de personnaliser l'infobulle affichée à l'interrogation des couches WMS. Cette personnalisation repose sur un modèle déposé sur le serveur GéoBretagne. Pour l'instant, seuls les administrateurs GéoBretagne peuvent opérer ce dépôt, mais déléguer sera peut être envisagé. La rédaction d'un template est décrite dans la documentation GeoServer. Le template correspondant à la couche des accidents mortels est reproduit ici pour exemple :
<h3>Accidents routiers mortels en Bretagne</h3> <#list features?sort_by(['date', 'rawValue'])?reverse as feature> <p> <#if (feature.date.value!="")> ${feature.date.rawValue?string("dd/MM/yyyy")} </#if> - accident survenu <#if (feature.plage_horaire.value!="")> dans la période ${feature.plage_horaire.value}h </#if> <#if (feature.commune.value!="")> sur la commune de ${feature.commune.value} (${feature.departement.value}) </#if> - <#if (feature.commentaires.value!="")> ${feature.commentaires.value} - </#if> ${feature.tues_nb.value} <#if (feature.tues_nb.rawValue gt 1)> victimes <#else> victime </#if> avec ${feature.vehicules_nb.value} <#if (feature.vehicules_nb.rawValue gt 1)> véhicules impliqués. <#else> véhicule impliqué. </#if> </p> </#list>
KML
La superposition d'un fichier KML publié sur l'internet est possible avec le paramètre KML=URLdufichierKML. Le format compressé KMZ n'est pas supporté. Le KML est particulièrement bien adapté à l'annotation de cartes au-dessus des données WMS. Pour de gros volumes de données (>1000 points ou sommets) on préférera utiliser WMS car il y a risque fort de saturer les navigateurs.
exemple (non contractuel) de superposition KML : test avec un fichier de ac-lyon.fr