-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathST_CentroidOnSurface_v2
More file actions
18 lines (16 loc) · 764 Bytes
/
Copy pathST_CentroidOnSurface_v2
File metadata and controls
18 lines (16 loc) · 764 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DROP FUNCTION IF EXISTS ST_CentroidOnSurface_v2(
geom GEOMETRY)
CREATE OR REPLACE FUNCTION ST_CentroidOnSurface_v2(
geom GEOMETRY)
RETURNS TABLE (geom GEOMETRY) AS
$BODY$
WITH
tbla AS (SELECT (ST_Dump($1)).geom),
tblb AS (SELECT ST_Centroid(geom) geom FROM tbla),
tblc AS (SELECT (a.geom) geom FROM tblb a JOIN tbla b ON ST_Intersects(a.geom, b.geom)),
tbld AS (SELECT (a.geom) geom FROM tbla a WHERE NOT EXISTS (SELECT 1 FROM tblb b WHERE ST_Intersects(a.geom, b.geom))),
tble AS (SELECT ST_PointOnSurface(geom) geom FROM tbld)
SELECT (geom) geom FROM (SELECT * FROM tblc UNION SELECT * FROM tble) foo;
$BODY$
LANGUAGE SQL
SELECT ST_CentroidOnSurface_v2(geom) geom FROM <name_table>