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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Fri 29 December 2017 21:18

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

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


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

Hors ligne

 

#2 Sat 30 December 2017 00:14

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

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: 404

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: 404

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)


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

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: 404

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

 

Pied de page des forums

Powered by FluxBB