名称

ST_PointOnSurface — 计算保证位于多边形或几何图形上的点。

概要

geometry ST_PointOnSurface(geometry g1);

描述

返回一个 POINT,保证位于表面(POLYGONMULTIPOLYGONCURVEPOLYGON)的内部。在 PostGIS 中,此函数也适用于线和点几何图形。

此方法实现了 OGC SQL 简单要素实现规范 1.1。 s3.2.14.2 // s3.2.18.2

此方法实现了 SQL/MM 规范。SQL-MM 3:8.1.5,9.5.6。该规范仅为表面几何图形定义了 ST_PointOnSurface。PostGIS 扩展了该函数以支持所有常见的几何类型。其他数据库(Oracle,DB2,ArcSDE)似乎仅支持表面的此函数。SQL Server 2008 支持所有常见的几何类型。

此函数支持 3D,并且不会删除 z 索引。

示例

MULTIPOINT 表面上的点

LINESTRING 表面上的点

POLYGON 表面上的点

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)

示例: ST_PointOnSurface 的结果保证位于多边形内,而 ST_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)