Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Printemps des cartes 2024

#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: 3799

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

 

Pied de page des forums

Powered by FluxBB