Compute Multi Centroid
-- Function: st_multicentroid(geometry)
-- Returns a MULTIPOINT obtained from collecting all
-- centroids in the supplied MULTI* geometry.
-- by: Mike Toews
--
-- Usage:
-- postgis=# select ST_AsText.html(ST_MultiCentroid(
-- postgis(# 'MULTIPOLYGON (
-- postgis'# (( 0 0, 0 1, 1 1, 1 0, 0 0 )),
-- postgis'# (( 2 2, 2 3, 3 3, 3 2, 2 2 ))
-- postgis'# )'::geometry));
-- st_astext
-- -----------------------------
-- MULTIPOINT(0.5 0.5,2.5 2.5)
--( 1 row)
--
-- DROP FUNCTION ST_MultiCentroid(geometry);
CREATE OR REPLACE FUNCTION ST_MultiCentroid(geometry)
RETURNS geometry AS
$BODY$SELECT ST_Collect(the_geom)
FROM (
SELECT ST_Centroid((ST_Dump(ST_Multi($1))).geom) AS the_geom
) AS foo;$BODY$
LANGUAGE 'sql' IMMUTABLE
COST 100;