<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Hi Paolo,<br>
<br>
here an example how it could work (mind that you have to replace the
??). You could also recode the DO block into a function if you would
like that better.<br>
<br>
DO $$<br>
DECLARE distance numeric; t_schema varchar; input_table varchar;
output_table varchar; r record; gid integer; geom geometry; c
record; c_gid integer[]; c_geom geometry;<br>
BEGIN<br>
<br>
distance := ??;<br>
t_schema := '??';<br>
input_table := '??';<br>
output_table := '??';<br>
<br>
<br>
CREATE TEMP TABLE clustered (gid integer) ON COMMIT DROP;<br>
<br>
EXECUTE 'SELECT gid, geom FROM
'||quote_ident(t_schema)||'.'||quote_ident(input_table) INTO r;<br>
<br>
gid := r.gid;<br>
geom := r.geom;<br>
<br>
EXECUTE 'INSERT INTO clustered SELECT '||gid;<br>
<br>
EXECUTE 'SELECT array_agg(gid) as gid,
ST_ForceCollection(ST_Collect(ST_Collect(geom),$2)) as geom FROM
'||quote_ident(t_schema)||'.'||quote_ident(input_table)||' WHERE gid
!= $1 AND ST_DWithin($2, geom, $3)' INTO c USING gid, geom,
distance;<br>
<br>
c_gid := c.gid;<br>
c_geom := c.geom;<br>
<br>
EXECUTE 'INSERT INTO
'||quote_ident(t_schema)||'.'||quote_ident(output_table)||'
VALUES($1)' USING c_geom;<br>
<br>
EXECUTE 'INSERT INTO clustered SELECT unnest($1)' USING c_gid;<br>
<br>
LOOP<br>
BEGIN<br>
EXECUTE 'SELECT gid, geom FROM
'||quote_ident(t_schema)||'.'||quote_ident(input_table)||'<br>
WHERE gid NOT IN (SELECT gid FROM clustered)' INTO r;<br>
<br>
gid := r.gid;<br>
geom := r.geom;<br>
<br>
EXECUTE 'INSERT INTO clustered SELECT '||gid;<br>
<br>
EXECUTE 'SELECT array_agg(gid) as gid,
ST_ForceCollection(ST_Collect(ST_Collect(geom),$1)) as geom<br>
FROM
'||quote_ident(t_schema)||'.'||quote_ident(input_table)||'<br>
WHERE gid NOT IN (SELECT gid FROM clustered) AND
ST_DWithin($1, geom, $2)'<br>
INTO c USING geom, distance;<br>
<br>
c_gid := c.gid;<br>
c_geom := c.geom;<br>
<br>
EXECUTE 'INSERT INTO
'||quote_ident(t_schema)||'.'||quote_ident(output_table)||'<br>
VALUES ($1)' USING c_geom;<br>
<br>
EXECUTE 'INSERT INTO clustered SELECT unnest($1)' USING c_gid;<br>
<br>
EXCEPTION WHEN SQLSTATE '22004' THEN EXIT;<br>
END;<br>
END LOOP;<br>
<br>
END $$<br>
<br>
Regards,<br>
<br>
Birgit<br>
<pre class="moz-signature" cols="72">
</pre>
<div class="moz-cite-prefix">Am 21.09.2016 um 07:47 schrieb Paolo
Importuni:<br>
</div>
<blockquote
cite="mid:CAGoRbyess2iC8m1K=65vAeTbJ4utyfOdx2vFOK4=wfP0Q0Wv4g@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>
<div>
<div>
<div>Hi all,<br>
</div>
I need to run a query on my postgres/postgis (9.3/2.0)
that uses ST_CLUSTERWITHIN function. This function is
available since postgis 2.2.0 so I should do a soft
upgrade on my ubuntu server. Since we have a kind of
customer demo in a few days and have no much time left, I
am not willing to change our setup right now, and I'd
rather do it after that meeting.<br>
</div>
The question is: is there a way to aggregate geometries like
ST_ClusterWIthin does? Anybody can provide any working
examples?<br>
<br>
</div>
Thanks and regards<br>
<br>
</div>
Paolo I.<br>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
postgis-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a>
<a class="moz-txt-link-freetext" href="http://lists.osgeo.org/mailman/listinfo/postgis-users">http://lists.osgeo.org/mailman/listinfo/postgis-users</a></pre>
</blockquote>
<br>
</body>
</html>