名稱

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)