Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_ROTATE

📄字数 1.0K
👁️阅读量 加载中...

功能描述

将几何体围绕原点逆时针旋转指定角度。

语法格式

sql
GEOMETRY ST_ROTATE(GEOMETRY geomA, DOUBLE rotRadians);
GEOMETRY ST_ROTATE(GEOMETRY geomA, DOUBLE rotRadians, DOUBLE x0, DOUBLE y0);
GEOMETRY ST_ROTATE(GEOMETRY geomA, DOUBLE rotRadians, GEOMETRY pointOrigin);

参数说明

  • geomA:目标GEOMETRY对象。
  • rotRadians:旋转角度。
  • pointOrigin:旋转原点POINT对象。
  • x0:旋转原点X坐标。
  • y0:旋转原点Y坐标。

函数返回类型

GEOMETRY类型

使用说明

  • 若不指定旋转原点,则以Point(0,0)作为旋转原点。
  • 该函数支持3D对象,并且不会删除Z坐标。
  • 该函数支持圆形字符串(CIRCULARSTRING)、曲线(CURVES)、多面体表面(POLYHEDRALSURFACE)、三角形(TRIANGLE)、不规则三角形格网(Triangulated Irregular Network,TIN)类型几何对象。

示例

旋转180°:

sql
SQL> SELECT TO_CHAR(ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi())));

+----------------------------------------------------------------------------------------------------+
|                                               EXPR1                                                |
+----------------------------------------------------------------------------------------------------+
| LINESTRING(-50.00000000000002 -160,-50.00000000000001 -49.99999999999999,-100 -49.999999999999986) |
+----------------------------------------------------------------------------------------------------+

围绕原点(50, 160),逆时针旋转30°:

sql
SQL> SELECT TO_CHAR(ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()/6, 50, 160)));

+-----------------------------------------------------------------------------------------------+
|                                             EXPR1                                             |
+-----------------------------------------------------------------------------------------------+
| LINESTRING(50.000000000000014 160,105 64.73720558371174,148.30127018922195 89.73720558371174) |
+-----------------------------------------------------------------------------------------------+

围绕质心顺时针旋转60°:

sql

SQL> SELECT TO_CHAR(ST_AsEWKT(ST_Rotate(geom, -pi()/3, ST_Centroid(geom))))
              FROM (SELECT 'LINESTRING (50 160, 50 50, 100 50)'::geometry AS geom) AS foo;

+---------------------------------------------------------------------------------------------------------------------------+
|                                                           EXPR1                                                           |
+---------------------------------------------------------------------------------------------------------------------------+
| LINESTRING(116.42245883568916 130.67207346706593,21.15966441940092 75.67207346706591,46.15966441940092 32.37080327784398) |
+---------------------------------------------------------------------------------------------------------------------------+