banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 19 April 2023 19:10

emmamillefeuille
Juste Inscrit !
Date d'inscription: 26 Apr 2022
Messages: 9

QGIS BDD SQL: Intersection spatial entre lineaire et polygone

Bonjour à tous !

Je découvre depuis peu le langage SQL et je me heurte aujourd'hui à un soucis :

Je cherche à faire l'intersection spatial entre une couche shp linéaire (des cours d'eau) et une couche polygone (des communes). Mon objectif est d'obtenir une nouvelle table/couche contenant le nom de chaque cours d'eau et la/les commune qu'il traverse. Les deux couches n'ont aucun id en commun.

Pour cela, j'aimerais utiliser une requête SQL car mes données sont dans une base (et je n'ai pas juste envie de faire une intersection "manuelle" via la boîte à outils car c'est un exercice que je vais réappliquer sur plusieurs jeux de données).

J'étais initialement partie sur quelque chose comme ceci :

Code:

Select nom_cours_eau, commune, CE.geometry
From cours_eau CE, communes
Where st_within(CE.geometry,communes.geometry)

mais ce code renvoie les cours d'eau en plusieurs exemplaires (je ne sais pas pourquoi, je me retrouve donc avec une table et plusieurs lignes identiques avec la même géométrie) et d'autre part, ne renvoie pas du tout les cours d'eau à l'intersection de plusieurs communes.

Dans l'idéal, j'aimerais bien obtenir une table du style :

cours d'eau // commune
CE 1 // com1
CE2 // com 1
CE2 // com2

Merci d'avance pour votre aide (en espérant avoir assez détaillé)

Hors ligne

 

#2 Wed 19 April 2023 19:37

Miniopterine
Participant assidu
Date d'inscription: 29 Nov 2005
Messages: 278

Re: QGIS BDD SQL: Intersection spatial entre lineaire et polygone

Bonjour,

https://gis.stackexchange.com/questions … -st-within
A priori le st_within ne renverra que les cours d'eau entièrement contenu dans une seule commune.

Essayez plutôt le St_intersects

Hors ligne

 

#3 Thu 20 April 2023 00:05

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: QGIS BDD SQL: Intersection spatial entre lineaire et polygone

Bonjour,

Si vous ne souhaitez qu'une ligne par cours d'eau, alors il faut utiliser une fonction d'agrégation sur vos communes, qui va vous permettre de les regrouper par cours d'eau.
Exemple :

Code:

SELECT ce.nom, group_concat(com.commune, ', ') communes, ce.geometry
FROM cours_eau ce, communes com
WHERE st_intersects(ce.geometry,com.geometry)
GROUP BY ce.nom, ce.geometry
;

La fonction group_concat est du SQL utilisé par SQLite. Elle permet de concaténer les valeurs d'un champ texte de plusieurs enregistrements. J'ai choisi comme séparateur ', ' mais ça peut être n'importe quelle autre chaîne de caractère(s).

Hors ligne

 

#4 Thu 20 April 2023 09:27

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: QGIS BDD SQL: Intersection spatial entre lineaire et polygone

J'avais peut-être mal compris votre demande. Si vous souhaitez n'avoir que les tronçons de cours d'eau coupant chaque commune :

Code:

SELECT ce.nom, com.commune, st_intersection(ce.geometry, com.geometry) geometry
FROM cours_eau ce, communes com
WHERE st_intersects(ce.geometry,com.geometry)
;

Hors ligne

 

#5 Thu 20 April 2023 09:30

emmamillefeuille
Juste Inscrit !
Date d'inscription: 26 Apr 2022
Messages: 9

Re: QGIS BDD SQL: Intersection spatial entre lineaire et polygone

je vous remercie pour les réponses ! je vais tester tout ça. En effet je souhaite uniquement des tronçons mais je n'avais pas penser à grouper et concaténer, je pense que ce sera parfait

Hors ligne

 

#6 Thu 20 April 2023 12:30

emmamillefeuille
Juste Inscrit !
Date d'inscription: 26 Apr 2022
Messages: 9

Re: QGIS BDD SQL: Intersection spatial entre lineaire et polygone

le 2e code fonctionnement parfaitement pour ce que je recherchais, merci !

Hors ligne

 

Pied de page des forums

Powered by FluxBB