Découvrir les formats de données et de champs

Données Raster

Les données raster dans les SIG sont des matrices de cellules discrètes qui représentent des objets, au-dessus ou en dessous de la surface de la Terre. Les cellules de la grille raster sont de la même taille et généralement rectangulaires (dans QGIS, elles seront toujours rectangulaires). Les jeux de données raster les plus classiques sont des données de télédétection telles que des photographies aériennes ou des images satellitaires et des données issues de modèles telles que les matrices d’élévation.

Unlike vector data, raster data typically do not have an associated database record for each cell. They are geocoded by pixel resolution and the X/Y coordinate of a corner pixel of the raster layer. This allows QGIS to position the data correctly in the map canvas.

The GeoPackage format is convenient for storing raster data when working with QGIS. The popular and powerful GeoTiff format is a good alternative.

QGIS makes use of georeference information inside the raster layer (e.g., GeoTiff) or an associated world file to properly display the data.

Données Vecteurs

Many of the features available in QGIS work the same, regardless the vector data source. However, because of the differences in formats specifications (ESRI Shapefile, MapInfo and MicroStation file formats, AutoCAD DXF, PostGIS, SpatiaLite, DB2, Oracle Spatial and MSSQL Spatial databases, and many more), QGIS may handle differently some of their properties. This section describes how to work with these specificities.

Note

QGIS supports (multi)point, (multi)line, (multi)polygon, CircularString, CompoundCurve, CurvePolygon, MultiCurve, MultiSurface feature types, all optionally with Z and/or M values.

You should also note that some drivers don’t support some of these feature types, like CircularString, CompoundCurve, CurvePolygon, MultiCurve, MultiSurface feature type. QGIS will convert them.

GeoPackage

The GeoPackage (GPKG) format is platform-independent, and is implemented as a SQLite database container, and can be used to store both vector and raster data. The format was defined by the Open Geospatial Consortium (OGC), and was published in 2014.

GeoPackage can be used to store the following in a SQLite database:

  • vector features

  • tile matrix sets of imagery and raster maps

  • attributes (non-spatial data)

  • extensions

ESRI Shapefile

ESRI Shapefile is still one of the most used vector file format in QGIS. However, this file format has some limitation that some other file format have not (like GeoPackage, SpatiaLite). Support is provided by the OGR Simple Feature Library.

A Shapefile format dataset consists of several files. The following three are required:

  1. .shp fichier contenant la géométrie des entités;

  2. .dbf fichier contenant les attributs au format dBase;

  3. .shx fichier d’index.

A Shapefile format dataset can also include a file with a .prj suffix, which contains the projection information. While it is very useful to have a projection file, it is not mandatory. A Shapefile format dataset can contain additional files. For further details, see the ESRI technical specification at https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf.

Improving Performance for Shapefile format datasets

To improve the performance of drawing a Shapefile format dataset, you can create a spatial index. A spatial index will improve the speed of both zooming and panning. Spatial indexes used by QGIS have a .qix extension.

Voici les étapes de création d’un index spatial :

  1. Load a Shapefile format dataset (see Le panneau Navigateur).

  2. Open the Layer Properties dialog by double-clicking on the layer name in the legend or by right-clicking and choosing Properties… from the context menu.

  3. In the Source tab, click the Create Spatial Index button.

Problème de chargement de fichier .prj

If you load a Shapefile format dataset with a .prj file and QGIS is not able to read the coordinate reference system from that file, you will need to define the proper projection manually within the Layer Properties ‣ Source tab of the layer by clicking the setProjection Select CRS button. This is due to the fact that .prj files often do not provide the complete projection parameters as used in QGIS and listed in the CRS dialog.

For the same reason, if you create a new Shapefile format dataset with QGIS, two different projection files are created: a .prj file with limited projection parameters, compatible with ESRI software, and a .qpj file, providing the complete parameters of the used CRS. Whenever QGIS finds a .qpj file, it will be used instead of the .prj.

Fichiers de Texte Délimité

Delimited text file is a very common and widely used format because of its simplicity and readability – data can be viewed and edited even in a plain text editor. A delimited text file is a tabular data with each column separated by a defined character and each row separated by a line break. The first row usually contains the column names. A common type of delimited text file is a CSV (Comma Separated Values), with each column separated by a comma. Such data files can also contain positional information (see Storing geometry information in delimited text file).

QGIS allows you to load a delimited text file as a layer or ordinal table (see Le panneau Navigateur or Importation d’un fichier texte délimité). But first check that the file meets the following requirements:

  1. The file must have a delimited header row of field names. This must be the first line of the data (ideally the first row in the text file).

  2. If geometry should be enabled, the header row must contain field(s) with geometry definition. These field(s) can have any name.

  3. The X and Y coordinates fields (if geometry is defined by coordinates) must be specified as numbers. The coordinate system is not important.

  4. Si vous avez des champs qui ne sont pas de type texte et que le fichier est un CSV, vous devriez avoir un fichier CSVT (voir section Using CSVT file to control field formatting).

Comme exemple de fichier texte valide, nous pouvons importer le fichier point d’élévation elevp.csv fourni avec le jeu de données échantillon de QGIS (voir section Téléchargement des données exemple) :

X;Y;ELEV
-300120;7689960;13
-654360;7562040;52
1640;7512840;3
[...]

Notons les points suivants à propos du fichier texte :

  1. Le fichier texte d’exemple utilise le ; (point-virgule) comme délimiteur. N’importe quel caractère peut être utilisé comme délimiteur de champ.

  2. La première ligne est la ligne d’en-tête. Elle contient les champs X, Y et ELEV.

  3. Aucun guillemet (") n’est utilisé pour délimiter les champs de type texte.

  4. Les coordonnées X sont stockées dans le champ X.

  5. Les coordonnées Y sont stockées dans le champ Y.

Storing geometry information in delimited text file

Delimited text files can contain geometry information in two main forms:

  • As coordinates in separate columns (eg. Xcol, Ycol… ), compatible with point geometry data;

  • As well-known text (WKT) representation of geometry in a single column, for any geometry type.

Features with curved geometries (CircularString, CurvePolygon and CompoundCurve) are supported. Here are some examples of such geometry types as a delimited text with WKT geometries:

Label;WKT_geom
LineString;LINESTRING(10.0 20.0, 11.0 21.0, 13.0 25.5)
CircularString;CIRCULARSTRING(268 415,227 505,227 406)
CurvePolygon;CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))
CompoundCurve;COMPOUNDCURVE((5 3, 5 13), CIRCULARSTRING(5 13, 7 15,
  9 13), (9 13, 9 3), CIRCULARSTRING(9 3, 7 1, 5 3))

Le format texte délimité gère également les coordonnées Z et M dans les géométries:

LINESTRINGZ(10.0 20.0 30.0, 11.0 21.0 31.0, 11.0 22.0 30.0)

Using CSVT file to control field formatting

Lors du chargement de fichiers CSV, le pilote OGR suppose que tous les champs sont des chaînes de caractères (c’est-à-dire du texte), sauf indication contraire. Vous pouvez créer un fichier CSVT pour indiquer à OGR (et à QGIS) le type de données correspondant aux différentes colonnes:

Type

Nom

Exemple

Nombre entier

Entier

4

Nombre décimal

Réel

3.456

Date

Date (YYYY-MM-DD)

2016-07-28

Temps

Temps (HH:MM:SS+nn)

18:33:12+00

Date & Heure

DateTime (YYYY-MM-DD HH:MM:SS+nn)

2016-07-28 18:33:12+00

Le fichier CSVT est un fichier texte brut d”UNE ligne avec les types de données entre guillemets et séparés par des virgules, par exemple:

"Integer","Real","String"

Vous pouvez même spécifier la largeur et la précision de chaque colonne, par exemple:

"Integer(6)","Real(5.5)","String(22)"

Ce fichier est sauvegardé dans le même dossier que le fichier .csv, avec le même nom, mais en tant qu’extension .csvt

Vous trouverez plus d’informations à Pilote CSV de GDAL.

Couches PostGIS

Les couches PostGIS sont stockées dans une base de données PostgreSQL. Les avantages de PostGIS sont les possibilités d’indexation spatiale, de filtre et de requête qu’il fournit. En utilisant PostGIS, les fonctions vecteur telles que la sélection ou l’identification fonctionnent avec plus de précision qu’avec les couches OGR dans QGIS.

Astuce

Couches PostGIS

Normalement, une couche PostGIS est définie par une entrée dans la table geometry_columns. QGIS peut cependant charger des couches qui n’ont pas d’entrée dans la table geometry_columns. Ceci concerne aussi bien les tables que les vues. Définir une vue spatiale fournit un moyen puissant pour visualiser vos données. Référez-vous à votre manuel PostgreSQL pour plus d’informations sur la création des vues.

Cette section fournit quelques détails sur la manière dont QGIS accède aux couches PostgreSQL. La plupart du temps, QGIS devrait simplement fournir une liste des tables de la base de données qui peuvent être chargées et il les chargera à la demande. Cependant, si vous avez des problèmes pour charger une table PostgreSQL dans QGIS, les informations données ci-dessous peuvent vous aider à comprendre les messages de QGIS et vous donner une indication sur comment changer la table ou la vue PostgreSQL pour qu’elle se charge dans QGIS.

Clé primaire

QGIS demande que les couches PostgreSQL aient un champ pouvant être utilisé comme clé unique pour la couche. Pour les tables, cela signifie qu’elles doivent avoir une clé primaire ou un champ ayant une contrainte d’unicité. De plus, QGIS impose que cette colonne soit de type int4 (un entier de 4 octets). Alternativement, la colonne ctid peut être utilisée comme clé primaire. Si une table ne respecte pas ces conditions, le champ oid sera utilisé à la place. Les performances seront améliorées si le champ est indexé (notez que les clés primaires sont automatiquement indexées dans PostgreSQL).

QGIS propose une case à cocher Sélectionner par identifiant qui est activée par défaut. Cette option permet de récupérer les identifiants sans les attributs, ce qui est plus rapide dans la plupart des cas.

Vue

Si la couche PostgreSQL est une vue, les mêmes conditions s’appliquent, mais elles n’ont pas toujours de clé primaire ou de champ ayant une contrainte d’unicité. Dans ce cas, vous devez définir une clé primaire (de type entier) avant de charger la vue. Si aucun champ ne convient, QGIS ne chargera pas la vue. Si cela arrive, la solution est de modifier la vue de sorte qu’elle inclue un champ qui convient (de type entier et qui soit une clé primaire ou ayant une contrainte d’unicité, de préférence indexé).

Comme pour les tables, une case à cocher Sélectionner par identifiant est activée par défaut (voir ci-dessus pour la signification de la case à cocher). Ça peut avoir du sens de désactiver cette option lorsque vous utilisez des vues coûteuses.

Table QGIS layer_style et sauvegarde de la base de données

Si vous voulez faire une sauvegarde de votre base de données PostGIS en utilisant les commandes pg_dump et pg_restore et que les styles par défaut des couches sauvés par QGIS ne sont pas restaurés, vous devez définir l’option XML à DOCUMENT et la restauration fonctionnera.

SET XML OPTION DOCUMENT;

Filter database side

QGIS permet de filtrer les entités directement côté serveur. Cochez l’option Settings ‣ Options ‣ Data Sources ‣ checkbox Exécuter les expressions du côté du serveur postgres si possible pour l’activer. Seules les expressions supportées seront envoyées à la base de données. Les expressions qui utilisent des opérateurs ou des fonctions non prises en compte seront évaluées en local.

Types de données supportés par PostgreSQL

Most of common data types are supported by the PostgreSQL provider: integer, float, varchar, geometry, timestamp, array and hstore.

Importer des données dans PostgreSQL

Différents outils, notamment le Gestionnaire de bases de données (BD Manager plugin) ou les outils en ligne de commande comme sh2pgsql ou ogr2ogr, permettent d’importer les données dans une base de données PostgreSQL/PostGIS.

DB Manager

QGIS comes with a core plugin named dbManager DB Manager. It can be used to load data, and it includes support for schemas. See section Extension DB Manager for more information.

shp2pgsql

PostGIS includes an utility called shp2pgsql that can be used to import Shapefile format datasets into a PostGIS-enabled database. For example, to import a Shapefile format dataset named lakes.shp into a PostgreSQL database named gis_data, use the following command:

shp2pgsql -s 2964 lakes.shp lakes_new | psql gis_data

Ceci crée une nouvelle couche nommée lakes_new dans la base de données gis_data. La nouvelle couche aura l’identifiant de référence spatiale (SRID) 2964. Référez-vous à la section Utiliser les projections pour plus d’informations sur les systèmes de référence spatiale et les projections.

Astuce

Exporter des jeux de données depuis PostGIS

Like the import tool shp2pgsql, there is also a tool to export PostGIS datasets in the Shapefile format: pgsql2shp. This is shipped within your PostGIS distribution.

ogr2ogr

En plus de shp2pgsql et DB Manager, un autre outil est fourni pour importer des données géographiques dans PostGIS : ogr2ogr. Il est inclus dans GDAL.

To import a Shapefile format dataset into PostGIS, do the following:

ogr2ogr -f "PostgreSQL" PG:"dbname=postgis host=myhost.de user=postgres
password=topsecret" alaska.shp

This will import the Shapefile format dataset alaska.shp into the PostGIS database postgis using the user postgres with the password topsecret on host server myhost.de.

Notez qu’OGR doit être compilé avec PostgreSQL pour gérer PostGIS. Vous pouvez le vérifier en tapant (sous nix)

ogrinfo --formats | grep -i post

Si vous préférez utiliser la commande COPY de PostgreSQL au lieu de la méthode INSERT INTO par défaut, vous pouvez exporter la variable d’environnement suivante (au moins sur nix et osx) :

export PG_USE_COPY=YES

ogr2ogr ne crée pas d’index spatial comme le fait shp2pgsl. Vous devez donc effectuer une étape supplémentaire en le créant manuellement avec la commande SQL classique CREATE INDEX (comme détaillé dans la section suivante Améliorer les performances).

Améliorer les performances

Retrieving features from a PostgreSQL database can be time-consuming, especially over a network. You can improve the drawing performance of PostgreSQL layers by ensuring that a PostGIS spatial index exists on each layer in the database. PostGIS supports creation of a GiST (Generalized Search Tree) index to speed up spatial searches of the data (GiST index information is taken from the PostGIS documentation available at https://postgis.net).

Astuce

You can use the DBManager to create an index to your layer. You should first select the layer and click on Table ‣ Edit table, go to Indexes tab and click on Add Spatial Index.

La syntaxe pour créer un index GiST est la suivante :

CREATE INDEX [indexname] ON [tablename]
  USING GIST ( [geometryfield] GIST_GEOMETRY_OPS );

Notez que pour de grandes tables, créer un index peut prendre du temps. Une fois cet index créé, vous devriez faire une VACUUM ANALYZE. Référez-vous à la documentation de PostGIS (POSTGIS-PROJECT Bibliographie) pour plus d’informations.

Voici un exemple de création d’un index GiST

gsherman@madison:~/current$ psql gis_data
Welcome to psql 8.3.0, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

gis_data=# CREATE INDEX sidx_alaska_lakes ON alaska_lakes
gis_data-# USING GIST (the_geom GIST_GEOMETRY_OPS);
CREATE INDEX
gis_data=# VACUUM ANALYZE alaska_lakes;
VACUUM
gis_data=# \q
gsherman@madison:~/current$

Couches vectorielles franchissant la ligne des 180° de longitude

Many GIS packages don’t wrap vector maps with a geographic reference system (lat/lon) crossing the 180 degrees longitude line (http://postgis.refractions.net/documentation/manual-2.0/ST_Shift_Longitude.html). As result, if we open such a map in QGIS, we will see two far, distinct locations, that should appear near each other. In Figure_vector_crossing, the tiny point on the far left of the map canvas (Chatham Islands) should be within the grid, to the right of the New Zealand main islands.

../../../_images/vectorNotWrapping.png

Carte en lat/lon de part et d’autre de la ligne des 180° longitude

Une solution est de transformer les valeurs longitudinales en utilisant PostGIS et la fonction ST_Shift_Longitude. Cette fonction lit chaque point/sommet de chacune des entités dans une géométrie et si la coordonnée de longitude est inférieure à 0°, elle lui ajoute 360°. Le résultat est une version 0° - 360° des données sur une carte centrée à 180°.

../../../_images/vectorWrapping.png

Traversée de la longitude 180° en utilisant la fonction ST_Shift_Longitude

Usage

  • Importer des données dans PostGIS (Importer des données dans PostgreSQL) en utilisant, par exemple, l’extension DB Manager.

  • Utiliser l’interface en ligne de commande PostGIS pour exécuter la commande suivante (dans cet exemple, « TABLE » est bien le nom de votre table PostGIS): gis_data=# update TABLE set the_geom=ST_Shift_Longitude(the_geom);

  • Si tout s’est bien passé, vous devriez recevoir une confirmation sur le nombre d’entités qui ont été mises à jour. Ensuite, vous pouvez charger la carte et voir la différence (Figure_vector_crossing_map).

Couches SpatiaLite

If you want to save a vector layer to SpatiaLite format, you can do this by right clicking the layer in the legend. Then, click on Save as…, define the name of the output file, and select “SpatiaLite” as format and the CRS. Also, you can select “SQLite” as format and then add SPATIALITE=YES in the OGR data source creation option field. This tells OGR to create a SpatiaLite database. See also https://www.gdal.org/ogr/drv_sqlite.html.

QGIS gère les vues SpatiaLite éditables.

Si vous souhaitez créer une nouvelle couche SpatiaLite, référez-vous à la section Créer une nouvelle couche SpatiaLite.

Astuce

Extensions de gestion de données SpatiaLite

Pour gérer des données SpatiaLite, vous pouvez également utiliser diverses extensions Python : QSpatiaLite, SpatiaLite Manager ou Gestionnaire de base de données (extension principale, recommandée). Elles peuvent toutes être téléchargées et installées via le Gestionnaire d’extensions.

GeoJSON specific parameters

When exporting layers to GeoJSON, this format has some specific Layer Options available. These options actually come from GDAL which is responsible for the writing of the file:

  • COORDINATE_PRECISION the maximum number of digits after the decimal separator to write in coordinates. Defaults to 15 (note: for Lat Lon coordinates 6 is considered enough). Truncation will occur to remove trailing zeros.

  • WRITE_BBOX set to YES to write a bbox property with the bounding box of the geometries at the feature and feature collection level

Couches DB2 Spatial

IBM DB2 for Linux, Unix and Windows (DB2 LUW), IBM DB2 for z/OS (mainframe) and IBM DashDB products allow users to store and analyse spatial data in relational table columns. The DB2 provider for QGIS supports the full range of visualization, analysis and manipulation of spatial data in these databases.

User documentation on these capabilities can be found at the DB2 z/OS KnowledgeCenter, DB2 LUW KnowledgeCenter and DB2 DashDB KnowledgeCenter.

For more information about working with the DB2 spatial capabilities, check out the DB2 Spatial Tutorial on IBM DeveloperWorks.

The DB2 provider currently only supports the Windows environment through the Windows ODBC driver.

The client running QGIS needs to have one of the following installed:

  • DB2 LUW

  • IBM Data Server Driver Package

  • IBM Data Server Client

To open a DB2 data in QGIS, you can refer to Le panneau Navigateur or Chargement d’une couche de base de données section.

If you are accessing a DB2 LUW database on the same machine or using DB2 LUW as a client, the DB2 executables and supporting files need to be included in the Windows path. This can be done by creating a batch file like the following with the name db2.bat and including it in the directory %OSGEO4W_ROOT%/etc/ini.

@echo off
REM Point the following to where DB2 is installed
SET db2path=C:\Program Files (x86)\sqllib
REM This should usually be ok - modify if necessary
SET gskpath=C:\Program Files (x86)\ibm\gsk8
SET Path=%db2path%\BIN;%db2path%\FUNCTION;%gskpath%\lib64;%gskpath%\lib;%path%