Voici la documentation : https://geoplateforme.pages.gpf-tech.ign.fr/documentation

Skip to content
Extraits de code Groupes Projets
Nom Dernière validation Dernière mise à jour
css
dist
exemple
src/gpu
.gitignore
Gruntfile.js
README.md
package.json

Présentation de client GPU

Découvrez le nouveau client GPU : une bibliothèque javascript fonctionnant sous JQuery Openlayers fournissant un visonneur de cartes dynamique et possédant de nombreuses fonctionnalités lié à l'urbanisme.

La carte présenté possède ces contrôles :

  • une barre de localisation (non implémenté)

Ainsi qu'une barre d'outils de plusieurs autres controles :

  • fullscreen : activation/désactivation de la carte en plein écran
  • fiche info : affichage d'une fiche d'information d'une emprise de la carte à partir d'un click (non implémenté)
  • draw tools : outils de dessins (point, label, ligne, polygone, selection, modification, export, import (non implémenté)
  • measure tools : outils de mesure de distance et d'aire
  • print : impression de la carte (non implémenté)

Technologie du client-gpu

Le client GPU a été développé à l'aide des sources de différents projets :

Dépendances utilisées lors du dévelopement de l'application :

  • markdown - Utilisé pour composer la documentation du README.md que vous avez sous les yeux
  • NPM - Gère le téléchargement des dépendances avant de lancer un script propre à leur installation (grunt ici)
  • Grunt - Automatiseur de taches javascript, utilisé ici dans la gestion des dépendances et couplé avec :
    • grunt-browserify - permet de gérer facilement les dépendances javascript avec des require('ma-dependence').
      • browserify-shim - complémentaire à browserify, permet de ne pas polluer le code, en utilisant le package.json pour configurer les dépendances

Dépendances lié directement à l'application :

Prérequis d'installation à une application

Ajouter les dépendances JQuery et Openlayers 3 à votre application depuis l'interface en ligne de commandes :

$ npm install jquery --save
$ npm install openlayers --save

Appeler le style de openlayers sur votre page web.

<link rel="stylesheet" href="../node_modules/openlayers/dist/ol.css" type="text/css">

Les dépendances javascript JQuery et Openlayers sont gérées automatiquement par le gpu-client si vous les avez préalablement installées avec npm.

Installation

  1. Ajouter la dépendance gpu-client à votre application depuis l'interface en ligne de commandes :
$ npm install git+http://gitlab.dockerforge.ign.fr:10080/gpu/gpu-client.git
  1. Placer le script situé à node_modules/gpu-client/dist/gpu-client.js dans votre page concernée (adapter le chemin en fonction de l'arborescence de votre projet) ainsi que le style situé à node_modules/gpu-client/dist/css/gpu-client.css
<link  href="node_modules/gpu-client/dist/css/gpu-client.css" rel="stylesheet">
<script src="node_modules/gpu-client/dist/gpu-client.js"></script>

Comment Utiliser le client GPU

Remarque : Un exemple d'utilisation est présenté dans le répertoire "exemple" situé à la racine de la bibliothèque.

Le viewer cartographique

Il contient une carte OpenLayers et permet de rajouter des couches et des controles à celle-ci. Il ajoute de plus un evenement non implémenté par ol3 sur l'objet de la vue de la carte : "change:zoom".

<!-- Ajouter une balise DIV ayant un attribut id -->
<div id="gpu-map-container"></div>
   /* Appeler le viewer en passant l'id de la balise */
   var viewer = new gpu.Viewer("gpu-map-container"); 
   
   /* Pour ajouter des couches */
   viewer.addLayer(layer);
   
   /* Pour ajouter des contrôles */
   viewer.addControl(control);

Les contrôles du client GPU

La bibliothèque gpu-client est fourni avec plusieurs contrôles dont voici la liste :

- PermalinkControl

Description : permet de garder les changements liés à la carte dans l'URL (Etat des couches, zoom, localisation etc.) Utilisation :

    var permalinkControl = new gpu.control.PermalinkControl({
        anchor:"#"
        });

Pour que l'état et l'opacité d'une couche soit prise en compte dans le controle permalink, il faut lui ajouter un attribut "permalink" ainsi :

layer.set("permalink","identifiant_permalink");

- LocateControl

Description : permet de localiser un emplacement par lieu (adresse, commune, etc.) ou par parcelle cadastrale Utilisation :

     var locateControl = new gpu.control.LocateControl({
                    geoportalApiKey: '509qg1v5djkkfjk9f2bhkiyl',
                    ceriseUrl: '../../dist/img/cerise.png', // url de l'image pour la cerise de localisation
                    target: "id_du_div",
                    placeBeforeTarget: true, // pour placer ce contrôle au dessus du div cible
                    showSearchOptions: true, // si true permet à l'utilisateur de préciser la recherche avec des options liés à l'API géoportail
                    urlDepartments: "departments.php", // url donnant la liste des départements en json
                    urlMunicipalities: "municipalities.php" // url donnant la liste des communes en json en fonction du département
                });

- TabsPanelsControl

Description : Ajoute un panneau d'onglets sur le coté gauche de la carte Utilisation :

  var tabsPanelsControl = new gpu.control.TabsPanelsControl({
                    tabsContent: [ // les onglets et le html contenu dans son onglet lui meme (pas son panneau)
                        '<i class="glyphicon-info"> </i>',
                        '<i class="glyphicon-stack"> </i>',
                        '<i class="glyphicon-list"> </i>'
                    ],
//                    tabActive: 1, // si précisé, cet onglet sera celui ouvert par défaut
                    width: "530px" // largeur des panneaux 
                });
                tabsPanelsControl.setContentToPanel(0, 'panneau d\'infos'); // ajout du contenu du panneau de l'onglet concerné
                tabsPanelsControl.setContentToPanel(1, 'panneau de couches');
                tabsPanelsControl.setContentToPanel(2, 'panneau de légendes');
                var panel_1 = tabsPanelsControl.getPanel(1); // permet de récupérer l'élément html correspondant au panneau d'un onglet (0 étant le premier onglet)

- BarControl

Description : Utilisé pour créer une barre contenant des controles, avec une certaine règle d'activation (en activer un desactivera les autres si précisé par exemple) Utilisation :

 var barControl = new gpu.control.BarControl();
                /* [ ajout des controles à la barre de controle ] */
                var barItems = [
                    {
                        control: fullScreenControl, // le controle
                        thisDesactivateOtherOnActive: false, // si true, les autres controles de la barre sont désactivés si ce controle est activé
                        otherDeactivateThisOnActive: false // si true, les autres controles de la barre désactivent celui-ci si leur param 'thisDesactivateOtherOnActive' est true
                    },
                    {
                        control: measureControl,
                        thisDesactivateOtherOnActive: true,
                        otherDeactivateThisOnActive: true
                    },
                    {
                        control: displayInfoControl,
                        thisDesactivateOtherOnActive: true,
                        otherDeactivateThisOnActive: true
                    },
                    {
                        control: drawBarControl,
                        thisDesactivateOtherOnActive: true,
                        otherDeactivateThisOnActive: true
                    },
                    {
                        control: printControl,
                        thisDesactivateOtherOnActive: false,
                        otherDeactivateThisOnActive: false
                    }
                ];
                barControl.addItems(barItems);

- FullScreenSwitcherControl

Description : Controle s'occupant de passer la carte en mode plein écran Utilisation :

    var fullScreenControl = new gpu.control.FullScreenSwitcherControl({
        screenDivId: viewer.getTarget() // div cible à passer ne plein écran
    });

- DrawBarControl

Description : Utilisé pour créer une barre contenant des controles (pour les croquis principalement). La barre s'affiche ou se cache en fonction de l'activation d'un boutton. Utilisation :

        var drawBarControl = new gpu.control.DrawBarControl({});
        
        // Creation couche commune aux croquis et récupération de la featureCollection à passer aux controles de dessin
        var drawLayer = drawBarControl.createDrawLayer();
        var featuresCollection = drawLayer.getSource().getFeaturesCollection();
        viewer.addLayer(drawLayer); // on ajoute la couche au viewer of course!
    

- Controles de dessins liés à DrawBarControl

Description : Voici la liste des controles liés à la fonctionnalité "croquis" que l'on ajoute à DrawBarControl (car sinon elle est vide) Utilisation :

        /* Selection de features */
        var selectControl = new gpu.control.SelectControl({
            layer: drawLayer // la couche de dessin
        });
        drawBarControl.addControl(selectControl);
        
        /* dessiner des features de type point */
        var drawPointControl = new gpu.control.DrawFeatureControl({
            type: 'Point',
            title: 'Dessiner un point',
            featuresCollection: featuresCollection 
        });
        drawBarControl.addControl(drawPointControl);
        
        /* dessiner des features de type ligne */
        var drawLineStringControl = new gpu.control.DrawFeatureControl({
            type: 'LineString',
            title: 'Dessiner une ligne',
            featuresCollection: featuresCollection
        });
        drawBarControl.addControl(drawLineStringControl);
        
        /* dessiner des features de type polygone */
        var drawPolygonControl = new gpu.control.DrawFeatureControl({
            type: 'Polygon',
            title: 'Dessiner un polygone',
            featuresCollection: featuresCollection
        });
        drawBarControl.addControl(drawPolygonControl);
        
        /* dessiner des features de type label */
        var drawTextControl = new gpu.control.DrawFeatureControl({
            type: 'Text',
            title: 'Ajouter un texte',
            featuresCollection: featuresCollection
        });
        drawBarControl.addControl(drawTextControl);
        
        /* Modifier les features selectionnées */
        var editControl = new gpu.control.EditControl({
            layer: drawLayer
        });
        drawBarControl.addControl(editControl);
        
        /* Control d'export de croquis en geoJson */
        var exportControl = new gpu.control.ExportGeoJsonControl({
            exportUrl: "export.php", // url pour l'export
            featuresCollection: featuresCollection
        });
        drawBarControl.addControl(exportControl);
        
       /* Control d'import de croquis en geoJson */
        var importControl = new gpu.control.ImportGeoJsonControl({
            importUrl: "import.php", // url pour l'import
            featuresCollection: featuresCollection
        });
        drawBarControl.addControl(importControl);

- FeaturePopupControl

Description : Assigne une popup à une interaction de dessin openlayers afin de modifier la feature selectionnée/dessinée Utilisation :

        /* Création et Assignation de la popup lié à la modification d'une feature */
        var featurePopup = new gpu.control.FeaturePopupControl();
        viewer.addControl(featurePopup);
        featurePopup.assignInteraction(selectControl.selectInteraction);
        featurePopup.assignInteraction(drawPointControl.drawInteraction);
        featurePopup.assignInteraction(drawLineStringControl.drawInteraction);
        featurePopup.assignInteraction(drawPolygonControl.drawInteraction);
        featurePopup.assignInteraction(drawTextControl.drawInteraction);

- DrawHelperPopupControl

Description : Assigne une popup à une interaction de dessin openlayers afin d'afficher une instruction, un message d'aide, etc. Utilisation :

        /* Création Assignation de la popup d'aide au tracé de ligne et polygon  */
        var drawHelperPopup = new gpu.control.DrawHelperPopupControl();
        viewer.addControl(drawHelperPopup);
        
        drawHelperPopup.assignInteraction(drawLineStringControl.drawInteraction);
        drawHelperPopup.assignInteraction(drawPolygonControl.drawInteraction);

- DisplayInfoControl

Description : Controle récupérant des informations sur des couches lorsqu'on clique sur celles-ci Utilisation :

    var displayInfoControl = new gpu.control.DisplayInfoControl();

- MeasureControl

Description : Outil de mesure permettant de mesurer les distances et les aires Utilisation :

    var measureControl = new gpu.control.MeasureControl();

- PrintControl

Description : Controle d'impression de carte Utilisation :

 var printControl = new gpu.control.PrintControl();

- TreeLayerSwitcherControl

Description : Gestionnaire de couches arborescent avec notion d'aggregats Utilisation :

    var treeLayerSwitcher = new gpu.control.TreeLayerSwitcherControl({
        target: tabsPanelsControl.getPanel(1) // Div Où on veut placer le TLS
    });
    viewer.addControl(treeLayerSwitcher);
    
    /* ajout d'une entrée avec une couche à l'emplacement /1 */
    treeLayerSwitcher.addLayers("/1", [layer3], "titre de l'entrée"); 
    
    /* ajout d'une entrée avec un groupe de deux couches, à l'emplacement /1/2 (donc sous /1) */
    treeLayerSwitcher.addLayers("/1/2", [layer1,layer2], "Titre de l'entrée /1/2"); 

    /* Met à jour la visibilité des couches en fonction des regles qui régissent le TLS */
    treeLayerSwitcher.updateVisibilities();
    
    /* Ouvre les enfant de l'entrée au chemin /1 */
    treeLayerSwitcher.treeLayerSwitcherItems['/1'].openChildren();
    
    /* Mise à jour de l'opacité d'une entrée avec récursivité sur enfants et/ou parents */
    var recursiviteParent = false;
    var recursiviteEnfant = true;
   treeLayerSwitcher.treeLayerSwitcherItems['/1'].changeOpacity(0.70, recursiviteParent, recursiviteEnfant);

- Service : ConfigExtractorForTreeLayerSwitcher

Description : Service permettant de charger le treeLayerSwitcher avec une configuration. Un exemple de fichier vous est proposé dans exemple/configForTreeLayerSwitcher.js

/* exemple de configuration */
var config = {
    "layers": [
        {
            "name": "lowscale", // Nom de la couche WMS, requis
            "virtual": true, // Si TRUE, cache les enfants et considère que cette entrée n'est pas un aggregat (n'a pas de couche associée), optionel
            "title": "VUE D'ENSEMBLE (PLUi, PLU, POS, CC, RNU)", // Titre de l'entrée, si non précisé, prend le nom de la couche, optionnel
            "minZoomLevel": 3, // Niveau de zoom minimum dans laquelle la couche est visible (inclu), optionnel
            "maxZoomLevel": 21, // Niveau de zoom maximum dans laquelle la couche est visible (inclu), optionnel
            "opacity": 1, // Opacité de la couche, si non précisé, prend celle de son parent, si non précisé sur le parent, vaut 1
            "visible": true, // Visibilité de la couche, si non précisé, prend celle de son parent, optionnel (pas d'interet ici car il est virtual:true, il n'a pas de couche associée)
            "layers": [ // Contient les enfants, optionnel
                {
                    "name": "toto",
                    "title": "Couche à toto",
                    "minZoomLevel": 6, 
                    // pas de maxZoomLevel ici, donc implicitement vaut celui de son parent (21)
                    "opacity": 1.0,
                    "visible": false // la couche n'est pas visible, sa checkboxe sera décochée et celle de son parent aussi (car c'est son seul enfant)
                }
]
        }      

Utilisation :

var wmsUrl = "https://wxs-gpu.mongeoportail.ign.fr/externe/i9ytmrb6tgtq5yfek781ntqi/wms/v";

var configExtractor = new gpu.services.ConfigExtractorForTreeLayerSwitcher(wmsUrl, map);

configExtractor.addLayersFromConfigAndBuildTreeLayerSwitcher(treeLayerSwitcher,config);