ST_PointOnSurface — 计算一个保证位于多边形或几何中的点。
geometry ST_PointOnSurface(
geometry g1)
;
返回一个保证位于表面内部(多边形、多边形和曲线多边形)的 POINT
。在 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 索引。
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)