对目标Geometry对象执行三维仿射变换,可同时完成平移、旋转、缩放等操作。

语法

geometry  ST_Affine(geometry  geomA , float  a , float  b , float  c , float  d , float  e , float  f , float  g , float  h , float  i , float  xoff , float  yoff , float  zoff);
geometry  ST_Affine(geometry  geomA , float  a , float  b , float  d , float  e , float  xoff , float  yoff);

参数

参数名称 描述
geomA 目标Geometry对象。
a 仿射变换参数。
b 仿射变换参数。
c 仿射变换参数。
d 仿射变换参数。
e 仿射变换参数。
f 仿射变换参数。
g 仿射变换参数。
h 仿射变换参数。
i 仿射变换参数。
xoff 仿射变换参数。
yoff 仿射变换参数。
zoff 仿射变换参数。

描述

  • 对于ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff)形式,代表如下变换矩阵:
    / a  b  c  xoff \
    | d  e  f  yoff |
    | g  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
  • 对于ST_Affine(geom, a, b, d, e, xoff, yoff)形式,代表如下变换矩阵:
    /  a  b  0  xoff  \       /  a  b  xoff  \
    |  d  e  0  yoff  | rsp.  |  d  e  yoff  |
    |  0  0  1     0  |       \  0  0     1  /
    \  0  0  0     1  /
  • 顶点坐标的变换如下:
    x' = a*x + b*y + xoff
    y' = d*x + e*y + yoff
    z' = z

    本形式是3D模式的子模式。

  • 该函数支持Circular Strings、Curves、Polyhedral surfaces、Triangles、Triangulated Irregular Network Surfaces(TIN)和3D对象。

示例

在X轴,Y轴,Z轴同时180度翻转一个点:
SELECT ST_AsEWKT(ST_Affine(ST_GeomFromEWKT('POINT(1 2 3)'),
                           cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0));
    st_asewkt
-----------------
 POINT(-1 -2 -3)
(1 row)