Message posté par : Christophe Vergon
----------------------------------------
Bonjour,
Pas une question mais une solution. Voilà j'ai fabriqué des polygones (resgeom) qui
contiennent des trous, je veux reconstituer ces polygones en enlevant les trous qui font
moins de 1000 m² (par exemple):
-----------------
Code :
WITH p as (SELECT row_number as a,unnest((st_dumprings((st_dump (resgeom)).geom)).path) as
b,((st_dumprings((st_dump (resgeom)).geom)).geom) as c
FROM testgeom3 ), -- On transforme les multipolygones à trous en n polygones sans trous
si path = 0 exterior ring si >0 trous
p1 as (SELECT a,b,st_exteriorring(c) as e,st_area(c) as d FROM p order by a,b), -- on
transforme les polygones ext en polyline
p2 as (SELECT a, st_accum(e) as sg FROM p1 WHERE b<>0 AND d >=1000 GROUP BY a),
les trous de plus de 1000 m²
p3 as (SELECT a, e FROM p1 WHERE b=0) les enveloppes ext (shells)
SELECT p2.a,CASE WHEN not sg is null THEN st_makepolygon(e,sg) ELSE st_makepolygon(e) END
into testpoly1 FROM p3 LEFT JOIN p2 ON p2.a=p3.a ORDER BY a -- On reconstitue les
polygones soit avec les trous qui restent soit sans.
-----------------
Voilà si ça peut aider.
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=321732#p321732
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net