Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_AFFINE

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

功能描述

对几何体应用3D仿射变换,一步完成平移、旋转、缩放等操作。

语法格式

sql
GEOMETRY ST_AFFINE(GEOMETRY geomA, DOUBLE a, DOUBLE b, DOUBLE c, DOUBLE d, DOUBLE e, DOUBLE f, DOUBLE g, DOUBLE h, DOUBLE i, DOUBLE xoff, DOUBLE yoff, DOUBLE zoff);
GEOMETRY ST_AFFINE(GEOMETRY geomA, DOUBLE a, DOUBLE b, DOUBLE d, DOUBLE e, DOUBLE xoff, DOUBLE yoff);

参数说明

  • geom:目标GEOMETRY对象。
  • a, b, c, d, e, f, g, h, i, xoff, yoff, zoff:仿射变换参数。

函数返回类型

GEOMETRY类型

使用说明

  • 函数1:ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff)表示变换矩阵。

    | a b c xoff |
    | d e f yoff |
    | d h i zoff |
    | 0 0 0    1 |

    顶点坐标变换如下:

    x' = a*x + b*y + c*z + xoff
    y' = d*x + e*y + f*z + yoff
    z' = g*x + h*y + i*z + zoff

    所有的平移/缩放函数都是通过这样的仿射变换来表达的。

  • 函数2:ST_Affine(geom, a, b, d, e, xoff, yoff)表示变换矩阵。

    | a b 0 xoff |
    | d e 0 yoff |
    | 0 0 1    0 |
    | 0 0 0    1 |

    顶点坐标变换如下:

    x' = a*x + b*y + c*z + xoff
    y' = d*x + e*y + f*z + yoff
    z' = z
  • 该函数需要SFCGAL库支持。

  • 该函数支持3D对象,并且不会删除Z坐标。

  • 该函数支持多面体表面(POLYHEDRALSURFACE)、三角形(TRIANGLE)、不规则三角形格网(Triangulated Irregular Network,TIN)类型几何对象。

示例

将3D线串沿Z轴旋转180°:

sql
SQL> SELECT TO_CHAR(ST_AsEWKT(ST_Affine(geom,  cos(pi()), -sin(pi()), 0,  sin(pi()), cos(pi()), 0,  0, 0, 1,  0, 0, 0))) As using_affine,
                   TO_CHAR(ST_AsEWKT(ST_Rotate(geom, pi()))) As using_rotate
                  FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As geom) As foo;

+-----------------------------+-----------------------------+
|        USING_AFFINE         |        USING_ROTATE         |
+-----------------------------+-----------------------------+
| LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3) |

将3D线串沿X和Z轴旋转180°:

sql
SQL> SELECT TO_CHAR(ST_AsEWKT(ST_Affine(geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0)))
                  FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As geom) As foo;

+-------------------------------+
|             EXPR1             |
+-------------------------------+
| LINESTRING(-1 -2 -3,-1 -4 -3) |
+-------------------------------+