Namn

ST_Affine — Tillämpa en 3D-affin transformation på en geometri.

Synopsis

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

Beskrivning

Tillämpar en 3D-affin transformation på geometrin för att göra saker som att translatera, rotera och skala i ett steg.

Version 1: Anropet

Kod
ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff)

representerar transformationsmatrisen

Kod
/ a  b  c  xoff \
| d  e  f  yoff |
| g  h  i  zoff |
\ 0  0  0     1 /

och hörnen transformeras enligt följande:

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

Alla översättnings-/skalningsfunktioner nedan uttrycks via en sådan affin transformation.

Version 2: Tillämpar en 2D-affin transformation på geometrin. Anropet

Kod
ST_Affine(geom, a, b, d, e, xoff, yoff)

representerar transformationsmatrisen

Kod
/ a b 0 xoff \ / a b xoff \
| d e 0 yoff | rsp.  | d e yoff | | d e yoff
| 0 0 1 0 | \ 0 0 1 /
\ 0 0 0 1 /

och topparna transformeras på följande sätt:

Kod
x' = a*x + b*y + xoff
y' = d*x + e*y + yoff
z' = z 

Denna metod är ett delfall av 3D-metoden ovan.

Förbättrad: 2.0.0 stöd för polyhedrala ytor, trianglar och TIN infördes.

Tillgänglighet: 1.1.2. Namn ändrat från Affine till ST_Affine i 1.2.2

[Notera]

Före 1.3.4 kraschade den här funktionen om den användes med geometrier som innehåller CURVES. Detta är åtgärdat i 1.3.4+

Denna funktion stöder polyedriska ytor.

Denna funktion stöder trianglar och triangulerade oregelbundna nätverksytor (TIN).

Denna funktion stöder 3d och kommer inte att tappa z-index.

Denna metod stöder cirkulära strängar och kurvor.

Exempel

Rotera en 3D-linje 180 grader runt z-axeln. Observera att detta är ett utförligt sätt att göra ST_Rotate();

Kod
SELECT ST_Affine(geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0, 1, 0, 0, 0) As using_affine,
    ST_Rotate(geom, pi()) As using_rotate
   FROM (SELECT 'LINESTRING(1 2 3,1 4 3)'::geometry As geom) As foo;
Utdata
using_affine         |        using_rotate
-----------------------------+-----------------------------
 LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3)
(1 row)
Figur
Geometry figure for visual-st-affine-01

Rotera en 3D-linje 180 grader kring både x- och z-axeln.

Kod
SELECT ST_Affine(geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0)
    FROM (SELECT 'LINESTRING(1 2 3,1 4 3)'::geometry As geom) As foo;
Utdata
LINESTRING(-1 -2 -3,-1 -4 -3)
Figur
Geometry figure for visual-st-affine-02