Un format ouvert pour l’information géospatiale
GeoPackage est un format compact, portable, auto-descriptif et ouvert, basé sur des normes, indépendant de la plate-forme et permettant de transférer des informations géospatiales.
Le standard GeoPackage est composé d’un ensemble de conventions pour stocker dans une base de données SQLite les éléments suivants :
- des entités vectorielles
- des matrices de tuiles d’images et de rasters à différentes échelles
- des attributs (données non spatiales)
- des extensions
Pour être clair, un GeoPackage est le conteneur SQLite et la norme de codage GeoPackage régit les règles et les exigences du contenu stocké dans un conteneur GeoPackage. Le standard GeoPackage définit le schéma d’un GeoPackage, notamment les définitions de table, les assertions d’intégrité, les limitations de format et les contraintes de contenu. Le contenu requis et pris en charge d’un GeoPackage est entièrement défini dans la norme. Ces fonctionnalités reposent sur une base commune et le mécanisme d’extension fournit aux développeurs une manière d’inclure des fonctionnalités supplémentaires dans leurs GeoPackages.
Comme GeoPackage est un conteneur de base de données, il prend en charge son utilisation directe par les différents logiciels SIG. Cela signifie que les données d’un GeoPackage peuvent être consultées et mises à jour dans un format de stockage « natif » sans conversion de format intermédiaire. Les GeoPackages conformes aux exigences de la norme et n’implémentant pas d’extensions spécifiques du fournisseur sont interopérables dans tous les environnements informatiques d’entreprise et personnels. Les GeoPackages sont particulièrement utiles sur les appareils mobiles tels que les téléphones portables et les tablettes dans les environnements de communication où la connectivité et la bande passante sont limitées.
Geopackage dans QGis
Si vous utilisez déjà des bases de donnés Spatialite dans QGis vous vous demandez qu’est ce que Geopackage apporte de nouveau: essentiellement la possibilité de stocker des rasters dans une base SQLite.
Attention! A ce jour, avec la version 3.4, un bug ne permet pas de créer avec QGis un geopackage contenant EN MEME TEMPS des couches vecteur et des couches raster. Vous pouvez stocker des couches raster dans un geopackage, et les couches vecteur dans un autre geopackage. Dans la version 3.8 le problème est résolu.
Si, par contre, vous êtes toujours à travailler avec des fichiers shapefile (shp), nous avons déjà publié plusieurs articles qui expliquent les avantages du travail avec SQLite
- Tutoriel bases de données SpatiaLite sous QGis 2.8 Wien
- Requêtes et vues d’une base SpatiaLite dans QGis 2.8
- La gestion des tables d’une base de données SpatiaLite avec QGis 2.8
- Importer des tables dans une base de données SpatiaLite avec QGis 2.8
- Créer une base de données SpatiaLite avec QGis 2.8
- Recettes Python pour accéder aux données vecteur Postgis et Spatialite
Le format Geopackage correspond à tout ce qui est dit pour Spatialite et QGis en vous donnant de nouvelles possibilités.
Donc, si vous faites le pas de passer du travail avec des shapefiles à SQLite, optez pour Geopackage plutôt que des bases Spatialite.
Comment créer un Geopackage avec QGis 3.4
GeoPackage est un package de données standard OGC pouvant stocker différents types de types de données spatiales tels que des points, des polylignes et des polygones. Nous pouvons enregistrer plusieurs couches dans un seul fichier GeoPackage (.gpkg). C’est un excellent moyen de stocker et d’organiser vos données spatiales sous QGIS. Lorsque vous enregistrez vos fichiers spatiaux au format GeoPackage, vous pouvez facilement les trouver sans avoir à parcourir et à creuser dans tous vos dossiers.
L’utilisation de Geopackage pour stocker nos données spatiales présente de nombreux avantages. Nos données seront placées dans un emplacement centralisé. En utilisant cette méthode, nous pouvons réduire l’encombrement qui se produit lorsque nous traitons des centaines de fichiers. Il est plus facile de transférer d’énormes quantités de couches dans un seul géopackage.
Pour créer une couche de géopackage dans QGIS il suffit de:
1-Ouvrir QGIS
2-Aller dans Couche | Créer une couche | Nouvelle couche de géopackage
3- Taper le nom de la nouvelle couche GeoPackage, donner un nom à la table et, éventuellement, sélectionnez une géométrie dans la liste.
Si vous comptez importer des couches existantes dans votre Geopackage, vous pouvez cliquer sur OK. Votre Geopackage sera créé et vide, enfin, presque. Vous aurez cette table vide qui sera présente mais que vous pourrez effacer à tout moment.
Si, par contre, vous souhaitez commencer à créer une véritable couche de travail, vous utiliserez le bloc « Nouveau champ » de la fenêtre pour définir vos colonnes de table.
Votre fichier Geopackage est créé. Pour l’utiliser dans QGis vous devez vous connecter à cette nouvelle base de données:
La nouvelle base de données apparaît alors dans l’explorateur:
Comment peupler une base de données Geopackage
Vous disposez de trois méthodes pour ajouter des couches dans un fichgier Geopackage:
Création à partir de rien
Vous allez rajouter une table vide en définissant les champs (colonnes) manuellement. Pour cela vous allez répéter les opérations décrites plus haut lors de la création du Geopackage (menu Couche-> Créer une couche -> Nouvelle couche Geopackage). Une fois la fenêtre de création ouverte, utilisez le bouton … pour aller pointer sur le fichier geopackage dans lequel vous souhaitez créer une nouvelle couche:
Remplissez les champs nécessaires (nom de la table, géométrie,…) ainsi que la définition de vos colonnes. Quand vous cliquerez sur OK vous aurez le message suivant:
Cliquez sur Ajouter une nouvelle couche. cette couche sera alors ajoutée à la liste des couches de votre fichier geopackage.
Enregistrer à partir d’une couche existante
Vous pouvez exporter vers un fichier geopackage une couche déjà existante. Pour cela,sélectionnez votre couche dans le panneau « Couches« , puis Exporter -> Sauvegarder les entités sous…
Dans la fenêtre sui s’ouvre, dans la liste des formats, sélectionnez Geopackage
Dans Nom de fichier, cliquez sur le bouton … et pointez sur votre fichier Geopackage.
Renseignez les champs nécessaires et cliquez sur OK. La couche est importée dans votre Geopackage.
Importer une couche existante avec DB Manager
Le DB Manager vous permet de gérer complètement vos données et bases de données.
Pour l’ouvrir allez dans le menu Base de données -> DB Manager
Dans la fenêtre de DB Manager, pour importer une couche existante dans votre fichier geopackage,
- cliquez dans le panneau Fournisseurs de données sur votre fichier Geopackage
- cliquez sur l’outil Import de couche/fichier
- renseignez les champs de la fenêtre Importer une couche vecteur
Important!: Cochez les cases SRC source et SCR cible et vérifiez que les SRC correspondent bien à ce que vous souhaitez. Cochez la case Créer un index spatial si vous en souhaitez un. Si vous omettez ces informations à cette étape, il sera très, très compliqué d’en revenir après…
Bonjour,
Merci, votre article est vraiment intéressant.
Je m’intéresse au stockage des données raster dans des bases de données.
J’ai regardé du côté de rasterlite, mais il semble compliqué à mettre en place.
Geopackage me semble une bonne solution.
Vous décrivez l’import de données vecteur dans une base geopackage. Mais pas les rasters ! j’ai regardé comment s’effectue cette manip, apparemment il faut passer par gdal en ligne de commande. Ca ne me ravi pas trop…
Avez vous explorer d’autre pistes pour l’implémentation de raster dans une bd geopackage ?
Merci
Sylvain
Je n’ai pas de réponse aujourd’hui, je suis dessus. Au fait, si vous travaillez avec QGis 3 (3.4) vous pouvez sans problème intégrer des rasters dans un geopackage en utilisant la méthode charger le raster en tant que couche dans QGis -> cliquer sur Exporter -> Enregistrer sous…
Il faut choisir en Mode sortie : image (et surtout pas donnée brute)
Par contre, s’il y a déjà des données vecteur dans le geopackage, vous aurez un message qui n’a pas de sens (la couche XXX existe déja dans le geopackage…) et même si vous acceptez d’écraser l’existant, vous aurez un message d’erreur et rien en sortie.
De même si vous avez des rasters dans le geopackage et vous voulez ajouter des couches vecteur, QGis 3.4 plante sans même un message d’erreur.
Merci !!
Effectivement avec votre méthode, il est possible d’implémenter une base de données exclusivement composée de Raster !!
Si je veux faire des opérations sur ces rasters (en fusionner deux par exemple). Selon vous, quelle est la meilleure solution ? Je les fusionne avant avec gdal, ou alors est ce qu’il y a des outils geopackage pour faire cela ?
Des outils geopackage?? Peut être vous voulez parler d’outils dans QGis? En tout cas, vous pouvez (j’ai testé) utiliser les outils raster de QGis (mais ce ne sont que des interfaces pour GDAL) pour fusionner deux rasters contenus dans geopackage. Mais comme ilm manque unhe option pour éditer la commande gdal dsans les fenêtres de QGis, vous ne piouvez enregistrer la fusion que dans un nouveau geopackage. On devrait modifier la ligne de commande pour créer un nouvel subset dans le geopackage existant. D’ailleurs c’est ce même problème qui fait bugger la présence de raster et vecteur.
Y a t’il un moyen pour intégrer à un géopackage de raster , les fichiers de style qui définiront notamment les seuils de visibilité de chaque couche?
Pour l’instant la réponse est non. On peut le faire pour des couches vecteur, mais pour les rasters on n’a pas l’option de stocker le style dans un geopackage. Mais ça devrait venir…
Merci pour votre article. Je souhaite mettre en place un système SIG de gestion des oeuvrages de captage .
Pouvez vous me faire des recommandations ?
Clair et intéressant comme d’hab.
Savez-vous si le format permet de mettre des index sur les attributs non géométriques, et si ces index sont enfin exploités par QGIS ou autre ? Quand on pense que le langage Cobol incluait déjà les index attributaires il y a 60 ans, il serait peut-être temps que les SIG s’y mettent…
Désolé, mais ça fait longtemps qu’ils s’y sont mis. Geopackage utilise une structure Spatialite(SQLite). Et ça permet d’indexer et les géométries et les attributs. Pour créer un index sur une table Geopackage avec QGis:
-ouvrez le gestionnaire de BD de Qgis
-connectez vous à otre geopackage
-ouvrez une fenêtre de requête SQL
-créez votre index avec une des deux commandes sql suivantes
CREATE UNIQUE INDEX nom_de_l_indexl ON nom_de_la_table (nom_d_attribut); (si l’attribut doit être unique)
CREATE INDEX nom_de_l_indexl ON nom_de_la_table (nom_d_attribut); (s’il pêut y avoir plusieurs occurrences de l’attribut)
Sur l’onglet INFO vous verrez les index créés.
Merci. Je sais que ces commandes permettent de créer des index, mais je ne sais pas si ces index sont utilisés par QGIS.
Pour savoir si l’index est utilisé ou pas dans QGis, vous pouvez dans le DB manager insérer la ligne
EXPLAIN QUERY PLAN
en début de requête SQL. Vous aurez alors le détail de la gestion de la requête par QGis.
Comment importer plusieurs couche style dans un gpk ?
On peut enregistrer le style par défaut, mais un seul, par couche dans un gpkg
Pour l’instant, vous ne pouvez pas enregistrer des fichiers qml dans un gpkg
Merci beaucoup de cet article. J’ai beaucoup appris.