名称

ST_Affine — 将 3D 仿射变换应用于几何。

语法

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);

说明

将 3D 仿射变换应用于几何,以便一次性执行平移、旋转和缩放等操作。

版本 1:调用

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

下面所有平移/缩放函数都通过此类仿射变换表示。

版本 2:将 2D 仿射变换应用于几何。调用

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 方法的一个子案例。

增强:2.0.0 引入了对多面体曲面、三角形和 TIN 的支持。

可用性:1.1.2。在 1.2.2 中,名称从 Affine 更改为 ST_Affine

[Note]

在 1.3.4 之前,如果此函数用于包含曲线 (CURVES) 的几何,则会崩溃。此问题在 1.3.4+ 中已修复

此函数支持多面体曲面。

此函数支持三角形和三角不规则网络曲面 (TIN)。

此函数支持 3D,并且不会删除 z 索引。

此方法支持圆形字符串和曲线。

示例

--Rotate a 3d line 180 degrees about the z axis.  Note this is long-hand for doing ST_Rotate();
 SELECT ST_AsEWKT(ST_Affine(geom,  cos(pi()), -sin(pi()), 0,  sin(pi()), cos(pi()), 0,  0, 0, 1,  0, 0, 0)) As using_affine,
	 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)
(1 row)

--Rotate a 3d line 180 degrees in both the x and z axis
SELECT 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;
           st_asewkt
-------------------------------
 LINESTRING(-1 -2 -3,-1 -4 -3)
(1 row)
		

另请参阅

ST_RotateST_ScaleST_TranslateST_TransScale