Widget Map (cartographie)

Généralités

Permet l’affichage des données sur une carte selon plusieurs choix :

  • Fréquentation :

  • Bulles

  • Marqueurs

Le parametrage permet :

  • le changement du fond

  • l’ajout de plusieurs couches

L’affichage se base sur les types géographiques (point, line, polygon, …​)

Exemple de manifest

{
    type: 'map',
    layout: {
      x: 1,
      y: 1,
      height: 10,
      width: 12
    },
    options: {
      layers: [
        {
          type: 'marker',
          classes: [],
          attribute: 'loc',
        },
        {
          active: true,
          type: 'heatmap',
          attribute: 'loc',
          intensityAttribute: 'temperature_en_degre_c',
          intensityAsc: true,
          classes: ['17b90da3-f448-4cc3-bfd8-74c8b8481590']
        },
        {
          active: true,
          type: 'bubble',
          classes: ['06406e7e-37cd-41ce-b5fc-36d233e5ae5c'],
          attribute: 'loc',
          intensityAttribute: 'latitude',
          intensityAsc: true,
          opacity: 50
        },
        {
          type: 'relation',
          active: false
        },
        {
          type: 'wmts',
          active: true,
          url: 'https://....',
          paramLayer: 'CADASTRALPARCELS.PARCELLAIRE_EXPRESS',
          style: 'PCI vecteur',
          matrixSet: 'PM'
        }
      ],
      fit: true
    },
    datasource: ['29061554-298f-4f56-8cd2-51ccec998303']
}

Attributions

Il est possible d’ajouter des attributions à une carte, en ajoutant dans les options "attributions": true. Si vous souhaitez ajouter une attribution pour une couche, vous pouvez le faire dans les options de la couche: "attribution": "<layer attribution>"

Transformation pour obtenir un type géographique à partir de champs numériques

Si vous disposez de champs latitude/longitude séparés, vous pouvez demander au front de gérer la transformation de données automatiquement, pour peu que vous ayez créé le champ géographique cible, en utilisant la fonction suivante:

this.searchService.addTransformation(
  latLonToGeographicFieldTransformation('latitude', 'longitude', 'location-auto')
);

Fit

Cette option permet à la carte de s’adapter aux données lors du chargement ou des changements de sélection. Si vous souhaitez garder un affichage d’un endroit particulier, à un zoom particulier, il faut désactiver cette option. Celle-ci est maintenant disponible pour chaque couche, car lors par exemple d’utilisation de servirces externes ou ne prenant pas en compte des filtres, il ne faut pas zoomer sur tout l’ensemble des données.

Une nouvelle façon de fonctionner a été ajoutée: pour les couches type WMS/Geoserver, une aggrégation spécifique est demandée permettant dans ce cas précis de pouvoir zoomer sur la zone concernée sans pour autant disposer des coordonnées des objets représentés dans la couche. Pour limiter les appels, celle-ci est appelée avant le rendu des couches en question (éviter de demander des tuiles qui ne seront de toute façon pas exposées après zoom automatique)

Comparatif de couches

Une autre option disponible permet de choisir de n’afficher certaines couches que côté droit ou côté gauche d’un curseur, qui est déplaçable. Cette représentation est redoutablement efficace pour voir pas exemple l’évolution dans le temps d’une même représentation.

Configuration automatique des sources de données

En phase exploratoire, il n’était pas forcément facile d’utiliser la carte; il fallait ajouter le jeu de données, puis paramétrer des couches en fonction de celles-ci (type et nom des champs à utiliser, …​). Afin de faciliter ceci, cette option demande à Provoly d’analyser le jeu de donnéees, afin d’en proposer une représentation si non pertinente, du moins fonctionelle des données, qui pourra ensuite être affinée par l’utilisateur s’il en a les connaissances et l’envie.

Couche Geoserver

Suite aux problèmes de performance lors de la représentation côté frontend de très nombreux élément, et l’ajout en réponse d’un geoserver côté backend, il nous a fallu proposer un système simple permettant de déterminer les cas qui reposaient sur ce système. Cela se passe grâce à l’ajout de metadonnées sur le jeu de données lui-même (couple namespace/clé) permettant de traiter les données de manière correcte (pas de double représentation de données, pas de représentation calculée par le frontend, …​). L’ensemble de la configuration qui suit se fait donc de manière automatique, seul l’ajout d’un jeu de données avec ces metadonnées déclenche l’utilisation du geoserver configuré pour cet environnement pour cette couche.

Groupe de couches

Afin de pouvoir gérer des couches de manière plus simple, il est possible de les regrouper dans un groupe. Les groupes sont stockés dans le manifest du tableau de bord sous la forme suivante:

{
  ...manifest,
  layerGroup: [
    // exemple d'un groupe
    {
      name: 'Nom du groupe',
      // singleLayer permet de gérer le mode d'affichage des couches du groupe
      singleLayer: false,

      // permet de sauvegarder les noms couches visibles
      // un widget peut avoir plusieurs couches, mais on peut vouloir n'en afficher que les certaines sur l'ouverture du dashboard
      visibleLayers: ['nom_couche_1', 'nom_couche_2']
    }
  ]
}

Chaque couche peut être assignée à un groupe en ajoutant l’attribut group dans les options de la couche:

{
  type: 'marker',
  classes: [],
  attribute: 'loc',
  group: 'Nom du groupe'
}

Chaque couche sans groupe aura un groupe assigné par défaut sur l’initialization du widget.

La gestion de groupes se fait avec les actions suivantes du store :

  • DashboardActions.initDefaultLayerGroup : ajoute le groupe par défaut dans le manifest,

  • DashboardActions.addLayerGroup,

  • DashboardActions.updateLayerGroup,

  • DashboardActions.deleteLayerGroup.