Pages: 1
- Sujet précédent - QGIS BDD SQL: Intersection spatial entre lineaire et polygone - Sujet suivant
#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
Pages: 1
- Sujet précédent - QGIS BDD SQL: Intersection spatial entre lineaire et polygone - Sujet suivant