Server de Tuiles vectorielles
Les tuiles vectorielles sont devenues aujourd’hui incontournables et et très probablement l’avenir de la cartographie dynamique. Quelles sont les technologies qui se cachent derrières et comment pouvez-vous l’adopter? Ce tuto est un retour d’expérience après une expérimentation de plusieurs outils de génération de tuiles vectorielles.
Comment ça marche?
Contrairement aux couches de tuiles raster, les couches de tuiles vectorielles peuvent s’adapter à différentes résolutions. La taille de fichier est inférieure à celle des tuiles raster, ce qui se traduit par des cartes plus rapides et de meilleures performances. L’association des performances d’accès des tuiles et de l’affichage vectoriel permet aux tuiles de s’adapter à n’importe quelle résolution et n’importe quelles appareils. En travaillant sur des données de plus en plus volumineuses, la vectorisation est la solution adéquate pour la représentation des entité géographiques et attributaires. Par exemple à partir d’une seule couches de tuiles, on peux associer plusieurs styles, étiquettes et symboles…
Tuiles vectorielles
Avantages:
- Taille des données plus petite et donc moins d’espace disque requis
- Consommation de bande passante réduite
- Temps de génération plus rapide
- Meilleure expérience utilisateur – zoom fluide
- Pas besoin de niveaux de zoom – les utilisateurs zooment et effectuent un panoramique sur toutes les échelles
- Norme mobile de facto
- Personnalisation facile – avec un petit fichier texte, vous définissez à quoi devrait ressembler la carte, quelle police doit être utilisée, la langue pour les étiquettes de carte et même masquer des éléments de carte spécifiques – tout à la volée
Les inconvénients:
- La carte est rendue côté client et nécessite un matériel un peu plus puissant
- Les données sont généralisées et ne conviennent donc pas aux modifications directes
Tuiles raster
Avantages:
- Convient aux données matricielles telles que l’imagerie satellite / aérienne
- Exigences moindres pour le matériel des utilisateurs finaux
- Prise en charge un peu meilleure dans les bibliothèques Web JavaScript et les logiciels SIG de bureau
Les inconvénients:
- Une plus grande taille de chaque tuile et des données sur les serveurs
- Prend plus de temps pour générer
- Un chargement plus lent perturbe l’expérience utilisateur lors du déplacement sur la carte
Comment faire?
1- Les données
La première chose qu’il nous faut c’est des données avec une composante géographique. Il existe des millions de jeux de données un peu partout. Dans ce tuto, nous allons utiliser les données DVF (Demandes de valeurs foncières) disponibles en open data. Il sont intéressant car volumineux et donc pas difficiles à visualiser. Les données sont disponibles ici sur la France entière. Vous pouvez également utiliser que des données à l’échelle régionales comme le Pays de la Loire.
Apres avoir télécharger la données, créer une base de données dans PostgreSQL et charger les données avec ces commandes:
psql -h localhost -p 5432 -U postgres -c "CREATE DATABASE dvf;" psql -h localhost -p 5432 -U postgres -d dvf-c "CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology;"
psql -h localhost -p 5432 -U utilisateur -d dvf-f chemincompletdudvf_initial.sql
psql -h localhost -p 5432 -U utilisateur -d dvf-f chemincompletdudvf_departements.sql
2- Exporter la couche au format JSON
ogr2ogr -f « GeoJSON » /PATH/TO/dvf1419.json PG: »host=localhost dbname=dvf user=user password= port=5432″ « dvf.mutation »
Pour infos, si vous n’avez pas de base de données c’est pas grave, vous pouvez juste télécharger le SHP et le transformer en json avec ogr ou Qgis .
ogr2ogr -f « GeoJSON » /PATH/TO/dvf1419.json /PATH/TO/dvf.shp
3- Génération de tuiles vectorielles
Il existe énormément d’outils open source et payants pour la génération et la visualisation des données vectorielles. Je ne vais pas tous les énumérer , mais vous trouverez sur awesome-vector-tiles la liste de la plupart des solutions. Pour la synthèse, d’après mon expérience personnelle :
Côté server, t-rex ,Tegola ,Martin sont des serveurs de tuiles vectorielles pour des données peu volumineuses. La prise en mais est assez simple et ils peuvent vous fournir des tuiles vectorielles Mapbox avec prise en charge des fournisseurs de données PostGIS et GeoPackage.
Côté client, vous avez le choix, OpenLayers, Leaflet,…Moi je suis un adepte de Mapbox.
Dans le cadre de ce tuto, nous allons utiliser un serveur beaucoup plus robuste : OpenMapTiles . C’est un ensemble d’outils open-source pour l’auto-hébergement de cartes. OpenStreetMap existe dans plus de 50 langues. Il fournit à la fois des tuiles raster et vectorielles, des services WMS et WMTS pour les outils SIG, la prise en charge des visualiseurs JavaScript et du SDK mobile.
L’installation est assez simple , je vous conseille d’utiliser le conteneur Docker. Vous pouvez accéder au tutoriel d’installation ici . Pour l’installation avec Docker voici la commande:
docker run --rm -it -v $(pwd):/data -p 8080:80 klokantech/openmaptiles-server
À ce stade, vous avez un Tileserver hébergeant un fichier Mbtiles de votre choix s’exécutant probablement sur localhost:8080 si vous avez correctement suivi la documentation. Pour rappel, un fichier Mbtiles est un format de stockage et de lecture de tuiles vectorielles. Pour créer notre propre fichier MBtiles avec les données DVF nous aurons besoin de Tippecanoe, un logiciel pour générer des Mbtiles.
Vous pouvez directement l’installer sur votre machine
$ git clone https://github.com/mapbox/tippecanoe.git
$ cd tippecanoe
$ make -j
$ make install
Il existe plusieurs façons de créer un MBtiles en fonction de vos besoins des niveaux de zoom, de la taille de vos fichier etc … Pour que la données reste visible à toutes les niveaux, voici la commande:
sudo nohup tippecanoe -o dvf1419.mbtiles -Z4 -z11 -f -F -ps -pf -pk -pc -pt -Bg -d14 ./dvf1419.json
-Z4
: Niveau de zoom minimal : 4-z11
: Niveau de zoom maximal: 11- -f écraser le fichier précédemment généré s’il existe
-pf
ou--no-feature-limit
: Ne limitez pas les tuiles à 200 000 fonctionnalités- -Bg , il devinera un niveau de zoom qui conservera au maximum 50 000 fonctions dans la tuile la plus dense
-pk
ou--no-tile-size-limit
: ne limitez pas les tuiles à 500 000 octets-pC
ou--no-tile-compression
: ne compressez pas les données de tuiles vectorielles PBF. Si vous obtenez des messages d’erreur « Type non implémenté 3 » d’un rendu, c’est probablement parce qu’il attend des tuiles non compressées en utilisant cette option plutôt que les tuiles compressées par gzip normales.-pt
ou--no-tiny-polygon-reduction
: Ne combinez pas l’aire de très petits polygones en petits carrés-D le nieaux ou toutes les entités seront visibles
Remarquez que j’ai utilisé nohup
nous permet d’exécuter un processus Linux en arrière-plan, et dispose d’une fonctionnalité soignée qui ajoute la sortie à la commande que vous avez utilisée dans un fichier appelé nohup.out
dans le même répertoire.elle continuerait à exécuter la commande sur le serveur même après la rupture de votre connexion ssh.
Résultats!
docker run -it -v $(pwd):/data -p 8080:80 klokantech/tileserver-gl dvf1419.mbtiles
Voila vois disposer un server de tuile. Vous pouvez également mixe plusieurs fichier et servir sur des ports différents.
Enfin vous pouvez utiliser ces tuiles dans vos applications ou dans Qgis. Exemple avec Mapbox , voici la syntaxe:
map.addSource('tuiles', {
"type": 'vector',
"url": 'http://localhost:8080/data/dvf1419.json'
});
map.addLayer({
"id": "dvf",
"type": "circle",
"source": "tuiles",
"source-layer": "dvf1419",
"paint": { "circle-radius": 1, 'circle-color':'#d53e4f' } }
);