This is an automated email from the ASF dual-hosted git repository.
jiayu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sedona.git
The following commit(s) were added to refs/heads/master by this push:
new 2bd6033614 [GH-2678] Add SVG visuals for affine transformation
functions (Phase 8) (#2690)
2bd6033614 is described below
commit 2bd60336148595bc57a499d74db21ca360b70b46
Author: Jia Yu <[email protected]>
AuthorDate: Wed Mar 4 23:03:15 2026 -0700
[GH-2678] Add SVG visuals for affine transformation functions (Phase 8)
(#2690)
---
docs/api/flink/Affine-Transformations/ST_Affine.md | 2 ++
docs/api/flink/Affine-Transformations/ST_Rotate.md | 4 +++-
.../api/flink/Affine-Transformations/ST_RotateX.md | 2 ++
.../api/flink/Affine-Transformations/ST_RotateY.md | 2 ++
docs/api/flink/Affine-Transformations/ST_Scale.md | 2 ++
.../flink/Affine-Transformations/ST_ScaleGeom.md | 2 ++
.../flink/Affine-Transformations/ST_Translate.md | 2 ++
.../Affine-Transformations/ST_Affine.md | 2 ++
.../Affine-Transformations/ST_Rotate.md | 4 +++-
.../Affine-Transformations/ST_RotateX.md | 2 ++
.../Affine-Transformations/ST_RotateY.md | 2 ++
.../vector-data/Affine-Transformations/ST_Scale.md | 2 ++
.../Affine-Transformations/ST_ScaleGeom.md | 2 ++
.../Affine-Transformations/ST_Translate.md | 4 +++-
docs/api/sql/Affine-Transformations/ST_Affine.md | 2 ++
docs/api/sql/Affine-Transformations/ST_Rotate.md | 4 +++-
docs/api/sql/Affine-Transformations/ST_RotateX.md | 2 ++
docs/api/sql/Affine-Transformations/ST_RotateY.md | 2 ++
docs/api/sql/Affine-Transformations/ST_Scale.md | 2 ++
.../api/sql/Affine-Transformations/ST_ScaleGeom.md | 2 ++
.../api/sql/Affine-Transformations/ST_Translate.md | 2 ++
docs/image/ST_Affine/ST_Affine.svg | 20 ++++++++++++++++++
docs/image/ST_Rotate/ST_Rotate.svg | 24 ++++++++++++++++++++++
docs/image/ST_RotateX/ST_RotateX.svg | 20 ++++++++++++++++++
docs/image/ST_RotateY/ST_RotateY.svg | 20 ++++++++++++++++++
docs/image/ST_Scale/ST_Scale.svg | 24 ++++++++++++++++++++++
docs/image/ST_ScaleGeom/ST_ScaleGeom.svg | 22 ++++++++++++++++++++
docs/image/ST_Translate/ST_Translate.svg | 24 ++++++++++++++++++++++
28 files changed, 200 insertions(+), 4 deletions(-)
diff --git a/docs/api/flink/Affine-Transformations/ST_Affine.md
b/docs/api/flink/Affine-Transformations/ST_Affine.md
index c8714c9f01..bea4229b04 100644
--- a/docs/api/flink/Affine-Transformations/ST_Affine.md
+++ b/docs/api/flink/Affine-Transformations/ST_Affine.md
@@ -37,6 +37,8 @@ Based on the invoked function, the following transformation
is applied:
If the given geometry is empty, the result is also empty.
+
+
Format:
`ST_Affine(geometry, a, b, c, d, e, f, g, h, i, xOff, yOff, zOff)`
diff --git a/docs/api/flink/Affine-Transformations/ST_Rotate.md
b/docs/api/flink/Affine-Transformations/ST_Rotate.md
index 41b489d948..12031d32a1 100644
--- a/docs/api/flink/Affine-Transformations/ST_Rotate.md
+++ b/docs/api/flink/Affine-Transformations/ST_Rotate.md
@@ -21,7 +21,9 @@
Introduction: Rotates a geometry by a specified angle in radians
counter-clockwise around a given origin point. The origin for rotation can be
specified as either a POINT geometry or x and y coordinates. If the origin is
not specified, the geometry is rotated around POINT(0 0).
-Formats;
+
+
+Formats:
`ST_Rotate (geometry: Geometry, angle: Double)`
diff --git a/docs/api/flink/Affine-Transformations/ST_RotateX.md
b/docs/api/flink/Affine-Transformations/ST_RotateX.md
index b239e29246..9d9e0c8f47 100644
--- a/docs/api/flink/Affine-Transformations/ST_RotateX.md
+++ b/docs/api/flink/Affine-Transformations/ST_RotateX.md
@@ -21,6 +21,8 @@
Introduction: Performs a counter-clockwise rotation of the specified geometry
around the X-axis by the given angle measured in radians.
+
+
Format: `ST_RotateX(geometry: Geometry, angle: Double)`
Return type: `Geometry`
diff --git a/docs/api/flink/Affine-Transformations/ST_RotateY.md
b/docs/api/flink/Affine-Transformations/ST_RotateY.md
index 24d6b6ba61..dc0f0f40ad 100644
--- a/docs/api/flink/Affine-Transformations/ST_RotateY.md
+++ b/docs/api/flink/Affine-Transformations/ST_RotateY.md
@@ -21,6 +21,8 @@
Introduction: Performs a counter-clockwise rotation of the specified geometry
around the Y-axis by the given angle measured in radians.
+
+
Format: `ST_RotateY(geometry: Geometry, angle: Double)`
Return type: `Geometry`
diff --git a/docs/api/flink/Affine-Transformations/ST_Scale.md
b/docs/api/flink/Affine-Transformations/ST_Scale.md
index 34940342a8..7b9be8a7aa 100644
--- a/docs/api/flink/Affine-Transformations/ST_Scale.md
+++ b/docs/api/flink/Affine-Transformations/ST_Scale.md
@@ -24,6 +24,8 @@ Introduction: This function scales the geometry to a new size
by multiplying the
!!!Note
This function is designed for scaling 2D geometries. While it currently
doesn't support scaling the Z and M coordinates, it preserves these values
during the scaling operation.
+
+
Format: `ST_Scale(geometry: Geometry, scaleX: Double, scaleY: Double)`
Return type: `Geometry`
diff --git a/docs/api/flink/Affine-Transformations/ST_ScaleGeom.md
b/docs/api/flink/Affine-Transformations/ST_ScaleGeom.md
index 7a2408bb3b..5a7db86270 100644
--- a/docs/api/flink/Affine-Transformations/ST_ScaleGeom.md
+++ b/docs/api/flink/Affine-Transformations/ST_ScaleGeom.md
@@ -26,6 +26,8 @@ To scale the geometry relative to a point other than the true
origin (e.g., scal
!!!Note
This function is designed for scaling 2D geometries. While it currently
doesn't support scaling the Z and M coordinates, it preserves these values
during the scaling operation.
+
+
Format:
`ST_ScaleGeom(geometry: Geometry, factor: Geometry, origin: Geometry)`
diff --git a/docs/api/flink/Affine-Transformations/ST_Translate.md
b/docs/api/flink/Affine-Transformations/ST_Translate.md
index 8ee50846c3..185cebe69d 100644
--- a/docs/api/flink/Affine-Transformations/ST_Translate.md
+++ b/docs/api/flink/Affine-Transformations/ST_Translate.md
@@ -27,6 +27,8 @@ If the geometry is empty, no change is done to it.
If the given geometry contains sub-geometries (GEOMETRY COLLECTION, MULTI
POLYGON/LINE/POINT), all underlying geometries are individually translated.
+
+
Format:
`ST_Translate(geometry: Geometry, deltaX: Double, deltaY: Double, deltaZ:
Double)`
diff --git a/docs/api/snowflake/vector-data/Affine-Transformations/ST_Affine.md
b/docs/api/snowflake/vector-data/Affine-Transformations/ST_Affine.md
index 6053df6778..f705c5650d 100644
--- a/docs/api/snowflake/vector-data/Affine-Transformations/ST_Affine.md
+++ b/docs/api/snowflake/vector-data/Affine-Transformations/ST_Affine.md
@@ -37,6 +37,8 @@ Based on the invoked function, the following transformation
is applied:
If the given geometry is empty, the result is also empty.
+
+
Format:
`ST_Affine(geometry, a, b, c, d, e, f, g, h, i, xOff, yOff, zOff)`
diff --git a/docs/api/snowflake/vector-data/Affine-Transformations/ST_Rotate.md
b/docs/api/snowflake/vector-data/Affine-Transformations/ST_Rotate.md
index 3aaa6ed918..dbe3a4b16f 100644
--- a/docs/api/snowflake/vector-data/Affine-Transformations/ST_Rotate.md
+++ b/docs/api/snowflake/vector-data/Affine-Transformations/ST_Rotate.md
@@ -21,7 +21,9 @@
Introduction: Rotates a geometry by a specified angle in radians
counter-clockwise around a given origin point. The origin for rotation can be
specified as either a POINT geometry or x and y coordinates. If the origin is
not specified, the geometry is rotated around POINT(0 0).
-Formats;
+
+
+Formats:
`ST_Rotate (geometry: Geometry, angle: Double)`
diff --git
a/docs/api/snowflake/vector-data/Affine-Transformations/ST_RotateX.md
b/docs/api/snowflake/vector-data/Affine-Transformations/ST_RotateX.md
index db2e52e30a..f9297fac85 100644
--- a/docs/api/snowflake/vector-data/Affine-Transformations/ST_RotateX.md
+++ b/docs/api/snowflake/vector-data/Affine-Transformations/ST_RotateX.md
@@ -21,6 +21,8 @@
Introduction: Performs a counter-clockwise rotation of the specified geometry
around the X-axis by the given angle measured in radians.
+
+
Format: `ST_RotateX(geometry: Geometry, angle: Double)`
Return type: `Geometry`
diff --git
a/docs/api/snowflake/vector-data/Affine-Transformations/ST_RotateY.md
b/docs/api/snowflake/vector-data/Affine-Transformations/ST_RotateY.md
index 311dc12b32..ca1f4d9b52 100644
--- a/docs/api/snowflake/vector-data/Affine-Transformations/ST_RotateY.md
+++ b/docs/api/snowflake/vector-data/Affine-Transformations/ST_RotateY.md
@@ -21,6 +21,8 @@
Introduction: Performs a counter-clockwise rotation of the specified geometry
around the Y-axis by the given angle measured in radians.
+
+
Format: `ST_RotateY(geometry: Geometry, angle: Double)`
Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Affine-Transformations/ST_Scale.md
b/docs/api/snowflake/vector-data/Affine-Transformations/ST_Scale.md
index b416efd63f..ce1b43c976 100644
--- a/docs/api/snowflake/vector-data/Affine-Transformations/ST_Scale.md
+++ b/docs/api/snowflake/vector-data/Affine-Transformations/ST_Scale.md
@@ -24,6 +24,8 @@ Introduction: This function scales the geometry to a new size
by multiplying the
!!!Note
This function is designed for scaling 2D geometries. While it currently
doesn't support scaling the Z and M coordinates, it preserves these values
during the scaling operation.
+
+
Format: `ST_Scale(geometry: Geometry, scaleX: Double, scaleY: Double)`
Return type: `Geometry`
diff --git
a/docs/api/snowflake/vector-data/Affine-Transformations/ST_ScaleGeom.md
b/docs/api/snowflake/vector-data/Affine-Transformations/ST_ScaleGeom.md
index f45e0ddd80..750013cb6f 100644
--- a/docs/api/snowflake/vector-data/Affine-Transformations/ST_ScaleGeom.md
+++ b/docs/api/snowflake/vector-data/Affine-Transformations/ST_ScaleGeom.md
@@ -26,6 +26,8 @@ To scale the geometry relative to a point other than the true
origin (e.g., scal
!!!Note
This function is designed for scaling 2D geometries. While it currently
doesn't support scaling the Z and M coordinates, it preserves these values
during the scaling operation.
+
+
Format:
`ST_ScaleGeom(geometry: Geometry, factor: Geometry, origin: Geometry)`
diff --git
a/docs/api/snowflake/vector-data/Affine-Transformations/ST_Translate.md
b/docs/api/snowflake/vector-data/Affine-Transformations/ST_Translate.md
index c05cb646b7..05a6989e90 100644
--- a/docs/api/snowflake/vector-data/Affine-Transformations/ST_Translate.md
+++ b/docs/api/snowflake/vector-data/Affine-Transformations/ST_Translate.md
@@ -26,7 +26,9 @@ If the geometry is 2D, and a deltaZ parameter is specified,
no change is done to
If the geometry is empty, no change is done to it.
If the given geometry contains sub-geometries (GEOMETRY COLLECTION, MULTI
POLYGON/LINE/POINT), all underlying geometries are individually translated.
-Format: `ST_Translate(geometry: geometry, deltaX: deltaX, deltaY: deltaY,
deltaZ: deltaZ)`
+
+
+Format: `ST_Translate(geometry: Geometry, deltaX: Double, deltaY: Double,
deltaZ: Double)`
Return type: `Geometry`
diff --git a/docs/api/sql/Affine-Transformations/ST_Affine.md
b/docs/api/sql/Affine-Transformations/ST_Affine.md
index cf4e74f365..70afa17b42 100644
--- a/docs/api/sql/Affine-Transformations/ST_Affine.md
+++ b/docs/api/sql/Affine-Transformations/ST_Affine.md
@@ -37,6 +37,8 @@ Based on the invoked function, the following transformation
is applied:
If the given geometry is empty, the result is also empty.
+
+
Format:
`ST_Affine(geometry, a, b, c, d, e, f, g, h, i, xOff, yOff, zOff)`
diff --git a/docs/api/sql/Affine-Transformations/ST_Rotate.md
b/docs/api/sql/Affine-Transformations/ST_Rotate.md
index 41b489d948..12031d32a1 100644
--- a/docs/api/sql/Affine-Transformations/ST_Rotate.md
+++ b/docs/api/sql/Affine-Transformations/ST_Rotate.md
@@ -21,7 +21,9 @@
Introduction: Rotates a geometry by a specified angle in radians
counter-clockwise around a given origin point. The origin for rotation can be
specified as either a POINT geometry or x and y coordinates. If the origin is
not specified, the geometry is rotated around POINT(0 0).
-Formats;
+
+
+Formats:
`ST_Rotate (geometry: Geometry, angle: Double)`
diff --git a/docs/api/sql/Affine-Transformations/ST_RotateX.md
b/docs/api/sql/Affine-Transformations/ST_RotateX.md
index b239e29246..9d9e0c8f47 100644
--- a/docs/api/sql/Affine-Transformations/ST_RotateX.md
+++ b/docs/api/sql/Affine-Transformations/ST_RotateX.md
@@ -21,6 +21,8 @@
Introduction: Performs a counter-clockwise rotation of the specified geometry
around the X-axis by the given angle measured in radians.
+
+
Format: `ST_RotateX(geometry: Geometry, angle: Double)`
Return type: `Geometry`
diff --git a/docs/api/sql/Affine-Transformations/ST_RotateY.md
b/docs/api/sql/Affine-Transformations/ST_RotateY.md
index 24d6b6ba61..dc0f0f40ad 100644
--- a/docs/api/sql/Affine-Transformations/ST_RotateY.md
+++ b/docs/api/sql/Affine-Transformations/ST_RotateY.md
@@ -21,6 +21,8 @@
Introduction: Performs a counter-clockwise rotation of the specified geometry
around the Y-axis by the given angle measured in radians.
+
+
Format: `ST_RotateY(geometry: Geometry, angle: Double)`
Return type: `Geometry`
diff --git a/docs/api/sql/Affine-Transformations/ST_Scale.md
b/docs/api/sql/Affine-Transformations/ST_Scale.md
index 34940342a8..7b9be8a7aa 100644
--- a/docs/api/sql/Affine-Transformations/ST_Scale.md
+++ b/docs/api/sql/Affine-Transformations/ST_Scale.md
@@ -24,6 +24,8 @@ Introduction: This function scales the geometry to a new size
by multiplying the
!!!Note
This function is designed for scaling 2D geometries. While it currently
doesn't support scaling the Z and M coordinates, it preserves these values
during the scaling operation.
+
+
Format: `ST_Scale(geometry: Geometry, scaleX: Double, scaleY: Double)`
Return type: `Geometry`
diff --git a/docs/api/sql/Affine-Transformations/ST_ScaleGeom.md
b/docs/api/sql/Affine-Transformations/ST_ScaleGeom.md
index 7a2408bb3b..5a7db86270 100644
--- a/docs/api/sql/Affine-Transformations/ST_ScaleGeom.md
+++ b/docs/api/sql/Affine-Transformations/ST_ScaleGeom.md
@@ -26,6 +26,8 @@ To scale the geometry relative to a point other than the true
origin (e.g., scal
!!!Note
This function is designed for scaling 2D geometries. While it currently
doesn't support scaling the Z and M coordinates, it preserves these values
during the scaling operation.
+
+
Format:
`ST_ScaleGeom(geometry: Geometry, factor: Geometry, origin: Geometry)`
diff --git a/docs/api/sql/Affine-Transformations/ST_Translate.md
b/docs/api/sql/Affine-Transformations/ST_Translate.md
index 5904ea931e..a03f088031 100644
--- a/docs/api/sql/Affine-Transformations/ST_Translate.md
+++ b/docs/api/sql/Affine-Transformations/ST_Translate.md
@@ -26,6 +26,8 @@ If the geometry is 2D, and a deltaZ parameter is specified,
no change is done to
If the geometry is empty, no change is done to it.
If the given geometry contains sub-geometries (GEOMETRY COLLECTION, MULTI
POLYGON/LINE/POINT), all underlying geometries are individually translated.
+
+
Format:
`ST_Translate(geometry: Geometry, deltaX: Double, deltaY: Double, deltaZ:
Double)`
diff --git a/docs/image/ST_Affine/ST_Affine.svg
b/docs/image/ST_Affine/ST_Affine.svg
new file mode 100644
index 0000000000..72d86c364a
--- /dev/null
+++ b/docs/image/ST_Affine/ST_Affine.svg
@@ -0,0 +1,20 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="400" height="180" viewBox="0 0
400 180">
+ <rect width="400" height="180" fill="#f5f5f5" rx="5"/>
+ <text x="200" y="18" font-family="monospace" font-size="12" fill="#333"
text-anchor="middle" font-weight="bold">ST_Affine</text>
+ <text x="200" y="32" font-family="monospace" font-size="9" fill="#888"
text-anchor="middle">horizontal shear (b=0.4)</text>
+ <polygon points="113.1,149.2 246.8,149.2 246.8,48.8 113.1,48.8 113.1,149.2"
stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"
stroke-dasharray="6,3"/>
+ <circle cx="113.1" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="246.8" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="246.8" cy="48.8" r="2.5" fill="#1565C0"/>
+ <circle cx="113.1" cy="48.8" r="2.5" fill="#1565C0"/>
+ <polygon points="113.1,149.2 246.8,149.2 286.9,48.8 153.2,48.8 113.1,149.2"
stroke="#43A047" stroke-width="2" fill="rgba(67,160,71,0.18)"/>
+ <circle cx="113.1" cy="149.2" r="2.5" fill="#43A047"/>
+ <circle cx="246.8" cy="149.2" r="2.5" fill="#43A047"/>
+ <circle cx="286.9" cy="48.8" r="2.5" fill="#43A047"/>
+ <circle cx="153.2" cy="48.8" r="2.5" fill="#43A047"/>
+
+ <rect x="100" y="162" width="8" height="8" fill="rgba(21,101,192,0.12)"
stroke="#1565C0" stroke-width="1" stroke-dasharray="2,1"/>
+ <text x="112" y="170" font-family="monospace" font-size="9"
fill="#1565C0">Input</text>
+ <rect x="220" y="162" width="8" height="8" fill="rgba(67,160,71,0.18)"
stroke="#43A047" stroke-width="1"/>
+ <text x="232" y="170" font-family="monospace" font-size="9"
fill="#43A047">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Rotate/ST_Rotate.svg
b/docs/image/ST_Rotate/ST_Rotate.svg
new file mode 100644
index 0000000000..31b26124df
--- /dev/null
+++ b/docs/image/ST_Rotate/ST_Rotate.svg
@@ -0,0 +1,24 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="400" height="180" viewBox="0 0
400 180">
+ <rect width="400" height="180" fill="#f5f5f5" rx="5"/>
+ <text x="200" y="18" font-family="monospace" font-size="12" fill="#333"
text-anchor="middle" font-weight="bold">ST_Rotate</text>
+ <text x="200" y="32" font-family="monospace" font-size="9" fill="#888"
text-anchor="middle">angle=45° counter-clockwise</text>
+ <polygon points="162.4,133.6 247.1,133.6 247.1,105.3 190.6,105.3 190.6,48.8
162.4,48.8 162.4,133.6" stroke="#1565C0" stroke-width="2"
fill="rgba(21,101,192,0.12)" stroke-dasharray="6,3"/>
+ <circle cx="162.4" cy="133.6" r="2.5" fill="#1565C0"/>
+ <circle cx="247.1" cy="133.6" r="2.5" fill="#1565C0"/>
+ <circle cx="247.1" cy="105.3" r="2.5" fill="#1565C0"/>
+ <circle cx="190.6" cy="105.3" r="2.5" fill="#1565C0"/>
+ <circle cx="190.6" cy="48.8" r="2.5" fill="#1565C0"/>
+ <circle cx="162.4" cy="48.8" r="2.5" fill="#1565C0"/>
+ <polygon points="200.0,149.2 259.9,89.3 239.9,69.3 200.0,109.2 160.1,69.3
140.1,89.3 200.0,149.2" stroke="#43A047" stroke-width="2"
fill="rgba(67,160,71,0.18)"/>
+ <circle cx="200.0" cy="149.2" r="2.5" fill="#43A047"/>
+ <circle cx="259.9" cy="89.3" r="2.5" fill="#43A047"/>
+ <circle cx="239.9" cy="69.3" r="2.5" fill="#43A047"/>
+ <circle cx="200.0" cy="109.2" r="2.5" fill="#43A047"/>
+ <circle cx="160.1" cy="69.3" r="2.5" fill="#43A047"/>
+ <circle cx="140.1" cy="89.3" r="2.5" fill="#43A047"/>
+
+ <rect x="100" y="162" width="8" height="8" fill="rgba(21,101,192,0.12)"
stroke="#1565C0" stroke-width="1" stroke-dasharray="2,1"/>
+ <text x="112" y="170" font-family="monospace" font-size="9"
fill="#1565C0">Input</text>
+ <rect x="220" y="162" width="8" height="8" fill="rgba(67,160,71,0.18)"
stroke="#43A047" stroke-width="1"/>
+ <text x="232" y="170" font-family="monospace" font-size="9"
fill="#43A047">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_RotateX/ST_RotateX.svg
b/docs/image/ST_RotateX/ST_RotateX.svg
new file mode 100644
index 0000000000..27a2feb64f
--- /dev/null
+++ b/docs/image/ST_RotateX/ST_RotateX.svg
@@ -0,0 +1,20 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="400" height="180" viewBox="0 0
400 180">
+ <rect width="400" height="180" fill="#f5f5f5" rx="5"/>
+ <text x="200" y="18" font-family="monospace" font-size="12" fill="#333"
text-anchor="middle" font-weight="bold">ST_RotateX</text>
+ <text x="200" y="32" font-family="monospace" font-size="9" fill="#888"
text-anchor="middle">angle=45° around X-axis (Y compresses)</text>
+ <polygon points="133.1,149.2 266.9,149.2 266.9,48.8 133.1,48.8 133.1,149.2"
stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"
stroke-dasharray="6,3"/>
+ <circle cx="133.1" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="266.9" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="266.9" cy="48.8" r="2.5" fill="#1565C0"/>
+ <circle cx="133.1" cy="48.8" r="2.5" fill="#1565C0"/>
+ <polygon points="133.1,149.2 266.9,149.2 266.9,78.2 133.1,78.2 133.1,149.2"
stroke="#43A047" stroke-width="2" fill="rgba(67,160,71,0.18)"/>
+ <circle cx="133.1" cy="149.2" r="2.5" fill="#43A047"/>
+ <circle cx="266.9" cy="149.2" r="2.5" fill="#43A047"/>
+ <circle cx="266.9" cy="78.2" r="2.5" fill="#43A047"/>
+ <circle cx="133.1" cy="78.2" r="2.5" fill="#43A047"/>
+
+ <rect x="100" y="162" width="8" height="8" fill="rgba(21,101,192,0.12)"
stroke="#1565C0" stroke-width="1" stroke-dasharray="2,1"/>
+ <text x="112" y="170" font-family="monospace" font-size="9"
fill="#1565C0">Input</text>
+ <rect x="220" y="162" width="8" height="8" fill="rgba(67,160,71,0.18)"
stroke="#43A047" stroke-width="1"/>
+ <text x="232" y="170" font-family="monospace" font-size="9"
fill="#43A047">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_RotateY/ST_RotateY.svg
b/docs/image/ST_RotateY/ST_RotateY.svg
new file mode 100644
index 0000000000..7a54bb8ad1
--- /dev/null
+++ b/docs/image/ST_RotateY/ST_RotateY.svg
@@ -0,0 +1,20 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="400" height="180" viewBox="0 0
400 180">
+ <rect width="400" height="180" fill="#f5f5f5" rx="5"/>
+ <text x="200" y="18" font-family="monospace" font-size="12" fill="#333"
text-anchor="middle" font-weight="bold">ST_RotateY</text>
+ <text x="200" y="32" font-family="monospace" font-size="9" fill="#888"
text-anchor="middle">angle=45° around Y-axis (X compresses)</text>
+ <polygon points="133.1,149.2 266.9,149.2 266.9,48.8 133.1,48.8 133.1,149.2"
stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"
stroke-dasharray="6,3"/>
+ <circle cx="133.1" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="266.9" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="266.9" cy="48.8" r="2.5" fill="#1565C0"/>
+ <circle cx="133.1" cy="48.8" r="2.5" fill="#1565C0"/>
+ <polygon points="133.1,149.2 227.7,149.2 227.7,48.8 133.1,48.8 133.1,149.2"
stroke="#43A047" stroke-width="2" fill="rgba(67,160,71,0.18)"/>
+ <circle cx="133.1" cy="149.2" r="2.5" fill="#43A047"/>
+ <circle cx="227.7" cy="149.2" r="2.5" fill="#43A047"/>
+ <circle cx="227.7" cy="48.8" r="2.5" fill="#43A047"/>
+ <circle cx="133.1" cy="48.8" r="2.5" fill="#43A047"/>
+
+ <rect x="100" y="162" width="8" height="8" fill="rgba(21,101,192,0.12)"
stroke="#1565C0" stroke-width="1" stroke-dasharray="2,1"/>
+ <text x="112" y="170" font-family="monospace" font-size="9"
fill="#1565C0">Input</text>
+ <rect x="220" y="162" width="8" height="8" fill="rgba(67,160,71,0.18)"
stroke="#43A047" stroke-width="1"/>
+ <text x="232" y="170" font-family="monospace" font-size="9"
fill="#43A047">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Scale/ST_Scale.svg b/docs/image/ST_Scale/ST_Scale.svg
new file mode 100644
index 0000000000..90b4e5c738
--- /dev/null
+++ b/docs/image/ST_Scale/ST_Scale.svg
@@ -0,0 +1,24 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="400" height="180" viewBox="0 0
400 180">
+ <rect width="400" height="180" fill="#f5f5f5" rx="5"/>
+ <text x="200" y="18" font-family="monospace" font-size="12" fill="#333"
text-anchor="middle" font-weight="bold">ST_Scale</text>
+ <text x="200" y="32" font-family="monospace" font-size="9" fill="#888"
text-anchor="middle">scaleX=1.5, scaleY=2</text>
+ <polygon points="162.4,149.2 212.5,149.2 212.5,132.4 179.1,132.4 179.1,99.0
162.4,99.0 162.4,149.2" stroke="#1565C0" stroke-width="2"
fill="rgba(21,101,192,0.12)" stroke-dasharray="6,3"/>
+ <circle cx="162.4" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="212.5" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="212.5" cy="132.4" r="2.5" fill="#1565C0"/>
+ <circle cx="179.1" cy="132.4" r="2.5" fill="#1565C0"/>
+ <circle cx="179.1" cy="99.0" r="2.5" fill="#1565C0"/>
+ <circle cx="162.4" cy="99.0" r="2.5" fill="#1565C0"/>
+ <polygon points="162.4,149.2 237.6,149.2 237.6,115.7 187.5,115.7 187.5,48.8
162.4,48.8 162.4,149.2" stroke="#43A047" stroke-width="2"
fill="rgba(67,160,71,0.18)"/>
+ <circle cx="162.4" cy="149.2" r="2.5" fill="#43A047"/>
+ <circle cx="237.6" cy="149.2" r="2.5" fill="#43A047"/>
+ <circle cx="237.6" cy="115.7" r="2.5" fill="#43A047"/>
+ <circle cx="187.5" cy="115.7" r="2.5" fill="#43A047"/>
+ <circle cx="187.5" cy="48.8" r="2.5" fill="#43A047"/>
+ <circle cx="162.4" cy="48.8" r="2.5" fill="#43A047"/>
+
+ <rect x="100" y="162" width="8" height="8" fill="rgba(21,101,192,0.12)"
stroke="#1565C0" stroke-width="1" stroke-dasharray="2,1"/>
+ <text x="112" y="170" font-family="monospace" font-size="9"
fill="#1565C0">Input</text>
+ <rect x="220" y="162" width="8" height="8" fill="rgba(67,160,71,0.18)"
stroke="#43A047" stroke-width="1"/>
+ <text x="232" y="170" font-family="monospace" font-size="9"
fill="#43A047">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_ScaleGeom/ST_ScaleGeom.svg
b/docs/image/ST_ScaleGeom/ST_ScaleGeom.svg
new file mode 100644
index 0000000000..d550f7dad7
--- /dev/null
+++ b/docs/image/ST_ScaleGeom/ST_ScaleGeom.svg
@@ -0,0 +1,22 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="400" height="180" viewBox="0 0
400 180">
+ <rect width="400" height="180" fill="#f5f5f5" rx="5"/>
+ <text x="200" y="18" font-family="monospace" font-size="12" fill="#333"
text-anchor="middle" font-weight="bold">ST_ScaleGeom</text>
+ <text x="200" y="32" font-family="monospace" font-size="9" fill="#888"
text-anchor="middle">factor=(0.5, 0.75) relative to centroid</text>
+ <polygon points="159.9,149.2 240.1,149.2 240.1,89.0 200.0,48.8 159.9,89.0
159.9,149.2" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"
stroke-dasharray="6,3"/>
+ <circle cx="159.9" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="240.1" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="240.1" cy="89.0" r="2.5" fill="#1565C0"/>
+ <circle cx="200.0" cy="48.8" r="2.5" fill="#1565C0"/>
+ <circle cx="159.9" cy="89.0" r="2.5" fill="#1565C0"/>
+ <polygon points="179.9,138.1 220.1,138.1 220.1,93.0 200.0,62.9 179.9,93.0
179.9,138.1" stroke="#43A047" stroke-width="2" fill="rgba(67,160,71,0.18)"/>
+ <circle cx="179.9" cy="138.1" r="2.5" fill="#43A047"/>
+ <circle cx="220.1" cy="138.1" r="2.5" fill="#43A047"/>
+ <circle cx="220.1" cy="93.0" r="2.5" fill="#43A047"/>
+ <circle cx="200.0" cy="62.9" r="2.5" fill="#43A047"/>
+ <circle cx="179.9" cy="93.0" r="2.5" fill="#43A047"/>
+
+ <rect x="100" y="162" width="8" height="8" fill="rgba(21,101,192,0.12)"
stroke="#1565C0" stroke-width="1" stroke-dasharray="2,1"/>
+ <text x="112" y="170" font-family="monospace" font-size="9"
fill="#1565C0">Input</text>
+ <rect x="220" y="162" width="8" height="8" fill="rgba(67,160,71,0.18)"
stroke="#43A047" stroke-width="1"/>
+ <text x="232" y="170" font-family="monospace" font-size="9"
fill="#43A047">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Translate/ST_Translate.svg
b/docs/image/ST_Translate/ST_Translate.svg
new file mode 100644
index 0000000000..d1c1454e59
--- /dev/null
+++ b/docs/image/ST_Translate/ST_Translate.svg
@@ -0,0 +1,24 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="400" height="180" viewBox="0 0
400 180">
+ <rect width="400" height="180" fill="#f5f5f5" rx="5"/>
+ <text x="200" y="18" font-family="monospace" font-size="12" fill="#333"
text-anchor="middle" font-weight="bold">ST_Translate</text>
+ <text x="200" y="32" font-family="monospace" font-size="9" fill="#888"
text-anchor="middle">deltaX=2, deltaY=1.5</text>
+ <polygon points="144.3,149.2 211.1,149.2 211.1,126.9 166.6,126.9 166.6,82.3
144.3,82.3 144.3,149.2" stroke="#1565C0" stroke-width="2"
fill="rgba(21,101,192,0.12)" stroke-dasharray="6,3"/>
+ <circle cx="144.3" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="211.1" cy="149.2" r="2.5" fill="#1565C0"/>
+ <circle cx="211.1" cy="126.9" r="2.5" fill="#1565C0"/>
+ <circle cx="166.6" cy="126.9" r="2.5" fill="#1565C0"/>
+ <circle cx="166.6" cy="82.3" r="2.5" fill="#1565C0"/>
+ <circle cx="144.3" cy="82.3" r="2.5" fill="#1565C0"/>
+ <polygon points="188.9,115.7 255.7,115.7 255.7,93.4 211.1,93.4 211.1,48.9
188.9,48.9 188.9,115.7" stroke="#43A047" stroke-width="2"
fill="rgba(67,160,71,0.18)"/>
+ <circle cx="188.9" cy="115.7" r="2.5" fill="#43A047"/>
+ <circle cx="255.7" cy="115.7" r="2.5" fill="#43A047"/>
+ <circle cx="255.7" cy="93.4" r="2.5" fill="#43A047"/>
+ <circle cx="211.1" cy="93.4" r="2.5" fill="#43A047"/>
+ <circle cx="211.1" cy="48.9" r="2.5" fill="#43A047"/>
+ <circle cx="188.9" cy="48.9" r="2.5" fill="#43A047"/>
+
+ <rect x="100" y="162" width="8" height="8" fill="rgba(21,101,192,0.12)"
stroke="#1565C0" stroke-width="1" stroke-dasharray="2,1"/>
+ <text x="112" y="170" font-family="monospace" font-size="9"
fill="#1565C0">Input</text>
+ <rect x="220" y="162" width="8" height="8" fill="rgba(67,160,71,0.18)"
stroke="#43A047" stroke-width="1"/>
+ <text x="232" y="170" font-family="monospace" font-size="9"
fill="#43A047">Result</text>
+</svg>
\ No newline at end of file