Extensions spatiales

Sqlite et PostgreSQL proposent des extensions spatiales (respectivement Spatialite et PostGIS) permettant d'ajouter le stockage et la manipulation d'objets spatiaux en ajoutant des types de données géométriques et des fonctions spatiales.

ComplémentLes spécifications

La spécification SFSQL (Simple Features for SQL) définit les types et les fonctions qui doivent être disponibles dans une base de données spatiale selon l'OGC. La spécification SQL/MM étend le modèle. On pourra également se référer au document Matrices de Clementini et prédicats spatiaux de l'OGC disponible sur le site du Ministère de l'Ecologie sur l'information géographique (ici)

Les types de données géométriques

Dans cette formation nous ne considérerons que les objets en dimension 2 et plus précisément : les points, les lignes, et les polygones.

La géométrie est stockée dans un format binaire 'WKB' (ou éventuellement texte 'WKT', exemple : POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10)) dans une colonne de table qui est souvent nommée geometry ou the_geom). Le système utilise au moins deux autres tables internes supplémentaires qu'il maintient à jour : geometry_columns et spatial_ref_sys (PostGIS 1.5)

Tables internes OGC

SRID est l'identifiant du système de projection. Par exemple 2154 pour le RGF93/Lambert93

Les fonctions spatiales

Il existe plusieurs catégories de fonctions spatiales, comme par exemple celles qui permettent de passer du format WKT au WKB ou inversement. Voici quelques fonctions de départ :

ST_SRID() : retourne le code du système de projection de l'objet

ST_IsValid() : vérifie la géométrie des objets (pas d'erreur topologique)... Ceci concerne essentiellement les polygones voir par exemple

Remarque

Vérification de géométrie sous PostGIS

PostGIS ajoute d'autres fonctions de vérification de la géométrie

ST_IsValidReason() : retourne un texte indiquant les raisons d'une éventuelle invalidité.

ST_IsValidDetail() : retourne en plus un pointeur vers la partie non valide (à partir de PostGIS 2.0).

ST_MakeValid() : Tente de corriger les géométries invalides (PostGIS 2.0)

ST_X() : retourne la coordonnée X d'un point (et uniquement d'un point).

ST_Y() : coordonnée Y d'un point

ST_Centroid() : retourne le centroide d'un polygone

Exemple : ST_X(ST_Centroid(Geometry)) retourne la coordonnée X du centroide d'un polygone.

SELECT nom_comm, ST_X(ST_centroid(Geometry)) AS X, ST_Y(ST_centroid(Geometry)) AS Y FROM commune

Utilisation St_Centroid

ST_Area() retourne la surface d'un objet

ST_Buffer() retourne un nouvel objet tampon construit autour d'un objet

ST_Length() : retourne la longueur d'un objet de type ligne ou multi-ligne (attention à ne pas utiliser length() qui retourne la longueur du champ, spatialite autorise aussi Glength()).

ST_Perimeter() : retourne le périmètre d'un objet polygone ou multi-polygone

AttentionPrefixe ST_

Il faut préfixer les commandes par ST_ (Spatial Temporal) pour être conforme au standard SQL/MM. Même si certaines fonctions anciennes sont toujours disponibles sans ce préfixe, elles deviendront prochainement obsolètes. Donc autant prendre les bonnes habitudes !