Message posté par : Christophe Vergon
----------------------------------------
Bonjour,
Une variante qui permet de compter le nombre de bâtiments (2 bâtiments adjacent comptés
comme 1) dans une grappe.
1) Fusion des bâtiments adjacents
2) Buffer 10 + BBox orientée
3) Fusion des éléments précédents adjacents
4) buffer 10
5) Fusion des éléments adjacent du 4
Résultat : nombre d'éléments du 4, nombre d'éléments du 2
-----------------
Code :
WITH
p as (SELECT st_collectionextract(unnest(st_clusterintersecting(st_accum(the_geom))),3) as
geom FROM cadastre.batiment ),
t as (SELECT row_number() OVER() as id, geom FROM p),
t1 as (SELECT id,((st_dump(geom)).geom) as geom FROM t),
t2 as (SELECT id,count(id),st_orientedenvelope(st_buffer(st_union(st_makevalid(geom)),10))
as geom FROM t1 GROUP BY id),
t3 as (SELECT st_collectionextract(unnest(st_clusterintersecting(st_accum(geom))),3) as
geom FROM t2),
t4 as (SELECT row_number() over() as id, geom FROM t3),
t5 as (SELECT id,((st_dump(geom)).geom) as geom FROM t4),
t6 as (SELECT id,count(id) as nbbat,st_union(geom) as geom FROM t5 GROUP BY id),
t7 as (SELECT
st_collectionextract(unnest(st_clusterintersecting(st_accum(st_buffer(geom,10)))),3) as
geom FROM t6),
t8 as (SELECT row_number() over() as id2,geom FROM t7),
t9 as (SELECT id2,(st_dump(geom)).geom as geom FROM t8),
tt as (SELECT id2,t9.geom,nbbat FROM t6,t9 WHERE st_within(t6.geom,t9.geom)),
t10 as (SELECT id2,count(id2) as nbgrappe,sum(nbbat) as nbbat, st_union(geom) as geom FROM
tt GROUP BY id2)
SELECT *
into buff_bati_10
FROM t10
-----------------
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=322050#p322050
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