Name

ST_PointOnSurface — Calcule un point dont on garantit qu'il se trouve dans un polygone ou sur une géométrie.

Synopsis

geometry ST_PointOnSurface(geometry g1);

Description

Renvoie un POINT dont il est garanti qu'il se trouve à l'intérieur d'une surface (POLYGON, MULTIPOLYGON et CURVED POLYGON). Dans PostGIS, cette fonction fonctionne également pour les géométries de lignes et de points.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

s3.2.14.2 // s3.2.18.2

Cette méthode implémente la spécification SQL/MM.

SQL-MM 3: 8.1.5, 9.5.6. Les spécifications définissent ST_PointOnSurface pour les géométries de surface uniquement. PostGIS étend la fonction pour prendre en charge tous les types de géométrie courants. D'autres bases de données (Oracle, DB2, ArcSDE) semblent ne prendre en charge cette fonction que pour les surfaces. SQL Server 2008 prend en charge tous les types de géométrie courants.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

PointOnSurface d'un MULTIPOINT

PointOnSurface d'une LINESTRING

PointOnSurface d'un POLYGON

PointOnSurface d'une 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)

Exemple: Le résultat de ST_PointOnSurface est garanti à l'intérieur des polygones, alors que le point calculé par ST_Centroid peut se trouver à l'extérieur.

Rouge : point sur la surface ; Vert : centroïde

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)

Voir aussi

ST_Centroid, ST_MaximumInscribedCircle