Message posté par : Nicolas Ribot
----------------------------------------
Oui la dernière étape dans mon exemple n'était qu'un select, mais dans votre cas,
vous voulez surement stocker cela dans une table.
La fin de la procédure complète pourrait etre un truc comme ceci (je laisse les timings
des requêtes qui ont tourné chez moi pour vous donner une idée des temps sur une couche
1.3M de polygones):
-----------------
Code :
-- association des nouveaux polygones avec les originaux mis dans la table layer_union
-- On peut faire left join pour garder tout les polygones créés par st_polygonyze,
-- ou un JOIN simple pour filtrer les polygones créés sans lien avec les polygones input
(par ex des trous dans l'input)
drop table if exists res_assoc;
create table res_assoc as
select res.res_id, array_agg(l.data_id) as data_id_ori, count(distinct l.data_id) as
num_sources
from res join layer_union l on st_contains(l.geom, st_pointonsurface(res.geom))
group by res.res_id;
-- [2025-07-08 10:44:04] 1,380,393 rows affected in 10 s 771 ms
create index on res_assoc(res_id);
analyse res_assoc;
-- ménage: on vire de res les polygones qui n'ont pas matché dans res_assoc:
-- ce sont des polygones représentant des trous dans les couches d'input
delete from res
where not exists (
select null
from res_assoc ra
where ra.res_id = res.res_id
);
-- [2025-07-08 11:06:57] 11,187 rows affected in 566 ms
-- table finale avec les nouveaux polygones et les infos des polygones source, sous forme
de jointure:
-- bien plus rapide de créer une table que de faire un update dans la table res (apres y
avoir ajouté les colonnes voulues).
drop table if exists res_final;
create table res_final as
select ra.res_id, data_id_ori, num_sources, geom::geometry(polygon, 2154) as geom
from res_assoc ra join res r on ra.res_id = r.res_id;
-----------------
Dans QGIS, j'ai juste lancé l'outil Union Multiple que vous mentionniez dans votre
message sur les 3 couches.
Nicolas
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=373675#p373675
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