Nous vous présentions récemment le serveur de tuiles vectorielles dynamique Baremaps, capable de configurer à la volée le contenu de vos tuiles dans l'article. Prenons un exemple concret pour illustrer les capacités du Studio. Nous allons créer des cartes à partir du jeu de données “Accidents de la route en Bretagne”.

Import du jeu de données dans la carte

La tendance à l’Open data facilite la recherche et la réutilisation des données géographiques. Dans notre cas, nous allons importer le jeu de données depuis le catalogue de GeoBretagne. Les étapes sont simples:

  1. Télécharger la donnée
  2. L’importer dans Baremaps Studio (ou la connecter)
  3. Créer une nouvelle carte
  4. Ajouter le jeu de données à la carte
  5. Et voilà ! Nous avons créé une carte avec notre jeu de données.
Add map to Baremaps | © Camptocamp SA
Baremaps code snippet | © Camptocamp SA

Que se passe-t-il concrètement ?

Lorsque nous créons une nouvelle carte, Baremaps initialise un tileset vide. Lorsque nous ajoutons le jeu de données à la carte, Baremaps met à jour la configuration du tileset. Il ajoute un objet “vectorLayers” et définit une requête SQL par défaut pour la plage d’échelle globale (zoom de 0 à 20). La requête par défaut est basiquement un SELECT * sur la table se référant au jeu de données.

Cette configuration définit le contenu des tuiles. Baremaps fournit un flux de tuiles MVT qui contient des points pour chaque accident de Bretagne. Chaque point contient tous les attributs du jeu de données.

Remarquez qu’on peut avoir plusieurs “queries” par jeu de données. On pourrait par exemple ne pas afficher les accidents de 0 à 10, les afficher sous forme de cluster de 5 à 10 via ST_ClusterWithin puis les points au-delà de 10.

On peut avoir plusieurs jeux de données dans le même tileset, ce qui signifie que le client n’aura à charger qu’un unique flux de tuiles.

Faites parler vos données

L’application web du Studio fournit des outils pour personnaliser le rendu de vos jeux de données, afin de faire parler la donnée.

Le style repose sur la spécification Mapbox Style pour distinguer l’affichage selon le contenu attributaire de la couche.

Baremaps - data driven styling | © Camptocamp SA
Baremaps data table | © Camptocamp SA

1. Jointure attributaire

Inspectons le contenu de notre jeu de données, il contient différents attributs.

Il y a un code département. Nous pouvons donc afficher la répartition des accidents dans chaque département, par le biais d’une jointure attributaire sur le code département et la géométrie des départements.

Les géométries des départements sont extraits des données OSM, donc déjà importées par Baremaps et disponibles.

Nous devons modifier la représentation de la couche dans la studio, au lieu d’afficher des points nous voulons réaliser une agrégation par attribut. On sélectionne la couche des départements, les colonnes de jointures et Baremaps fait le reste.

Voici la requête générée par le studio, intégrée dans le tileset:

select d.id                                                                                                 as id,
      hstore(ARRAY ['count', count(*)::text, 'code', a.tags -> 'departement', 'nom', d.tags -> 'NOM_DEP']) as tags,
      d.geom                                                                                               as geom
from "d7208ede-6397-44c6-b646-f4b09fca35e3" as a
      LEFT JOIN "11994650-42fc-4727-9727-443cc4143e92" as d
                ON d.tags -> 'INSEE_DEP' = a.tags -> 'departement'
group by d.id, d.geom, a.tags -> 'departement', d.tags -> 'NOM_DEP')
Baremaps - attribute join | © Camptocamp SA

Lorsqu’il compose la tuile, Baremaps récupère les agrégations et les insère dans la tuiles, au lieu de simplement intégrer les points comme précédemment.

Avec un style adapté, on peut facilement avoir une carte choropleth avec la répartition des accidents sur le territoire.

L'image de droite montre la répartition sur les départements via une jointure attributaire

2. Jointure spatiale

Et si nous voulons avoir une répartition sur des unités administratives plus petites que les départements, par exemple sur les EPCI ? Il n’y a pas de code EPCI dans le jeu de données. Aucun problème, PostGIS permet de faire une jointure spatiale s’il n’y a pas d’attribut.

De la même manière, on choisit une jointure spatiale sur la couche EPCI et Baremaps fait le reste.

SELECT row_number() OVER ()                      AS id,
      hstore('count', count(accident.id)::text) as tags,
      epci.geom
FROM "d3853343-cf82-4e22-9aee-89e597d41357" as epci
      JOIN "d7208ede-6397-44c6-b646-f4b09fca35e3" as accident
           ON st_contains(epci.geom, accident.geom)
GROUP BY epci.geom

Et voilà, Baremaps sert des tuiles qui contiennent les géométries des EPCI, et pour chaque EPCI, un attribut qui contient la somme des accidents inclus dans le polygone.

Baremaps - spatial join | © Camptocamp SA

3. HexBin

On peut aller encore plus loin que des jointures classiques. Si on veut une répartition sur une grille ou un hexbin par exemple ? On peut bénéficier des fonctions PostGIS pour celà:

SELECT row_number() OVER () AS id, hstore('count', count(a.id)::text), hexes.geom
FROM
 ST_HexagonGrid(
     20000,
     ST_SetSRID(ST_EstimatedExtent('d7208ede-6397-44c6-b646-f4b09fca35e3', 'geom'), 3857)
   ) AS hexes
   INNER JOIN
 "d7208ede-6397-44c6-b646-f4b09fca35e3" as a
 ON ST_Intersects(ST_SetSRID(a.geom, '3857'), hexes.geom)
GROUP BY hexes.geom;
Baremaps - hexabin representation | © Camptocamp SA

Répartition des accidents sous forme de Hexbin

Notez que rien n’est fait côté client, toutes les géométries du Hexbin sont contenues dans les tuiles.

Personnalisez les tuiles à votre gré

Ces exemples illustrent les capacités de Baremaps Studio avec des cas d’usage concrets. Bien sûr, vous pouvez personnaliser le contenu de vos tuiles comme bon vous semble

  • Autant de jeux de données que vous voulez
  • Autant de sous-requêtes pour les plages de zoom
  • Autant de complexité dans chaque requête que nécessaire (buffer, jointure, fonctions…)

Peu importe la complexité de votre tileset, Baremaps n’aura en sortie qu’un flux de tuiles.

Souvenez-vous que Baremaps dispose d’un mécanisme d’import des données OSM. Vous pouvez donc croiser vos données avec les données OSM, dans la même tuile.

Baremaps - OSM data and accidents | © Camptocamp SA

Mix de données OSM (bâtiments, routes, aires naturelles..) et des accidents (cercle orange). 

 

Décorez et partager votre carte

Une fois votre tileset configuré, votre contenu et votre style défini, vous avez en réalité créé une carte thématique. Baremaps dispose d’un service backend, la UI du studio fait office de backoffice pour la création de la carte, mais l’usage final est le résultat de ce travail: la carte publiée.

L’utilisateur, depuis le studio, peut gérer la publication de ses cartes, les partager sur le Web ou les intégrer dans des sites tiers. C’est en réalité l’objectif principal de tout ce travail.

 

Conclusion

Baremaps introduit une nouvelle vision pour la consommation, le partage et la promotion de votre patrimoine de données géographiques.

  • Il plébiscite le format vectoriel pour une meilleur visualisation
  • Repose sur le standard OGC API
  • Embrasse l’écosystème de tuile Mapbox
  • Profite de la puissance de PostGIS pour l’analyse et le traitement des données
  • Fournit une interface utilisateur pour créer et publier des cartes thématiques.

Et ce n’est qu’un début. Après s’être focalisé sur la donnée, nous voulons apporter du dynamique à la carte avec des outils d'analyse et de visualisation.

  • Popup
  • Légende
  • Graphiques
  • Slider temporel
  • Dataviz

Restez connectés et n’hésitez pas à nous contacter pour en savoir davantage sur ce studio.

Avez-vous besoin de plus d'informations ?

N'hésitez pas à prendre contact avec nous !

COMMENT AVEZ-VOUS ENTENDU PARLER DE NOUS ? *
En soumettant ce formulaire, j'accepte que les informations saisies soient utilisées aux fins décrites dans la politique de confidentialité.

Carrière

Vous souhaitez travailler dans un environnement inspirant et rejoindre nos équipes motivées et multiculturelles ?