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é ?

#1 Tue 04 June 2019 15:41

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3195
Site web

Tâche urbaine nouvelle approche avec postgis 2.5

Bonjour,

Je vais détailler sur ce fil, comment à partir du couple PG10 et Postgis 2.5 et de la couche bâtiment du cadastre disponible sur data.gouv.fr et intégrée avec notre outil (cf. forum données), créer une tâche urbaine un peu plus jolie et paramétrable que la méthode dite des tampons. Ça doit marcher aussi avec la couche bâtiment fournie par data.gouv.fr (non testé je vous laisse adapter).

Première requête :

Code:

WITH p as (SELECT batiment.*,ST_OrientedEnvelope(st_buffer(the_geom,10)) as obox_geom FROM cadastre.batiment), 
p1 as (SELECT st_buffer((st_dump(st_union(st_clusterintersecting(st_accum(obox_geom))))).geom,10) as geom FROM p ),
p2 as (SELECT (st_dump(st_union(st_clusterintersecting(st_accum(geom))))).geom as resgeom FROM p1 ) 
SELECT row_number() over() , resgeom 
INTO testgeom3
FROM p2

Détails :

Code:

st_buffer(the_geom,10)

Classique un buffer de 10 mètres autour de la géométrie du bâtiment.

Code:

ST_OrientedEnvelope()

Nouvelle fonction postgis 2.5 qui fournit la BBox orientée de la géométrie

Code:

(st_dump(st_union(st_clusterintersecting(st_accum(obox_geom))))).geom

Création de multipolygons constitués des BBox orientées des bâtiments qui se touchent (st_clusterintersecting()) puis fragmentation en polygons élémentaires (st_dump()).geom

Application d'un buffer de 10 mètres sur les polygones résultants

Répétition du process sur les géométries résultantes.

Exercice : Utilises la fonction recherche du forum et trouve comment compter le nombre de bâtiments originaux qui sont compris dans un polygones final, but du jeu éliminer les bâtis isolés.

Requête numéro 2 qui permet d'éliminer les trous d'une certaine surface.

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à
A+


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#2 Thu 06 June 2019 16:51

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3195
Site web

Re: Tâche urbaine nouvelle approche avec postgis 2.5

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

Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#3 Fri 07 June 2019 09:22

Renaud
Membre
Lieu: Ploemeur (56)
Date d'inscription: 9 Mar 2006
Messages: 2315

Re: Tâche urbaine nouvelle approche avec postgis 2.5

Merci Christophe


Renaud Mouche

Hors ligne

 

#4 Fri 07 June 2019 10:43

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3195
Site web

Re: Tâche urbaine nouvelle approche avec postgis 2.5

De rien Renaud wink

J'ai constaté que l'on peut faire varier la géométrie de l'enveloppe en fonction de l'ordre dans lequel on exécute les dilatation.

Version 1 : buffer sur bâti 10 m puis enveloppe orientée puis jonction puis buffer
Version 2 : jonction bâti puis buffer 10 m puis enveloppe puis buffer
...

A adapter selon les besoins.

Pour répondre à Marc Leobet : La tâche urbaine ci-définie à pour but l'estimation des changements cadastraux depuis la rénovation d'une commune sur les section rénovées par voie de mise à jour. Et ce pour une volumétrie de futur CCTP. Comme quoi une méthode peut s'appliquer à plusieurs définitions.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#5 Tue 11 June 2019 11:08

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: Tâche urbaine nouvelle approche avec postgis 2.5

Merci Christophe pour ce partage !

J'ai hâte de tester cette méthode sur mon territoire, mais ce ne sera pas dans les semaines à venir étant occupé par d'autres tâches (pas la tache urbaine ;-) ).

D'ici là, si jamais tu as quelques captures d'écran des résultats pour illustrer tes requêtes, ce serait très intéressant.

A+


Sylvain M.

Hors ligne

 

#6 Tue 11 June 2019 11:29

yartostout
Participant assidu
Lieu: Bretagne
Date d'inscription: 24 Jun 2015
Messages: 173

Re: Tâche urbaine nouvelle approche avec postgis 2.5

Merci pour le partage !

J'ai privilégié la méthode classique par tampons pour notre suivi du SCoT sur notre territoire mais il faudrait que je teste ta méthode qui semble être plus efficace d'après tes dirs !

Hors ligne

 

#7 Tue 11 June 2019 12:04

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3195
Site web

Re: Tâche urbaine nouvelle approche avec postgis 2.5

Bonjour,

@yartostout : c'est pas plus efficace, mais plus proche de la réalité à mon sens. En comparant le résultat à une ortho HR on constate cela.

@Sylvain : capture16 : méthode 1 (tampon sur bâti puis enveloppe puis tampon)
capture 17 : joindre bâti adjacent + buffer + enveloppe
capture 18 (message suivant) la méthode 1 avec bâti original.


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

Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#8 Tue 11 June 2019 12:04

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3195
Site web

Re: Tâche urbaine nouvelle approche avec postgis 2.5

suite


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

Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#9 Tue 11 June 2019 12:04

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3195
Site web

Re: Tâche urbaine nouvelle approche avec postgis 2.5

et fin


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

Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#10 Tue 11 June 2019 12:11

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: Tâche urbaine nouvelle approche avec postgis 2.5

Merci ChristopheV pour les captures ! big_smile


Sylvain M.

Hors ligne

 

#11 Fri 19 March 2021 12:53

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3195
Site web

Re: Tâche urbaine nouvelle approche avec postgis 2.5

Bonjour,

Suite à un changement avec Postgis 3.0
https://www.postgis.us/presentations/Po … S.html#/14

Il faut remplacer la fonction st_accum() par array_agg()


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

Pied de page des forums

Powered by FluxBB