Name

ST_Affine — Wenden Sie eine affine 3D-Transformation auf eine Geometrie an.

Übersicht

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

Beschreibung

Wendet eine affine 3D-Transformation auf die Geometrie an, um Dinge wie Verschieben, Drehen und Skalieren in einem Schritt durchzuführen.

Version 1: Der Aufruf

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

stellt die Transformationsmatrix

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

und die Scheitelpunkte werden wie folgt transformiert:

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

Alle nachstehenden Translations-/Skalierungsfunktionen werden durch eine solche affine Transformation ausgedrückt.

Version 2: Wendet eine 2d affine Transformation auf die Geometrie an. Der Aufruf

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

stellt die Transformationsmatrix

Code
/ 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 /

und die Scheitelpunkte werden wie folgt transformiert:

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

Diese Methode ist ein Unterfall der obigen 3D-Methode.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen, Dreiecke und TIN eingeführt.

Verfügbarkeit: 1.1.2. Name geändert von Affine zu ST_Affine in 1.2.2

[Anmerkung]

Vor 1.3.4 ist diese Funktion abgestürzt, wenn die Geometrien CURVES enthalten. Dies wurde mit 1.3.4+ behoben

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

Rotate a 3D line 180 degrees about the z axis. Note this is long-hand for doing ST_Rotate();

Code
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;
Ausgabe von Rastern
using_affine         |        using_rotate
-----------------------------+-----------------------------
 LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3)
(1 row)
Figure
Geometry figure for visual-st-affine-01

Rotate a 3D line 180 degrees in both the x and z axis.

Code
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;
Ausgabe von Rastern
LINESTRING(-1 -2 -3,-1 -4 -3)
Figure
Geometry figure for visual-st-affine-02