A
Fonctions de traitement
AA
Insertion WKT en SQL
Suite au module précédent
, nous supprimons le point, la ligne et les polygones qu’on avait entrés :
DELETE FROM "testgeom"
L’instruction SQL DELETE
permet de supprimer des enregistrements d’une table. Pour ne supprimer que
certains enregistrement (et non pas tous), il faut ajouter une condition WHERE
comme ceci :
DELETE FROM "testgeom" WHERE "id" = 2
Nous allons maintenant insérer des géométries en WKT en vrai
SQL (alors que nous avions entré du WKT sans faire du SQL frâce à pgAdmin, dans le module précédent
).
Exécuter :
INSERT INTO "testgeom" (geom) VALUES (ST_GeomFromText('POLYGON ((0 0, 10 0, 5 10, 0 0))'))
Rafraîchir QGIS par un rapide zoom puis dézoom. Si nécessaire, ajouter la couche sur QGIS comme expliqué dans le module précédent
.
QUESTION
AAA
PNG QGIS
A chaque dézoom, QGIS met à jour son affichage en ré-exécutant une requête de type SELECT .. FROM "nom_table" en filtrant sur l’étendue géographique à afficher. Comme QGIS n’est pas au courant
des modifications que nous avons faites sur la table, nous utilisons ce principe pour forcer le rafraîchissement.
Exécuter :
INSERT INTO "testgeom" (geom) VALUES (ST_GeomFromText('POLYGON ((0 10, 10 10, 10 5, 0 5, 0 10))'))
- rafraîchir QGIS à nouveau (zoom puis dézoom)
- modifier le style de la couche pour :
- catégoriser sur l’ID afin que chaque polygone soit d’une couleur différente
- rendre la couche semi-opaque à 70 % (= semi-transparent à 30 %)
QUESTION
AAB
PNG QGIS
AB
Appliquer un Buffer
Exécuter :
INSERT INTO "testgeom" (geom) VALUES (ST_Buffer(ST_GeomFromText('POLYGON ((0 10, 10 10, 10 5, 0 5, 0 10))'), 2))
QUESTION
ABA
PNG QGIS
La fonction
ST_Buffer
permet de dilater une géométrie sur une distance donnée. Dans l’énoncé, nous appelons cela appliquer un buffer de 2
AC
Translation, rotation, homothétie
Répéter la requête en remplaçant
ST_Buffer
par
ST_Translate
, pour insérer la géométrie qui est l’application d’une translation de deltaX
= 3
et deltaY
= 2
de notre WKT.
QUESTION
ACA
PNG QGIS
Utiliser la fonction
ST_Rotate
pour appliquer une rotation sur le même WKT.
QUESTION
ACB
PNG QGIS pour une rotation de PI/4
radians autour de l’origine (0 ; 0)
QUESTION
ACC
PNG QGIS pour une rotation de -PI/8
radians autour de l’origine (5 ; 10)
PostgreSQL fournit une
fonction PI
Repérer laquelle des fonctions
permet d’appliquer une homothétie. L’appliquer sur le WKT précédent, pour un facteur de 1.5 autour de l’origine (0 ; 0)
.
QUESTION
ACD
Nom de la fonction permettant d’application d’une homothétie
QUESTION
ACE
PNG QGIS de la requête SQL (pour l’homothétie de facteur 1.5
)
AD
Différence, intersection et union de géométries
En reprenant les géométries du début du module, qu’on va nommer (le WKT n’a pas changé) :
- géométrie A
= POLYGON ((0 0, 10 0, 5 10, 0 0))
- géométrie B
= POLYGON ((0 10, 10 10, 10 5, 0 5, 0 10))
QUESTION
ADA
la requête SQL pour insérer la différence A
-B
(la géométrie A à laquelle on a soustrait la géométrie B)
QUESTION
ADB
PNG QGIS de la requête
Nous allons maintenant insérer l’intersection de A et de B.
QUESTION
ADC
nom de la fonction qui calcule l’intersection de 2 géométries (nom SQL, sans les parenthèses)
QUESTION
ADC
PNG QGIS de l’intersection de A et B
Répéter la même opération pour calculer l’union des géométries A et B.
QUESTION
ADF
nom de la fonction qui calcule l’union des géométries
QUESTION
ADH
PNG QGIS avec l’union de A et B
B
Fonctions de mesure
BA
Travailler sur la table
Vider la table testgeom
puis ré-insérer les géométries A
et B
précédentes (de la même façon).
Exécuter :
SELECT id, "geom", ST_NDims("geom") FROM "testgeom"
QUESTION
BAA
la valeur nb_dims
du résultat de la requête
La fonction
ST_NDims
retourne le degré de dimensionnalité de la géométrie donnée en argument. C’est une simple mesure, qui ne modifie pas la géométrie et ne retourne pas une géométrie, mais un nombre.
QUESTION
BAB
Le résultat de la requête SELECT avec les expressions suplémentaires :
Un polygone contient un ou plusieurs rings
, lui permettant d’avoir des trous
.
BB
Travailler avec les vues comme requêtes enregistrées
Exécuter :
CREATE OR REPLACE VIEW "testview" AS SELECT "id", "geom", ST_NDims("geom") FROM "testgeom"
Puis :
SELECT * FROM "testview"
Les vues sont une manière d’enregistrer les requêtes pour s’en servir simplement, sorte de tables dynamiques
.
QUESTION
BBA
La requête qui enregistre la requête de BAA
en tant que vue "mamesure"
Ensuite :
- exécuter la requête BBA pour créer la vue
- afficher la vue sous QGIS et vérifier qu’elle est géométriquement identique à testview
- la vue est listée avec les tables dans Ajouter une couche PostGIS
, mais pour pouvoir la sélectionner pour ajout, il faut définir la clef primaire : choisir id
.
- ouvrir la table attributaire de la couche-vue (clic droit sur la couche) : vérifier que les champs sont présents
A ce stade, les vues sont en lecture seule : pas d’édition, pas de clef primaire. Il est possible de rendre les vues éditables, c’est une
fonctionnalité avancée de PostgreSQL
que nous ne traiterons pas ici
BC
Aire et périmètre
Créez la vue testgeom_avec_mesure
qui retourne le contenu de la table testgeom
augmentée
des colonnes aire
(aire du polygone en nombre réel) et perimetre
(périmètre du polygone en nombre réel).
- pour préciser le nom de la colonne, lui donner un alias : SELECT expression AS nom_alias FROM ...
- la fonction pour mesure l’aire est :
ST_Area
(chercher celle pour le périmètre, dans la doc de référence)
QUESTION
BCA
résultat de la vue tel que retourné par SELECT * FROM "testgeom_avec_mesure"
BD
Mesures dérivées
On va combiner les fonctions de traitement (qui produisent une géométrie) et les fonctions de mesure (qui retourne une information sur la géométrie).
Par exemple, exécutez :
SELECT id, ST_Area(ST_Buffer("geom", 1)) AS aire_du_buffer FROM "testgeom"
En Français, on dirait : aire_du_buffer
représente l’aire
du buffer de 1
appliqué à la géométrie
geom
QUESTION
BDA
nom du type PostgreSQL de l’expression "geom"
(dans la requête ci-dessus)
QUESTION
BDB
nom du type PostgreSQL de l’expression ST_Buffer("geom", 1)
QUESTION
BDC
nom du type PostgreSQL de l’expression ST_Area(ST_Buffer("geom", 1))
- un type d’expression
(ou type de valeur
) n’est pas toujours un type de colonne
; par exemple, character varying
est un type de colonne
(pour le stockage) mais il
renvoie
une valeur de type text
- il s’agit ni plus ni moins des types de colonnes retournées par une requête SELECT, que pgAdmin affiche sous le nom de chaque colonne du résultat d’une requête
De la même manière, créez la vue rendu_bdd
qui retourne pour chaque géométrie de testgeom
:
- les colonnes d’origine de la table
- son aire nommée aire
- l’aire de sa translation sur deltaX
= 3
et deltaY
= 2
, nommée aire_translate
- l’aire de son homothétie de facteur 1.5, nommée aire_scale
QUESTION
BDD
code SQL de création de la vue
Créez maintenant la vue rendu_bde
qui affiche le résultat de la vue rendu_bdd
, augmenté des champs suivants :
- le rapport de l’aire de l’homothétie (de facteur 1.5) sur l’aire de la géométrie d’origine, nommé aire_factor
- la racine carrée de ce même rapport, nommé aire_square_factor
QUESTION
BDE
code SQL de création de la vue