#1 Fri 19 November 2021 21:30
- Snoopy
- Participant occasionnel
- Lieu: MEUDON
- Date d'inscription: 24 May 2007
- Messages: 13
QGIS 3.16/Requete sous Spatialite: perte de geometrie
Bonjour, je suis en train de tester Spatialite en suivant le support du site Geoinformation http://www.geoinformations.developpemen … 5af369.pdf
A la page 29 (ou 32 si on suit les pieds de page), Question 2 : quelle est la longueur de la 'rivière le loir' dans chacune des communes intersectées par le cours d'eau ?
Via la requête suivante, j'obtiens bien le résultat attendu.
Code:
SELECT c.nom_comm commune, tr.toponyme riviere, round(sum(st_length(st_intersection(tr.Geometry,c.Geometry))),2) longueur, st_intersection(tr.Geometry,c.Geometry) geom FROM TRONCON_HYDROGRAPHIQUE tr, COMMUNE c WHERE toponyme='rivière le loir' AND st_intersects(tr.Geometry, c.Geometry)=1 GROUP BY c.nom_comm
Du moins pour la partie attributaire, parce que si je charge le résultat de la requête comme une nouvelle couche dans QGIS, à l'affichage je perd de nombreux tronçons de la rivière le Loir.
Comment puis-je faire ?
Je vous remercie.
Dernière modification par Snoopy (Mon 22 November 2021 15:52)
Hors ligne
#2 Mon 22 November 2021 13:48
- Snoopy
- Participant occasionnel
- Lieu: MEUDON
- Date d'inscription: 24 May 2007
- Messages: 13
Re: QGIS 3.16/Requete sous Spatialite: perte de geometrie
Pour compléter, mon problème viendrait du Group by
Avec cette requête, j'ai bien toutes les géométries.
Code:
SELECT c.nom_comm commune, tr.toponyme riviere, st_intersection(tr.Geometry,c.Geometry) geom FROM TRONCON_HYDROGRAPHIQUE tr, COMMUNE c WHERE toponyme='rivière le loir' AND st_intersects(tr.Geometry, c.Geometry)=1
Je n'arrive "juste" pas à faire la fusion des tronçons par commune.
Dernière modification par Snoopy (Mon 22 November 2021 13:56)
Hors ligne
#3 Mon 22 November 2021 17:59
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3939
Re: QGIS 3.16/Requete sous Spatialite: perte de geometrie
Bonjour,
Le group_by devrait reprendre les champs non agrégés de votre select et certainement le select manque d'une agrégation pour la génération de la géométrie. Que renvoie (je ne connais pas les fonctions spatiales de SpatiaLite)
Code:
SELECT c.nom_comm commune, tr.toponyme riviere, -- round(sum(st_length(st_intersection(tr.Geometry,c.Geometry))),2) longueur, -- pas trop convaincu par cette ligne st_union(st_intersection(tr.Geometry,c.Geometry)) geom FROM TRONCON_HYDROGRAPHIQUE tr, COMMUNE c WHERE toponyme='rivière le loir' AND st_intersects(tr.Geometry, c.Geometry)=1 GROUP BY c.nom_comm, tr.toponyme
Hors ligne
#4 Tue 23 November 2021 12:24
- Snoopy
- Participant occasionnel
- Lieu: MEUDON
- Date d'inscription: 24 May 2007
- Messages: 13
Re: QGIS 3.16/Requete sous Spatialite: perte de geometrie
Yes, merci Santanna. st_union fait l’agrégation des géométries. Du coup j'ai bien l'ensemble de mes tronçons regroupés par commune.
Pour le calcul de distance du linéaire de ces tronçons, la ligne ci-desous fait bien le boulot. J'ai comparé via les outils QGIS, j'ai le même résultat.
Code:
round(sum(st_length(st_intersection(tr.Geometry,c.Geometry))),2) longueur,
Encore merci.
Hors ligne