Message posté par : Pascal PLUVINET
----------------------------------------
Le WITH RECURSIVE de tumasgiu fonctionne mais il est long et je n'ai pas manière de
savoir où j'en suis. De plus, il y a toujours quelques polygones qui ont des valeurs
nulles et il faudrait mettre une valeur bien plus importante au LIMIT.
J'ai donc tenté d'écrire une fonction qui semble fonctionner :
-----------------
Code :
CREATE OR REPLACE function diffusion() returns text
LANGUAGE plpgsql
AS $$
DECLARE
re text default '';
i INT := 1;
BeforeMaj INT := 1;
AfterMaj INT := 0;
NBPOLYUPDATED INT := 0;
BEGIN
WHILE AfterMaj < BeforeMaj LOOP
RAISE NOTICE 'i: %', i;
BeforeMaj := (select count(*) from poly where attr is null);
execute 'update poly a
set attr = b.attr
from poly b
where a.attr is null and b.attr is not null and st_intersects(a.geom,b.geom)'
;
AfterMaj := (select count(*) from poly where attr is null);
i := i+1;
NBPOLYUPDATED := NBPOLYUPDATED + BeforeMaj - AfterMaj;
RAISE NOTICE 'UPDATE: %', BeforeMaj - AfterMaj;
END LOOP;
re := 'NB TOTAL UPDATED: '|| NBPOLYUPDATED ;
return re;
END;
$$
;
select diffusion();
-----------------
Je vais pouvoir facilement complexifier le WHERE du UPDATE en contraignant d'avantage
le choix du voisin.
Merci encore,
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=370416#p370416
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