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 13 May 2016 14:57

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

QGIS: calcul surface ?

bonjour

je dispose d'une couche de polygone avec des cercles et d'une couche de polylignes avec des segments
un seul segment est lié à un cercle par un champ id ce qui peut me permettre de faire une jointure

je souhaite calculer la surface du triangle formé par le centre de ce cercle et ce segment

merci LJ

Dernière modification par laurent00 (Fri 13 May 2016 14:58)

Hors ligne

 

#2 Sat 14 May 2016 15:26

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: calcul surface ?

Salut,
Je pense à trois moyens différents d'obtenir cela:
- créer une fonction python dans l'éditeur de fonctions du calculateur de champ, fonction que tu appelleras après dans ta formule
- utiliser le SQL avec les couches virtuelles de QGIS 2.14
- et utiliser les fonctions déjà présentes dans QGIS (je ne sais cependant pas si les fonctions de construction de géométries étaient déjà disponibles dans les versions précédentes mais à vérifier), et c'est cette option que j'ai testée. Ce qu'elle me renvoie me paraît cohérent mais ton retour pourrait être intéressant là-dessus.

La démarche consiste à construire le polygone correspondant au triangle en question et en calculer la surface

Code:

area(   -- calcule la surface d'un polygone
    make_polygon( -- on construit le polygone à partir d'une ligne fermée
        make_line(    -- on crée la ligne à partir de points (le centroïde, le premier point de la ligne, le dernier et on ferme avec le centroïde)
            make_point(x($geometry), y($geometry)),   -- x et y renvoient les coordonnées du centroïde du polygone et on construit le premier nœud de la ligne avec 

            make_point( -- 2ème noeud : premier sommet de la ligne
                x(   -- récupération du x
                    start_point(  -- du 1er sommet
                        geometry( -- de la géométrie
                            get_feature('lignes', 'id', attribute ($currentfeature, 'id' )) -- de l'entité de même id dans la couche de lignes
                        )
                    )
                ), 
                y(   -- récupération du y
                    start_point(
                        geometry(
                            get_feature('lignes', 'id', attribute ($currentfeature, 'id' ))
                        )
                    )
                )
            ),
            
            make_point( -- 3ème point: construction à partir du dernier sommet de la ligne
                x(   -- récupération du x
                    end_point(  -- du dernier sommet
                        geometry( -- sur la géométrie
                            get_feature('lignes', 'id', attribute ($currentfeature, 'id' )) -- de l'entité de même id dans la couche de lignes
                        )
                    )
                ), 
                y(   -- récupération du y
                    end_point(
                        geometry(
                            get_feature('lignes', 'id', attribute ($currentfeature, 'id' ))
                        )
                    )
                )
            ),

            make_point(x($geometry), y($geometry)) -- et on boucle la liste avec le centroïde
        )
    )
)

Dernière modification par SANTANNA (Thu 19 May 2016 19:47)

Hors ligne

 

#3 Tue 17 May 2016 14:50

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

j'adorerai faire un retour mais là je sèche un peu
- pour le python je n'y connaît rien
- pour le sql presque pareil ...
- sinon pour la fonction intégrée je la cherche mais ne la trouve pas ! je comprends le principe
ou est-ce que je dois la mettre ?

merci LJ

Hors ligne

 

#4 Tue 17 May 2016 15:11

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: calcul surface ?

Bonjour,

sinon pour la fonction intégrée je la cherche mais ne la trouve pas ! je comprends le principe
ou est-ce que je dois la mettre


Dans la calculatrice de champs de la couche de polygone, à l'endroit habituel où on saisit les formules de calcul. Pense aussi à renommer la couche lignes (et éventuellement les champs en commun)

Hors ligne

 

#5 Thu 19 May 2016 19:15

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

j'ai donc tester mais cela ne ramène  que des null lorsque je crée un nouveau champ nombre entier
voici ma formule

Code:

area(   -- calcule la surface d'un polygone
    make_polygon( -- on construit le polygone à partir d'une ligne fermée
        make_line(    -- on crée la ligne à partir de points (le centroïde, le premier point de la ligne, le dernier et on ferme avec le centroïde)
            make_point($x, $y),   -- $x et $y renvoient les coordonnées du centroïde du polygone et on construit le premier nœud de la ligne avec 

            make_point( -- 2ème noeud : premier sommet de la ligne
                x(   -- récupération du x
                    start_point(  -- du 1er sommet
                        geometry( -- de la géométrie
                            get_feature('tourette', 'trt_id', attribute ($currentfeature, 'tal_id' )) -- de l'entité de même id dans la couche de lignes
                        )
                    )
                ), 
                y(   -- récupération du y
                    start_point(
                        geometry(
                            get_feature('tourette', 'trt_id', attribute ($currentfeature, 'tal_id' ))
                        )
                    )
                )
            ),
            
            make_point( -- 3ème point: construction à partir du dernier sommet de la ligne
                x(   -- récupération du x
                    end_point(  -- du dernier sommet
                        geometry( -- sur la géométrie
                            get_feature('tourette', 'trt_id', attribute ($currentfeature, 'tal_id' )) -- de l'entité de même id dans la couche de lignes
                        )
                    )
                ), 
                y(   -- récupération du y
                    end_point(
                        geometry(
                            get_feature('tourette', 'trt_id', attribute ($currentfeature, 'tal_id' ))
                        )
                    )
                )
            ),

            make_point($x, $y) -- et on boucle la liste avec le centroïde
        )
    )
)

je me pose la question suivante

j'utilise la calculatrice dans une couche polygone $x et $y ramène bien le centroïde des polygones ou dois-je passer par une couche de point ...
comme il y a plusieurs point ne doit-on pas les renommer x1 x2 ...

Hors ligne

 

#6 Thu 19 May 2016 19:34

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

effectivement si je fais simplement $x dans un champ de ma couche polygone il ne me ramène rien ...

Hors ligne

 

#7 Thu 19 May 2016 19:46

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: calcul surface ?

Salut,
effectivement, à la place de $x, il faudrait utiliser x($geometry). C'est plutôt x(geom) qui renvoie le x du centroide quand ce n'est pas un polygone et non $x. Désolé de la méprise. Je corrige la formule ci-dessus.

Dernière modification par SANTANNA (Thu 19 May 2016 19:48)

Hors ligne

 

#8 Thu 19 May 2016 20:14

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

Great !!
cela marche à merveille
merci

Hors ligne

 

#9 Fri 20 May 2016 16:04

Romary
Participant assidu
Lieu: Epinal
Date d'inscription: 17 Jun 2011
Messages: 210

Re: QGIS: calcul surface ?

Bonjour,

Je viens de faire un test avec la formule. En comparant avec les surfaces des intersections entre triangles et polygones obtenus après plusieurs manipulations (cf pièce jointe), les mesures de la formule apparaissent fausses....
J'ai également mis une mesure réalisée avec l'outil de mesure qgis qui prouve la valeur erronée avec la formule...

Je n'arrive cependant pas à l'expliquer...

Ry

Dernière modification par Romary (Fri 20 May 2016 16:08)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#10 Fri 20 May 2016 17:54

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: calcul surface ?

salut,
J'ai peut-être mal compris la demande de Laurent mais

laurent00 a écrit:

je souhaite calculer la surface du triangle formé par le centre de ce cercle et ce segment


me semble bien différent de

Romary a écrit:

En comparant avec les surfaces des intersections entre triangles et polygones obtenus après plusieurs manipulations (cf pièce jointe), les mesures de la formule apparaissent fausses....


Pourquoi tu intersectes? Selon moi, il ne veut pas l'intersection (comme le laisse d'ailleurs penser ton polygone de mesure d'aire, ou les polygones bleus) mais le triangle lui-même.
Me serais-je trompé?

Hors ligne

 

#11 Fri 20 May 2016 18:05

Romary
Participant assidu
Lieu: Epinal
Date d'inscription: 17 Jun 2011
Messages: 210

Re: QGIS: calcul surface ?

Autant pour moi. Ce post m'a interpellé parce que justement j'avais une intersection de surface dont je voulais mesurer la surface.
La formule est donc tout à fait juste dans ce cas.
Ry

Hors ligne

 

#12 Sat 21 May 2016 16:52

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

effectivement je ne cherchais que la surface de ce triangle et non l’intersection
LJ

Hors ligne

 

#13 Sun 29 May 2016 16:36

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

bonjour
dans le même esprit je cherche à calculer la surface du triangle fait par une polyligne à 2 segments
voici la formule que j'ai construite sur le même modèle que ci-dessus avec 4 points

Code:

area(   -- calcule la surface d'un polygone
    make_polygon( -- on construit le polygone à partir d'une ligne fermée
        make_line(   
              make_point(xat(0),yat(0)),  
        make_point($x2, $y2),  
        make_point(xat(-1),yat(-1)),  
        make_point(xat(0),yat(0))
         )
    )
)

mais comment se nomment les coordonnées du point 2 ?
merci LJ

Dernière modification par laurent00 (Sun 29 May 2016 18:40)

Hors ligne

 

#14 Mon 30 May 2016 10:35

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: calcul surface ?

Bonjour,

Syntaxe
xat(i)
Arguments
i - est l'index entier du point d'une ligne (les index débutent à 0 ; les valeurs négatives s'appliquent au dernier index).


xat(1) est donc pour votre deuxième point

Hors ligne

 

#15 Mon 30 May 2016 12:59

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

TOUT SIMPLEMENT !
PAR CONTRE QUEL EST L4UNIT2 DE SORTIE
lj

Hors ligne

 

#16 Wed 01 June 2016 11:21

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

bonjour
cette formule me pose quelques soucis sur le résultat
qui ramène un 0.000000040 lorsque j'attends un résultat en m²

Code:

area(   -- calcule la surface d'un polygone
    make_polygon( -- on construit le polygone à partir d'une ligne fermée
        make_line(   
            make_point(xat(0),yat(0)),  
            make_point(xat(1), yat(1)),  
            make_point(xat(-1),yat(-1)),  
            make_point(xat(0),yat(0))
         )
    )
)

merci si quelqu'un peut la tester


LJ

Dernière modification par laurent00 (Wed 01 June 2016 11:21)

Hors ligne

 

#17 Wed 01 June 2016 13:26

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: calcul surface ?

Salut,
Ta ligne a bien trois noeuds (pas trop alignés)?

Hors ligne

 

#18 Wed 01 June 2016 13:49

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

il sont très proches distance entre 10 et 50 mètres !

Dernière modification par laurent00 (Wed 01 June 2016 13:50)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#19 Wed 01 June 2016 14:05

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: calcul surface ?

Ta couche et ton projet sont bien dans un système projeté en mètres?

Hors ligne

 

#20 Wed 01 June 2016 14:08

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

Wgs 84 Epsg 4326

Hors ligne

 

#21 Wed 01 June 2016 22:31

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

au final j'ai utilisé l'outil de ligne à polygone et $area

Hors ligne

 

#22 Tue 27 December 2016 20:25

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

bonsoir je remonte ce fil car la première formule de Santanna ne semble plus marcher
je suis preneur s'il y a qlq'un pour la tester aussi
merci LJ

Code:

area(   -- calcule la surface d'un polygone
    make_polygon( -- on construit le polygone à partir d'une ligne fermée
        make_line(    -- on crée la ligne à partir de points (le centroïde, le premier point de la ligne, le dernier et on ferme avec le centroïde)
            make_point(x($geometry), y($geometry)),   -- x et y renvoient les coordonnées du centroïde du polygone et on construit le premier nœud de la ligne avec 

            make_point( -- 2ème noeud : premier sommet de la ligne
                x(   -- récupération du x
                    start_point(  -- du 1er sommet
                        geometry( -- de la géométrie
                            get_feature('lignes', 'id', attribute ($currentfeature, 'id' )) -- de l'entité de même id dans la couche de lignes
                        )
                    )
                ), 
                y(   -- récupération du y
                    start_point(
                        geometry(
                            get_feature('lignes', 'id', attribute ($currentfeature, 'id' ))
                        )
                    )
                )
            ),
            
            make_point( -- 3ème point: construction à partir du dernier sommet de la ligne
                x(   -- récupération du x
                    end_point(  -- du dernier sommet
                        geometry( -- sur la géométrie
                            get_feature('lignes', 'id', attribute ($currentfeature, 'id' )) -- de l'entité de même id dans la couche de lignes
                        )
                    )
                ), 
                y(   -- récupération du y
                    end_point(
                        geometry(
                            get_feature('lignes', 'id', attribute ($currentfeature, 'id' ))
                        )
                    )
                )
            ),

            make_point(x($geometry), y($geometry)) -- et on boucle la liste avec le centroïde
        )
    )
)

Hors ligne

 

#23 Wed 28 December 2016 15:28

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: calcul surface ?

Salut,
Je ne peux pas tester mais que signifie "ne marche plus"?:
- la fenêtre signale une erreur dans la formule
- le résultat est vide ou incohérent: t'es dans une projection métrique?

Hors ligne

 

#24 Wed 28 December 2016 16:56

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

le résultat ramène NULL à toutes les lignes
je suis bien dans une projection métrique

Dernière modification par laurent00 (Wed 28 December 2016 16:56)

Hors ligne

 

#25 Thu 29 December 2016 19:42

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

bon j'ai pas tout compris
j'ai recréé ma couche de ligne et cela fonctionne ...!!
LJ

Hors ligne

 

#26 Fri 30 December 2016 12:01

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

les calculs de surface résultants se trouvent 7 à 8 chiffres derrière la virgule
ils doivent être multipliés par 10 000 000 000
aussi je me rend compte que les résultats sont néanmoins 0.77 fois plus petit que celui que je mesure avec la règle !!??
j'ai testé sur 50 objets différents ...
LJ

Hors ligne

 

#27 Fri 30 December 2016 12:30

Yves Egels
Participant assidu
Lieu: Paris
Date d'inscription: 29 Sep 2011
Messages: 252
Site web

Re: QGIS: calcul surface ?

Bonjour,
je ne connais pas grand chose aux sig, mais, si je ne me trompe, epsg 4326 est une projection plate carrée. donc non métrique. Comme les X sont grosso modo à multiplier par le sinus de la latitude pour obtenir des mètres, et que le sinus de la latitude pour 50° est de 0.77, n'y aurait-il pas là la cause de l'anomalie constatée?


Ingénieur géographe honoraire
École nationale des sciences géographiques
Société française de photogrammétrie et télédétection

Hors ligne

 

#28 Fri 30 December 2016 15:51

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 362

Re: QGIS: calcul surface ?

effectivement je suis sur une projection degré et non métrique ...
une formule du calcul d'une distance est donnée ici http://dotclear.placeoweb.com/post/Form … eux-points

Code:

d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))

mon unité de carte étant en mètre, le $perimeter ou $area sont bien calculé en mètre
n'yatil donc pas un moyen de faire mon calcul directement ?

LJ

Dernière modification par laurent00 (Fri 30 December 2016 15:51)

Hors ligne

 

Pied de page des forums

Powered by FluxBB