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é ?

#1 Mon 27 June 2022 17:05

JeanMich
Participant occasionnel
Date d'inscription: 28 Mar 2016
Messages: 46

QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

Bonjour,

Je cherche à calculer des surfaces non planes dans des virtual de layer.

Si je compare cette requète:

select LIBELLE,
SUM(st_area(ZONE_URBA.geometry)) as 'surf'
from ZONE_URBA


aux résultats obtenus avec la calculatrice de champs avec $area, j'ai des différences de surfaces
car je ne sais comment prendre en compte le src dans cette requête.

Dans postgis on pourrait écrire st_area(geom::geography) 
mais je ne connais pas la correspondance avec le Sqlite utilisé dans les virtual layer.

J'espère être assez clair, merci de vos conseils.

Dernière modification par JeanMich (Mon 27 June 2022 17:07)

Hors ligne

 

#2 Tue 19 July 2022 16:06

JeanMich
Participant occasionnel
Date d'inscription: 28 Mar 2016
Messages: 46

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

.

Dernière modification par JeanMich (Tue 19 July 2022 16:11)

Hors ligne

 

#3 Tue 19 July 2022 16:08

JeanMich
Participant occasionnel
Date d'inscription: 28 Mar 2016
Messages: 46

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

J'ai essayé

select  sum(st_area(ZONE_URBA.geometry, true)) as surf
from ZONE_URBA

mais sans succès.

D'après la doc: http://www.gaia-gis.it/gaia-sins/spatia … .0.html#p4

pour utiliser st_area avec use_ellipsoid il faut le module LWGEOM. C'est peut être ca le problème ?

Dernière modification par JeanMich (Tue 19 July 2022 16:12)

Hors ligne

 

#4 Tue 19 July 2022 16:08

JeanMich
Participant occasionnel
Date d'inscription: 28 Mar 2016
Messages: 46

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

.

Dernière modification par JeanMich (Tue 19 July 2022 16:11)

Hors ligne

 

#5 Tue 13 September 2022 09:55

JeanMich
Participant occasionnel
Date d'inscription: 28 Mar 2016
Messages: 46

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

Bonjour,

Je cherche toujours la réponse. Je ne sais pas si la question est pas clair, ou si il n'y a pas de réponse...

Hors ligne

 

#6 Wed 14 September 2022 16:19

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

Bonjour,
Sans grande conviction, avez vous essayé:

Code:

select LIBELLE,
SUM(st_area(geometry)) as 'surf'
from ZONE_URBA

Bonne continuation,


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#7 Wed 14 September 2022 16:35

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 994

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

Ne manque-t-il pas tout simplement un "GROUP BY" ?

Code:

select LIBELLE,
SUM(st_area(ZONE_URBA.geometry)) as 'surf'
from ZONE_URBA
GROUP BY LIBELLE

Sylvain M.

Hors ligne

 

#8 Wed 14 September 2022 16:38

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 994

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

Sinon, si vous travaillez en France métropolitaine, vous pouvez reprojeter vos géométries en Lambert 93 avec cette formule : ST_Transform(ZONE_URBA.geometry, 2154)

Ce qui donnerait donc :

Code:

select LIBELLE,
SUM(st_area(ST_Transform(ZONE_URBA.geometry, 2154))) as 'surf_m2'
from ZONE_URBA
GROUP BY LIBELLE

Sylvain M.

Hors ligne

 

#9 Wed 14 September 2022 16:43

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

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

JeanMich a écrit:

J'ai essayé

select  sum(st_area(ZONE_URBA.geometry, true)) as surf
from ZONE_URBA

mais sans succès.

D'après la doc: http://www.gaia-gis.it/gaia-sins/spatia … .0.html#p4

pour utiliser st_area avec use_ellipsoid il faut le module LWGEOM. C'est peut être ca le problème ?


Ca ressemble à ce pb: https://github.com/qgis/QGIS/issues/41890

Hors ligne

 

#10 Fri 16 September 2022 11:21

JeanMich
Participant occasionnel
Date d'inscription: 28 Mar 2016
Messages: 46

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

Mathieu Denat a écrit:

Bonjour,
Sans grande conviction, avez vous essayé:

Code:

select LIBELLE,
SUM(st_area(geometry)) as 'surf'
from ZONE_URBA

Bonne continuation,


Oui, ca donne la surface cartésienne, donc fausse. Mais merci !

Hors ligne

 

#11 Fri 16 September 2022 11:25

JeanMich
Participant occasionnel
Date d'inscription: 28 Mar 2016
Messages: 46

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

Sylvain M. a écrit:

Sinon, si vous travaillez en France métropolitaine, vous pouvez reprojeter vos géométries en Lambert 93 avec cette formule : ST_Transform(ZONE_URBA.geometry, 2154)

Ce qui donnerait donc :

Code:

select LIBELLE,
SUM(st_area(ST_Transform(ZONE_URBA.geometry, 2154))) as 'surf_m2'
from ZONE_URBA
GROUP BY LIBELLE


J'ai aussi essayé, mais là on reprojette qlq chose de faux, le résultat n'est pas bon. Merci d'avoir essayé.

Hors ligne

 

#12 Fri 16 September 2022 11:33

JeanMich
Participant occasionnel
Date d'inscription: 28 Mar 2016
Messages: 46

Re: QGIS 3.16: Calcul de surface non cartesienne avec les Virtual Layer

Miniopterine a écrit:
JeanMich a écrit:

J'ai essayé

select  sum(st_area(ZONE_URBA.geometry, true)) as surf
from ZONE_URBA

mais sans succès.

D'après la doc: http://www.gaia-gis.it/gaia-sins/spatia … .0.html#p4

pour utiliser st_area avec use_ellipsoid il faut le module LWGEOM. C'est peut être ca le problème ?


Ca ressemble à ce pb: https://github.com/qgis/QGIS/issues/41890


j'ai essayé avec:

select LIBELLE,
st_area(geometry),
st_area(geometry,true),
st_area(geometry,false)
from ZONE_URBA
GROUP BY LIBELLE


st_area(geometry) = renvoi un résultat faux
st_area(geometry,true), st_area(geometry,false) = renvoi un NULL que je passe par les virtual layer ou le db manager.

Je ne suis pas sûr de tout comprendre dans les réponses de github. Y a t il une solution ?

Merci à tous ceux qui ont essayé smile

Hors ligne

 

Pied de page des forums

Powered by FluxBB