#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
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