ST_Affine — 三次元アフィン変換をジオメトリに適用して移動,回転,拡大縮小を一度に行います.
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)
;
三次元アフィン変換をジオメトリに適用して移動,回転,拡大縮小を一度に行います.
一つ目の形式では次のように関数を呼んでいます.
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
このメソッドは上述の三次元メソッドの特異ケースです.
初出バージョン: 1.1.2 AffineからST_Affineに1.2.2で名称変更しました.
![]() | |
1.3.4より前は,曲線を含むジオメトリで使うとクラッシュしました.これは1.3.4以上では訂正されています. |
この関数は三次元をサポートします.Zインデクスを削除しません.
このメソッドは曲線ストリングと曲線をサポートします.
--三次元ラインストリングをZ軸で180度回転させます.ST_RotateZ()を冗長にしたものです. SELECT ST_AsEWKT(ST_Affine(the_geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0, 1, 0, 0, 0)) As using_affine, ST_AsEWKT(ST_RotateZ(the_geom, pi())) As using_rotatez FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As the_geom) As foo; using_affine | using_rotatez -----------------------------+----------------------------- LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3) (1 row) --三次元ラインストリングをX軸とZ軸で180度回転させます. SELECT ST_AsEWKT(ST_Affine(the_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 the_geom) As foo; st_asewkt ------------------------------- LINESTRING(-1 -2 -3,-1 -4 -3) (1 row)