# Geopackage

GeoPackage (GPKG) est un format de données géospatiales (ou géomatiques ou SIG) raster ou vecteur, ouvert, non propriétaire, non lié à un système d'exploitation, et défini le plus possible sur la base de standards de l'Open Geospatial Consortium (OGC) ou autres, implémenté sous la forme d'une base de données SQLite. Il a été défini par l'OGC avec le soutien de l'armée américaine et publié en 2014. GeoPackage a reçu le soutien d'organisations gouvernementales, commerciales, et de la communauté open-source. C'est le format de données par défaut dans QGIS à partir de la version 3.

## Origine

Bien qu'il existe des dizaines de formats de fichier et de services pour échanger des données géospatiales, il n'y avait pas de format ouvert qui puisse gérer à la fois des données vecteur et raster, tout en étant efficace, notamment sur des appareils mobiles$^,$. Ce besoin fut exprimé par l'OGC en 2012. Le standard a été approuvé par l'OGC en février 2014.

## Format

Un GeoPackage (*.gpkg) est construit comme un fichier de base de données SQLite 3 qui contient des tables de données et de métadonnées selon des définitions spécifiées dans le standard, des règles d'intégrité, des règles de format et des contraintes relatives au contenu.
Le standard GeoPackage décrit un ensemble de règles pour le stockage d'objets vectoriels, de tuiles images et de données raster à diverses échelles, ainsi que leur schéma et métadonnées.
Un GeoPackage peut être étendu en appliquant les règles d'extension définies dans la clause 2.3 du standard. Un ensemble d'extensions approuvées est spécifié en Annexe F du standard. Des extensions additionnelles, propriétaires, peuvent aussi être ajoutées en suivant les règles relatives aux extensions GeoPackage, mais en renonçant à l'interopérabilité.
GeoPackage est conçu pour être aussi léger que possible en termes de volume, et pour se présenter sous la forme d'un fichier unique et directement utilisable. Ceci le rend apte à l'utilisation sur des terminaux mobiles hors connexion et le partage rapide en stockage cloud, sur supports USB, , etc. L'extension F.3 RTree Spatial Indexes spécifie comment utiliser les index spatiaux de SQLite pour accélérer les requêtes spatiales.

## Support

* GDAL (vecteur depuis la V1.11, raster depuis la V 2.0)
* FME
* ArcGIS
* QGIS >= 2
* GeoServer
* GeoTools
* Mapinfo > 15.2
* GvSIG
* UDig
* MapServer
* Deegree
* Talend Open Studio
* GeoKettle
* Stetl

## Caractéristiques

* Un .gpkg peut contenir un nombre quelconque de couches vecteur (2D ou 2D avec Z et/ou M (valeur)) ou raster (tuiles en jpg, png, ou tif)
* Un .gpkg vide contient quelques tables : gpkg_contents, gpkg_extensions, gpkg_geometry_columns, gpkg_ogr_contents, gpkg_tile_matrix, gpkg_tile_matrix_set, gpkg_spatial_ref_sys
* Pour chaque couche vecteur "..." importée (par ex. depuis un .shp), il s'y ajoute cinq tables : "...", rtree_..._geom, rtree_..._geom_node, rtree_..._geom_parent, rtree_..._geom_rowid
* Un Shapefile de x Mo importé fait augmenter la taille du .gpkg de x Mo (pas de compression ou de gain de place)
* Une base SQLite a un encodage et un seul, spécifié à la création de la base et non modifiable, mais on peut y stocker des couches d'encodages variés. On peut connaître ces encodage par la commande PRAGMA encoding; Les couches importées sont converties dans l'encodage de la base.
* Depuis la version 1.2 GeoPackage gère les tables non spatiales (type de données « attributes »)
* Le standard GeoPackage ne permet qu'une seule géométrie par table.
* Un .gpkg peut stocker le style des couches qu'il contient
* Un .gpkg peut contenir la pyramide des rasters qu'il contient (pas de fichier externe pour le pyramidage)
* Un .gpkg peut contenir des métadonnées en format ISO19139 ou autres
* Un .gpkg peut comporter un index spatial
* Un .gpkg peut comporter un ou des index attributaires
* Un .gpkg peut contenir plus d'objets qu'un Shapefile (par exemple 100 millions)

## Manipulations

* Une base Geopackage étant une base SQLite, elle peut être gérée avec tout logiciel gérant du SQLite, par exemple SQLite Manager dans Firefox de même qu'on peut gérer le .dbf d'un Shapefile avec dBase, un tableur, etc., au risque d'en dégrader la structure.
* Convertir un shp en gpkg est simple avec GDAL >=2.3 : ogr2ogr communes.gpkg communes.shp -nlt PROMOTE_TO_MULTI (option pour garantir la conformité du gpkg qui ne doit pas mélanger polygones et multipolygones). Le shp, tiré de ADMIN-EXPRESS (C) IGN fait 137,2Mo, le gpkg 165,9Mo.
* Une base Geopackage peut être gérée par programme en Python via GDAL, ou via Fiona ou directement en tant que base SQLite (cf ici - lien un peu ancien) ou par tout langage de programmation utilisant une bibliothèque permettant de s'interfacer avec GDAL comme R avec la bibliothèque sf