Name

ST_PointOnSurface — Berechnet einen Punkt, der garantiert in einem Polygon oder auf einer Geometrie liegt.

Synopsis

geometry ST_PointOnSurface(geometry g1);

Beschreibung

Gibt einen POINT zurück, der garantiert im Inneren einer Fläche liegt (POLYGON, MULTIPOLYGON und CURVEPOLYGON). In PostGIS funktioniert diese Funktion auch für Linien- und Punktgeometrien.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.14.2 // s3.2.18.2

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 8.1.5, 9.5.6. Die Spezifikationen definieren ST_PointOnSurface nur für Oberflächengeometrien. PostGIS erweitert die Funktion, um alle gängigen Geometrietypen zu unterstützen. Andere Datenbanken (Oracle, DB2, ArcSDE) scheinen diese Funktion nur für Flächen zu unterstützen. SQL Server 2008 unterstützt alle gängigen Geometrietypen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

Punkt auf der Oberfläche eines MULTIPOINT

Punkt auf der Oberfläche eines LINESTRING

Punkt auf der Oberfläche eines POLYGON

Punkt auf der Oberfläche eines 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)

Beispiel: Das Ergebnis von ST_PointOnSurface liegt garantiert innerhalb von Polygonen, während der von ST_Centroid berechnete Punkt außerhalb liegen kann.

Rot: Punkt auf der Oberfläche; Grün: Flächenschwerpunkt

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)