ST_POINTONSURFACE
📄字数 748
👁️阅读量 加载中...
功能描述
返回保证位于曲面内部的POINT(POLYGON、MULTIPOLYGON 和 CURVEPOLYGON)。
语法格式
sql
GEOMETRY ST_POINTONSURFACE(GEOMETRY g1);参数说明
- g1:目标 GEOMETRY 对象。
函数返回类型
GEOMETRY 类型
使用说明
- 该函数支持 3d 并且不会丢失 z-index。
示例
sql
SQL> SELECT ST_AsText(ST_PointOnSurface('POINT(0 5)'::geometry));
+------------+
| EXPR1 |
+------------+
| POINT(0 5) |
+------------+
(1 row)
SQL> SELECT ST_AsText(ST_PointOnSurface('LINESTRING(0 5, 0 10)'::geometry));
+------------+
| EXPR1 |
+------------+
| POINT(0 5) |
+------------+
(1 row)
SQL> SELECT ST_AsText(ST_PointOnSurface('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'::geometry));
+----------------+
| EXPR1 |
+----------------+
| POINT(2.5 2.5) |
+----------------+
(1 row)
SQL> SELECT ST_AsEWKT(ST_PointOnSurface(ST_GeomFromEWKT('LINESTRING(0 5 1, 0 0 1, 0 10 2)')));
+--------------+
| EXPR1 |
+--------------+
| POINT(0 0 1) |
+--------------+
(1 row)ST_PointOnSurface 的结果保证位于多边形内,而 ST_Centroid 计算的点可能位于多边形外:
sql
SQL> 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) |
+-----------------+---------------------------------------------+
(1 row)