Hi Kevin,

That was exactly what I was after, thanks! Here is my modified function which I've tested to some degree with MULTIPOLYGONs only:

CREATE OR REPLACE FUNCTION ST_MultiCentroid(geometry)
 RETURNS geometry AS
$BODY$SELECT ST_Collect(the_geom)
FROM (
 SELECT ST_Centroid((ST_Dump($1)).geom) AS the_geom
) AS foo;$BODY$
 LANGUAGE 'sql' IMMUTABLE
 COST 100;

-Mike

Kevin Neufeld wrote:
Yes. Use ST_Dump to explode your MULTI* object, take the ST_Centroid of each, and ST_Collect them together again.

SELECT ST_AsText(ST_Collect(the_geom))
FROM (
  SELECT ST_Centroid((ST_Dump(the_geom)).geom) AS the_geom
  FROM (
    SELECT
      'MULTIPOLYGON (
        (( 0 0, 0 1, 1 1, 1 0, 0 0 )),
        (( 2 2, 2 3, 3 3, 3 2, 2 2 ))
       )'::geometry AS the_geom
  ) AS foo
) AS foo2;

          st_astext
-----------------------------
 MULTIPOINT(0.5 0.5,2.5 2.5)
(1 row)


Cheers,
Kevin

_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to