#1 Fri 29 December 2017 21:18
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 405
QGIS: calcul d'une surface
bonjour
sur l'image jointe je souhaite calculer l'envergure du monument qui est composé d'un polygone cercle et d'une polyligne, chacun dans sa table
l'une des solutions retenue est de calculer la surface du rectangle qui contient le monument
je pense qu'il faut utiliser make_polygone en définissant les 4 points + 1 pour fermer la boucle puis un $area
mais comment faire pour calculer les coordonnées des points de chaque sommets
merci LJ
Hors ligne
#2 Sat 30 December 2017 00:14
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 405
Re: QGIS: calcul d'une surface
cela devrait ressembler à
Code:
area(make_polygon (make_line( make_point( x( ), y( )), make_point( x( ), y( )), make_point( x( ), y( )), make_point( ) ) ) )
Hors ligne
#3 Sun 31 December 2017 09:18
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: QGIS: calcul d'une surface
Bonjour,
Votre rectangle c'est simplement l'union des deux BoudingBoxes, ou, rectangles conteneurs, des deux géométries.
Union au sens des rectangles ; Si o appelle U l'opérateur union alors ;
RectA U RectB = RectC
Avec
RectC( min(recta.x,rectb.x), min(recta.y,rectb.y) ; max(rectaA.x,rectb.x), max(rectA.y,rectB.y))
Voilà, les BBoxes ne sont pas là pour faire simple, c'est aussi un ensemble qui doté d'opérateurs comme l'union, l'intersection à l'air d'être un groupe au sens des mathématiques. Avec EMPTY GEOMETRY comme élément neutre.
http://stephane.gonnord.org/PCSI/Algebre/STRUCTURES.PDF
Dernière modification par ChristopheV (Sun 31 December 2017 09:33)
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#4 Sun 31 December 2017 12:53
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 405
Re: QGIS: calcul d'une surface
ok
le principe serais donc de créer 2 couches contenant des rectangles, ces couches étant liées par le id
mais comment faire ces couches et ensuite comment faire une Union sur le id ?
Merci LJ
Hors ligne
#5 Tue 02 January 2018 20:06
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 405
Re: QGIS: calcul d'une surface
pour l'envergure ou plutôt l'emprise voici une formule que je viens de tester
le principe est de construire un rectangle qui englobe les 2 entités, en déterminant les x_min, y_min, x_max, y_max des 2 entités et de construire le rectangle
dont les points sont x_min, y_min
x_min, y_max
x_max,y_max
x_max,y_min
Code:
area( make_polygon( make_line( make_point( if((x_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) ))< x_min( $geometry), (x_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) )), x_min( $geometry)), if((y_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) ))< y_min( $geometry), (y_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) )), y_min( $geometry)) ), make_point( if((x_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) ))< x_min( $geometry), (x_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) )), x_min( $geometry)), if((y_max( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) ))> y_max( $geometry), (y_max( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) )), y_max( $geometry)) ), make_point( if((x_max( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) ))> x_max( $geometry), (x_max( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) )), x_max( $geometry)), if((y_max( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) ))> y_max( $geometry), (y_max( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) )), y_max( $geometry)) ), make_point( if((x_max( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) ))> x_max( $geometry), (x_max( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) )), x_max( $geometry)), if((y_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) ))< y_min( $geometry), (y_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) )), y_min( $geometry)) ), make_point( if((x_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) ))< x_min( $geometry), (x_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) )), x_min( $geometry)), if((y_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) ))< y_min( $geometry), (y_min( geometry( get_feature('tourettes', 'trt_id', attribute ($currentfeature, 'maa_id' )) ) )), y_min( $geometry)) ) ) ) )
le résultat est exprimé en degré carré 10(-8) du fait de la projection WGS84
comme il y a des aller retour entre les 2 tables la formule met près de 5 minutes à tourner sur 3 000 lignes
LJ
Dernière modification par laurent00 (Tue 02 January 2018 20:17)
Hors ligne
#6 Wed 03 January 2018 10:01
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: QGIS: calcul d'une surface
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#7 Wed 03 January 2018 11:03
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 405
Re: QGIS: calcul d'une surface
j'obtiens bien les 2 couches d'emprise de mes deux entités
mais comment les unir sur le id car l'extend layer ne garde pas les id ni même les autres valeurs de mes polygones et polylignes ...
LJ
Hors ligne