PostGIS › Exploiter un jeu de données

← Précédent ↑ Retour Suivant →

Objectifs du module

À retenir par coeur

A Manipulations non-relationnelles

non-relationnel parce qu’une seule table est manipulée : il n’y a pas de jointure

AA Importer les communes de France dans une table

Il existe différentes méthodes pour importer des données dans la base. Ces méthodes seront vues ultérieurement dans le module ultérieur Import/export . On utilise ici la méthode Gestionnaire de bases de données QGIS .
SELECT * FROM communes LIMIT 300

Exécuter la requête :

SELECT COUNT(*) FROM communes
QUESTION AAA valeur du COUNT(*) de la requête précédente

Pour la suite de ce TD, nous devons supprimer les informations de SRID (sujet sur lequel nous reviendrons dans le module suivant ). Pour ce faire, exécuter les 2 requêtes suivantes :

ALTER TABLE communes ALTER COLUMN geom TYPE geometry(MultiPolygon)
UPDATE communes SET geom = ST_SetSRID(geom, 0)

AB Rappels sur le SELECT de PostgreSQL

La requête SQL suivante liste les communes dont le nom commence par un Z majuscule ou minuscule :

SELECT * FROM communes WHERE nom ILIKE
’z%’
QUESTION ABA requête SQL retournant le nombre de communes dont le nom finit par illy (sans tenir compte de la casse)
QUESTION ABB le nombre (de communes) retourné

Pour trier par ordre alphabétique :

SELECT * FROM communes WHERE nom ILIKE
’z%’ ORDER BY nom

Pour limiter aux 10 premiers enregistrements :

SELECT * FROM communes WHERE nom ILIKE
’z%’ ORDER BY nom LIMIT 10

Pour « démarrer » au 5e résultat :

SELECT * FROM communes WHERE nom ILIKE
’z%’ ORDER BY nom OFFSET 5
QUESTION ABC requête SQL retournant le nom des 5 plus vastes communes (en utilisant le champ surf_m2 , pas la géométrie)
QUESTION ABD résultat de la requête
QUESTION ABE requête SQL pour obtenir la même chose en se servant de la géométrie mais pas de surf_m2
QUESTION ABF requête SQL retournant le nom et périmètre des 8 communes au plus long périmètre (en utilisant la géométrie)

AC Filtre et tri spatial

Soit le point PT de coordonnées (3.11546 ; 45.78586) . À l’aide la fonction ST_MakePoint pour construire le point et de la fonction ST_Within pour filtrer :

QUESTION ACA écrire la requête SELECT retournant la commune (tous les champs) dont la géométrie contient le point PT
QUESTION ACB nom de la commune dans lequel PT se trouve
QUESTION ACC requête SQL listant les 100 premières communes, triées par distance croissante au point PT
QUESTION ACD requête SQL listant les communes situées à une distance au point PT d’au plus 0.2 unité, avec toutes les colonnes
QUESTION ACE idem ACD mais sans utiliser d’autre fonction que ST_DWithin ( ST_MakePoint mis à part)
QUESTION ACF la même requête en triant par ordre de distance
QUESTION ACG la requête SQL listant toutes les communes, sans tri, avec toutes les colonnes ET un champ nommé my_distance représentant la distance entre la commune et le point PT
Nous disons « unité » car nous sommes en géométrie pure . L’aire est en unités-carrées et tous les traitements géométriques peuvent se faire quelle que soit l’unité géographique. L’unité réelle, fut-elle le mètre, le degré, le pied, etc., est une relation entre la métrique et le réel. Elle intervient dans les entrées, sorties, transformations, exploitation des résultats... c’est-à-dire : lorsqu’il y a valorisation métier ou transformation d’une référence spatiale à l’autre.
QUESTION ACH PNG QGIS

B Générer des géométries dérivées

BA Centroïdes

Trouvez dans la documentation de référence la fonction qui permet de calculer le point centroïde à partir d’un polygone.

QUESTION BAA nom de la fonction qui calcule un centroïde
QUESTION BAB requête SQL qui crée la vue communes_centroid identique à la table communes excepté la colonne de polygone geom qui doit être remplacée par la colonne centroid , qui est le centroïde respectif de chaque géométrie

BB Généralisation de tracés

Créer la vue simplify :

CREATE OR REPLACE VIEW simplify_003 AS
SELECT communes.id, ST_Simplify(communes.geom, 0.003::double precision) AS geom, communes.nom
FROM communes;


Puis la vue simplify_006 :

CREATE OR REPLACE VIEW simplify_006 AS
SELECT communes.id, ST_Simplify(communes.geom, 0.006::double precision) AS geom, communes.nom
  FROM communes;


Afficher dans QGIS les couches dans cet ordre (la première est la plus haute) :

QUESTION BBA PNG QGIS

Ces vues peuvent ensuite être supprimées de la base pour ne pas trop ralentir QGIS lorsqu’il scanne les couches à l’ajout d’une nouvelle couche PostGIS.

BC Enveloppes

Créer les 2 vues suivantes :

CREATE OR REPLACE VIEW envelope AS
SELECT communes.id, ST_Envelope(communes.geom) AS geom, communes.nom
  FROM communes;


CREATE OR REPLACE VIEW boundingcircle AS
SELECT communes.id, ST_MinimumBoundingCircle(communes.geom) AS geom, communes.nom
  FROM communes;


Puis les ajouter à PostGIS comme pour BBA , en bordure simple, rouge pour boundingcircle et bleue pour envelope .

QUESTION BCA PNG QGIS

BD Couper sur l’enveloppe ou le radius

Créer la vue qui retourne toutes les communes intersectées avec le disque de centre PT et de rayon 2.

QUESTION BDA le code SQL du SELECT
QUESTION BDB PNG QGIS

Créer la vue qui retourne toutes les communes intersectées avec l’étendue E (c’est-à-dire : le produit de l’intersection de chaque commune avec l’étendue E ).

QUESTION BDC le code SQL du SELECT
QUESTION BDD PNG QGIS
QUESTION BDE type de la valeur de retour de la fonction ST_Intersects
QUESTION BDF type de la valeur de retour de la fonction ST_Intersection
Suivant → ← Précédent Retour