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 Mon 19 February 2018 14:20

Elys
Participant actif
Date d'inscription: 1 Mar 2016
Messages: 54

[POSTGIS] SQL : fonction st_area sur une intersection

bonjour à tous,

je travaille actuellement sur une requête où je cherche à calculer la somme des surfaces dévellopées de mes batiments par carreaux.

J'arrive a un résultat satisfaisant en utilisant cette requete :

Code:

select idinspire, sum(d.sdev) as sdev_tot 
from 
    (select a.id, idinspire, hauteur, ("hauteur" * st_area( a.geom) / 4 ) as sdev
    from 
    poleau.bati_q1000 as a, 
    poleau.inseecar200_bv as b
    where
    ST_intersects (a.geom, b.geom)) as d
GROUP BY idinspire order by sdev_tot

la requête fonctionne et me donne bien une somme des surfaces  regroupée par carreaux. Le probleme, c'est que la fonction st_area s'applique uniquement sur la table batiments. j'aimerai appliquer la fonction st_area pour qu'elle me ressorte la superficie des batiments intersectés avec mes carreaux, et non pas celle de mes batiments entiers.

J'ai essayé plusieurs syntaxes mais je ne trouve pas celle qui convient :

Code:

select idinspire, sum(d.sdev) as sdev_tot 
from 
    (select a.id, idinspire, hauteur, ("hauteur" * st_area(ST_intersects (a.geom, b.geom)) / 3 ) as sdev
    from 
    poleau.bati_q1000 as a, 
    poleau.inseecar200_bv as b
    where
    ST_intersects (a.geom, b.geom)) as d
GROUP BY idinspire order by sdev_tot

qui me renvoie cette erreur :

Code:

function st_area(boolean) does not exist
LINE 3:  (select a.id, idinspire, hauteur, ("hauteur" * st_area( ST_...
                                                        ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.


J'ai essayer pas mal d'autres syntaxes mais pour le moment je bloque

Merci par avance pour vos coups de main smile

Dernière modification par Elys (Mon 19 February 2018 14:21)

Hors ligne

 

#2 Mon 19 February 2018 16:02

Elys
Participant actif
Date d'inscription: 1 Mar 2016
Messages: 54

Re: [POSTGIS] SQL : fonction st_area sur une intersection

j'ai trouvé ma réponse. Il fallait utiliser une fonction st_intersection au lieu de st_intersects dans le st_area ().


Code:

select idinspire, sum(d.sdev) as sdev_tot 
from 
    (select a.id, idinspire, hauteur, ("hauteur" * st_area( st_intersection (a.geom, b.geom) ) / 3 ) as sdev
    from 
    poleau.bati_q1000 as a, 
    poleau.inseecar200_bv as b
    where
    ST_intersects (a.geom, b.geom)) as d
GROUP BY idinspire order by sdev_tot

Hors ligne

 

Pied de page des forums

Powered by FluxBB