ST_PointOnSurface
Prev | 8.14. Geometry Processing | Next

## Name

ST_PointOnSurface — Computes a point guaranteed to lie in a polygon, or on a geometry.

## Synopsis

`geometry ST_PointOnSurface(`geometry g1`)`;

## Description

Returns a `POINT` which is guaranteed to lie in the interior of a surface (POLYGON, MULTIPOLYGON, and CURVED POLYGON). In PostGIS this function also works on line and point geometries.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.14.2 // s3.2.18.2

This method implements the SQL/MM specification. SQL-MM 3: 8.1.5, 9.5.6. The specifications define ST_PointOnSurface for surface geometries only. PostGIS extends the function to support all common geometry types. Other databases (Oracle, DB2, ArcSDE) seem to support this function only for surfaces. SQL Server 2008 supports all common geometry types.

This function supports 3d and will not drop the z-index.

## Examples

PointOnSurface of a `MULTIPOINT` | PointOnSurface of a `LINESTRING`
PointOnSurface of a `POLYGON` | PointOnSurface of a `GEOMETRYCOLLECTION`

    SELECT ST_AsText(ST_PointOnSurface('POINT(0 5)'::geometry));
    ------------
     POINT(0 5)

    SELECT ST_AsText(ST_PointOnSurface('LINESTRING(0 5, 0 10)'::geometry));
    ------------
     POINT(0 5)

    SELECT ST_AsText(ST_PointOnSurface('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'::geometry));
    ----------------
     POINT(2.5 2.5)

    SELECT ST_AsEWKT(ST_PointOnSurface(ST_GeomFromEWKT('LINESTRING(0 5 1, 0 0 1, 0 10 2)')));
    ----------------
     POINT(0 0 1)

Example: The result of ST_PointOnSurface is guaranteed to lie within polygons, whereas the point computed by ST_Centroid may be outside.

Red: point on surface; Green: centroid

    SELECT ST_AsText(ST_PointOnSurface(geom)) AS pt_on_surf,
           ST_AsText(ST_Centroid(geom)) AS centroid
        FROM (SELECT 'POLYGON ((130 120, 120 190, 30 140, 50 20, 190 20,
                          170 100, 90 60, 90 130, 130 120))'::geometry AS geom) AS t;

       pt_on_surf    |                  centroid
    -----------------+---------------------------------------------
     POINT(62.5 110) | POINT(100.18264840182648 85.11415525114155)

## See Also

ST_Centroid, ST_MaximumInscribedCircle

Prev | Up | Next
ST_OffsetCurve | Home | ST_Polygonize