#1 Fri 13 May 2016 14:57
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 399
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: 3927
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: 399
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: 3927
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: 399
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: 399
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: 3927
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: 399
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: 211
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)
Hors ligne
#10 Fri 20 May 2016 17:54
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3927
Re: QGIS: calcul surface ?
salut,
J'ai peut-être mal compris la demande de Laurent mais
je souhaite calculer la surface du triangle formé par le centre de ce cercle et ce segment
me semble bien différent de
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: 211
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: 399
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: 399
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: 3927
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: 399
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: 399
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: 3927
Re: QGIS: calcul surface ?
Salut,
Ta ligne a bien trois noeuds (pas trop alignés)?
Hors ligne
#19 Wed 01 June 2016 14:05
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3927
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: 399
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: 399
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: 399
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: 3927
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: 399
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: 399
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: 399
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: 268
- 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: 399
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